安時積分法計算soc程式 BMS中soc估算方法

2021-10-16 11:03:55 字數 1916 閱讀 8175

先來看一下soc的定義——soc,全稱是state of charge,電池荷電狀態,也叫剩餘電量,代表的是電池使用一段時間或長期擱置不用後的剩餘可放電電量與其完全充電狀態的電量的比值,常用百分數表示。其一般用乙個位元組也就是兩位的十六進製制表示(取值範圍為0~100),含義是剩餘電量為0%~100%,當soc=0時表示電池放電完全,當soc=100%時表示電池完全充滿。soc與我們的生活息息相關,如常見的手機電量,智慧型手錶電量,電動車電量......。

1、電池開路電壓(ocv)特性。電池開路電壓指的是電池在靜置狀態下,正負電極之間的電位差。不同的電池其特性都不一樣,要充分考慮具體的電池型別。

2、充放電倍率與端電壓對應關係特性。電池動態情況下,我們測量到的電池電壓,實際上電池的端電壓。在定溫度和恆流狀態下它們的關係還是相對穩定的,但是電池只要工開始非恆流工作就會打亂對應關係。

3、溫度狀態。不同材料的電池都會受到溫度的影響,特別是低溫(所以系統會有加熱功能);反正溫度對電池的各個引數都有影響。

4、電池壽命狀態。電池在使用的過程中壽命將逐漸衰減,衰減機理主要在於正負極材料晶體的塌陷和電極的鈍化導致了有效鋰離子的損失。總電量也將從bol(beginning of life)向eol(end of life)狀態趨近。因此在計算soc時需要考慮是採用bol時刻的總容量,還是當前壽命下的實際總容量。

5、電池的串並結合。我們在實際使用中電芯肯定不是單個的,都是由於電芯的串並聯組合的,這就使soc的估算情況變得更加複雜。不同電芯間難免存在歐姆內阻、極化內阻、自放電率、初始容量等差別。

目前主流的soc估算方法有開路電壓法電流積分法、卡爾曼濾波法和神經網路法。比較常用的是前兩種,後兩種演算法這裡不展開討論。

1、開路電壓法其原理是利用電池在長時間靜置的條件下,開路電壓與soc存在相對固定的函式關係,從而根據開路電壓來估算soc。以前常用的鉛蓄電池電動自行車就是使用這種方法估算soc。開路電壓法簡單便捷,但也存在很多缺點:

a、電池須經過長期靜置,但電動汽車啟動頻繁,開路電壓短時間內很難穩定;

b、電池存在電壓平台,特別是磷酸鐵鋰電池,在soc30%-80%期間,端電壓和soc曲線近似為直線;

c、電池處於不同溫度或不同壽命時期,儘管開路電壓一樣,但實際上的soc差別可能較大;

2、電流積分法估算soc目前廣泛應用於電動自行車、園林工具、儲能等領域。雖然很多不同的bms廠家都是用電流積分法估算soc,但是由於各自演算法設計、硬體電路、電流取樣晶元選擇的不同精度也各不相同。電流積分法也叫安時積分法(也叫電流積分法或庫侖計數法),其本質是在電池進行充電或放電時,通過累積充進或放出的電量來估算電池的soc。與其它soc估算方法相比,電流積分法相對可靠,並且可以動態地估算電池的soc值,因此被廣泛使用。

電流積分法簡化公式如下:

2.1 電流取樣造成誤差

取樣精度取樣間隔

2.2 電池容量變化造成誤差

溫度變化電池老化充放電倍率不同電池自放電

2. 3 soc

初始soc估算困難

最終soc過程取捨誤差

該方法只是以電池的外部特徵作為soc估算依據,在一定程度上忽視了電池自放電率、老化程度和充放電倍率對電池soc的影響,長期使用也會導致測量誤差不斷累積擴大,因此需要引入相關修正係數對累積誤差進行糾正。

就目前來講soc的估算精度依然是世界級的難題,希望能早日突破。對與相關企業來講,也是衡量乙個企業技術水平的標準,當然了突破soc的估算需要很強大的人力物力。(ps-了解了這麼多,我還是老老實實的用基本方法去校準吧,差不多就行了⊙ω⊙)

辛普森積分法

定義 辛普森法則 simpson s rule 是一種數值積分方法,是牛頓 寇次公式的特殊形式,以二次曲線逼近的方式取代矩形或梯形積分公式,以求得定積分的數值近似解。其近似值如下 注 辛普森法則是數值分析領域中乙個非常簡單好用的近似求解函式區間上的一種方法,概括起來,它是將區間端點和區間中點做對應的...

辛普森積分法小結

近來學了這個知識,似乎沒有想象中的那麼難。已知 f x 求定積分 int f x dx 容易從上面的推導過程發現,辛普森公式是以二次曲線逼近的方式取代矩形或梯形的積分公式。那麼如果要求 int f x dx 可以將 l,r 分成若干 l,r 但如果 r l 過大,精度就無法保證 而如果 r l 過小...

Erlang 並行梯度積分法

這個 寫了兩天,從沒思路到有思路,還好最終搞定了 不過這個程序數必須為2 n個。先貼乙個執行截圖 子程序求部分和 child proces f,x1,width,0,sum,n1 io format p s result is p n self sum loop send get sum child...