1、课程导论与预备知识:电池模型基础与卡尔曼滤波入门

各位同学,欢迎来到《基于扩展卡尔曼滤波的SOC估计算法实现》的第一课。

我是这门课的主讲。做BMS算法这些年,我踩过不少坑,也积累了一些心得。今天咱们就把地基打牢。

你想想看,SOC估计不准,车开着开着突然没电,或者电池过充起火,那都是大事。所以,这一章的内容,说白了就是整个课程的“命根子”。

1.1 电池模型基础:OCV-SOC曲线

先聊聊OCV-SOC曲线。这是电池最核心的特性之一。

OCV,开路电压。SOC,荷电状态。它们之间有个一一对应的关系,但不是线性的。

我刚开始做项目时,以为找个线性公式一算就完事了。结果呢?误差大到离谱。后来才明白,这条曲线必须实测,而且不同温度、不同老化程度,曲线都会变。

核心要点:OCV-SOC曲线是电池的“指纹”。没有它,EKF就是无源之水。

为什么这么说?因为EKF的观测方程里,我们需要用OCV来修正状态估计。如果OCV不准,修正方向就错了。

实际项目中,我们通常用两种方法获取这条曲线:

  • 小电流放电法:用0.05C左右的电流慢慢放,记录电压和容量。我习惯用这个方法做基准标定。
  • 脉冲充放电法:通过短时脉冲,结合弛豫电压来拟合。速度快,但精度稍差。

我的经验:做OCV测试时,静置时间一定要够。我曾经为了赶进度,只静置了30分钟,结果拟合出来的曲线在低SOC段完全不能用。后来我改成静置2小时以上,数据才稳定。

1.2 RC等效电路模型

有了OCV-SOC曲线,我们还需要描述电池的动态特性。这时候,RC等效电路模型就登场了。

最简单的是一阶RC模型:一个电阻R0(欧姆内阻),一个RC并联网络(极化效应)。

你想想看,电池在放电时,电压会瞬间掉一块(R0的作用),然后慢慢再掉一块(RC网络的作用)。这个“慢慢掉”的过程,就是极化效应。

数学上,我们这样描述:

状态方程:
V_p[k+1] = V_p[k] * exp(-Δt/τ) + I[k] * R_p * (1 - exp(-Δt/τ))

观测方程:
V_t[k] = OCV(SOC[k]) - V_p[k] - I[k] * R0

其中,τ = R_p * C_p,是时间常数。这个参数很关键,它决定了电池的“记忆”长度。

注意:RC参数不是一成不变的。温度、SOC、电流方向都会影响R0、R_p、C_p的值。我见过不少新手直接拿25℃的参数去算-10℃的情况,结果SOC估计误差直接飙到15%以上。

高阶模型(二阶、三阶)精度更高,但计算量也更大。我个人习惯,在嵌入式平台上用一阶或二阶模型就够了。再高,边际效益递减,反而容易过拟合。

1.3 卡尔曼滤波入门:线性KF的5个核心公式

好,模型有了,怎么用?这就轮到卡尔曼滤波了。

线性卡尔曼滤波,说白了就是五个公式来回倒。我当年学的时候,觉得这五个公式像五线谱,看着复杂,弹熟了就是肌肉记忆。

咱们先看状态预测部分:

  1. 状态预测:x̂_k|k-1 = A * x̂_k-1|k-1 + B * u_k
  2. 误差协方差预测:P_k|k-1 = A * P_k-1|k-1 * A^T + Q

然后是用测量值修正:

  1. 卡尔曼增益:K_k = P_k|k-1 * H^T * (H * P_k|k-1 * H^T + R)^(-1)
  2. 状态更新:x̂_k|k = x̂_k|k-1 + K_k * (z_k - H * x̂_k|k-1)
  3. 误差协方差更新:P_k|k = (I - K_k * H) * P_k|k-1

嗯,这里要注意,公式里的Q和R,分别是过程噪声和测量噪声的协方差矩阵。这两个参数怎么调?

我刚开始做的时候,Q和R全靠猜。后来发现,Q设大了,滤波响应快但噪声大;R设大了,滤波平滑但响应慢。这是个trade-off。

避坑指南:我曾经在一个项目中,把R设得太小,结果滤波器对测量噪声特别敏感,SOC估计值跳来跳去,根本没法用。后来我把R调大了10倍,曲线才平滑下来。所以,调参时,建议先从保守的R值开始。

1.4 EKF的核心思想:线性化与雅可比矩阵

问题来了:我们的电池模型是非线性的(OCV-SOC曲线就是非线性的),线性KF用不了。怎么办?

扩展卡尔曼滤波(EKF)就是干这个的。它的核心思想就四个字:线性化

怎么线性化?用泰勒展开,取一阶项。说白了,就是在当前工作点附近,用切线代替曲线。

这个切线的斜率,就是雅可比矩阵。

对于我们的电池模型:

  • 状态方程对状态的雅可比:A_k = ∂f/∂x | x̂_k-1|k-1
  • 观测方程对状态的雅可比:H_k = ∂h/∂x | x̂_k|k-1

具体到一阶RC模型:

状态向量 x = [SOC, V_p]^T

A_k = [1, 0;
       0, exp(-Δt/τ)]

H_k = [∂OCV/∂SOC, -1]   // 注意,∂OCV/∂SOC就是OCV曲线的斜率

你看,EKF和线性KF的区别,就在于A和H变成了时变的,需要在线计算。

关键点:雅可比矩阵的计算精度,直接决定了EKF的收敛性和稳定性。如果OCV曲线斜率算错了,整个滤波器可能发散。

我建议,在实现时,OCV-SOC曲线的斜率最好用解析表达式,或者用高精度的插值+差分。不要用简单的两点差分,噪声太大。

好了,这一章的内容就到这里。我们打下了三个基础:电池模型、线性KF、EKF的线性化思想。下一章,咱们就开始动手搭建完整的EKF-SOC估计算法。

记住,理论是死的,工程是活的。多动手,多调参,你也能成为BMS算法高手。