找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

帖子
查看: 2069|回復(fù): 11
收起左側(cè)

自制充電盒子 關(guān)于充放電電量指示燈顯示不一致的問(wèn)題 附單片機(jī)程序

[復(fù)制鏈接]
ID:1065407 發(fā)表于 2023-3-6 14:54 | 顯示全部樓層 |閱讀模式
大家好,我現(xiàn)在使用STC8H1K08設(shè)計(jì)一個(gè)充電盒子,盒子內(nèi)置一顆可充電的鋰電池,容量是500mAh,盒子外面有4個(gè)LED電量指示燈,使用單片機(jī)內(nèi)置的ADC檢測(cè)電池電壓。當(dāng)盒子插入U(xiǎn)SB 5V充電時(shí),根據(jù)電池電量的高低就會(huì)顯示相應(yīng)的LED,電池電量越高顯示(打開(kāi))的LED就越多,反之,越少,當(dāng)盒子充滿電時(shí)4個(gè)LED常亮。當(dāng)盒子不充電(也就是放電)時(shí),可通過(guò)短按盒子上面的按鍵顯示當(dāng)前電池的電量指示燈。我現(xiàn)在遇到的問(wèn)題是:盒子充電時(shí)和不充電時(shí)(也就是放電時(shí))電量指示燈顯示不一致的問(wèn)題,比如盒子在充電時(shí)顯示兩個(gè)LED(從左邊開(kāi)始數(shù)起,第一個(gè)LED常亮,第二LED在閃爍),當(dāng)盒子拔掉USB 5V不充電時(shí),通過(guò)短按按鍵卻顯示3個(gè)LED電量指示燈,我認(rèn)為正確的做法應(yīng)該是,盒子充電時(shí)顯示多少個(gè)led,盒子不充電時(shí)(放電)也要顯示多少個(gè)led,也就是盒子充放電顯示電量指示燈的數(shù)量應(yīng)該要一致。現(xiàn)向大家請(qǐng)教一下怎么解決此問(wèn)題,如下是設(shè)計(jì)資料,謝謝各位指點(diǎn)。

如下是盒子在充電時(shí)的燈顯程序:
                    if(usb_in==1)
                        {      
                                vbat=get_vbat_value(0);
                                  if(vbat>4.0947)
                        {
                                if(count2==50)//500mS時(shí)間到
                                {
                                  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;
                                }
                        }

        }      

如下是盒子在不充電時(shí)(放電時(shí)),通過(guò)按鍵顯示電量指示燈的程序:

        esle if(key_flag==1&&usb_out==1)
                {
                        vbat=get_vbat_value(0);
                        if(vbat<3.5001)
                        {
                                if(count3==50)//盒子在非常低電時(shí)會(huì)快閃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;
                                }
                        }      
        }

如下是電池充放電曲線圖:

1.png

如下是根據(jù)電池充放電劃分的電壓和電量之間的對(duì)應(yīng)關(guān)系
2.png

如下是ADC檢測(cè)電池電壓的線路圖
3.png
回復(fù)

使用道具 舉報(bào)

ID:1034262 發(fā)表于 2023-3-6 15:39 | 顯示全部樓層
首先,電池是有內(nèi)阻的,充電時(shí)電池電壓吧放電時(shí)高,按理應(yīng)該是充電時(shí)LED亮的數(shù)目比放電時(shí)多,但是你現(xiàn)在是相反的,可能是你電路的問(wèn)題,PCB排版不好導(dǎo)致。
回復(fù)

使用道具 舉報(bào)

ID:1065407 發(fā)表于 2023-3-6 16:22 | 顯示全部樓層
coody_sz 發(fā)表于 2023-3-6 15:39
首先,電池是有內(nèi)阻的,充電時(shí)電池電壓吧放電時(shí)高,按理應(yīng)該是充電時(shí)LED亮的數(shù)目比放電時(shí)多,但是你現(xiàn)在是 ...

充電時(shí)LED亮的數(shù)目也不能比放電時(shí)多,充放電時(shí)亮的數(shù)目應(yīng)該要相同,麻煩幫忙看下程序設(shè)計(jì)是否有問(wèn)題,謝謝
回復(fù)

使用道具 舉報(bào)

