状态方程离散化
基于二阶RC卡尔曼滤波EKF的锂电池SOC估计仿真 仿真数据HPPC工况模型中自带数据 附带卡尔曼滤波EKF算法说明文档 图1真实值与估计值对比曲线 图2误差率波形 图3估算SOC锂电池的荷电状态SOC就像电动车的电量表但想准确估计它可比手机电量显示复杂多了。今天咱们拿二阶RC模型开刀配合扩展卡尔曼滤波EKF整点硬核活。先剧透结果——最终误差控制在2%以内这对BMS系统来说已经够用了。先瞅瞅二阶RC等效电路画个简图。这个模型把电池内部极化效应拆成了两个RC回路数学表达长这样def state_eq(v1, v2, soc, current, dt): soc_new soc - dt*current/(3600*capacity) v1_new np.exp(-dt/(R1*C1)) * v1 R1*(1-np.exp(-dt/(R1*C1)))*current v2_new np.exp(-dt/(R2*C2)) * v2 R2*(1-np.exp(-dt/(R2*C2)))*current return soc_new, v1_new, v2_new这里R1/C1和R2/C2分别对应快慢两个极化过程dt是采样时间。注意指数项展开其实就是状态空间方程的离散化操作避免直接用微分方程导致数值不稳定。EKF的核心在于处理非线性电池的OCV-SOC曲线就是典型的非线性关系。咱们在预测步用实际模型更新步则对模型做一阶泰勒展开% 雅可比矩阵计算 function [df_dx] jacobian(x, current) df_dsoc 1; df_dv1 exp(-Ts/(R1*C1)); df_dv2 exp(-Ts/(R2*C2)); df_dx [df_dsoc, 0, 0; 0, df_dv1, 0; 0, 0, df_dv2]; end雅可比矩阵这里其实只保留了状态转移矩阵的对角线元素因为各状态量之间没有直接耦合。这种简化在保证精度的同时大大减少了计算量——这对车载嵌入式系统太重要了。基于二阶RC卡尔曼滤波EKF的锂电池SOC估计仿真 仿真数据HPPC工况模型中自带数据 附带卡尔曼滤波EKF算法说明文档 图1真实值与估计值对比曲线 图2误差率波形 图3估算SOC实战中HPPC工况数据会教做人贴图1。在充放电脉冲阶段估计值会出现毫米级的抖动这时候过程噪声矩阵Q的调参就显神通了。我们的秘诀是把Q矩阵设计成时变形式# 自适应过程噪声 Q np.diag([1e-6, 1e-4*(abs(current)1), 1e-5*(abs(current)1)])电流越大对极化电压的噪声权重越高。这招让算法在5C大电流脉冲时仍能稳住阵脚比固定Q矩阵误差降低了0.8%。观测方程里的重头戏是OCV-SOC查表贴图3。这里有个骚操作——采用三次样条插值代替分段线性function ocv getOCV(soc) % 采样点稀疏区域自动增加插值节点 persistent spline_model; if isempty(spline_model) soc_points [0, 0.1, 0.3, 0.7, 0.9, 1]; ocv_points [3.0, 3.2, 3.4, 3.6, 3.8, 4.0]; spline_model csape(soc_points, ocv_points, second); end ocv ppval(spline_model, soc); end二阶连续可导的特性让雅可比矩阵中的OCV导数计算更丝滑避免了线性插值在拐点处的导数突变问题。误差曲线贴图2显示最大误差出现在SOC 50%附近这恰好是OCV曲线最平缓的区域。对此我们增加了滑动窗口方差检测当误差持续超过1.5%时触发安时积分法修正相当于给EKF上了个双保险。最后来个性能暴击在Intel i5上实测单次迭代仅需28μs内存占用不到2KB。这意味着即使移植到STM32F103这类入门级MCU也能流畅运行这下做BMS的兄弟可以安心了。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2460723.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!