第三节 电池模型基础:等效电路模型原理与搭建

各位工程师朋友,咱们今天聊聊电池建模。说实话,我刚入行那会儿,总觉得电池模型是个玄学——不就是个电池嘛,能有多复杂?直到我在一个BMS项目中,因为模型精度不够,SOC估算偏差达到了8%,差点导致项目延期。从那以后,我对电池模型就再也不敢马虎了。

电池模型有很多种,从最简单的开路电压法,到复杂的电化学模型。但在工程实践中,用得最多的还是等效电路模型。为什么?说白了,就是它在精度和计算量之间找到了一个很好的平衡点。

3.1 三种主流等效电路模型

咱们先看看最常见的三种模型。我个人习惯把它们比作「三代产品」——一代比一代强,但一代也比一代复杂。

3.1.1 Thevenin模型

Thevenin模型是最基础的。它由一个理想电压源(OCV)、一个内阻(R₀)和一个RC并联网络组成。你想想看,这就像把电池看作一个「有内阻的电压源」。

它的数学表达式很简单:

U(t) = OCV(SOC) - I(t)·R₀ - U_RC(t)

其中U_RC(t)是RC网络的极化电压,它描述了电池的动态特性。嗯,这里要注意:Thevenin模型只用一个RC网络,所以它只能模拟一个时间常数的极化效应。实际电池的极化效应很复杂,一个RC网络往往不够用。

我的经验: 对于磷酸铁锂电池,一个RC网络的Thevenin模型在低SOC区域误差会比较大。我曾经试过,在SOC低于20%时,电压预测误差能达到50mV以上。所以如果你做的是磷酸铁锂项目,建议至少用二阶RC模型。

3.1.2 PNGV模型

PNGV模型是Thevenin模型的升级版。它增加了一个电容来模拟电池容量的变化。说白了,就是考虑了「电池用着用着,容量会变」这个事实。

PNGV模型的电路结构是:OCV + R₀ + RC网络 + 一个串联电容(C_b)。这个串联电容用来模拟电池的充放电累积效应。

它的数学表达式:

U(t) = OCV(SOC) - I(t)·R₀ - U_RC(t) - (1/C_b)·∫I(t)dt

我在一个48V微混项目中用过PNGV模型。说实话,它的精度确实比Thevenin模型好,尤其是在长时间放电的场景下。但代价是参数辨识更复杂,需要更多的测试数据。

3.1.3 RC模型(高阶)

RC模型其实就是Thevenin模型的「多阶版本」。二阶RC模型有两个RC网络,三阶有三个,以此类推。阶数越高,精度越好,但计算量也越大。

二阶RC模型的表达式:

U(t) = OCV(SOC) - I(t)·R₀ - U_RC1(t) - U_RC2(t)

其中U_RC1和U_RC2分别对应快、慢两个时间常数的极化效应。

避坑指南: 我曾经在一个项目中盲目追求精度,用了三阶RC模型。结果发现参数辨识极其困难,而且在实际MCU上跑的时候,计算周期从1ms变成了5ms,严重影响了实时性。所以我的建议是:除非你的硬件性能非常充裕,否则二阶RC模型就足够了。

3.2 在MATLAB/Simulink中搭建一阶RC模型

好了,理论讲完了,咱们动手搭一个。我以最常用的一阶RC模型为例,带大家走一遍。

3.2.1 模型结构

在Simulink中,一阶RC模型需要这几个模块:

  • OCV查表模块:根据SOC查OCV值
  • 内阻模块:R₀乘以电流得到瞬时压降
  • RC网络模块:用传递函数或状态方程实现
  • SOC积分模块:对电流积分得到SOC

我个人习惯用「Simscape Electrical」工具箱里的电池模块,但为了让大家理解原理,咱们还是手搭一个。

3.2.2 具体搭建步骤

第一步:创建模型框架

% 在MATLAB命令窗口输入
open_system('new')
% 创建一个新的Simulink模型

