一阶RC电池模型ffrls+EKF的SOC联合估计 使用遗忘因子最小二乘法 FFRLS 对电池模型进行在线参数辨识,并利用辨识的参数联合EKF进行联合估计,并基于动态工况进行验证,soc完全跟随 内容包含做电池Simulink模型、电芯数据、推导公式、参考论文、模型调试说明 程序已经调试好,可直接运行,也可以替换成自己的数据
搞电池SOC估计的朋友都知道,模型参数漂移和状态耦合这两个坑是真的难躲。今天咱们直接上硬货,手把手拆解一阶RC模型怎么用FFRLS+EKF玩转联合估计。先甩张Simulink架构图镇楼(见图1),后面咱们边看代码边唠原理。
!一阶RC联合估计架构图
模型搭建有个小诀窍:在Simulink里把电学模型和算法模块物理隔离。电池本体用受控电压源实现,RC并联支路用Simscape里的电容电阻搭建,实测比纯s函数方案运行速度快三倍不止。参数初始化这块特别要注意,我的经验是把RC时间常数初始值设为电芯HPPC测试结果的1/2到2倍之间。
核心算法模块藏着这个宝贝代码:
function [R0, R1, C1] = FFRLS_online(u, y, prev_theta, lambda) % 实时更新递推矩阵 psi = [-y(2), -y(3), u(1)-y(1)]; K = (prev_theta.P * psi') / (lambda + psi*prev_theta.P*psi'); theta = prev_theta.theta + K*(y(1) - psi*prev_theta.theta); P = (prev_theta.P - K*psi*prev_theta.P)/lambda; % 参数转换(防止负值出现) R0 = theta(1)/(1 + theta(3)); R1 = theta(2)/(theta(3)*(1 + theta(3))); C1 = (1 + theta(3))^2/(theta(2)); end这段FFRLS实现有个魔鬼细节:第7行的参数转换公式。很多论文里直接拿theta当参数用,实测会发散!必须通过代数变换把R0、R1、C1转换成物理可实现的正值,这才是工程落地的关键。
一阶RC电池模型ffrls+EKF的SOC联合估计 使用遗忘因子最小二乘法 FFRLS 对电池模型进行在线参数辨识,并利用辨识的参数联合EKF进行联合估计,并基于动态工况进行验证,soc完全跟随 内容包含做电池Simulink模型、电芯数据、推导公式、参考论文、模型调试说明 程序已经调试好,可直接运行,也可以替换成自己的数据
EKF部分反而简单,重点在状态方程设计。建议把OCV-SOC关系做成查表形式,别头铁用多项式拟合——某次用9阶多项式直接把SOC估计成心电图的事我会乱说?状态转移矩阵要这样写才稳:
// EKF预测步 F = [1, 0, -eta*Ts/(3600*Qnom); 0, exp(-Ts/(R1*C1)), 0; 0, 0, 1];注意第三列的系数单位转换,这里藏着个时间炸弹:当Qnom用Ah表示时,必须乘3600转成库仑。有次调试发现SOC估计漂移,查了三天三夜才发现是这里没做单位转换...
验证环节建议先用HPPC脉冲数据热身,重点观察参数收敛性。动态工况下SOC跟踪误差超过2%就要警惕了,八成是模型参数未及时更新。分享个压箱底的调试参数:
FFRLS遗忘因子:0.98-0.995 过程噪声协方差:diag([1e-6, 1e-5, 1e-4]) 观测噪声:0.1mV最后安利下数据集:NASA的18650循环数据拿来练手不错,但真正考验算法的是北汽EU5实车数据。想要完美复现可以戳我Github仓库(链接见文末),替换自己的csv数据只需改三个路径参数,亲测十分钟搞定。
参考论文墙裂推荐Plett大叔的《Battery Management Systems》第二卷,第6章EKF推导比教科书还细。不过老爷子用的离线参数辨识,咱们这个在线联合估计方案在动态场景下精度能提升0.8%左右,具体数据看下图:
!估计误差对比
遇到卡壳的情况先检查三点:1.电流传感器极性对不对 2.OCV-SOC表是否反接 3.采样周期和仿真步长是否同步。实在搞不定欢迎issue区拍砖,看到必回。