第3章:电压采样技术

电压采样,是BMS最基础也最关键的环节。你想想看,SOC估算准不准、SOH判断靠不靠谱,根子上都取决于电压采得准不准。我在项目里见过太多因为电压采样出问题,导致整个系统误判的案例。今天咱们就把这块彻底聊透。

3.1 电压采样原理

电池包里的电压采样,说白了就是要把几十甚至上百串电芯的电压,准确、安全地读出来。这里有两个核心难点:一是高压隔离,二是共模干扰。我习惯把采样方案分成两大类来讲。

3.1.1 差分采样

差分采样是最常用的方案。它的原理很简单——用差分放大器直接测量电芯正负极之间的电位差。

核心公式:

V_cell = V_plus - V_minus

其中:
V_cell = 电芯电压
V_plus = 正极对地电压
V_minus = 负极对地电压

我在早期的一个项目中,就吃过差分采样的亏。当时用的是普通运放搭的差分电路,结果发现采样值总是飘。后来才意识到,问题出在共模电压上——串联电芯越多,共模电压越高,普通运放的共模抑制比(CMRR)根本扛不住。

差分采样的关键参数:

  • 共模抑制比(CMRR):至少80dB以上,我建议选100dB+的专用芯片
  • 输入阻抗:越高越好,避免影响电芯平衡
  • 失调电压:直接影响精度,要选低温漂的

注意:差分采样虽然简单,但有个致命弱点——它不隔离。如果电芯对地出现短路,整个采样电路都可能被高压击穿。所以,差分采样通常只用在低压系统(60V以下)或者配合隔离ADC使用。

3.1.2 隔离采样

隔离采样,才是高压BMS的标配。它的核心思想是:把高压侧和低压侧完全隔开,中间通过磁或光来传递信号。

常见的隔离方案有三种:

方案类型 隔离方式 优点 缺点
隔离ADC Σ-Δ调制 + 数字隔离 精度高、集成度高 成本较高
光耦隔离 光电转换 成本低、技术成熟 寿命有限、速度慢
磁耦隔离 变压器耦合 速度快、寿命长 EMI问题需注意

我个人比较推荐隔离ADC方案。为什么?因为它的采样精度和可靠性都最好。虽然贵一点,但BMS这种安全关键系统,不值得在隔离上省钱。

我的经验:选隔离采样芯片时,别只看隔离电压等级。还要关注隔离寿命和共模瞬态抑制(CMTI)。我曾经在一个项目中用了某款光耦隔离方案,结果运行两年后,光耦老化导致采样偏差越来越大。后来换成磁耦隔离,再没出过问题。

3.2 采样误差来源与校准

电压采样误差,是BMS算法工程师的噩梦。我见过太多人花大量精力调算法,结果问题出在采样上。咱们先看看误差从哪来。

3.2.1 误差来源

硬件误差:

  • 分压电阻精度:1%的电阻就能带来10mV的误差
  • 参考电压漂移:温度变化导致基准电压偏移
  • PCB漏电流:潮湿环境下,PCB表面漏电流会引入额外误差
  • 接触电阻:连接器氧化或松动,导致采样值偏低

软件误差:

  • ADC量化误差:12位ADC的理论分辨率只有1.22mV(以3V参考为例)
  • 采样时序误差:多路复用切换时,电容充放电需要时间
  • 数字滤波引入的延迟:滤波越强,响应越慢

避坑指南:我曾经在一个项目中,发现某串电芯的电压总是比其他串低5mV。查了三天,最后发现是采样线束的端子氧化了。从那以后,我要求所有采样线束必须用镀金端子,并且每半年做一次接触电阻测试。

3.2.2 校准策略

校准,说白了就是给采样系统做一次「体检」和「矫正」。我习惯分两步走:

第一步:出厂校准

在产线上,用高精度万用表(6位半以上)测量每串电芯的实际电压,然后和ADC读数做对比,生成校准系数。

// 校准系数计算示例
// V_real: 万用表实测电压
// V_adc: ADC原始读数
// gain: 增益校准系数
// offset: 偏移校准系数

gain = (V_real_max - V_real_min) / (V_adc_max - V_adc_min);
offset = V_real_min - gain * V_adc_min;

// 校准后的电压
V_calibrated = gain * V_adc + offset;

