久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2134|回復: 11
收起左側

自制充電盒子 關于充放電電量指示燈顯示不一致的問題 附單片機程序

[復制鏈接]
ID:1065407 發表于 2023-3-6 14:54 | 顯示全部樓層 |閱讀模式
大家好,我現在使用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;
                                }
                        }      
        }

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

1.png

如下是根據電池充放電劃分的電壓和電量之間的對應關系
2.png

如下是ADC檢測電池電壓的線路圖
3.png
回復

使用道具 舉報

ID:1034262 發表于 2023-3-6 15:39 | 顯示全部樓層
首先,電池是有內阻的,充電時電池電壓吧放電時高,按理應該是充電時LED亮的數目比放電時多,但是你現在是相反的,可能是你電路的問題,PCB排版不好導致。
回復

使用道具 舉報

ID:1065407 發表于 2023-3-6 16:22 | 顯示全部樓層
coody_sz 發表于 2023-3-6 15:39
首先,電池是有內阻的,充電時電池電壓吧放電時高,按理應該是充電時LED亮的數目比放電時多,但是你現在是 ...

充電時LED亮的數目也不能比放電時多,充放電時亮的數目應該要相同,麻煩幫忙看下程序設計是否有問題,謝謝
回復

使用道具 舉報

ID:844772 發表于 2023-3-6 17:24 來自觸屏版 | 顯示全部樓層
你看一下程序啊,是按那個對應關系表處理的,所以就是會出現差異,比如到了4伏,沖的時候是三亮一閃,放電時是4亮,不想這樣就把程序判斷部分的標準弄一致啦唄
回復

使用道具 舉報

ID:1065407 發表于 2023-3-6 19:43 | 顯示全部樓層
glinfei 發表于 2023-3-6 17:24
你看一下程序啊,是按那個對應關系表處理的,所以就是會出現差異,比如到了4伏,沖的時候是三亮一閃,放電 ...

有沒有別的處理方法呢,謝謝。是不是要找下電池的充放電曲線,充電和放電的電量電壓不一樣,然后再加點回差這個根據測試來定,或者精度要求不高就定大一點。
回復

使用道具 舉報

ID:1065407 發表于 2023-3-6 19:51 | 顯示全部樓層
glinfei 發表于 2023-3-6 17:24
你看一下程序啊,是按那個對應關系表處理的,所以就是會出現差異,比如到了4伏,沖的時候是三亮一閃,放電 ...

看那個對應表,充電到4V時led是2亮一閃,而不是3亮一閃,根據電池特性,但當拔掉USB不充電時,電池電壓會馬上掉一些,理論上電壓會穩定在3個led常亮的區間。
回復

使用道具 舉報

ID:401564 發表于 2023-3-6 21:56 | 顯示全部樓層
那個充放的表格沒什么用處,基本是不準確的
特別是放電那一塊,更加不準確
回復

使用道具 舉報

ID:841986 發表于 2023-3-6 22:09 | 顯示全部樓層
不用看表,多測測充放電電壓區間,調調程序電壓閾值就行了,充電會拉高VBAT電壓的
回復

使用道具 舉報

ID:879348 發表于 2023-3-7 08:00 | 顯示全部樓層
想要準確就要測量電流統計電量,純電壓就是這個效果
回復

使用道具 舉報

ID:1065407 發表于 2023-3-7 10:07 | 顯示全部樓層
lzh085 發表于 2023-3-6 22:09
不用看表,多測測充放電電壓區間,調調程序電壓閾值就行了,充電會拉高VBAT電壓的

是的,插入USB 5V充電時電池電壓會馬上升高,所以在電池的相同容量區間,充電時的電池電壓都會比放電的高些。
回復

使用道具 舉報

ID:844772 發表于 2023-3-7 10:27 | 顯示全部樓層
zzw820 發表于 2023-3-6 19:51
看那個對應表,充電到4V時led是2亮一閃,而不是3亮一閃,根據電池特性,但當拔掉USB不充電時,電池電壓會 ...

我是說,你的程序是按你的表做的,那個表又不是很準,造成你說的不一致現象。一方面這是個小事,沒必要改。另一方面,如果非要改,你就要仔細調整表上的值,這個比較麻煩不說,還會隨著電池的老化而變化,
回復

使用道具 舉報

ID:322197 發表于 2023-3-9 12:17 來自觸屏版 | 顯示全部樓層
發個完整的程序看一下
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品毛片 | 三级黄色片在线 | 成人一区二区三区在线观看 | 精品一区二区在线观看 | 成人小视频在线观看 | 国产精品视频一区二区三区 | 亚洲一区中文字幕在线观看 | 91精品综合久久久久久五月天 | 精品99爱视频在线观看 | 成人精品国产 | 欧美午夜精品久久久久久浪潮 | 国产精品一卡二卡三卡 | 国产精品成人一区二区三区 | 99精品热视频 | 人人九九精 | 国产乱人伦 | 国产成人精品一区二区三区四区 | 色噜噜狠狠色综合中国 | 成人免费视频网站在线看 | 精品在线免费观看视频 | 久久久爽爽爽美女图片 | 精品视频成人 | 日本免费视频在线观看 | 影音先锋中文在线 | 亚洲精品乱码8久久久久久日本 | 超碰婷婷 | 亚洲人成在线观看 | 欧美偷偷操| 欧美日韩在线一区二区三区 | 亚洲国产精品va在线看黑人 | 99re在线| 亚洲视频在线一区 | 日本大香伊一区二区三区 | 天天操天天干天天爽 | 日韩伦理一区二区 | 三区在线观看 | 日韩一级免费电影 | 精品中文字幕在线观看 | 一区二区三区成人 | 久久高清| 一区二区三区亚洲 |