最近一直在搞電源管理相關內容,之前是8610的bms,現在8916的bms,發現兩者還是有點區別的,8916把對last_ocv_uv的估值演算法分裝成執行檔案,作為服務一直運行,
電源管理方面,應該是Android驅動開發的一大難點,主要涉及的方面多,如充、放電、休眠喚醒等,這一部分主要講BMS相關的一些基本概念,電池這一塊剛開始入手時,感覺很難,很復雜,完全不知道如何入手,后來搞久了,才發現,是對電池一些基本的知識,在腦海中缺少相關的概念,所以才感覺難,這里主要是介紹一些相關的術語與知識,
1. 相關的名詞
| 術語 | 全稱 | 注釋 |
|---|---|---|
| FCC | Full-Charge Capacity | 滿電荷電量 |
| UC | Remaining Capacity | RC 剩余電量 |
| CC | Coulumb Counter | 電量計 |
| UUC | Unusable Capacity | 不可用電量 |
| RUC | Remaining Usable Capacity | RUC=RC-CC-UUC,剩余可用電量 |
| OCV | Open Circuit Voltage | 開路電壓,電池在開路狀態下的端電壓稱為開路電壓 |
| SoC | State of Charge | 電量百分比 |
| PC | Percentage Charge | 剩余電荷占FCC百分比 |
2. 相關的代碼
- kernel\drivers\power\Qpnp-vm-bms.c//電池BMS演算法
- kernel\drivers\power\Qpnp-linear-charger.c//電池充電相關的代碼
- batterydata-XX_3000mah.dtsi//電池相關的引數
- Msm-pm8X16.dtsi//針對PMU芯片,進行的相關設定
其他一些的代碼就不一一列出來,其實高通的代碼還是比較好的,基本大部分的檔案都會.txt的介紹檔案,我個人建議在不管調什么模塊,
看到有與之對應的.txt說明檔案,都應該去看一下,起碼對一些基本的概念有個了解,
3. 相關的原理
3.1 BMS 主要任務
- 防止過充
- 避免深放
- 溫度控制
- 電池組件電壓和溫度的均衡
- 預測電池的SOC
- 電池診斷
- 總電壓及單體電壓測量
- 總電流及單體電流測量
- 報警
- 通信SOC
方法:能量積分 + 誤差矯正 (大眾化技術,準確性高,)
傳統的電池電量測驗方法有:密度法,開路電壓法,內阻法和安時法等,
新型演算法有:自適應神經模糊推斷模型、模糊邏輯演算法模型、線性模型法、阻抗光譜法和卡爾曼濾波估計模型演算法 ,
3.2 開路電壓法
通過實驗方法描述在不同放電電流情況下的電池的端電壓與電池的剩余能量的關系曲線,并存盤特征關系曲線,
實時采樣電池放電時的端電壓,查表求出電池的剩余能量,同時考慮電池的使用壽命以及內阻對電池SOC的影響,對求得的電池剩余能量
進行校正, 優點:簡單易行, 缺點:但是需要電池長時間靜置,不能滿足在線檢測的要求,soc>40%,阻抗變化很小,
3.3 8916的BMS的相關思路:
3.3.1 PMU通過PMIC總線讀取電池的AD值,通過一個資料運算轉化為電壓值,
3.3.2 在不同的電池引數檔案中,都有相對應的表,
pc-temp-ocv-lut,為溫度、SOC對應得電壓表,PMU8916獲取的電壓值,通過查該表,在溫度和電壓下,可得到當前的SOC,
rbatt-sf-lut,為溫度、soc對應的電池內阻表,這里主要考慮內阻的影響,對OCV的修正,new_ocv=ocv+rbatt(內阻)*current(當前電流),
fcc-temp-lut,為溫度對應的fcc表,ibat-acc-luit,為溫度、電流對應的acc表,這兩個是起到修正SOC的作用,相關計算為:
soc_uuc = ((fcc - acc) * 100) / fcc,fcc、acc均為查表所得,
soc_acc = DIV_ROUND_CLOSEST(100 * (soc_ocv - soc_uuc),(100 - soc_uuc)); //最終soc_acc,為上報的SOC
3.3.3 PMU8916的bms演算法和PMU8612的有區別,其中對last_ocv_uv的估值計算的原始碼已經不開放,在monitor_soc_work的作業執行緒,
會上報事件uevent,當HAL層,收到訊息,然后呼叫getprop的方法,獲取相關的引數,如,電阻、電流、fcc、acc等,來估算出last_ocv_uv,然后呼叫setprop,把該值設下去,并啟動作業執行緒,根據last_ocv_uv,查表得到soc,并經過修正SOC,并再次上報事件,回圈下去,這個估值演算法,我猜可能是一套學習演算法,具體的沒有原始碼,不清楚,只知道它把演算法變為.bin檔案,用了binder機制,作為服務一直運行,
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/38465.html
標籤:嵌入式
