引言:在已知SOC初始值的前提下,只要可以测量出电池的电流(式中放电电流为正),通过电流积分,可以准确地计算出电池电量的变化情况,进而得到剩余电量SOC。该方法在短时间内的估计结果比较可靠,但由于电流传感器的测量误差以及电池容量的逐渐衰退,长时间的电流积分会引入一定的偏差。所以其一般与开路电压法估计初始值配合,用于精度要求不高的SOC估计,也可以与卡尔曼滤波法配合,用于短时的SOC预测。
SOC(StateOfCharge)属于BMS核心控制算法,表征当前的剩余容量状态,主要通过安时积分法和EKF(扩展卡尔曼滤波)算法,并结合修正策略(如开路电压修正,充满修正,充电末端修正,不同温度及SOH下的容量修正等)。安时积分法在保证电流采集精度条件下比较可靠,但鲁棒性不强,由于存在误差累计必须结合修正策略,而EKF鲁棒性较强,但算法比较复杂,实现难度大。国内主流厂家一般常温可以做到精度6%以内,在高低温和电池衰减时的估算是难点。
考虑到很多朋友是小白甚至才接触,本文是基于一阶RC等效电路模型对扩展卡尔曼(EKF)和无迹卡尔曼(UKF)算法进行建模仿真,因此需要二次开发的+qq963266355。内容包含EKF和UKF算法的代码,以及在Simulink下搭建的建模仿真。
一阶RC模型等效电路
以下代码部分:
**************************************************
SoC_real(1,1) = 1; % Initial real SoC value
States_real = [SoC_real(1,1);0]; % 真实值初始状态 (SoC_real, Up_real)
States_upd = [SoC_upd_init;0]; % 估计值初始状态 (SOC_upd, Up_upd)
SoC_AH(1,1) =SoC_upd_init; % Initail value of AH
SoC_upd(1,1) = States_upd(1,1);
% I_standard = 2.5; % Initial current
P_Cov = [1e-8 0;0 1e-6]; % 方差矩阵
ts = 1; % 采样时间
tr = 0.1; % 最小时间间隔,用以模拟真实电量
% N = 3600/ts; % 采样次数
N = 5000;
Capacity = 1.5; % 电池容量
Qs = 4e-9; % SoC 过程噪声方差
*******************************
R = 1e-6; %观测噪声方差
I_real = Currents;
%--------------无迹变换--------------------
n=1; %维度
alp=0.04;
beta=2;
kap=2;
% lamda=alp^2*(n+kap)-n;
lamda=1.5;
%---------------权值确定---------------
*********************************
Wc=Wm;
Wc(1)=Wc(1)+(1-alp^2+beta);
%--------------------------------------
p=1e-6; %状态误差协方差初值
xc(:,1)=SoC_upd_init; %xc(),系统预测更新后的状态值
*******************************
Err_AH(1,1) = SoC_real(1,1)-SoC_AH(1,1);
Err_UKF(1,1) = SoC_real(1,1)-xc(1,1);
% Rp = 0.01513;
% Cp = 47718.90713;
% tao = Rp * Cp;
******************************
建模部分:
matlab仿真结果: