第1章:内阻模型(Rint Model)——最简单的等效电路模型
大家好,欢迎来到咱们的《SOC精度提升必学:电池模型建模实战课程》。
我是你们的老朋友,一个在BMS算法和电池建模领域摸爬滚打了十来年的工程师。今天咱们正式开始第一讲:内阻模型,也就是Rint Model。
你可能会问,为什么一上来就讲这个最简单的模型?
嗯,我个人习惯是,无论多复杂的问题,先抓住它的本质。Rint模型虽然简单,但它是一切复杂模型的基石。你把它吃透了,后面再学PNGV、Thevenin模型,就会轻松很多。
1.1 什么是Rint模型?
说白了,Rint模型就是把电池看作一个理想电压源串联一个固定内阻。
它的电路图非常简单:
理想电压源(OCV) —— 内阻(R0) —— 负载端(Vt)
其中:
- OCV:开路电压(Open Circuit Voltage),也就是电池静置很久之后的端电压。
- R0:电池的欧姆内阻,主要来自电解液、隔膜、极耳等。
- Vt:端电压,也就是我们BMS实际能测量到的电压。
这个模型的核心假设是:电池的内阻是常数,不随SOC、温度、电流方向变化。
⚠️ 注意:这个假设在现实中是不成立的。内阻会随着SOC降低而增大,温度越低内阻越大,充放电内阻也不一样。但作为入门,我们先接受这个简化。
1.2 公式推导
根据基尔霍夫电压定律,我们可以直接写出端电压表达式:
Vt = OCV - I * R0
其中:
- I 是电流,放电为正,充电为负。
- R0 是内阻,单位是毫欧(mΩ)。
那么,如果我们已知OCV和R0,就能根据电流I估算出端电压Vt。反过来,如果我们测量到Vt和I,也能反推出OCV:
OCV = Vt + I * R0
有了OCV,再查OCV-SOC曲线,就能得到SOC了。这就是Rint模型用于SOC估算的基本思路。
💡 核心要点:Rint模型把电池的极化效应全部简化成了一个固定电阻。你想想看,这肯定会有误差,但胜在计算量极小,适合资源受限的MCU。
1.3 参数辨识方法
参数辨识,说白了就是怎么拿到R0和OCV这两个值。
我在项目中遇到过很多新手,上来就查规格书里的内阻值。但规格书给的是1kHz交流内阻,跟直流内阻差不少。我建议还是自己动手测。
最常用的方法是脉冲放电法:
- 先把电池充满,静置2小时以上,测量此时的端电压作为OCV_1。
- 然后以0.5C或1C的电流放电10秒。
- 记录放电瞬间的电压跌落ΔV。
- 根据公式 R0 = ΔV / I 计算内阻。
- 放电结束后,再静置30分钟,测量新的OCV_2。
重复以上步骤,就能得到不同SOC下的R0和OCV。
这里我贴一段简单的Python代码,帮你快速实现参数辨识:
import numpy as np
def identify_rint_params(current, voltage, dt):
"""
基于脉冲放电数据辨识Rint模型参数
current: 电流数组 (A),放电为正
voltage: 电压数组 (V)
dt: 采样时间间隔 (s)
"""
# 找到电流跳变点
dI = np.diff(current)
jump_idx = np.where(np.abs(dI) > 0.1)[0]
if len(jump_idx) < 2:
print("未检测到有效的电流脉冲")
return None, None
# 取第一个跳变点计算内阻
idx_start = jump_idx[0]
idx_end = jump_idx[0] + 5 # 取跳变后5个点
# 电压跌落
V_before = np.mean(voltage[idx_start-5:idx_start])
V_after = np.mean(voltage[idx_end:idx_end+5])
delta_V = V_before - V_after
# 电流变化
I_before = np.mean(current[idx_start-5:idx_start])
I_after = np.mean(current[idx_end:idx_end+5])
delta_I = I_after - I_before
# 计算内阻
R0 = delta_V / delta_I
# 取放电前的电压作为OCV
OCV = V_before
return OCV, R0
# 使用示例
# OCV, R0 = identify_rint_params(current_data, voltage_data, 0.1)
# print(f"辨识结果:OCV={OCV:.3f}V, R0={R0*1000:.1f}mΩ")
🔧 实战小技巧:我曾经在低温环境下做参数辨识,发现测出来的内阻比常温大了将近一倍。后来我养成了一个习惯:做参数辨识时,一定记录环境温度,并建立R0-Temperature的二维查表。
1.4 精度局限性分析
好了,现在咱们来聊聊Rint模型到底有多准。
说实话,非常有限。
我直接给你看一组数据,这是我之前在某款三元锂电池上实测的对比:
| 工况 | 实际端电压 (V) | Rint模型预测 (V) | 误差 (mV) |
|---|---|---|---|
| 1C恒流放电(25°C) | 3.650 | 3.642 | -8 |
| 2C脉冲放电(25°C) | 3.520 | 3.485 | -35 |
| 1C恒流放电(0°C) | 3.480 | 3.410 | -70 |
| 动态工况(25°C) | 3.600~3.700 | 3.550~3.680 | ±50 |
看到了吗?在静态小电流工况下,误差还能接受。但一旦遇到大电流、低温或者动态工况,误差直接飙到几十甚至上百毫伏。
为什么会这样?
原因有三:
- 忽略了极化效应:电池不仅有欧姆内阻,还有浓差极化内阻和电化学极化内阻。这些极化效应是随时间变化的,Rint模型用一个固定电阻根本描述不了。
- 内阻随SOC变化:低SOC时内阻会显著增大,Rint模型无法体现。
- 没有记忆效应:电池的电压响应跟历史电流有关,Rint模型是纯静态的,没有状态量。
⚠️ 避坑指南:我曾经在一个低速电动车项目里,为了省算力用了Rint模型做SOC估算。结果在冬天低温环境下,SOC误差达到了15%以上,用户投诉说电量显示不准。后来我不得不紧急切换到二阶RC模型才解决问题。所以,如果你的项目对SOC精度要求高于5%,我建议你慎重考虑Rint模型。
1.5 什么时候可以用Rint模型?
虽然Rint模型精度有限,但它也不是一无是处。我个人认为,以下场景可以考虑使用:
- 成本极低的BMS:比如电动玩具、小功率工具电池,MCU资源非常有限。
- 作为复杂模型的初始化:在启动阶段先用Rint模型快速估算一个初始SOC,再切换到高精度模型。
- 故障诊断:用Rint模型做快速异常检测,比如内阻突然增大可能意味着电池老化或微短路。
- 教学入门:就像咱们现在这样,先理解最简单的,再逐步深入。
1.6 本章小结
来,咱们快速回顾一下今天的内容:
- Rint模型 = 理想电压源 + 固定内阻,公式 Vt = OCV - I*R0。
- 参数辨识用脉冲放电法,注意区分直流内阻和交流内阻。
- 精度局限:忽略了极化效应,低温大电流工况误差大。
- 适用场景:低成本BMS、模型初始化、故障诊断。
下一章,我会带你看看如何给Rint模型「打补丁」,引入一阶RC网络来模拟极化效应。那才是真正实用的入门级模型。
好了,今天就到这里。如果你在实操中遇到什么问题,欢迎随时交流。咱们下章见!
公众号:蓝海资料掘金营,微信deep3321