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