大家好,我现在使用STC8H1K08设计一个充电盒子,盒子内置一颗可充电的锂电池,容量是500mAh,盒子外面有4个LED电量指示灯,使用单片机内置的ADC检测电池电压。当盒子插入USB 5V充电时,根据电池电量的高低就会显示相应的LED,电池电量越高显示(打开)的LED就越多,反之,越少,当盒子充满电时4个LED常亮。当盒子不充电(也就是放电)时,可通过短按盒子上面的按键显示当前电池的电量指示灯。我现在遇到的问题是:盒子充电时和不充电时(也就是放电时)电量指示灯显示不一致的问题,比如盒子在充电时显示两个LED(从左边开始数起,第一个LED常亮,第二LED在闪烁),当盒子拔掉USB 5V不充电时,通过短按按键却显示3个LED电量指示灯,我认为正确的做法应该是,盒子充电时显示多少个led,盒子不充电时(放电)也要显示多少个led,也就是盒子充放电显示电量指示灯的数量应该要一致。现向大家请教一下怎么解决此问题,如下是设计资料,谢谢各位指点。
如下是盒子在充电时的灯显程序:
if(usb_in==1)
{
vbat=get_vbat_value(0);
if(vbat>4.0947)
{
if(count2==50)//500mS时间到
{
led1=1;
led2=1;
led3=1;
led4=!led4;
count2=0;
}
}
else if(vbat>3.9725)
{
if(count2==50)
{
led1=1;
led2=1;
led3=!led3;
led4=0;
count2=0;
}
}
else if(vbat>3.9105)
{
if(count2==50)
{
led1=1;
led2=!led2;
led3=0;
led4=0;
count2=0;
}
}
else if(vbat>3.0)
{
if(count2==50)
{
led1=!led1;
led2=0;
led3=0;
led4=0;
count2=0;
}
}
}
如下是盒子在不充电时(放电时),通过按键显示电量指示灯的程序:
esle if(key_flag==1&&usb_out==1)
{
vbat=get_vbat_value(0);
if(vbat<3.5001)
{
if(count3==50)//盒子在非常低电时会快闪led提示
{
led1=!led1;
led2=0;
led3=0;
led4=0;
count3=0;
key_flag=0;
}
}
else if(vbat<3.6954)
{
led1=1;
led2=0;
led3=0;
led4=0;
if(count3==300)//显示3秒电量指示灯
{
led1=0;
led2=0;
led3=0;
led4=0;
count3=0;
key_flag=0;
}
}
else if(vbat<3.7589)
{
led1=1;
led2=1;
led3=0;
led4=0;
if(count3==300)
{
led1=0;
led2=0;
led3=0;
led4=0;
count3=0;
key_flag=0;
}
}
else if(vbat<3.8929)
{
led1=1;
led2=1;
led3=1;
led4=0;
if(count3==300)
{
led1=0;
led2=0;
led3=0;
led4=0;
count3=0;
key_flag=0;
}
}
else if(vbat<4.2)
{
led1=1;
led2=1;
led3=1;
led4=1;
if(count3==300)
{
led1=0;
led2=0;
led3=0;
led4=0;
count3=0;
key_flag=0;
}
}
}
如下是电池充放电曲线图:
如下是根据电池充放电划分的电压和电量之间的对应关系
如下是ADC检测电池电压的线路图
|