目前國內外基本都采用SOC來作為描述動力電池容量狀態的內部參數。電池SOC估計是否準確對于電池來說關系重大,會直接影響動力電池使用壽命和電動汽車的行駛里程。但是電池SOC卻很難在使用中直接測量得到,只能通過其它可以直接測量的電池參數估算得到。這就提高了SOC估計的難度,也使如何精準估計電池SOC成為了當下動力電池領域的研究熱點。
卡爾曼濾波算法是有效的、經典的智能算法,能夠實現最小方差的最優狀態估計,目前被廣泛應用于許多工程領域。由于其具有較好的估計精度和時效性,結合基爾霍夫定律搭建的二階RC模型一起使用,已逐漸成為電池SOC估算研究領域的熱點方法??紤]到卡爾曼濾波算法只適用于線性系統,應用到電池SOC中需要對其進行擴展,即擴展卡爾曼濾波算法(Extended Kalman Filter,EKF)。EKF算法的內涵:通過泰勒級數展開并忽略高次項的方法對非線性系統進行改造。
令非線性系統的離散狀態方程和觀測方程如下式所示:
式中,xk表示系統在k時刻的狀態向量,yk表示系統在k時刻的觀測向量,uk表示系統在k時刻的輸入向量,f(xk,uk)表示系統的狀態轉移函數,g(xk,uk)表示系統的測量函數,wk是系統的過程噪聲,其協方差是Qk,vk是系統的觀測噪聲,其協方差是Rk。
對f(xk,uk)和g(xk,uk)進行泰勒級數展開后線性處理得到的系統狀態空間方程為:
式中,Ak表示系統參數矩陣,Ck表示觀測系統參數矩陣。
得到系統的離散表達式后,可利用EKF算法進行狀態估計。
X_pre= [SOC_pre;U1_pre;U2_pre];
K=P_pre H' ((HP_preH'+R)^(-1));
X_upd= X_pre + K*(UL_ob-UL_pre);
P_update= (eye(3) - K*H)*P_pre;
通過具體的參數辨識結果,結合EKF算法對SOC進行估計,需要將電池的兩個RC環節的端電壓以及SOC作為系統的狀態變量。
SOC_upd= X_upd(1);
U1_upd= X_upd(2);
U2_upd= X_upd(3);
電池負載端電壓為輸出變量,對電池模型狀態空間方程和觀測方程進行離散化處理,得到電池系統離散化表達式:
A=[10 0;0 exp(-1/Tao1) 0;0 0 exp(-1/Tao2)];
B=[-11/(2.6763600);rp1*(1-exp(-delta_t/(rp1 cp1)));rp2 (1-exp(-delta_t/(rp2*cp2)))];
C1=8.3085SOC_pre^8-121.5774SOC_pre^7+402.8993SOC_pre^6-597.0354SOC_pre^5+463.6147SOC_pre^4-192.8896SOC_pre^3+40.3829SOC_pre^2-2.9747SOC_pre+3.4805; % 備注:OCV-SOC函數求導關系式
H= [C1 -1 -1];
同時,OCV-SOC的關系可表示為:
OCV=8.3085SOC^8-121.5774SOC^7+402.8993SOC^6-597.0354SOC^5+463.6147SOC^4-192.8896SOC^3+40.3829SOC^2-2.9747SOC+3.4805;
function [U1_pre,U2_pre,Tao1,Tao2]= fcn(R1,R2,C1,C2,U1_upd,U2_upd,I)
Tao1 = R1*C1;
Tao2 = R2*C2;
U1_pre = U1_upd*exp(-1/Tao1) + R1*I*(1-exp(-1/Tao1));
U2_pre = U2_upd*exp(-1/Tao2) + R2*I*(1-exp(-1/Tao2));
function [P_upd,SOC_upd,U1_upd, U2_upd] = fcn(Noise, UL_ob, UL_pre, P_old, SOC_pre, U1_pre,U2_pre, Tao1,Tao2)
Q = Noise(1); %過程噪聲
R = Noise(2); %觀測噪聲
%%
%狀態方程系數
A=[1 0 0;0 exp(-1/Tao1) 0;0 0 exp(-1/Tao2)];
B=[-1*1/(2.676*3600);rp1*(1-exp(-delta_t/(rp1*cp1)));rp2*(1-exp(-delta_t/(rp2*cp2)))];
P_last = [P_old(1) P_old(2) P_old(3); P_old(4) P_old(5) P_old(6); P_old(7) P_old(8) P_old(9)];
P_pre = A*P_last*A' + [Q 0 0;0 Q 0;0 0 Q];
%%
fn=@(x) 8.3085*x^8-121.5774*x^7+402.8993*x^6-597.0354*x^5+463.6147*x^4-192.8896*x^3+40.3829*x^2-2.9747*x+3.4805;
syms t1;
g=fn(t1);
g=matlabFunction(diff(g));
C1 = 8.3085*SOC_pre^8-121.5774*SOC_pre^7+402.8993*SOC_pre^6-597.0354*SOC_pre^5+463.6147*SOC_pre^4-192.8896*SOC_pre^3+40.3829*SOC_pre^2-2.9747*SOC_pre+3.4805;
H = [C1 -1 -1];
%%
X_pre = [SOC_pre;U1_pre;U2_pre];
K=P_pre*H'*((H*P_pre*H'+ R)^(-1));%計算卡爾曼增益
X_upd = X_pre + K*(UL_ob-UL_pre);
P_update = (eye(3) - K*H)*P_pre;
%%
SOC_upd = X_upd(1);
U1_upd = X_upd(2);
U2_upd = X_upd(3);
P_upd = [P_update(1,1) P_update(1,2) P_update(1,3) P_update(2,1) P_update(2,2) P_update(2,3) P_update(3,1) P_update(3,2) P_update(3,3)];
得到基于電池模型的離散狀態空間方程后,結合擴展卡爾曼濾波算法,基于Simulink仿真,搭建電池SOC估算模塊。通過EKF算法對電池SOC估算,首先根據隨機工況定義系統的狀態變量初值,以及恰當的噪聲協方差矩陣Qk和Rk的值。然后,基于EKF算法通過k-1時刻系統狀態估計值和k時刻系統的輸入值uk,觀測值yk,估計出k時刻的狀態估計值。
從圖中可以看出,估計曲線非??焖俚乇平秸嬷蹈浇?。說明該算法可以快速對初值偏差進行修正。即使在初值不清楚的情況下,依然能給出較為準確的SOC估計值。
-
電動汽車
+關注
關注
156文章
11950瀏覽量
230578 -
動力電池
+關注
關注
113文章
4514瀏覽量
77480 -
simulink仿真
+關注
關注
0文章
75瀏覽量
8562 -
卡爾曼濾波算法
+關注
關注
0文章
12瀏覽量
2101 -
電池SOC
+關注
關注
0文章
10瀏覽量
3584
發布評論請先 登錄
相關推薦
評論