4、电池内阻建模:欧姆内阻与极化内阻、电阻模块(Resistor)、可变电阻实现
电池内阻,说白了就是电池自己“吃掉的电压”。你想想看,一个理想电池输出电压应该是恒定的,但实际上一带负载,电压就往下掉。掉的那部分,就是内阻在作怪。
我在做BMS项目时,遇到过一件挺头疼的事:同一个电池,不同工况下测出来的内阻值居然差了好几倍。后来才搞明白,原来内阻不是单一值,它分成了欧姆内阻和极化内阻两兄弟。今天我们就来聊聊怎么在Simulink里把它们建模出来。
4.1 欧姆内阻 vs 极化内阻
先说说这两个家伙的区别。
- 欧姆内阻(R₀):这是电池材料本身带来的电阻,包括电极、电解液、隔膜、集流体等。它的特点是响应极快,电流一变化,电压立刻跟着跳。我习惯叫它“瞬时内阻”。
- 极化内阻(R₁):这是电化学反应过程中产生的“阻力”。电流流过时,离子迁移、电荷转移都需要时间,所以电压变化是慢慢悠悠的。说白了,它像个“惯性环节”。
在实际电池中,这两个内阻是串联关系。一个简单的二阶RC模型就能描述:
V_bat = V_oc - I * R₀ - V₁
其中V₁是极化电容C₁两端的电压,它满足:
dV₁/dt = I/C₁ - V₁/(R₁ * C₁)
嗯,这里要注意:R₀和R₁都不是常数。它们会随温度、SOC、电流方向变化。我见过不少新手直接把内阻设成固定值,结果仿真出来的电压曲线跟实测差了十万八千里。
4.2 Simulink中的电阻模块(Resistor)
Simulink的Simscape Electrical库里有个现成的Resistor模块。位置在:
Simscape > Electrical > Passive > Resistor
这个模块很简单,就一个参数:电阻值R(单位Ω)。但要注意,它是物理建模模块,需要配合Solver Configuration和Electrical Reference使用。
我个人习惯把Resistor模块用在欧姆内阻的建模上。因为欧姆内阻响应快,用物理模块直接模拟电压降,效果很直观。
举个例子,一个简单的电池内阻模型:
1. 拖入一个Controlled Voltage Source(模拟开路电压V_oc)
2. 串联一个Resistor模块(设置R = R₀)
3. 再串联一个RC并联支路(模拟极化效应)
4. 最后接上负载
但这里有个坑:Resistor模块的电阻值是固定参数,不能在线修改。如果你需要模拟内阻随SOC变化,就得另想办法。
4.3 可变电阻的实现方法
既然Resistor模块不能在线调参,那怎么实现可变内阻呢?我总结了三种常用方法:
方法一:用受控电压源模拟可变电阻
这是最灵活的方法。原理很简单:
V_drop = I * R(SOC, T)
用Controlled Voltage Source输出V_drop,串联在回路中。R(SOC, T)可以用Lookup Table或MATLAB Function实现。
代码示例(MATLAB Function):
function R = get_R0(SOC, T)
% 基于SOC和温度查表得到欧姆内阻
% 数据来自实测
R_table = [0.005, 0.004, 0.003, 0.0035; % T=0°C
0.004, 0.003, 0.002, 0.0025; % T=25°C
0.003, 0.0025, 0.002, 0.002]; % T=45°C
SOC_break = [0, 0.2, 0.5, 1];
T_break = [0, 25, 45];
R = interp2(SOC_break, T_break, R_table, SOC, T, 'linear');
end
这个方法的好处是:你想怎么变就怎么变,完全可控。缺点是需要额外测量电流I,而且要注意代数环问题。
方法二:用Simscape可变电阻模块
Simscape Electrical里其实有个Variable Resistor模块(在Simscape > Electrical > Passive > Variable Resistor)。它有一个物理信号输入端口,可以实时输入电阻值。
用法:
1. 用PS Constant或PS Lookup Table生成电阻值信号
2. 连接到Variable Resistor的R端口
3. 模块自动根据输入值调整电阻
我个人比较推荐这个方法,因为它既保留了物理建模的精度,又支持在线调参。不过要注意,输入信号必须是物理信号(PS),不是Simulink普通信号。需要用PS-Simulink Converter转换。
方法三:用受控电流源+电压测量
这个方法比较绕,但有时候很好用。原理是:
R = V / I
用Voltage Sensor测电压,Current Sensor测电流,然后通过除法得到电阻值。但注意,这只能用于后处理分析,不能直接用于模型内部反馈。
三种方法的对比:
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 受控电压源 | 灵活、无模块限制 | 需测电流、有代数环风险 | 复杂变阻模型 |
| Variable Resistor | 物理建模、支持在线调参 | 需PS信号、速率限制 | 标准电池模型 |
| 受控电流源+测量 | 简单直观 | 不能用于反馈 | 后处理分析 |
4.4 知识体系结构图
下面这张图帮你理清本章的核心逻辑:
4.5 实战建议
最后,给几个我在项目中总结的实用建议:
- 欧姆内阻用Resistor模块:如果R₀是固定值,直接用Resistor模块最省事。如果R₀随SOC变化,用Variable Resistor模块。
- 极化内阻用RC支路:用Resistor和Capacitor模块搭一个并联RC,时间常数τ = R₁ * C₁。一般τ在几秒到几十秒之间。
- 别忘了温度影响:内阻对温度极其敏感。我见过一个项目,25°C下内阻3mΩ,到-10°C直接飙到8mΩ。不做温度补偿,模型基本废了。
- 仿真步长要合适:欧姆内阻响应快,仿真步长建议小于1ms。极化内阻时间常数大,步长可以放宽到10ms。如果两者混用,用变步长求解器。
嗯,今天就聊到这儿。内阻建模是电池模型的基础,搞懂了它,后面SOC估算、功率预测才能做得准。希望这些经验对你有帮助。