找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

電池容量檢測芯片ds2780底層驅(qū)動(STM32源程序與資料)

  [復(fù)制鏈接]
ID:454155 發(fā)表于 2018-12-25 10:44 | 顯示全部樓層 |閱讀模式
網(wǎng)上看到的1-wire總線的驅(qū)動代碼  給需要幫助的人
制作出來的實物圖如下:
可以做成的商品.jpg WP_20150420_002.jpg

1991M02X22手上有兩塊華碩手機的電池,都是報廢的,已經(jīng)有點鼓了,電池已經(jīng)沒什么容量了,但是里面的保護板應(yīng)該還是好的
尤其是原廠電池,保護板應(yīng)該不會偷工減料,就拆了出來準(zhǔn)備留做備用,報廢電池芯留著是個隱患,還是早些扔掉的好。
拆完了發(fā)現(xiàn),這個保護板有點特別,上面是三個芯片,兩個SSOP-8,一個SOT23-6,而且電池是4線輸出的,
仔細(xì)觀察,一個芯片上面寫著2780,旁邊還有一個0.02Ω 電阻,這不是MAXIM的電量計芯片DS2780嘛,想不到居然在這里碰到了。
DS2780用于測量可充電鋰離子和鋰離子聚合物電池的電壓、溫度和電流,并估算剩余電量。用于計算的電池特性參數(shù)和應(yīng)用參數(shù)存儲在片上EEPROM中。根據(jù)電流溫度特性、放電速率、存儲電荷與應(yīng)用參數(shù)對可用電量進行估算。要知道,有些電池的放電曲線非常平緩,單純靠測量電池端電壓判斷電池容量并不準(zhǔn)確,而這個芯片可以計量經(jīng)過電池的電量,充進多少電,放出多少電,里面還有多少電,它都能記錄下來,配合設(shè)備上的MCU就可以很精確的知道電池里的剩余電量了。
有點像銀行存款,存入多少,取出多少,賬戶里省多少,一看賬單一清二楚。


就是這么個保護板


還剩下一個電池,先別拆了,通過已經(jīng)拆下的保護板測出了DS2780的信號線端口,
按此給電池上焊上線,紅色正極,黑色負(fù)極,藍色數(shù)據(jù)線DQ


DS2780采用1-Wire接口,一根線完成通信,好像是美信的獨家專利
為了能夠接駁電腦,專門跑去買了一顆UART轉(zhuǎn)1-Wire芯片,DS2480
現(xiàn)做了一個UART轉(zhuǎn)1-Wire模塊,DS2480目前已經(jīng)停產(chǎn)了,市場上貨源不多
這顆花了我18大洋


上位機的軟件采用美信官方的DS2780評估板測試軟件
顯示電池電壓,電流,容量等信息,還能對DS2780內(nèi)部EEPROM進行讀寫
設(shè)置電池參數(shù)等
接上電,軟件很快就顯示出了電池信息
現(xiàn)在電池空載
電壓3.8552V,電流1.9531mA,剩余容量564.6875mAhr,溫度29.25攝氏度
容量還有大約一半,這個電池標(biāo)稱是1300mAh的

用萬用表測量了下電池電壓,3.85V,看來還是很準(zhǔn)確的

接了一個10Ω 10W電阻對電池放電

放電時軟件顯示的信息

放電半小時后

又過了大約1小時,放完電了,這個電池的保護板在電池電壓降到3.3V左右時開始保護
自動切斷電路,空載的電池電壓在3.6V,電池里還剩余大約162mAhr的電量。


下面看看充電,這是USB的5V通過一個10Ω電阻給鋰電池充電
電流120mA,剩余電量也開始回升



用USB直接充電速度太慢,而且不安全,接入自制的TP4056充電板
設(shè)定的是400mA,顯示385mA,是設(shè)定電阻的誤差引起的



這個軟件還能記錄文本日志
可以根據(jù)需要調(diào)整采樣時間
這是記錄下來的電池充放電情況,這里全是放電記錄
充電進行中,電池電壓接近4.1V,充電電流明顯下降
可以看出,已經(jīng)充進去600mAhr的電量


電池電壓接近4.2V,電流持續(xù)下降中,充入大約800mAhr的電量,按這么算
這個電池容量在1000mAh左右,是標(biāo)稱容量的76%左右
看起來損耗不多,但是智能手機已經(jīng)沒法用了


最后是DS2780電路圖,這個芯片的外圍電路很簡單,而且只需要一根
信號線就可以和上位機通信了。
查了一下,這個芯片價格在15-20元左右,要是熟悉單片機編程,用這個芯片來監(jiān)測鋰電池應(yīng)該還是不錯的
結(jié)束!謝謝賞評!


