电池测试与数据采集基础:充放电测试规程与高精度数据采集
做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的典型流程是这样的:
- 先做一次标准容量标定(CCCV充满,然后0.2C放空)
- 然后执行DST循环,每个循环约360秒
- 循环中包含:静置、小电流放电、大电流放电、小电流充电等步骤
- 重复执行直到达到放电截止条件
注意: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 误差类型
误差和噪声不一样。噪声是随机的,误差是有规律的。常见的误差包括:
- 偏移误差:零点漂移。比如电流为0时,传感器输出不为0
- 增益误差:比例偏差。比如实际100A,传感器显示102A
- 非线性误差:输入输出关系不是直线
- 温度漂移:温度变化导致测量值变化
避坑指南:我曾经在项目里吃过亏。当时用霍尔电流传感器做测试,没做温度补偿。夏天和冬天的数据对不上,内阻估算偏差很大。后来加了温度补偿算法,问题才解决。所以,如果你用霍尔传感器,一定要做温度标定。
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个采样点以内。如果做离线数据分析,窗口可以适当放大。
好了,关于电池测试和数据采集,今天就聊这么多。记住一句话:数据质量决定算法上限。下一章我们会讲如何用这些数据来标定电池模型,到时候见。