3. 电池模型参数辨识:HPPC测试、最小二乘法与离线辨识流程

好,咱们进入第三讲。这一讲的核心,说白了就是怎么把电池的“脾气”摸清楚。

你想想看,我们建了一个电池模型,里面一堆参数——开路电压、欧姆内阻、极化电容、极化电阻……这些数字从哪来?总不能拍脑袋猜吧?

嗯,这就需要用到参数辨识。我个人习惯把这一步叫做“给电池做体检”。

3.1 混合脉冲功率特性(HPPC)测试

HPPC测试,全称是Hybrid Pulse Power Characterization。这名字听着挺唬人,其实就是给电池施加一串特定的电流脉冲,然后看电压怎么响应。

我在项目中遇到过最典型的场景:客户要求电池在低温下也要有好的功率输出。结果一测,低温下内阻翻了三倍。如果没有HPPC数据,你根本不知道问题出在哪。

HPPC测试的核心流程:

  1. 静置阶段:电池先静置1小时以上,让内部电化学反应达到平衡。这时候测到的电压就是开路电压(OCV)。
  2. 放电脉冲:用一个固定倍率(比如1C)的电流放电10秒。你会看到电压瞬间掉下去一块——那是欧姆内阻在作怪。
  3. 静置恢复:放电结束后,再静置40秒。电压会慢慢回升,这部分反映的是极化效应。
  4. 充电脉冲:同样用1C电流充电10秒,观察电压上升的曲线。
  5. 重复:在不同SOC(荷电状态)点重复上述步骤,比如从100% SOC开始,每放10%电做一次。

关键点:HPPC测试的脉冲宽度和静置时间不是随便定的。10秒脉冲对应的是短时功率特性,40秒静置是为了让极化充分建立。我见过有人把静置时间改成10秒,结果参数辨识出来一塌糊涂。

下面这张图展示了HPPC测试的完整流程,以及电压响应的关键特征点:

HPPC测试流程与电压响应特征 电流 (A) 0 放电 充电 电压 (V) ΔV_欧姆 ΔV_极化 静置1h 放电10s 静置40s 充电10s 静置40s 图例 电流曲线 电压曲线

3.2 最小二乘法原理

好,数据拿到了。接下来怎么从这些电压电流数据里把参数抠出来?

最小二乘法,就是干这个的。它的思想特别朴素:让模型预测值和实际测量值之间的误差平方和最小

为什么是平方和?因为平方可以放大大的误差,让优化过程更关注那些偏差大的点。我刚开始学的时候也觉得这有点绕,后来做了一次实际拟合就明白了——如果不平方,正负误差会互相抵消,你永远找不到最优解。

数学上长这样:

J = Σ (y_i - ŷ_i)²

其中:
y_i  = 实际测量值(比如电压)
ŷ_i  = 模型预测值
J    = 损失函数,我们要让它最小

对于电池模型这种线性参数系统(比如R₀、R₁、C₁),最小二乘法有解析解。说白了就是一步到位,不用迭代。

我的小技巧:在实际项目中,我一般先用最小二乘法算一遍,得到初始值。然后再用非线性优化(比如粒子群算法)微调。这样既快又准。

3.3 离线参数辨识流程

离线辨识,就是拿已经采集好的数据,一次性把所有参数算出来。在线辨识则是边跑边算。这一讲我们先说离线。

完整的离线辨识流程:

  1. 数据预处理:把HPPC测试数据导进来,去掉异常点,做平滑滤波。我见过有人直接拿原始数据跑,结果因为一个噪声点,参数偏了20%。
  2. OCV-SOC曲线拟合:用静置阶段的电压数据,拟合出OCV和SOC的关系。一般用多项式拟合,阶数选5-7阶就够。
  3. 欧姆内阻R₀辨识:看脉冲开始瞬间的电压跳变。ΔV / ΔI 就是R₀。
  4. 极化参数R₁、C₁辨识:用脉冲结束后的电压恢复曲线,拟合RC网络的响应。
  5. 参数验证:把辨识出来的参数代入模型,跑一遍仿真,看和实测数据对得上不。

我曾经踩过的坑:有一次我忽略了温度对参数的影响。夏天标定的参数,冬天直接用,结果SOC估计误差飙到8%。后来我学乖了,每个温度点都单独做HPPC,建立参数-温度查找表。

下面这个表格总结了不同SOC点下,典型锂电池的参数范围(仅供参考,具体以实测为准):

SOC (%) OCV (V) R₀ (mΩ) R₁ (mΩ) C₁ (F)
100 4.20 0.85 0.42 3200
80 4.05 0.88 0.45 3100
60 3.92 0.92 0.48 2950
40 3.78 0.98 0.52 2750
20 3.60 1.10 0.60 2500
0 3.20 1.35 0.75 2100

看到没?SOC越低,内阻越大,极化电容越小。这就是为什么低电量时电池“没劲”——内阻大了,电压掉得快。

最后,我贴一段最小二乘法辨识R₀的Python代码。这段代码我在好几个项目里复用,基本没改过:

import numpy as np

def identify_R0(current, voltage, pulse_start_idx, pulse_end_idx):
    """
    用最小二乘法辨识欧姆内阻 R0
    current: 电流数组 (A)
    voltage: 电压数组 (V)
    pulse_start_idx: 脉冲开始时刻的索引
    pulse_end_idx: 脉冲结束时刻的索引
    """
    # 取脉冲开始前后的数据点
    v_before = voltage[pulse_start_idx - 2 : pulse_start_idx]
    v_after  = voltage[pulse_start_idx : pulse_start_idx + 2]
    i_before = current[pulse_start_idx - 2 : pulse_start_idx]
    i_after  = current[pulse_start_idx : pulse_start_idx + 2]
    
    # 计算电压跳变
    delta_v = np.mean(v_after) - np.mean(v_before)
    delta_i = np.mean(i_after) - np.mean(i_before)
    
    # R0 = delta_v / delta_i
    R0 = delta_v / delta_i
    
    return abs(R0)  # 内阻取正值

嗯,代码不长,但很实用。你想想看,如果没有这步,你连电池最基本的特性都抓不住。

这一讲的内容就到这。参数辨识是电池建模的基石,HPPC测试是获取数据的标准方法,最小二乘法是提取参数的核心工具。把这三点吃透了,后面的卡尔曼滤波才能跑得稳。


公众号:蓝海资料掘金营,微信deep3321