試)
做電池管理系統(tǒng)BMS或者寫電池狀態(tài)估算算法的人大概率都見過這樣的場面充滿電顯示SOC 100%開出去沒多遠(yuǎn)突然掉到85%或者充放電循環(huán)多次后電量顯示忽高忽低像“薛定諤的貓”。我最近基于Simulink搭了一套鋰電池SOC估計EKF仿真模型把安時積分、開路電壓、擴(kuò)展卡爾曼濾波這三樣?xùn)|西串到同一條仿真鏈路上跑通了從電池建模、參數(shù)設(shè)置到誤差打分的完整流程。這篇就把模型怎么搭、參數(shù)怎么定、坑具體踩在哪里一步步說清楚。這篇內(nèi)容適合三類人剛接手BMS算法方向、需要用Simulink做算法驗證的工程師做畢業(yè)設(shè)計或課題、要交付“仿真算法”結(jié)果的學(xué)生以及純做電化學(xué)、想明白SOC為什么能靠端電壓和電流“估”出來的研究者。文章不堆公式但核心公式一個不缺實操細(xì)節(jié)按可復(fù)現(xiàn)的標(biāo)準(zhǔn)寫跟著做就能把模型跑起來。1. 為什么SOC要“估”而不是“算”安時積分法的邊界1.1 安時積分法的三個硬傷安時積分法的思路非常直觀SOC(k1) SOC(k) - η·Ts·I(k)/Qn說白了就是給電流“記賬”累計流進(jìn)流出的電量。只要電流采樣夠準(zhǔn)、初始SOC給得準(zhǔn)、容量Qn是常數(shù)這套方法在數(shù)學(xué)上是閉環(huán)的。但工程現(xiàn)實是這三個“只要”沒有一個能真正滿足。第一個硬傷是初值不可知。電池不是每次上車都從滿電開始上一次停車時的SOC本來就是個未知數(shù)。安時積分從一個錯誤的初值出發(fā)誤差不會縮小只會原封不動地帶下去。通俗講它只有記賬功能沒有糾錯功能。第二個硬傷是電流傳感器的零漂和噪聲會持續(xù)累加。拿100Ah電池、0.05A的電流測量偏置舉例持續(xù)放電50小時積分電量就會少算2.5Ah對應(yīng)SOC就差了2.5%。電流噪聲經(jīng)過積分之后還會變成一個隨機(jī)游走式的漂移時間越長方差越大SOC曲線會越來越“毛”。第三個硬傷是Qn不是常數(shù)。容量受溫度、老化、放電倍率共同影響新電池和用了兩年的電池同樣積分出的Ah數(shù)對應(yīng)的SOC百分比并不相等。庫侖效率η也不是嚴(yán)格等于1尤其是在低溫、大倍率工況下充進(jìn)去的電和放出來的電并不完全可逆。1.2 SOC在數(shù)學(xué)上是個“狀態(tài)估計問題”如果我們把電池看作一個動態(tài)系統(tǒng)能測到的物理量只有端電壓U_t和電流I而SOC恰恰是測不到的“隱藏狀態(tài)”。這就不應(yīng)該用積分去算而應(yīng)該用狀態(tài)估計的思路去做用一個模型預(yù)測SOC再用端電壓測量值去修正預(yù)測值。端電壓和SOC之間確實存在聯(lián)系就是開路電壓-荷電狀態(tài)曲線OCV-SOC曲線。但電池有內(nèi)阻有極化現(xiàn)象測量到的端電壓并不等于開路電壓中間還隔著歐姆壓降和RC網(wǎng)絡(luò)的極化電壓。所以SOC估計問題天然是一個多狀態(tài)問題SOC、極化電壓U1、極化電壓U2都需要被估計出來端電壓只是外界能看到的那個“投影”。這就把問題歸入了卡爾曼濾波框架??柭鼮V波處理的就是“有噪聲的動態(tài)系統(tǒng)狀態(tài)估計”它的思想是模型不可全信測量也不可全信用協(xié)方差把兩邊的不確定性都量化出來再做加權(quán)融合。1.3 EKF的適用邊界和代價鋰電池的OCV-SOC關(guān)系是強(qiáng)非線性的標(biāo)準(zhǔn)卡爾曼濾波要求系統(tǒng)是線性的所以這里用擴(kuò)展卡爾曼濾波EKF。EKF的做法就是把非線性函數(shù)在估計點附近做一階泰勒展開用雅可比矩陣代替線性卡爾曼里的狀態(tài)轉(zhuǎn)移矩陣和觀測矩陣。代價有兩個。第一一階線性化在強(qiáng)非線性區(qū)域會引入較大誤差尤其是磷酸鐵鋰電池在SOC 20%~80%的平臺區(qū)OCV斜率接近0此時端電壓幾乎不隨SOC變化EKF會面臨“弱可觀測”問題增益變小修正能力變?nèi)?。第二雅可比矩陣的計算必須正確符號錯一個、斜率方向反了濾波器會直接發(fā)散而不是溫和地報錯。不過對多數(shù)三元鋰電池和儲能鐵鋰電池應(yīng)用只要OCV表建得夠密、模型參數(shù)標(biāo)定到位EKF是性價比極高的方案計算量遠(yuǎn)小于粒子濾波精度又能壓制住安時積分的累積誤差。2. 電池建模是EKF的地基等效電路模型怎么選、參數(shù)怎么定2.1 從Rint到二階RC模型選型不是越復(fù)雜越好EKF的“模型”指的不是數(shù)學(xué)公式而是電池本身的等效電路模型。最原始的叫Rint模型一個開路電壓源串一個內(nèi)阻R0它只能描述穩(wěn)態(tài)端電壓完全沒法表達(dá)電池充放電停止后電壓回彈的動態(tài)過程。用它做SOC估計觀測殘差會非常大濾波器會瘋狂修正SOC去“硬補(bǔ)”模型誤差估計結(jié)果全是毛刺。好一點是一階RC模型在R0基礎(chǔ)上加一個RC并聯(lián)網(wǎng)絡(luò)用來表達(dá)電化學(xué)極化。一階模型對三元電池的短時間脈沖響應(yīng)描述尚可但面對持續(xù)幾十秒到幾分鐘的負(fù)載變化比如動態(tài)工況濃差極化的慢過程就漏掉了殘差里還會帶出明顯的時間相關(guān)成分。二階RC模型加兩個RC網(wǎng)絡(luò)一個快時間常數(shù)約幾秒到幾十秒一個慢時間常數(shù)約幾十秒到幾百秒分別對應(yīng)電化學(xué)極化和濃差極化。它的復(fù)雜度只比一階多一個狀態(tài)但對動態(tài)端電壓的擬合精度提升明顯。三階RC模型精度還會再高一點但參數(shù)辨識難度和EKF計算量都在漲邊際收益越來越小。我這次模型選的就是二階RC。2.2 參數(shù)辨識的HPPC思路模型里的R0、R1、C1、R2、C2和OCV-SOC曲線不能拍腦袋定需要用HPPC混合脈沖功率特性測試數(shù)據(jù)來辨識。HPPC的做法是對電池施加一個10秒的恒定電流脈沖然后靜置足夠長時間讓電壓回彈記錄完整的端電壓響應(yīng)曲線。從這條曲線上可以讀出三樣?xùn)|西脈沖瞬間的電壓跳變對應(yīng)R0脈沖結(jié)束后的快速回彈段對應(yīng)R1-C1網(wǎng)絡(luò)緩慢回彈段對應(yīng)R2-C2網(wǎng)絡(luò)。實際操作時我會先把OCV確定下來用脈沖前靜置末段的穩(wěn)定電壓作為該SOC點的開路電壓然后把電壓響應(yīng)曲線用最小二乘去擬合指數(shù)函數(shù)解出電阻電容參數(shù)。2.3 模型參數(shù)對EKF的影響要點參數(shù)對SOC估計的影響關(guān)鍵不在參數(shù)本身有多準(zhǔn)而在于參數(shù)和OCV表的相對關(guān)系。最容易出問題的是OCV曲線斜率在平臺區(qū)太小當(dāng)dOCV/dSOC趨近0時H矩陣對應(yīng)位置的元素非常小卡爾曼增益K變小端電壓的新息無法有效修正SOCEKF退化成安時積分。另一個容易被忽視的是RC時間常數(shù)。如果τ2設(shè)置得比實際小靜置回彈被模型高估濾波器會把“電壓還沒回彈到位”誤判成“SOC偏低”產(chǎn)生系統(tǒng)性的負(fù)向偏差。所以模型參數(shù)一旦定下來我不建議為了調(diào)EKF效果好而去反向改電池參數(shù)那是自欺欺人的做法。下面是二階RC模型的一套典型參考參數(shù)具體數(shù)值應(yīng)該按自己電池的HPPC數(shù)據(jù)來標(biāo)定參數(shù)物理含義參考值Qn額定容量2.9Ahη庫侖效率0.995R0歐姆內(nèi)阻0.05ΩR1電化學(xué)極化內(nèi)阻0.02ΩC1電化學(xué)極化電容2500FR2濃差極化內(nèi)阻0.03ΩC2濃差極化電容5000Fτ1快RC時間常數(shù)50sτ2慢RC時間常數(shù)150s3. EKF從公式到鋰電池落地狀態(tài)方程、觀測方程與雅可比矩陣3.1 三狀態(tài)離散狀態(tài)空間方程把二階RC模型離散化狀態(tài)向量取x [SOC, U1, U2]^T輸入量為電流I觀測量為端電壓U_t。離散時間步長Ts狀態(tài)方程如下SOC(k1) SOC(k) - η·Ts·I(k)/QnU1(k1) exp(-Ts/τ1)·U1(k) R1·(1 - exp(-Ts/τ1))·I(k)U2(k1) exp(-Ts/τ2)·U2(k) R2·(1 - exp(-Ts/τ2))·I(k)觀測方程寫為U_t(k) OCV(SOC(k)) - U1(k) - U2(k) - R0·I(k)這段看著簡單但符號約定一定要統(tǒng)一。我這里是放電電流為正所以SOC在放電時減小如果方向定義反了整個EKF的收斂方向就完全錯誤估計值會一路朝著反方向跑。3.2 雅可比矩陣解析法還是數(shù)值差分EKF需要兩個雅可比矩陣。狀態(tài)轉(zhuǎn)移雅可比A是狀態(tài)方程對x的偏導(dǎo)因為SOC更新與U1、U2無關(guān)U1、U2更新與SOC無關(guān)這個矩陣恰好是常值矩陣A [[1, 0, 0], [0, exp(-Ts/τ1), 0], [0, 0, exp(-Ts/τ2)]]觀測雅可比H是觀測方程對x的偏導(dǎo)。P矩陣第一列是OCV對SOC的斜率這個斜率不能直接寫表達(dá)式因為OCV是查表函數(shù)多用數(shù)值差分計算H [dOCV/dSOC, -1, -1]數(shù)值差分時我用中心差分而不是單邊差分步長delta取1e-3SOC以小數(shù)表示時。如果用百分比0~100表示SOC步長取0.01左右別搞混。3.3 Q、R、P0三個矩陣的物理含義EKF調(diào)參會卡死很多人主要原因是不理解這三個協(xié)方差矩陣到底代表什么。P0是初始狀態(tài)估計的協(xié)方差。初始SOC把握越小P0(1,1)就要設(shè)得越大。比如你認(rèn)為初始SOC可能有±20%的誤差那么在SOC以0~1小數(shù)表示時P0(1,1)可以給到0.04這個量級。P0給太小濾波器會“相信”初始估計收斂很慢。Q是過程噪聲協(xié)方差對應(yīng)模型預(yù)測的不確定性。Q(1,1)和電流傳感器誤差直接相關(guān)SOC的方差增長率大約是(Ts/Qn)^2乘以電流噪聲方差。但也別算得太“摳門”模型本身還有誤差工程上通常把Q(1,1)設(shè)得比理論值大一些給濾波器留跟蹤余量。R是測量噪聲協(xié)方差對應(yīng)端電壓傳感器的噪聲。電壓測量精度如果是±5mVR給(0.005)^2 2.5e-5這個量級比較合理。R太小濾波器會過度相信單個電壓采樣點輸出噪聲大R太大修正力度弱SOC偏差消除慢。下面是一套可以直接起步的初值后面再根據(jù)仿真結(jié)果微調(diào)矩陣對角元素初始值說明P0[0.01, 1e-4, 1e-4]SOC初值按±10%不確定度假設(shè)Q[1e-7, 1e-6, 1e-6]SOC通道稍小RC通道稍大R2.5e-5對應(yīng)5mV電壓噪聲4. Simulink仿真模型搭建模塊劃分、代碼實現(xiàn)與參數(shù)配置4.1 頂層結(jié)構(gòu)真實電池、EKF估計器、誤差打點三部分我搭Simulink模型的習(xí)慣是把“真實被控對象”和“估計器”嚴(yán)格分開。頂層模型分三個子系統(tǒng)第一個是電池模型子系統(tǒng)輸入電流I內(nèi)部用二階RC模型算出真實SOC和端電壓Vt真實SOC作為后續(xù)對比的基準(zhǔn)真值。仿真里我們可以知道真值這是Simulink做算法驗證的最大優(yōu)勢工程實測工況是拿不到真值SOC的。第二個是EKF估計器子系統(tǒng)輸入電流I和端電壓測量值Vt_meas輸出估計SOC。這里我給Vt_meas人為疊加一個高斯白噪聲模塊標(biāo)準(zhǔn)差設(shè)5mV用來模擬真實電壓傳感器的測量噪聲。不加噪聲的仿真是“閉卷考試”加了噪聲才是“開卷考真實力”。第三個是數(shù)據(jù)對比區(qū)用Scope把真實SOC、估計SOC、SOC誤差、端電壓新息同時錄進(jìn)去。仿真結(jié)束后我再把數(shù)據(jù)導(dǎo)入工作空間算RMSE和最大誤差。4.2 EKF核心代碼MATLAB Function實現(xiàn)EKF估計器我建議用MATLAB Function塊實現(xiàn)核心代碼不長邏輯在一百行以內(nèi)能寫完。把它封裝成函數(shù)方便在Simulink里反復(fù)調(diào)用也方便單獨(dú)做單元測試。function [soc_est, U1_est, U2_est, P] ekf_update(... soc_est, U1_est, U2_est, P, Vt_meas, I, Ts, p) % p 為參數(shù)結(jié)構(gòu)體Qn, eta, R0, R1, C1, R2, C2, Q, R tau1 p.R1 * p.C1; tau2 p.R2 * p.C2; a1 exp(-Ts / tau1); a2 exp(-Ts / tau2); b1 p.R1 * (1 - a1); b2 p.R2 * (1 - a2); % 1. 狀態(tài)預(yù)測 soc_pred soc_est - p.eta * Ts / p.Qn * I; U1_pred a1 * U1_est b1 * I; U2_pred a2 * U2_est b2 * I; x_pred [soc_pred; U1_pred; U2_pred]; A [1, 0, 0; 0, a1, 0; 0, 0, a2]; P_pred A * P * A p.Q; % 2. 測量預(yù)測與雅可比 ocv_pred interp1(p.soc_lut, p.ocv_lut, soc_pred, linear, extrap); y_pred ocv_pred - U1_pred - U2_pred - p.R0 * I; delta 1e-3; dOcv (interp1(p.soc_lut, p.ocv_lut, soc_pred delta, linear, extrap) - ... interp1(p.soc_lut, p.ocv_lut, soc_pred - delta, linear, extrap)) / (2 * delta); H [dOcv, -1, -1]; % 3. 卡爾曼增益與修正 S H * P_pred * H p.R; K P_pred * H / S; innov Vt_meas - y_pred; x_est x_pred K * innov; P (eye(3) - K * H) * P_pred; P (P P) / 2; soc_est x_est(1); U1_est x_est(2); U2_est x_est(3); end有一點要特別提醒代碼里interp1用到了’extrap’外插選項。SOC估計值在收斂過程中可能短暫超出查表范圍不加上外插Simulink會直接報錯導(dǎo)致仿真中斷。另外P在更新后要做一次對稱化處理即P (P P) / 2這能有效避免協(xié)方差矩陣在長時間仿真中偏離對稱結(jié)構(gòu)。4.3 仿真工況與采樣參數(shù)設(shè)置EKF是離散算法Simulink里要選離散求解器比如定步長離散求解器固定步長設(shè)1秒。RC時間常數(shù)最慢150秒采樣周期1秒足夠捕捉動態(tài)。有些同學(xué)直接用連續(xù)求解器跑離散EKF結(jié)果就是樣條插值和固定步長行為對不上白白浪費(fèi)時間排查。電流工況我建議至少跑三種第一種恒流放電1C持續(xù)放電到接近下限驗證SOC長時跟蹤能力第二種脈沖工況1C放電10秒、靜置100秒循環(huán)幾十次驗證電流突變時端電壓回彈情況下的估計穩(wěn)定性第三種動態(tài)工況從標(biāo)準(zhǔn)駕駛循環(huán)電流數(shù)據(jù)降采樣后導(dǎo)入Signal Editor驗證隨機(jī)負(fù)載下的表現(xiàn)。初始條件故意讓它錯把真實SOC初值設(shè)為85%EKF估計器初始SOC設(shè)為60%制造25個百分點的初值誤差。這樣跑仿真能直接看到EKF能不能在幾百秒內(nèi)把估計值拉到真值附近而安時積分在這個條件下永遠(yuǎn)拉不回來。這才是EKF的價值展示環(huán)節(jié)。5. 調(diào)試實錄EKF在仿真中翻車的五種典型場景5.1 初始誤差下收斂慢P0設(shè)置不合理第一次跑仿真時我明明設(shè)置了25%的初始SOC誤差結(jié)果估計SOC花了快兩千秒才收斂而且初始段出現(xiàn)明顯的“平臺期”SOC幾乎沒有移動。查了之后發(fā)現(xiàn)是P0(1,1)給得太小濾波器認(rèn)為初始SOC很可信卡爾曼增益K非常小測量新息完全推不動SOC。解決思路很直接把P0(1,1)從1e-4提高到1e-2量級同時保留RC通道的P0為1e-4。改完再跑收斂時間縮短到大概一百秒內(nèi)初始段還能看到系統(tǒng)在“大幅度校正”SOC的擺動這是P0偏大時正常的行為不是故障。這里也順帶解釋一個現(xiàn)象EKF開頭如果有短暫的SOC方向性校正說明初始誤差確實被看到了如果開頭SOC紋絲不動不是EKF沒生效而是P0給得太保守K被壓制了。5.2 Q和R的搭配失衡系統(tǒng)化掃描代替“玄學(xué)調(diào)參”Q和R是最容易被當(dāng)成“玄學(xué)”的部分但其實有章法。我的調(diào)參順序是先把R固定下來根據(jù)電壓傳感器噪聲定死不動態(tài)改然后掃Q(1,1)。每組仿真跑完看兩條曲線SOC估計誤差曲線的收斂速度和穩(wěn)態(tài)波動幅度。Q(1,1)太小(比如1e-9)時SOC曲線被模型“焊死”誤差消除慢曲線平滑但存在長時間恒定偏差。Q(1,1)太大(比如1e-4)時SOC會被每個電壓噪聲樣本帶著跳收斂雖然快但穩(wěn)態(tài)波動大看起來像鋸齒。比較合適的區(qū)間通常落在1e-7到1e-6之間。我建議把這個掃描過程電子表格化每一行記錄Q值、RMSE、最大誤差、收斂時間四個指標(biāo)。選RMSE和最大誤差都相對低、曲線又不毛糙的點作為最終參數(shù)。不要憑感覺一次調(diào)一個數(shù)那樣只是碰運(yùn)氣。5.3 雅可比矩陣出錯從“瞬間發(fā)散”到“軟性偏差”雅可比算錯的后果分兩種。最嚴(yán)重的一種是符號反了比如dOcv的計算用了soc_pred減而不是加deltaH矩陣的符號系統(tǒng)性錯誤卡爾曼增益方向反了仿真開始后幾百毫秒內(nèi)SOC估計值直接沖到0或1然后一飛沖天。還有一種更隱蔽的軟性偏差數(shù)值差分步長delta選得太大dOcv被平滑掉一部分導(dǎo)致修正力度不足SOC誤差收斂到某個固定偏置就不再動了。檢查方法很簡單把dOcv單獨(dú)拉出來打印對照OCV曲線手動算一下斜率看數(shù)量級是否匹配。SOC以小數(shù)表示時dOcv的單位是V典型值在0.05到0.5之間如果你打印出來是0.0005那基本是單位或步長出問題了。5.4 長時間靜置后電壓回彈造成的誤判脈沖工況跑完后我會加一段30分鐘零電流靜置模擬電池停車休息。這個階段端電壓會慢慢回彈真實電池的回彈過程比較長而二階RC模型只有一個150秒的時間常數(shù)到了靜置后半段模型預(yù)測的U2已經(jīng)快要衰減到0實際電池還有殘余極化電壓。結(jié)果就是測量端電壓比模型預(yù)測的偏高EKF把這個殘差誤判為“SOC偏低了”于是把SOC往低修正。反映在曲線上靜置期間真實SOC幾乎不變估計SOC卻往下掉了一兩個百分點。這個現(xiàn)象不是參數(shù)沒調(diào)好而是模型本身對超長靜置過程描述不完備。工程上的做法是加靜置檢測當(dāng)電流接近0且持續(xù)超過閾值后降低觀測更新的權(quán)重或者切換到OCV插值修正模式。仿真里你至少要知道這個誤差來源存在別把靜置段的偏差全部算到EKF頭上。5.5 代數(shù)環(huán)和協(xié)方差退化MATLAB Function塊里如果直接用當(dāng)前時刻的估計SOC去計算當(dāng)前時刻的觀測方程而觀測方程又依賴當(dāng)前時刻的輸入電壓Simulink會檢測到代數(shù)環(huán)。最直接的提醒是仿真變慢或求解器報錯。解決辦法是在狀態(tài)量輸出后加Unit Delay讓濾波器基于上一拍的估計值來做當(dāng)前拍的新息更新這樣更符合EKF的離散序列邏輯。協(xié)方差退化問題則出現(xiàn)在長時間仿真中P矩陣雖然做了對稱化但還是可能因為數(shù)值誤差失去半正定性尤其是卡爾曼增益很大時。除了對稱化處理我還會在每一步后做一次特征值檢查發(fā)現(xiàn)負(fù)特征值就鉗位到0更穩(wěn)妥的寫法是直接用Joseph形式的協(xié)方差更新公式它在理論上有更好的數(shù)值穩(wěn)定性。故障現(xiàn)象根因處理手段初始SOC不收斂P0(1,1)過小提高到0.01量級穩(wěn)態(tài)曲線鋸齒嚴(yán)重Q過大Q(1,1)下調(diào)一個數(shù)量級長期恒定偏差dOcv數(shù)值差分錯誤或步長過大校驗斜率及量綱靜置段SOC往下掉慢極化模型誤差加靜置檢測降權(quán)仿真卡頓或發(fā)散代數(shù)環(huán)/P非正定加Unit Delay、用Joseph形式更新6. 仿真結(jié)果怎么看誤差指標(biāo)、調(diào)參策略與工程化差距6.1 用RMSE和最大誤差量化估計表現(xiàn)跑完仿真第一步先把真實SOC和估計SOC導(dǎo)到工作空間計算均方根誤差RMSE和最大絕對誤差MAXE。我這次仿真在1C脈沖工況下初始SOC誤差25%、電壓噪聲5mV的設(shè)置下RMSE大概在0.8%到1.5%之間最大誤差出現(xiàn)在初始收斂段能到2%左右穩(wěn)態(tài)段最大誤差會縮小到1%以內(nèi)。不同電池參數(shù)和噪聲水平下數(shù)字會有浮動但量級可以作為參考。單看RMSE還不夠還要看誤差曲線隨時間的變化趨勢。理想曲線應(yīng)該是初始段一次性收斂中間沒有二次跳變穩(wěn)態(tài)在0附近小幅波動。如果誤差曲線在某個工況切換點出現(xiàn)一個“鼓包”說明模型在那個動態(tài)段的預(yù)測有系統(tǒng)偏差值得回去查RC參數(shù)。6.2 從仿真到工程落地的三個差距仿真通過不等于產(chǎn)品可用至少有三個差距需要正視野。第一個是電流傳感器噪聲和零漂的真實性。仿真里我給的是純高斯白噪聲但實際電流傳感器的零漂往往帶溫度漂移和低頻率漂移這會讓Q(1,1)的標(biāo)定在臺架上失效。工程上通常要外加零漂校準(zhǔn)算法和電流偏置估計甚至把它也擴(kuò)展成EKF的狀態(tài)。第二個是溫度變化。OCV-SOC曲線、內(nèi)阻、容量都隨溫度變化劇烈仿真如果不加溫度補(bǔ)償冬天低溫環(huán)境下估計誤差會顯著變大。工程化的做法是把OCV表變成OCV(SOC,溫度)的二維查表同時用溫度修正Qn。第三個是算力約束。EKF本身的矩陣運(yùn)算量很小3x3矩陣在任何MCU上都不是負(fù)擔(dān)真正的成本在OCV表的二維插值和代碼生成后的定點化處理。如果做嵌入式移植協(xié)方差矩陣建議改成單精度浮點并做好溢出保護(hù)。6.3 從EKF出發(fā)還能往哪走這套模型跑順之后很自然的擴(kuò)展方向有三個。第一個是參數(shù)在線辨識把R0、R1、C1、R2、C2也納入濾波框架構(gòu)成“雙EKF”或“聯(lián)合EKF”狀態(tài)估計和參數(shù)更新同時跑應(yīng)對老化后參數(shù)漂移。第二個是換UKFSigma點濾波在OCV平臺區(qū)這種強(qiáng)非線性區(qū)域的估計精度通常比EKF更好代價是計算量翻幾倍。第三個是SOC與SOH聯(lián)合估計把容量Qn作為慢時變狀態(tài)量通過長期觀測來追蹤電池健康度衰減這套模型里其實已經(jīng)預(yù)留了容量作為參數(shù)的入口改起來并不難。我對這套Simulink模型最深的感受是EKF不是“無腦濾波”它能發(fā)揮多少功力七成取決于電池模型精度和參數(shù)標(biāo)定兩成取決于Q/R的物理意義是否理解到位真正落到矩陣公式上的反而是最后一小步。如果哪天你調(diào)試時發(fā)現(xiàn)估計SOC和真值之間總有一截恒定偏差優(yōu)先去查OCV表建得準(zhǔn)不準(zhǔn)別急著動Q和R那是絕大多數(shù)調(diào)參玄學(xué)的真正根源。