第二步:添加模块

  • 从Simulink/Sources库拖入一个「Step」模块作为电流输入
  • 从Simulink/Continuous库拖入一个「Integrator」模块用于SOC计算
  • 从Simulink/Math Operations库拖入「Gain」、「Sum」、「Product」等模块
  • 从Simulink/Lookup Tables库拖入一个「1-D Lookup Table」用于OCV查表

第三步:搭建RC网络

RC网络的传递函数是:

G(s) = R₁ / (R₁·C₁·s + 1)

在Simulink中,可以用「Transfer Fcn」模块实现:

% 设置传递函数参数
% 分子:[R₁]
% 分母:[R₁*C₁, 1]
关键参数: 一阶RC模型需要辨识的参数有4个:R₀(欧姆内阻)、R₁(极化内阻)、C₁(极化电容)、以及OCV-SOC曲线。这些参数都通过HPPC测试来获取。

3.3 参数辨识方法:HPPC测试

HPPC(Hybrid Pulse Power Characterization)测试是电池参数辨识的「金标准」。说白了,就是给电池施加特定的电流脉冲,然后分析电压响应曲线。

3.3.1 HPPC测试流程

标准的HPPC测试步骤:

  1. 静置:电池在目标SOC下静置1小时以上
  2. 放电脉冲:以1C倍率放电10秒
  3. 静置:静置40秒
  4. 充电脉冲:以0.75C倍率充电10秒
  5. 静置:静置至电压稳定

然后改变SOC点,重复上述步骤。通常从100% SOC到0% SOC,每隔10%做一个点。

3.3.2 参数提取方法

从HPPC测试数据中提取参数,我一般用这个方法:

第一步:提取R₀

在放电脉冲开始的瞬间,电压会有一个瞬间跌落。这个跌落值除以电流,就是R₀。

R₀ = (U_before_pulse - U_after_pulse_start) / I_pulse

第二步:提取RC参数

在脉冲结束后的静置阶段,电压会缓慢回升。这个回升曲线可以用指数函数拟合:

U(t) = U_inf - R₁·I·exp(-t / τ)

其中τ = R₁·C₁。通过曲线拟合,就能得到R₁和C₁。

我的小技巧: 在MATLAB中,我用「lsqcurvefit」函数做非线性最小二乘拟合。但要注意,初始值的选择很关键。我一般先根据经验给个初值:R₁取R₀的1/3左右,τ取10-30秒。这样拟合收敛会快很多。

3.3.3 参数随SOC的变化

电池参数不是常数,它们随SOC变化很大。我整理了一个典型数据表(以某款三元锂电池为例):

SOC (%) R₀ (mΩ) R₁ (mΩ) C₁ (kF) OCV (V)
100 1.2 0.4 3.5 4.20
80 1.3 0.5 3.2 4.05
60 1.4 0.6 2.8 3.85
40 1.6 0.8 2.5 3.70
20 2.0 1.2 2.0 3.55
10 2.5 1.8 1.5 3.40
注意: 这个表只是示例数据。实际项目中,每个电芯的参数都不一样,甚至同一批次的电芯也有差异。我建议至少测试3-5个样本,取平均值作为模型参数。另外,温度对参数的影响也很大,低温下内阻会显著增大。

3.4 模型验证

模型搭好了,参数也辨识了,怎么知道模型准不准?我的做法是:用另一组测试数据来验证,而不是用辨识用的那组数据。

验证指标一般看两个:

  • 电压误差:模型预测电压和实测电压的差值,一般要求小于20mV
  • SOC误差:模型估算的SOC和真实SOC的差值,一般要求小于3%

如果误差超标,别急着调参数。先检查一下:是不是OCV曲线不准?是不是RC时间常数不对?我曾经有一次折腾了两天,最后发现是电流传感器的零点漂移导致的——嗯,这种坑踩过一次就记住了。

好了,这一节的内容就到这儿。下一节咱们聊聊卡尔曼滤波在SOC估算中的应用,那才是真正有意思的东西。