电池测试与数据采集基础:充放电测试规程与高精度数据采集

做BMS算法这些年,我越来越觉得一个道理:算法再漂亮,数据不行,全白搭。说白了,电池健康状态估算这件事,七分靠数据,三分靠算法。今天我们就聊聊电池测试和数据采集那些事。

一、充放电测试规程:三种核心工况

电池测试不是随便充放电就完事了。不同的测试目的,要用不同的工况。我个人习惯把测试工况分成三类:标准充放电、动态应力测试、以及真实驾驶工况。

1.1 CCCV:恒流恒压充电

这是最基础的充电方式。你想想看,锂电池充电不能一直用大电流怼,否则会出问题。所以业界普遍采用CCCV模式。

  • 恒流阶段(CC):以固定电流充电,直到电压达到截止电压。比如4.2V的电池,用0.5C电流充到4.2V。
  • 恒压阶段(CV):保持电压不变,电流逐渐下降。当电流降到某个阈值(通常是0.05C),充电结束。

关键参数设置

  • 截止电压:4.2V(LCO)、4.35V(NMC)、3.65V(LFP)
  • 截止电流:通常为0.05C
  • 充电倍率:0.3C~1C,视电池类型而定

我的经验:我在项目中遇到过一批LFP电池,用标准CCCV充到3.65V,容量总差一点。后来发现是恒压阶段时间不够。LFP的电压平台很平,CV阶段需要更长时间才能把电充满。我建议LFP电池的CV阶段至少延长到电流降到0.02C。

1.2 DST:动态应力测试

DST工况模拟的是实际使用中的动态负载变化。它不是简单的恒流放电,而是包含了一系列不同倍率的脉冲充放电。

DST的典型流程是这样的:

  1. 先做一次标准容量标定(CCCV充满,然后0.2C放空)
  2. 然后执行DST循环,每个循环约360秒
  3. 循环中包含:静置、小电流放电、大电流放电、小电流充电等步骤
  4. 重复执行直到达到放电截止条件

注意:DST工况对数据采集系统的要求很高。我曾经用一套采样率只有1Hz的设备做DST测试,结果脉冲电流的峰值根本抓不到,算出来的内阻偏差超过20%。后来换了10Hz的采集系统才解决问题。

1.3 UDDS:城市道路循环工况

UDDS是美国环保署制定的城市驾驶循环。它模拟的是城市道路上的启停、加速、减速过程。对于电动汽车电池测试来说,UDDS比DST更贴近真实使用场景。

工况类型 持续时间 最大电流倍率 适用场景
CCCV 2~4小时 0.5C~1C 容量标定、内阻测试
DST 约6分钟/循环 2C~3C 动态性能评估
UDDS 约23分钟/循环 3C~5C 真实驾驶模拟

UDDS工况的电流变化非常剧烈。你想想看,城市里开车,红灯停绿灯行,频繁启停。电池在这种工况下,电流从-3C(再生制动充电)到+5C(急加速放电)来回跳。这对BMS的实时估算能力是个大考验。

二、高精度数据采集要求

数据采集是BMS的「眼睛」。眼睛不好使,算法再牛也白搭。我见过太多项目,算法模型建得漂漂亮亮,结果一上实车就崩,查到最后都是数据采集的问题。

2.1 采样频率

采样频率怎么定?有个经验法则:采样频率至少是信号最高频率的10倍。对于电池动态过程,电流变化频率通常在0.1Hz~10Hz之间。所以我建议:

  • 电压采样:至少10Hz,推荐20Hz
  • 电流采样:至少10Hz,推荐50Hz
  • 温度采样:1Hz就够了,温度变化慢

为什么电流采样要更高? 因为电流变化快。急加速时,电流可能在几十毫秒内从0跳到200A。采样率不够,峰值电流就丢了,SOC估算会出大问题。

2.2 分辨率与精度

分辨率决定了你能看到多小的变化。精度决定了你看到的值有多准。这两个概念容易混淆,我简单解释一下:

  • 分辨率:ADC能分辨的最小电压变化。比如12位ADC,参考电压5V,分辨率就是5V/4096≈1.22mV
  • 精度:测量值与真实值的偏差。精度受温度漂移、噪声、非线性等因素影响

对于电池测试,我建议的指标是:

参数 分辨率要求 精度要求
电压 ≤1mV ±5mV
电流 ≤10mA ±0.1%FS
温度 ≤0.1℃ ±0.5℃

三、传感器噪声与误差分析

说到噪声,我想起一个真实案例。有次做电池老化测试,发现容量衰减曲线特别「毛躁」,完全看不出规律。查了两天才发现,是电流传感器的共模噪声在作怪。

3.1 噪声来源

传感器噪声主要来自三个方面:

  • 热噪声:电阻内部电子热运动产生的噪声,温度越高越明显
  • 1/f噪声:低频段噪声,频率越低噪声越大
  • 外部干扰:电机驱动、DC-DC变换器产生的电磁干扰

3.2 误差类型

误差和噪声不一样。噪声是随机的,误差是有规律的。常见的误差包括:

  1. 偏移误差:零点漂移。比如电流为0时,传感器输出不为0
  2. 增益误差:比例偏差。比如实际100A,传感器显示102A
  3. 非线性误差:输入输出关系不是直线
  4. 温度漂移:温度变化导致测量值变化

避坑指南:我曾经在项目里吃过亏。当时用霍尔电流传感器做测试,没做温度补偿。夏天和冬天的数据对不上,内阻估算偏差很大。后来加了温度补偿算法,问题才解决。所以,如果你用霍尔传感器,一定要做温度标定。

3.3 数据预处理方法

拿到原始数据后,不能直接用。需要做预处理:

  • 中值滤波:去除脉冲噪声。窗口大小选5~11点,视采样率而定
  • 滑动平均:平滑数据。但要注意,窗口太大会丢失动态信息
  • 异常值剔除:用3σ准则或IQR方法
  • 零点校准:定期测量零输入时的输出值,减去偏移量
# 一个简单的数据预处理示例(Python伪代码)
def preprocess_data(voltage, current, temperature):
    # 1. 中值滤波去除尖峰噪声
    voltage_filtered = medfilt(voltage, kernel_size=5)
    current_filtered = medfilt(current, kernel_size=7)
    
    # 2. 零点校准
    current_calibrated = current_filtered - offset_current
    
    # 3. 异常值剔除(3σ准则)
    mean = np.mean(current_calibrated)
    std = np.std(current_calibrated)
    current_clean = current_calibrated[abs(current_calibrated - mean) < 3*std]
    
    return voltage_filtered, current_clean, temperature

重要提醒:滤波会引入延迟。对于实时BMS来说,滤波窗口不能太大。我一般控制在5~11个采样点以内。如果做离线数据分析,窗口可以适当放大。

好了,关于电池测试和数据采集,今天就聊这么多。记住一句话:数据质量决定算法上限。下一章我们会讲如何用这些数据来标定电池模型,到时候见。