大家好,我現在使用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檢測電池電壓的線路圖
|