4、电压检测技术:单体电压采样方案

电压检测,说白了就是BMS的「眼睛」。

你想想看,电池包里有几十甚至上百节电芯,哪一节过压了、哪一节欠压了,全靠电压检测来发现。我做过一个项目,客户反馈电池包老是报警,查来查去,最后发现是采样电路出了问题——电压值漂了0.1V,保护阈值就误触发了。

嗯,这一节咱们就把电压检测技术彻底讲透。

4.1 单体电压采样方案对比

单体电压采样,目前主流就两条路:分立电阻分压专用AFE芯片。我两种方案都用过,各有各的脾气。

4.1.1 分立电阻分压方案

说白了,就是用精密电阻搭一个分压网络,把电池电压降到ADC能接受的范围(比如0~3.3V)。

优点很明显:成本低、设计灵活。你手头有什么ADC就用什么,不受芯片厂商限制。

但坑也不少。我在一个12串的BMS项目里用过这个方案,调试时发现一个问题——采样值跳得厉害。后来一查,是电阻的温漂在作怪。电池温度从25℃升到60℃,电阻值变了,分压比也跟着变。

避坑指南: 我曾经因为用了普通贴片电阻做分压,结果低温环境下电压偏差达到30mV。后来全部换成0.1%精度、25ppm温漂的精密电阻,问题才解决。

另外,分立方案还有个硬伤:通道间隔离难做。多节电池串联时,每一节的参考地都不一样,你得用差分采样或者隔离放大器。电路复杂度蹭蹭往上涨。

4.1.2 专用AFE芯片方案

AFE芯片,就是专门为电池采样设计的模拟前端。像TI的BQ76952、ADI的LTC6811,都是经典款。

我个人习惯,只要项目预算允许,优先用AFE芯片。为什么?

  • 内置高精度ADC:一般都有16位甚至24位的Σ-Δ ADC,分辨率够用
  • 通道自动切换:内部集成了多路复用器,你只需要通过SPI/I2C读数据就行
  • 内置保护功能:过压、欠压、过流检测都集成好了,省去外部比较器
  • 隔离通信:很多AFE支持菊花链通信,串联电池组用一根线就能传数据

我记得有一次做48V电动工具BMS,用了BQ76940,从原理图到调通只花了两周。要是用分立方案,光解决共模电压问题就得折腾一个月。

我的建议: 如果电池串数≤4节,且成本敏感,可以考虑分立方案。串数≥6节,老老实实用AFE芯片,省心省力。

4.2 高精度ADC选型与设计

ADC是电压检测的核心。选型时,我一般看这几个参数:

参数 说明 我的经验值
分辨率 位数越高,理论精度越高 至少16位,推荐24位
采样率 每秒能采多少次 BMS一般10~100Hz足够
INL(积分非线性) 实际转换曲线与理想直线的偏差 ≤±2LSB
共模抑制比 抑制共模干扰的能力 ≥80dB
温漂 温度变化对精度的影响 ≤5ppm/℃

我常用的ADC型号:

  • ADS1256:24位、8通道、SPI接口,性价比高,适合多通道采样
  • LTC2400:24位、单通道、内部基准,精度极高,适合做校准基准
  • AD7793:24位、3通道、内置PGA,适合小信号采样

设计时要注意几点:

  • 参考电压要稳:ADC的精度直接取决于参考电压。我习惯用外部精密基准源,比如REF5025,温漂低至3ppm/℃
  • 模拟电源要干净:ADC的AVDD和DVDD要分开供电,中间加磁珠和电容滤波
  • 布局要讲究:模拟信号走线要短,远离数字信号和开关管

关键点: 选ADC时,别只看位数。16位的ADC如果噪声大、温漂高,实际有效分辨率可能还不如12位的。一定要看有效位数(ENOB)这个参数。

4.3 采样误差分析与校准

误差是躲不掉的,但我们可以分析它、校准它。

4.3.1 误差来源

我总结了一下,误差主要来自三个方面:

  1. 电阻误差:分压电阻的精度和温漂
  2. ADC误差:偏移误差、增益误差、非线性误差
  3. 噪声干扰:电源噪声、地弹、电磁干扰

嗯,这里要注意,温度变化是最大的隐形杀手。我在一个户外储能项目里吃过亏——白天35℃时电压采样正常,晚上降到5℃,偏差直接飙到50mV。后来一查,是分压电阻的温漂和ADC的温漂叠加了。

4.3.2 校准方法

校准分两步走:出厂校准在线校准

出厂校准:

  • 用高精度万用表(比如6位半的)测量实际电压
  • 记录ADC的原始读数
  • 计算偏移和增益系数,存入EEPROM
  • 每次上电后,用这些系数修正采样值

代码示例(伪代码):

// 校准系数
float offset = 0.0012;   // 偏移量,单位V
float gain = 1.0035;     // 增益系数

// 原始采样值
float raw_voltage = adc_read(channel);

// 校准后的电压值
float calibrated_voltage = (raw_voltage - offset) * gain;

在线校准:

  • 利用电池组中已知的参考电压(比如3.3V稳压输出)
  • 定期自动校准,补偿温漂和老化
  • 我习惯每100次采样做一次校准,开销不大,效果明显
小技巧: 校准系数不要只存一组。我一般存三组:低温(-20℃)、常温(25℃)、高温(60℃),运行时根据温度插值计算。这样温漂补偿更精准。

4.3.3 滤波处理

采样值难免有噪声,滤波是必须的。

我常用的方法:

  • 均值滤波:连续采10次取平均,简单有效
  • 中值滤波:去掉最大值和最小值再平均,抗脉冲干扰
  • 一阶低通滤波:适合实时性要求高的场景

代码示例:

// 一阶低通滤波
#define ALPHA 0.2   // 滤波系数

float low_pass_filter(float new_value, float last_value) {
    return last_value + ALPHA * (new_value - last_value);
}

你想想看,滤波系数怎么选?系数太大,滤不掉噪声;系数太小,响应太慢。我一般根据采样率和噪声频率来调,经验值是0.1~0.3之间。

注意: 滤波会引入延迟。如果BMS需要快速响应过压保护,滤波系数不能太小。我一般把滤波后的值用于显示和SOC计算,原始值用于保护判断。

4.4 小结

电压检测技术,说难不难,说简单也不简单。核心就三点:

  • 方案选型:串数多就用AFE芯片,串数少可以考虑分立方案
  • ADC设计:关注有效位数、参考电压、布局布线
  • 误差校准:出厂校准+在线校准+滤波处理,三管齐下

我做了这么多年BMS,最大的体会就是:采样精度不是靠硬件堆出来的,而是靠设计和校准一起保证的。再好的芯片,不校准也是白搭。

下一节,咱们聊聊电流检测技术。嗯,那个坑更多,到时候我慢慢讲。