STM32單片機源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "key.h"
  4. #include "sys.h"
  5. #include "lcd.h"
  6. #include "usart.h"         
  7. #include "ds18b20.h"


  8. int main(void)
  9. {         
  10.         u8 t=0;                           
  11.         short temperature;               

  12.         delay_init();                     //延時函數(shù)初始化         
  13.         NVIC_Configuration();          //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級,2位響應(yīng)優(yōu)先級
  14.         uart_init(9600);                 //串口初始化為9600
  15.          LED_Init();                             //LED端口初始化
  16.         LCD_Init();                    //LCD初始化
  17.         KEY_Init();                                 //KEY初始化

  18. //          POINT_COLOR=RED;//設(shè)置字體為紅色
  19. //         LCD_ShowString(60,50,200,16,16,"WarShip STM32");        
  20. //         LCD_ShowString(60,70,200,16,16,"DS18B20 TEST");        
  21. //         LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
  22. //         LCD_ShowString(60,110,200,16,16,"2012/9/12");                  
  23.          
  24.          
  25.          while(DS18B20_Init())        //DS18B20初始化        
  26.         {
  27. //                 LCD_ShowString(60,130,200,16,16,"DS18B20 Error");
  28. //                 delay_ms(200);
  29. //                 LCD_Fill(60,130,239,130+16,WHITE);
  30.                  delay_ms(200);
  31.                 printf("not find");
  32.         }                        
  33. //writeacr();
  34.         
  35. //         LCD_ShowString(60,130,200,16,16,"DS18B20 OK");
  36. //         POINT_COLOR=BLUE;//設(shè)置字體為藍色
  37. //          LCD_ShowString(60,150,200,16,16,"Temp:   . C");         
  38.         while(1)
  39.         {                        
  40.                  if(t%10==0)//每100ms讀取一次
  41.                 {               
  42.                         printf("\t%d", current());

  43.                         
  44. //                         temperature=DS18B20_Get_Temp();
  45. //                         printf("%d\t",temperature);
  46. //                         if(temperature<0)
  47. //                         {
  48. //                                 LCD_ShowChar(60+40,150,'-',16,0);                        //顯示負(fù)號
  49. //                                 temperature=-temperature;                                        //轉(zhuǎn)為正數(shù)
  50. //                         }else LCD_ShowChar(60+40,150,' ',16,0);                        //去掉負(fù)號
  51. //                         LCD_ShowNum(60+40+8,150,temperature/10,2,16);        //顯示正數(shù)部分            
  52. //                            LCD_ShowNum(60+40+32,150,temperature%10,1,16);        //顯示小數(shù)部分                    
  53.                 }                                   
  54.                  delay_ms(10);
  55.                 t++;
  56.                 if(t==20)
  57.                 {
  58.                         t=0;
  59.                         LED0=!LED0;
  60.                 }
  61.         }
  62. }
復(fù)制代碼
0.png

所有程序51hei提供下載(管理提醒:多人貼貼說此文件缺原理圖,請謹(jǐn)慎下載):
電池容量檢測芯片ds2780底層驅(qū)動.rar (4.57 MB, 下載次數(shù): 446)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:476111 發(fā)表于 2019-2-13 10:57 | 顯示全部樓層
zhichi  支持
回復(fù)

使用道具 舉報

ID:160726 發(fā)表于 2019-2-13 15:37 | 顯示全部樓層
謝謝樓主給出的資料!先學(xué)習(xí)一下
回復(fù)

使用道具 舉報

ID:418770 發(fā)表于 2019-2-14 22:13 | 顯示全部樓層
好想知道那個檢查電阻能不能選1豪歐?版主能否告知?
回復(fù)

使用道具 舉報

ID:146498 發(fā)表于 2019-2-17 19:30 | 顯示全部樓層
謝謝樓主                                 
回復(fù)

使用道具 舉報

ID:500585 發(fā)表于 2019-3-29 15:09 | 顯示全部樓層
謝謝樓主給出的資料!先學(xué)習(xí)一下
回復(fù)

使用道具 舉報

ID:497758 發(fā)表于 2019-3-31 11:23 | 顯示全部樓層
不錯,資瓷。
回復(fù)

使用道具 舉報

ID:211284 發(fā)表于 2019-4-30 16:49 | 顯示全部樓層
樓主,這程序是溫度傳感器的例程,不是電池電量監(jiān)控顯示的吧
回復(fù)

使用道具 舉報

ID:525679 發(fā)表于 2019-5-1 18:51 | 顯示全部樓層
很不錯的diy資料
回復(fù)

使用道具 舉報

ID:517235 發(fā)表于 2019-5-4 18:05 | 顯示全部樓層
不錯,進來學(xué)習(xí)下
回復(fù)

使用道具 舉報

ID:532416 發(fā)表于 2019-5-10 18:08 | 顯示全部樓層
有2780和stm32的連接電路圖嗎,有賞哦!
回復(fù)

使用道具 舉報