ID:844772 發(fā)表于 2023-3-6 17:24 來(lái)自觸屏版 | 顯示全部樓層
你看一下程序啊,是按那個(gè)對(duì)應(yīng)關(guān)系表處理的,所以就是會(huì)出現(xiàn)差異,比如到了4伏,沖的時(shí)候是三亮一閃,放電時(shí)是4亮,不想這樣就把程序判斷部分的標(biāo)準(zhǔn)弄一致啦唄
回復(fù)

使用道具 舉報(bào)

ID:1065407 發(fā)表于 2023-3-6 19:43 | 顯示全部樓層
glinfei 發(fā)表于 2023-3-6 17:24
你看一下程序啊,是按那個(gè)對(duì)應(yīng)關(guān)系表處理的,所以就是會(huì)出現(xiàn)差異,比如到了4伏,沖的時(shí)候是三亮一閃,放電 ...

有沒(méi)有別的處理方法呢,謝謝。是不是要找下電池的充放電曲線,充電和放電的電量電壓不一樣,然后再加點(diǎn)回差這個(gè)根據(jù)測(cè)試來(lái)定,或者精度要求不高就定大一點(diǎn)。
回復(fù)

使用道具 舉報(bào)

ID:1065407 發(fā)表于 2023-3-6 19:51 | 顯示全部樓層
glinfei 發(fā)表于 2023-3-6 17:24
你看一下程序啊,是按那個(gè)對(duì)應(yīng)關(guān)系表處理的,所以就是會(huì)出現(xiàn)差異,比如到了4伏,沖的時(shí)候是三亮一閃,放電 ...

看那個(gè)對(duì)應(yīng)表,充電到4V時(shí)led是2亮一閃,而不是3亮一閃,根據(jù)電池特性,但當(dāng)拔掉USB不充電時(shí),電池電壓會(huì)馬上掉一些,理論上電壓會(huì)穩(wěn)定在3個(gè)led常亮的區(qū)間。
回復(fù)

使用道具 舉報(bào)

ID:401564 發(fā)表于 2023-3-6 21:56 | 顯示全部樓層
那個(gè)充放的表格沒(méi)什么用處,基本是不準(zhǔn)確的
特別是放電那一塊,更加不準(zhǔn)確
回復(fù)

使用道具 舉報(bào)

ID:841986 發(fā)表于 2023-3-6 22:09 | 顯示全部樓層
不用看表,多測(cè)測(cè)充放電電壓區(qū)間,調(diào)調(diào)程序電壓閾值就行了,充電會(huì)拉高VBAT電壓的
回復(fù)

使用道具 舉報(bào)

ID:879348 發(fā)表于 2023-3-7 08:00 | 顯示全部樓層
想要準(zhǔn)確就要測(cè)量電流統(tǒng)計(jì)電量,純電壓就是這個(gè)效果
回復(fù)

使用道具 舉報(bào)

ID:1065407 發(fā)表于 2023-3-7 10:07 | 顯示全部樓層
lzh085 發(fā)表于 2023-3-6 22:09
不用看表,多測(cè)測(cè)充放電電壓區(qū)間,調(diào)調(diào)程序電壓閾值就行了,充電會(huì)拉高VBAT電壓的

是的,插入U(xiǎn)SB 5V充電時(shí)電池電壓會(huì)馬上升高,所以在電池的相同容量區(qū)間,充電時(shí)的電池電壓都會(huì)比放電的高些。
回復(fù)

使用道具 舉報(bào)

ID:844772 發(fā)表于 2023-3-7 10:27 | 顯示全部樓層
zzw820 發(fā)表于 2023-3-6 19:51
看那個(gè)對(duì)應(yīng)表,充電到4V時(shí)led是2亮一閃,而不是3亮一閃,根據(jù)電池特性,但當(dāng)拔掉USB不充電時(shí),電池電壓會(huì) ...

我是說(shuō),你的程序是按你的表做的,那個(gè)表又不是很準(zhǔn),造成你說(shuō)的不一致現(xiàn)象。一方面這是個(gè)小事,沒(méi)必要改。另一方面,如果非要改,你就要仔細(xì)調(diào)整表上的值,這個(gè)比較麻煩不說(shuō),還會(huì)隨著電池的老化而變化,
回復(fù)

使用道具 舉報(bào)

ID:322197 發(fā)表于 2023-3-9 12:17 來(lái)自觸屏版 | 顯示全部樓層
發(fā)個(gè)完整的程序看一下
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表