高通8X16電池BMS演算法(一)【轉】

來源:互聯網
上載者:User

標籤:3.2   uevent   com   event   set   採樣   monitor   percent   3.1   

本文轉載自:http://www.voidcn.com/blog/yanleizhouqing/article/p-6037399.html

最近一直在搞電源管理相關內容,之前是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_3000 mah.dtsi //電池相關的參數Msm-pm8X 16.dtsi //針對PMU晶片,進行的相關設定其他一些的代碼就不一一列出來,其實高通的代碼還是比較好的,基本大部分的檔案都會.txt的介紹文檔,我個人建議在不管調什麼模組,看到有與之對應的.txt說明文檔,都應該去看一下,起碼對一些基本的概念有個瞭解。  3. 相關的原理3.1  BMS 主要任務1. 防止過充 2. 避免深放 3. 溫度控制 4. 電池組件電壓和溫度的均衡 5. 預測電池的SOC 6. 電池診斷 7. 總電壓及單體電壓測量8. 總電流及單體電流測量 9. 警示1 0. 通訊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機制,作為服務一直運行。

高通8X16電池BMS演算法(一)【轉】

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.