第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交流内阻,跟直流内阻差不少。我建议还是自己动手测。

最常用的方法是脉冲放电法

  1. 先把电池充满,静置2小时以上,测量此时的端电压作为OCV_1。
  2. 然后以0.5C或1C的电流放电10秒。
  3. 记录放电瞬间的电压跌落ΔV。
  4. 根据公式 R0 = ΔV / I 计算内阻。
  5. 放电结束后,再静置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

看到了吗?在静态小电流工况下,误差还能接受。但一旦遇到大电流、低温或者动态工况,误差直接飙到几十甚至上百毫伏。

为什么会这样?

原因有三:

  1. 忽略了极化效应:电池不仅有欧姆内阻,还有浓差极化内阻和电化学极化内阻。这些极化效应是随时间变化的,Rint模型用一个固定电阻根本描述不了。
  2. 内阻随SOC变化:低SOC时内阻会显著增大,Rint模型无法体现。
  3. 没有记忆效应:电池的电压响应跟历史电流有关,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