以 STC89C52RC单片机微控制器为核心,
针对便携式的小功率产品,设计一个太阳能锂电池充电系统,并对锂电池组的充、放电过程进行保护。
锂电池组的电流、电压、将被系统控制器通过控制AD转换芯片及时采集,并以LCD1602显示。
完整版 电路图和程序代码 下载地址
https://pan.baidu.com/s/1JHStUuheQaHTQ-P05qIHGw?pwd=3456
部分代码展示
#include<reg52.h>
#include "ads1115.h"
#include "stdio.h"
#include "delay.h"
#include "LCD1602.h"
#define Accuracy 32768 //定义ADC精度,ADS1115单端输入时15位
float VCC = 6.144; //VCC,电压参考值
unsigned char code display_1[] = {" Solar charging "};
unsigned char dis0[16] ; //打印数组初始化
unsigned char count =0; //采集次数计数
xdata float Volt=0.0; //检测电压
xdata float sumVolt,midV; //用于滤波 中间变量
xdata float Acurrent=0.0; //检测电流
xdata float sumAcur,midA; //用于滤波 中间变量
//float error_A = 0.1; // 使用稳压源测电流时候 电流误差0.1 手动补偿
void main()
{
unsigned int result_v = 0,result_A = 0;
LcdInit(); //LCD1602初始化
LcdClread(); //清屏
WriteStr(1,1,display_1);
while(1)
{
/*
从ADS1115中获取电压值
*/
result_v = ADS1115(0,0); //ADS1115取值_AIN0 电压
result_A = ADS1115(0,1); //ADS1115取值_AIN1 电流
//数据处理 计算出AD芯片读取到的电压值
midV = ((float)result_v / (float)Accuracy) * VCC; //ADS1115取值 = Accuracy × (Vin / VCC)
midA = ((float)result_A / (float)Accuracy) * VCC; //ADS1115取值 = Accuracy × (Vin / VCC)
DelayUs2x(5);
// ACS712芯片 基准为 0 --> v/2 这里 单片机板子 v/2 = 2.455 V要根据实际板子电压进行转换计算
if(midA>2.455) //如果电流转换后的电压值超过2.62
{
midA=(midA-2.455);
midA = midA /0.185;
} //电流模块 电压转换计算 得出电流值
else
{
midA=0;
}
//以上代码 电流相差0.03A
if(midV >= 12)
{
midV = 0;
}
/*
LCD1602显示
*/
sprintf(dis0,"V:%3.2fv A:%3.2fA ",midV,midA);//打印电压电流值
WriteStr(1,2,dis0); //在屏幕上显示出来
PGA_val = PGA_0; //量程设置 这里设置为 FS=6.144V
DelayMs(500);
DelayMs(500);
DelayMs(500);
DelayMs(500);
}
}