基于一阶RC电池模型的锂离子电池SOE估计 使用遗忘因子最小二乘法 FFRLS 对电池模型进行在线参数辨识并利用辨识的参数联合扩展卡尔曼滤波算法EKF进行联合估计并基于动态工况进行验证soe完全跟随过程误差百分之1以下 内容包含做电池Simulink模型、电芯数据、推导公式、参考论文、模型调试说明 程序已经调试好可直接运行也可以替换成自己的数据 注意搞锂电状态估计的兄弟应该都懂电池模型参数飘忽不定这事儿多闹心。今天就拿一阶RC模型开刀咱不整虚的直接上FFRLSEKF组合拳手把手教你怎么让SOE估计误差稳定在1%以内。先看这个一阶RC模型的灵魂方程U_t OCV - I*R0 - Up dUp/dt -Up/(R1*C1) I/C1离散化处理时有个小技巧——用前向欧拉法比双线性变换省事采样时间设0.1秒足够应对大多数工况。注意这里的Up是极化电压别和SOC搞混了。参数辨识这块FFRLS的遗忘因子设置是门玄学。实测λ0.98时既能跟踪参数变化又不会震荡MATLAB里这么实现function [R0, R1, C1] ffrls_online(u, i, lambda) persistent P theta % 保持参数记忆 if isempty(P) P eye(3)*1e6; % 初始协方差矩阵 theta [0.1; 0.05; 2000]; % 初始参数猜测 end h [-i, -theta(3)*i, (u - theta(1)*i)]; % 回归向量 K P*h/(lambda h*P*h); % 关键更新步骤 theta theta K*(OCV_lut(i) - u - h*theta); % 参数修正 P (P - K*h*P)/lambda; % 协方差更新 R0 theta(1); R1 theta(2); C1 theta(3); end这里有个坑OCV查表函数要做温度补偿实测在20℃附近每度误差会产生0.3%的SOE偏移。EKF的实现更刺激状态方程得这么玩function [soe, Up] ekf_predict(soe_prev, Up_prev, I, R1, C1, Q) soe soe_prev - (I * delta_t) / capacity; Up Up_prev * exp(-delta_t/(R1*C1)) I*R1*(1 - exp(-delta_t/(R1*C1))); P A*P*A Q; % 协方差预测 end function [soe, Up] ekf_update(U_meas, soe_pred, Up_pred, R0, R) y_pred OCV_lut(soe_pred) - Up_pred - I*R0; C dOCV_dSOC(soe_pred); % OCV-SOC曲线斜率 K P*C/(C*P*C R); % 卡尔曼增益 soe soe_pred K*(U_meas - y_pred); Up Up_pred K*(U_meas - y_pred); P (eye(2) - K*C)*P; % 协方差更新 end注意雅可比矩阵C的获取方法——直接用多项式拟合OCV曲线的导数比数值微分稳定多了。基于一阶RC电池模型的锂离子电池SOE估计 使用遗忘因子最小二乘法 FFRLS 对电池模型进行在线参数辨识并利用辨识的参数联合扩展卡尔曼滤波算法EKF进行联合估计并基于动态工况进行验证soe完全跟随过程误差百分之1以下 内容包含做电池Simulink模型、电芯数据、推导公式、参考论文、模型调试说明 程序已经调试好可直接运行也可以替换成自己的数据 注意Simulink模型搭建时记得在FFRLS模块加速率限制器防止参数突变。实测在UDDS工况下初始参数误差30%的情况下15分钟内就能收敛到真值。数据接口建议用CSV存储时间戳、电流、电压三列足够采样率别超过10Hz否则噪声处理麻烦。调试时遇到SOE跳变的重点检查三个地方OCV表是否单调出现平台区时加点滞回处理电流传感器零点漂移加个高通滤波协方差矩阵P初始化别太小特别是新电池参数未知时论文方面Plett老哥的《Battery Management Systems》卷二第6章是必看的里面关于EKF的鲁棒性改进方案实测有效。最近发现韩国KIA在2022年发的Battery Conference论文里提到的变遗忘因子策略也不错λ从0.95动态调整到0.99能提升低温工况表现。完整代码已打包成MATLAB2021b项目test_data文件夹里放了实测的18650电池DST工况数据。替换自己数据时注意csv文件的列顺序必须是[时间(秒), 电流(A), 电压(V)]电流正负号别搞反了。运行前记得改config.yaml里的电池容量参数不然SOE曲线会飞掉。最后上个效果图在-10℃的FUDS测试中SOE估计误差全程压在0.8%以内真值由充放电积分法标定。这种方案在电动叉车上跑了半年没出现过跳水现象就是参数更新频率别设太高500ms一次足够CPU占用率能控制在3%以下。
基于一阶RC电池模型的锂离子电池SOE估计:FFRLS在线参数辨识与EKF联合估计
基于一阶RC电池模型的锂离子电池SOE估计 使用遗忘因子最小二乘法 FFRLS 对电池模型进行在线参数辨识并利用辨识的参数联合扩展卡尔曼滤波算法EKF进行联合估计并基于动态工况进行验证soe完全跟随过程误差百分之1以下 内容包含做电池Simulink模型、电芯数据、推导公式、参考论文、模型调试说明 程序已经调试好可直接运行也可以替换成自己的数据 注意搞锂电状态估计的兄弟应该都懂电池模型参数飘忽不定这事儿多闹心。今天就拿一阶RC模型开刀咱不整虚的直接上FFRLSEKF组合拳手把手教你怎么让SOE估计误差稳定在1%以内。先看这个一阶RC模型的灵魂方程U_t OCV - I*R0 - Up dUp/dt -Up/(R1*C1) I/C1离散化处理时有个小技巧——用前向欧拉法比双线性变换省事采样时间设0.1秒足够应对大多数工况。注意这里的Up是极化电压别和SOC搞混了。参数辨识这块FFRLS的遗忘因子设置是门玄学。实测λ0.98时既能跟踪参数变化又不会震荡MATLAB里这么实现function [R0, R1, C1] ffrls_online(u, i, lambda) persistent P theta % 保持参数记忆 if isempty(P) P eye(3)*1e6; % 初始协方差矩阵 theta [0.1; 0.05; 2000]; % 初始参数猜测 end h [-i, -theta(3)*i, (u - theta(1)*i)]; % 回归向量 K P*h/(lambda h*P*h); % 关键更新步骤 theta theta K*(OCV_lut(i) - u - h*theta); % 参数修正 P (P - K*h*P)/lambda; % 协方差更新 R0 theta(1); R1 theta(2); C1 theta(3); end这里有个坑OCV查表函数要做温度补偿实测在20℃附近每度误差会产生0.3%的SOE偏移。EKF的实现更刺激状态方程得这么玩function [soe, Up] ekf_predict(soe_prev, Up_prev, I, R1, C1, Q) soe soe_prev - (I * delta_t) / capacity; Up Up_prev * exp(-delta_t/(R1*C1)) I*R1*(1 - exp(-delta_t/(R1*C1))); P A*P*A Q; % 协方差预测 end function [soe, Up] ekf_update(U_meas, soe_pred, Up_pred, R0, R) y_pred OCV_lut(soe_pred) - Up_pred - I*R0; C dOCV_dSOC(soe_pred); % OCV-SOC曲线斜率 K P*C/(C*P*C R); % 卡尔曼增益 soe soe_pred K*(U_meas - y_pred); Up Up_pred K*(U_meas - y_pred); P (eye(2) - K*C)*P; % 协方差更新 end注意雅可比矩阵C的获取方法——直接用多项式拟合OCV曲线的导数比数值微分稳定多了。基于一阶RC电池模型的锂离子电池SOE估计 使用遗忘因子最小二乘法 FFRLS 对电池模型进行在线参数辨识并利用辨识的参数联合扩展卡尔曼滤波算法EKF进行联合估计并基于动态工况进行验证soe完全跟随过程误差百分之1以下 内容包含做电池Simulink模型、电芯数据、推导公式、参考论文、模型调试说明 程序已经调试好可直接运行也可以替换成自己的数据 注意Simulink模型搭建时记得在FFRLS模块加速率限制器防止参数突变。实测在UDDS工况下初始参数误差30%的情况下15分钟内就能收敛到真值。数据接口建议用CSV存储时间戳、电流、电压三列足够采样率别超过10Hz否则噪声处理麻烦。调试时遇到SOE跳变的重点检查三个地方OCV表是否单调出现平台区时加点滞回处理电流传感器零点漂移加个高通滤波协方差矩阵P初始化别太小特别是新电池参数未知时论文方面Plett老哥的《Battery Management Systems》卷二第6章是必看的里面关于EKF的鲁棒性改进方案实测有效。最近发现韩国KIA在2022年发的Battery Conference论文里提到的变遗忘因子策略也不错λ从0.95动态调整到0.99能提升低温工况表现。完整代码已打包成MATLAB2021b项目test_data文件夹里放了实测的18650电池DST工况数据。替换自己数据时注意csv文件的列顺序必须是[时间(秒), 电流(A), 电压(V)]电流正负号别搞反了。运行前记得改config.yaml里的电池容量参数不然SOE曲线会飞掉。最后上个效果图在-10℃的FUDS测试中SOE估计误差全程压在0.8%以内真值由充放电积分法标定。这种方案在电动叉车上跑了半年没出现过跳水现象就是参数更新频率别设太高500ms一次足够CPU占用率能控制在3%以下。