2. 电池测试与数据采集:混合脉冲功率特性测试(HPPC)原理、测试步骤、数据预处理方法

各位同学,大家好。今天我们来聊聊电池建模里最核心的一环——HPPC测试。说白了,HPPC就是给电池做一次“体检”,看看它在不同电量、不同负载下的真实反应。我个人觉得,搞懂HPPC,参数辨识就成功了一半。

2.1 HPPC测试原理:为什么要“脉冲”一下?

你想想看,电池在车上用的时候,电流可不是一直不变的。急加速、急刹车,电流忽大忽小。HPPC测试就是模拟这种工况。

核心思想:给电池施加一个短时的大电流脉冲,然后观察电压的响应曲线。通过分析这个曲线,我们就能把电池内部的欧姆内阻、极化内阻、极化电容这些参数给“揪”出来。

我刚开始做这个测试时,总觉得原理很简单。直到有一次,我测出来的数据怎么拟合都不对。后来才发现,是脉冲时间太短,极化效应还没完全建立起来。嗯,这里要注意,脉冲宽度一般选10秒,放电和静置时间要足够长。

HPPC的核心逻辑:

  • 放电脉冲:模拟大电流放电,观察电压骤降和缓慢恢复的过程。
  • 静置:让电池内部电化学反应趋于平衡,观察电压的“回弹”曲线。
  • 充电脉冲:模拟能量回收,观察电压骤升和缓慢回落的过程。

说白了,HPPC就是通过“放电-静置-充电-静置”这个循环,把电池在不同SOC下的动态特性给测出来。

HPPC测试核心逻辑流程图 1. 设置SOC点 2. 静置1小时 3. 放电脉冲(10s) 4. 静置40s 5. 充电脉冲(10s) 6. 静置40s 7. 是否完成所有SOC? 8. 测试结束

2.2 测试步骤:手把手教你做HPPC

好了,原理讲完了,咱们来点实际的。HPPC测试步骤,我总结为“三步走”。

2.2.1 准备工作

  • 电池预处理:先做几个标准充放电循环,让电池“活”起来。我习惯用0.5C充放3次,确保电池状态稳定。
  • 环境控制:温度是最大的干扰项。把电池放进恒温箱,设定25°C,波动不超过±1°C。我曾经在夏天没开空调做测试,结果数据漂移得没法看。
  • 设备检查:确认充放电设备、数据采集卡的采样率。采样率建议至少10Hz,也就是每0.1秒记录一次数据。

2.2.2 执行测试

测试流程其实是个循环。我们从100% SOC开始,然后逐步放电到90%、80%……一直到10%。每个SOC点都做一次完整的脉冲测试。

我的小技巧: 在放电到目标SOC后,一定要静置1小时以上。为什么?因为电池内部的浓度梯度需要时间才能平衡。静置时间不够,测出来的开路电压(OCV)是虚的,后面参数辨识全白搭。

具体到每个SOC点的测试,流程如下:

  1. 记录静置后的开路电压(OCV)
  2. 以1C(或厂家指定倍率)恒流放电10秒
  3. 静置40秒,记录电压恢复曲线
  4. 以0.75C(通常为放电倍率的75%)恒流充电10秒
  5. 静置40秒,记录电压恢复曲线

警告: 充电脉冲的电流不能太大!我见过有人直接用1C充电,结果电池电压瞬间超过截止电压,触发了保护。充电电流一般取放电电流的75%,这是行业惯例。

2.2.3 数据记录

记录的数据包括:时间戳、电流、电压。一个典型的HPPC测试,会生成类似下面的数据表:

时间 (s) 电流 (A) 电压 (V) 阶段
0 0 4.200 静置结束
0.1 -50 4.050 放电开始
10.0 -50 3.950 放电结束
10.1 0 4.000 静置开始
50.0 0 4.100 静置结束

2.3 数据预处理方法:把“脏数据”洗干净

测试做完,你以为就完了?太天真了。原始数据里全是“坑”。噪声、异常值、时间戳错位……不处理干净,参数辨识就是“垃圾进,垃圾出”。

2.3.1 数据清洗

  • 去除异常值:比如电压突然跳变、电流归零等。我一般用3σ原则,超过均值±3倍标准差的数据直接剔除。
  • 插值补全:如果采样率不均匀,用线性插值或样条插值补全。Python里pandas.interpolate()很好用。

2.3.2 数据对齐

电流和电压的时间戳必须对齐。有时候设备会有延迟,导致电流变了,电压还没反应。我习惯用互相关函数(cross-correlation)来校准时间偏移。

2.3.3 提取关键特征

从HPPC数据中,我们需要提取几个关键点:

  • ΔV_ohmic:电流突变瞬间的电压变化,对应欧姆内阻。
  • ΔV_polarization:静置期间的电压恢复,对应极化效应。
  • OCV:静置结束时的稳定电压。

数据预处理的核心步骤:

  1. 加载原始CSV数据
  2. 去除异常值和噪声(低通滤波)
  3. 对齐电流和电压的时间戳
  4. 提取每个脉冲段的特征点(电压跳变、恢复曲线)
  5. 保存为结构化数据,供后续参数辨识使用

2.3.4 Python代码示例

下面是我常用的一个数据预处理片段,帮你快速上手:

import pandas as pd
import numpy as np
from scipy import signal

def preprocess_hppc(file_path):
    # 加载数据
    df = pd.read_csv(file_path)
    
    # 低通滤波,去除高频噪声
    b, a = signal.butter(4, 0.1, 'low')
    df['voltage_filtered'] = signal.filtfilt(b, a, df['voltage'])
    
    # 检测电流突变点(放电开始)
    current_diff = np.diff(df['current'])
    pulse_start = np.where(np.abs(current_diff) > 5)[0][0]
    
    # 提取欧姆压降
    v_before = df['voltage_filtered'].iloc[pulse_start - 1]
    v_after = df['voltage_filtered'].iloc[pulse_start + 1]
    delta_v_ohmic = v_before - v_after
    
    return delta_v_ohmic

# 使用示例
delta_v = preprocess_hppc('hppc_data.csv')
print(f'欧姆压降: {delta_v:.3f} V')

避坑指南: 我曾经直接用原始电压数据计算欧姆压降,结果噪声太大,算出来的内阻忽高忽低。后来加了低通滤波,数据才稳定下来。记住,滤波截止频率别设太低,否则会把真实的电压跳变也给滤掉。

好了,HPPC测试和数据预处理就讲到这里。数据洗干净了,下一步就是参数辨识了。别急,咱们下一章见。


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