一、设计简介:
本设计是基于51单片机锂电池电压电流容量检测仪表LCD液晶显示 原理图PCB程序设计,主要实现以下功能:
1. 单片机型号:STC89C52/51、AT89C52/51、AT89S52/51 都可通用
2、通过51单片机驱动pcf8591采集分压值进行计算获取实际电压值,通过ACS712获取当前电流转化的电压值,进行运算获取电流值。
3、单片机驱动LCD1602液晶显示锂电池的电压、放电电流和当前容量。
4、为了方便采集到电流,负载可以接一个功率电阻作为负载。
主要硬件组成:
STC89C52单片机、分压、A/D芯片PCF8591、ACS712电流检测、LCD1602液晶显示及电源
二、原理图
三、PCB图
四、程序源码
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<stdio.h>
#include "1602.h"
#include "delay.h"
#include "i2c.h"
char dis0[16]; //打印数组初始化
unsigned long time_20ms=0xaaaaaaaa; //定时器计数
unsigned char count =0; //采集次数计数
float Volt=0.0; //检测电压
xdata float sumVolt,midV; //用于滤波 中间变量
float Acurrent=0.0; //检测电流
xdata float sumAcur,midA; //用于滤波 中间变量
float BatCap=80; //容量初始化
void Init_Timer0(void);
void uartSendStr(unsigned char *s,unsigned char length);
void UART_Init(void);
void uartSendByte(unsigned char dat);
void main (void)
{
Init_Timer0(); //定时器0初始化
UART_Init();
LCD_Init(); //初始化液晶
DelayMs(20); //延时有助于稳定
LCD_Clear();
uartSendStr("reday ok!!",10);
while (1) //主循环
{
midV=(float)ReadADC(1)*5.13/255*2; //计算出电压 *2表示分压值
DelayMs(2); //延时有助于稳定
Acurrent=(float)ReadADC(0)*5.13/255; //计算出电流
if(Acurrent>2.6) //如果电流转换后的电压值超过2.6
{midA=(Acurrent-2.6)/0.185;} //电流模块 电压转换计算
else
{midA=0;}
if(midA < 0.1) midA = 0; //防止参考电压变化造成影响
sumAcur = sumAcur + midA; //多次测量求平均
sumVolt = sumVolt + midV; //多次测量求平均
count++;//采集次数
if(count >= 5)
{
count = 0;
Acurrent = sumAcur/5; //Q求平均
if(Acurrent < 0.1) Acurrent= 0;//滤波微小波动
sumAcur = 0;
Volt = sumVolt/5; //求平均
if(Volt<1)Volt=0; //滤除小波动
sumVolt =0;
五、资源获取
本项目包含的所有文件都可以点击下面的名片,发送 “ 98、基于51单片机锂电池电压电流容量检测仪表LCD液晶显示 原理图PCB程序设计 ” 获取!
项目纯手打,不是免费的哦~
希望可以帮到你哈!