1. 项目背景与核心价值
在新能源车辆快速普及的当下,动力电池管理系统(BMS)的精度和可靠性直接决定了整车的续航表现与安全性能。其中,荷电状态(State of Charge, SOC)作为反映电池剩余电量的关键参数,其估算精度直接影响充电策略的制定和电池寿命的评估。传统安时积分法受电流传感器精度和初始误差影响较大,而基于卡尔曼滤波的估算方法通过融合电压、电流等多源数据,展现出更强的抗干扰能力。
本项目采用扩展卡尔曼滤波(EKF)和无迹卡尔曼滤波(UKF)两种非线性滤波算法,在Simulink环境下构建了完整的电池SOC估算与充电控制仿真系统。相较于现有方案,其创新点主要体现在:
- 通过UKF算法避免EKF的雅可比矩阵线性化误差,在强非线性区间(如低SOC区域)提升估算稳定性
- 设计基于动态电流限制的充电策略,根据实时SOC和温度调整充电曲线
- 在Simulink中实现从电池建模、算法开发到策略验证的全流程闭环验证
2. 电池建模与参数辨识
2.1 等效电路模型选型
采用二阶RC等效电路模型(如图1)平衡计算复杂度与精度需求。该模型包含:
- 开路电压(OCV)源:反映SOC-OCV非线性关系
- 欧姆内阻(R0):表征瞬时电压跌落
- 极化电阻(R1/R2)与电容(C1/C2):描述动态极化效应
提示:实验数据表明,在-10℃~45℃范围内,二阶RC模型电压估算误差可控制在±30mV以内,满足车用级精度要求。
2.2 参数辨识实验设计
通过混合脉冲功率特性(HPPC)测试获取模型参数:
- 在25℃恒温箱中以1C倍率进行充放电脉冲测试
- 采用递推最小二乘法(RLS)在线辨识R0、R1、C1等参数
- 建立不同SOC区间(每10%为一个区间)的参数查找表
关键参数示例(某三元锂电池):
| SOC区间 | R0(mΩ) | R1(mΩ) | C1(F) | R2(mΩ) | C2(F) |
|---|---|---|---|---|---|
| 90%~100% | 2.1 | 1.8 | 1200 | 0.9 | 8000 |
| 50%~60% | 1.7 | 1.2 | 1500 | 0.6 | 12000 |
3. 卡尔曼滤波算法实现
3.1 EKF算法核心步骤
-
状态方程构建:
matlab复制function [x_k, P_k] = ekf_predict(x_k1, P_k1, I, Q) % 状态转移矩阵A A = [1 0 0; 0 exp(-dt/(R1*C1)) 0; 0 0 exp(-dt/(R2*C2))]; % 过程噪声协方差Q x_k = A * x_k1 + [-dt/Qn; R1*(1-exp(-dt/(R1*C1))); R2*(1-exp(-dt/(R2*C2)))] * I; P_k = A * P_k1 * A' + Q; end -
量测更新:
matlab复制function [x_k, P_k] = ekf_update(x_k, P_k, V_meas, I, R) % 雅可比矩阵H计算 H = [dOCV/dSOC -1 -1]; K = P_k * H' / (H * P_k * H' + R); V_est = OCV(SOC) - I*R0 - x_k(2) - x_k(3); x_k = x_k + K * (V_meas - V_est); P_k = (eye(3) - K*H) * P_k; end
3.2 UKF算法改进点
-
Sigma点采样策略:
- 采用对称采样法生成2n+1个Sigma点(n为状态维数)
- 权重计算考虑状态分布的高阶矩信息
-
无迹变换过程:
matlab复制function [X_sigma] = generate_sigma_points(x, P, gamma) n = length(x); X_sigma = zeros(n, 2*n+1); X_sigma(:,1) = x; [U,S,~] = svd(P); sqrtP = U * sqrt(S) * U'; for i=1:n X_sigma(:,i+1) = x + gamma * sqrtP(:,i); X_sigma(:,i+n+1) = x - gamma * sqrtP(:,i); end end
实测对比数据(UDDS工况):
| 算法 | 最大误差 | RMSE | 计算耗时(ms/step) |
|---|---|---|---|
| EKF | 3.2% | 1.8% | 0.45 |
| UKF | 2.1% | 1.2% | 0.68 |
4. 充电控制策略设计
4.1 多阶段充电曲线优化
-
预充阶段(SOC<5%):
- 限流0.1C唤醒电池
- 温度低于0℃时启动加热
-
恒流阶段(5%~80%SOC):
- 动态调整电流:I_max = min(1C, I_thermal_limit)
- 每5%SOC更新一次电流限值
-
恒压阶段(>80%SOC):
- 电压控制在4.2V±50mV
- 截止电流0.05C
4.2 Simulink实现要点
-
状态机设计:
matlab复制function [stage, I_ref] = charge_control(SOC, T_batt, V_cell) persistent current_stage; if SOC < 0.05 && T_batt > 0 current_stage = 'PRE_CHARGE'; I_ref = 0.1 * Qn; elseif SOC < 0.8 && V_cell < 4.15 current_stage = 'CC_CHARGE'; I_ref = min(1*Qn, 2000/(T_batt+273)); else current_stage = 'CV_CHARGE'; I_ref = 0.05 * Qn * (4.2 - V_cell)/0.05; end stage = current_stage; end -
保护逻辑实现:
- 单体电压超过4.25V触发紧急停止
- 温度梯度>2℃/min触发降流
- SOC估算差异>5%触发算法重置
5. 仿真验证与结果分析
5.1 测试工况设计
-
动态应力测试(DST):
- 模拟城市拥堵工况
- 包含频繁启停和急加速
-
联邦城市驾驶计划(FUDS):
- 模拟复杂路况变化
- 验证算法动态响应
5.2 关键性能指标
| 测试场景 | EKF误差带 | UKF误差带 | 充电时间优化 |
|---|---|---|---|
| DST | ±3.5% | ±2.3% | 12.4% |
| FUDS | ±4.1% | ±2.8% | 9.7% |
| 低温(-10℃) | ±5.2% | ±3.6% | 需预热18min |
6. 工程实施经验
-
参数初始化技巧:
- SOC初值建议取开路电压法估算结果
- 协方差矩阵P0对角线元素设置为[0.01, 1e-4, 1e-4]
-
实时性优化:
- 将UKF的Sigma点计算改为查表法
- 采用定点数运算加速矩阵计算
-
常见故障排查:
- 若SOC持续漂移:检查OCV-SOC曲线标定精度
- 若电压跟踪滞后:调整过程噪声矩阵Q
- 若收敛速度慢:增大观测噪声矩阵R初值
在实际车辆测试中,这套系统将SOC估算误差稳定控制在3%以内(NEDC工况),相比传统方案充电时间缩短约15%,同时有效避免了过充风险。特别是在低温环境下,通过结合温度补偿模型,UKF算法展现出更强的鲁棒性。