第二步:在线校准

系统运行时,定期用内部基准源或外部参考电压进行自校准。我建议每10分钟做一次。

小技巧:在线校准不要用平均值,用中位数滤波。因为偶尔的尖峰干扰会严重拉偏平均值,但中位数不受影响。这是我踩过坑之后才学到的。

3.3 硬件滤波与软件滤波策略

滤波,是电压采样的最后一道防线。硬件滤波负责把高频噪声挡在门外,软件滤波负责把残留的毛刺清理干净。

3.3.1 硬件滤波

硬件滤波的核心是RC低通滤波器。我一般这样设计:

// 截止频率计算
// f_c = 1 / (2 * π * R * C)

// 示例:R=10kΩ, C=0.1μF
// f_c = 1 / (2 * 3.14 * 10000 * 0.0000001) ≈ 159Hz

设计要点:

  • 截止频率:我一般选100-200Hz,既能滤除工频干扰,又不影响电压变化
  • 电阻值:不要太大,否则会引入热噪声。10kΩ左右比较合适
  • 电容类型:用C0G或NP0材质的陶瓷电容,温度稳定性好

注意:RC滤波会引入延迟。如果截止频率是100Hz,那么阶跃响应时间大约在3-5ms。对于快速变化的电压(比如脉冲充放电),这个延迟可能会影响控制精度。我建议在需要快速响应的场景下,适当提高截止频率到500Hz。

3.3.2 软件滤波

软件滤波,是硬件滤波的补充。我常用的几种方法:

1. 移动平均滤波

// 移动平均滤波
#define FILTER_WINDOW 8
uint16_t buffer[FILTER_WINDOW];
uint8_t index = 0;
uint32_t sum = 0;

uint16_t moving_average(uint16_t new_sample) {
    sum -= buffer[index];
    buffer[index] = new_sample;
    sum += new_sample;
    index = (index + 1) % FILTER_WINDOW;
    return sum / FILTER_WINDOW;
}

2. 中位数滤波

// 中位数滤波(取5个样本的中位数)
uint16_t median_filter(uint16_t *samples, uint8_t len) {
    // 排序
    for (uint8_t i = 0; i < len - 1; i++) {
        for (uint8_t j = i + 1; j < len; j++) {
            if (samples[i] > samples[j]) {
                uint16_t temp = samples[i];
                samples[i] = samples[j];
                samples[j] = temp;
            }
        }
    }
    // 返回中位数
    return samples[len / 2];
}

3. 一阶低通滤波

// 一阶低通滤波
// alpha = 0.1 ~ 0.3,值越小滤波越强
uint16_t low_pass_filter(uint16_t new_sample, uint16_t last_filtered, float alpha) {
    return (uint16_t)(alpha * new_sample + (1 - alpha) * last_filtered);
}

我的组合策略:硬件RC滤波 + 软件中位数滤波 + 一阶低通滤波。硬件先干掉高频噪声,中位数滤掉偶发毛刺,一阶低通做平滑。这套组合拳,我在三个量产项目里都用过,效果很稳定。

3.4 知识体系总览

下面这张图,是我自己总结的电压采样知识体系。你可以把它当作一个检查清单,看看自己还有哪些地方没覆盖到。

电压采样技术知识体系 采样原理 • 差分采样 共模抑制比CMRR 输入阻抗匹配 • 隔离采样 隔离ADC / 光耦 / 磁耦 隔离等级与CMTI 误差与校准 • 误差来源 硬件:电阻/基准/漏电流 软件:量化/时序/滤波 • 校准策略 出厂校准:增益+偏移 在线校准:定期自检 滤波策略 • 硬件滤波 RC低通:100-200Hz 电容选型:C0G/NP0 • 软件滤波 移动平均 / 中位数 一阶低通滤波 核心目标:高精度 + 高可靠性 + 低成本 差分/隔离 → 校准补偿 → 滤波去噪 → 稳定输出 实际项目中的选择建议 低压系统(<60V):差分采样 + 软件校准 高压系统(≥60V):隔离ADC + 硬件+软件滤波

嗯,以上就是电压采样技术的核心内容。从原理到误差分析,再到滤波策略,每一步都有讲究。记住一句话:采样不准,后面全是白搭。希望今天的分享能帮你少走一些弯路。


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