ID:430751 發(fā)表于 2019-6-3 20:48 | 顯示全部樓層
我也想學(xué)習(xí)一下這個如果接24V或者12V電池的話,怎么處理的。希望能分享一個電路圖
回復(fù)

使用道具 舉報

ID:559134 發(fā)表于 2019-6-11 15:54 | 顯示全部樓層
學(xué)習(xí)一下
回復(fù)

使用道具 舉報

ID:149451 發(fā)表于 2019-6-13 10:02 | 顯示全部樓層
不錯不錯,學(xué)習(xí)學(xué)習(xí).................
回復(fù)

使用道具 舉報

ID:572979 發(fā)表于 2019-8-23 23:00 | 顯示全部樓層
感謝樓主提供這么寶貴的資料
回復(fù)

使用道具 舉報

ID:622970 發(fā)表于 2019-10-12 17:26 | 顯示全部樓層
怎么下載下來啥都沒有?
回復(fù)

使用道具 舉報

ID:516629 發(fā)表于 2019-11-13 11:00 | 顯示全部樓層
支持一下樓主
回復(fù)

使用道具 舉報

ID:105364 發(fā)表于 2019-11-13 11:48 | 顯示全部樓層
好東西,不過分享的代碼好像不對?
回復(fù)

使用道具 舉報

ID:516629 發(fā)表于 2019-11-21 19:25 | 顯示全部樓層
樓主有DS2780的代碼嗎,還是說DS18B20和DS2780的時序是一樣的?
回復(fù)

使用道具 舉報

ID:624444 發(fā)表于 2019-11-22 15:57 | 顯示全部樓層
第一張圖看起來不錯,不過提供的資料有限還得自己琢磨一下
回復(fù)

使用道具 舉報

ID:523221 發(fā)表于 2020-1-4 17:19 | 顯示全部樓層
謝謝樓主給出的資料!先學(xué)習(xí)一下
回復(fù)

使用道具 舉報

ID:478754 發(fā)表于 2020-2-10 13:53 | 顯示全部樓層

謝謝樓主的資料
回復(fù)

使用道具 舉報

ID:210978 發(fā)表于 2020-2-11 17:13 | 顯示全部樓層
謝謝樓主給出的資料!先學(xué)習(xí)一下
回復(fù)

使用道具 舉報

ID:406442 發(fā)表于 2020-3-13 10:32 | 顯示全部樓層
感謝樓主分享
回復(fù)

使用道具 舉報

ID:360864 發(fā)表于 2020-3-27 13:23 | 顯示全部樓層
這個資料應(yīng)該不錯下載下來看看
回復(fù)

使用道具 舉報

ID:454155 發(fā)表于 2020-5-20 15:05 | 顯示全部樓層
這是在網(wǎng)上看到的  后面我用STC15+0.96OLED 液晶屏+DS2788有做了一款  其實基本框架不變的
有人問說怎么是DS18B20的 這是我網(wǎng)上找到 使用我只是轉(zhuǎn)發(fā)的
但是1-WIRE通訊的原理差不多 只是時序不對而已
回復(fù)

使用道具 舉報

ID:818067 發(fā)表于 2020-9-15 14:30 | 顯示全部樓層
這個是充放電檢測嗎
回復(fù)

使用道具 舉報

ID:889234 發(fā)表于 2021-3-7 16:04 | 顯示全部樓層
CBDcbd 發(fā)表于 2019-10-12 17:26
怎么下載下來啥都沒有?

有的,程序在ds18b20.c文件里面,里面有測溫度,電壓和電量的函數(shù)
回復(fù)

使用道具 舉報

ID:889234 發(fā)表于 2021-3-7 16:05 | 顯示全部樓層
剛下載下來,還沒有試,試了之后再來問問
回復(fù)

使用道具 舉報

ID:889234 發(fā)表于 2021-3-8 15:54 | 顯示全部樓層
樓主,我試了一下你發(fā)的電量測量DS2780的程序,是沒有問題的,也能正確顯示電量,溫度。但是遇到了一個新的問題,在初始化的時候我設(shè)置的ACR電量為2600mAh, 但是如果我后面換了一塊另外的電池,同樣一個程序的情況下,怎么去測量新的電池的電量?
回復(fù)

使用道具 舉報

ID:213113 發(fā)表于 2021-3-8 16:30 | 顯示全部樓層
看起來好厲害的感覺,頂一個,51黑有你更精彩!!!
回復(fù)

使用道具 舉報

ID:909456 發(fā)表于 2021-4-21 09:06 | 顯示全部樓層
請問這個代碼ds2788通用嗎
回復(fù)

使用道具 舉報

ID:430492 發(fā)表于 2021-4-24 20:21 | 顯示全部樓層
電池電量顯示,有沒有不記錄充放電電流與電壓和時間數(shù)值,通過計算電壓就可大致計算出剩余容量的算法?
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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