第三节 电池模型基础:等效电路模型原理与搭建
各位工程师朋友,咱们今天聊聊电池建模。说实话,我刚入行那会儿,总觉得电池模型是个玄学——不就是个电池嘛,能有多复杂?直到我在一个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网络往往不够用。
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分别对应快、慢两个时间常数的极化效应。
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]
3.3 参数辨识方法:HPPC测试
HPPC(Hybrid Pulse Power Characterization)测试是电池参数辨识的「金标准」。说白了,就是给电池施加特定的电流脉冲,然后分析电压响应曲线。
3.3.1 HPPC测试流程
标准的HPPC测试步骤:
- 静置:电池在目标SOC下静置1小时以上
- 放电脉冲:以1C倍率放电10秒
- 静置:静置40秒
- 充电脉冲:以0.75C倍率充电10秒
- 静置:静置至电压稳定
然后改变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₁。
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.4 模型验证
模型搭好了,参数也辨识了,怎么知道模型准不准?我的做法是:用另一组测试数据来验证,而不是用辨识用的那组数据。
验证指标一般看两个:
- 电压误差:模型预测电压和实测电压的差值,一般要求小于20mV
- SOC误差:模型估算的SOC和真实SOC的差值,一般要求小于3%
如果误差超标,别急着调参数。先检查一下:是不是OCV曲线不准?是不是RC时间常数不对?我曾经有一次折腾了两天,最后发现是电流传感器的零点漂移导致的——嗯,这种坑踩过一次就记住了。
好了,这一节的内容就到这儿。下一节咱们聊聊卡尔曼滤波在SOC估算中的应用,那才是真正有意思的东西。