当前位置:首页 > 电源 > 电源
[导读]BMS 的均衡策略(被动电阻放电或主动电荷转移)完全依赖单体电压的准确测量——采样误差超过 5 mV,就可能把健康电芯当成过压来均衡,或者漏掉真正的过放风险。然而,分压电阻的温漂、ADC 参考电压的漂移、运放的输入失调,三者叠加能让室温下 2 mV 的误差在 60℃ 时膨胀到 10 mV 以上。下面从硬件选型到软件校准,讲清楚怎么把采样精度压到 ±2 mV 以内。

BMS 的均衡策略(被动电阻放电或主动电荷转移)完全依赖单体电压的准确测量——采样误差超过 5 mV,就可能把健康电芯当成过压来均衡,或者漏掉真正的过放风险。然而,分压电阻的温漂、ADC 参考电压的漂移、运放的输入失调,三者叠加能让室温下 2 mV 的误差在 60℃ 时膨胀到 10 mV 以上。下面从硬件选型到软件校准,讲清楚怎么把采样精度压到 ±2 mV 以内。

一、误差从哪里来

BMS 常用的采样方案是分压电阻 + 多通道 ADC(如 TI BQ76952、NXP MC33771 或国产中颖 SH367309)。三个主要漂移源:

• 分压电阻 TCR:普通 0603 厚膜电阻 TCR≈±200 ppm/℃,10 kΩ 电阻从 25℃ 到 65℃ 漂 ±80 mΩ,对 4.2 V 满电采样引入约 ±0.3 mV 误差。看似不大,但 16 串累积后均衡阈值就偏了。

• ADC 内部参考电压:片内带隙基准的温漂典型值 ±30–50 ppm/℃,对应 4.2 V 满量程约 ±0.2 mV/℃。60℃ 温差下能漂 ±7 mV。

• 运放输入失调电压 Vos:前端差分运放(如 OPA2333)的 Vos 温漂约 ±0.05 µV/℃,但加上老化后可能到 ±0.5 µV/℃,影响可忽略。

主要矛盾是电阻 TCR + ADC 基准温漂,两者在 40℃ 温差下合计能贡献 8–12 mV 误差,远超 BMS 要求的 ±5 mV。

二、校准:从单点到温度补偿

1. 工厂两点校准(消除初始偏差)

每片 BMS 板出厂时,用精密电源(6½ 位万用表标定)给每串电芯施加 3.0 V 和 4.2 V 两个标准电压,记录 ADC 读数,算出每串的 Gain 和 Offset 系数,存入 EEPROM。

// 两点校准系数存储结构(每串独立)

typedef struct {

   float gain;   // 实际电压 / ADC读数

   int16_t offset; // mV

} calib_t;

calib_t calib_table[16];

2. 温度补偿查表(消除温漂)

在 -20℃ 到 65℃ 范围内,选取 5–7 个温度点,用恒温箱标定每串的电压偏差,生成温度补偿表。运行时读取板载 NTC 温度,查表插值得到当前温度的修正值。

// 温度补偿表(示例:某串在 3.8V 附近的温漂曲线)

const int16_t temp_comp[] = {

   [-20] = +8,   // mV,低温时 ADC 偏正

   [  0] = +3,

   [ 25] =  0,   // 基准点

   [ 45] = -4,

   [ 65] = -9

};

int16_t get_temp_offset(int8_t temp) {

   if (temp < -20) return temp_comp[-20];

   if (temp > 65)  return temp_comp[65];

   // 线性插值

   int idx_low = ((temp + 20) / 10) * 10 - 20;

   int idx_high = idx_low + 10;

   float ratio = (float)(temp - idx_low) / 10.0;

   return temp_comp[idx_low] + ratio * (temp_comp[idx_high] - temp_comp[idx_low]);

}

3. 在线自校准(高端方案)

部分 AFE 芯片(如 BQ79616)内置注入校准:通过内部精密电阻产生已知电压,定期自动修正 ADC 增益和偏移。配合外部 NTC 温度传感器,可实时补偿温漂,无需工厂标定。

三、代码示例:带温度补偿的电压采样

#include "bsp_adc.h"

#include "bsp_ntc.h"

extern calib_t calib_table[16];

uint16_t read_cell_voltage(uint8_t cell_idx) {

   // 1. 读取原始 ADC 码(假设 12-bit,参考 4.096V)

   uint16_t raw = adc_read_channel(cell_idx);

   // 2. 工厂两点校正

   float voltage = raw * calib_table[cell_idx].gain + calib_table[cell_idx].offset;

   // 3. 读取板温

   int8_t temp = read_board_temperature();

   // 4. 温度补偿

   int16_t comp = get_temp_offset(temp);

   voltage += comp * 0.001;  // mV 转 V

   // 5. 限幅并返回(单位 mV)

   if (voltage < 2000) voltage = 2000;

   if (voltage > 4500) voltage = 4500;

   return (uint16_t)(voltage * 1000);

}

四、三个高频翻车点

• NTC 贴的位置不对:NTC 必须贴在 AFE 芯片附近(同一铜皮),而不是板边或大功率电阻旁,否则测到的温度和 ADC 实际结温差 5–10℃,补偿失效。

• 分压电阻选错材质:厚膜电阻 TCR 大,必须用薄膜电阻(TCR≤±50 ppm/℃)或金属箔电阻(TCR≤±5 ppm/℃),成本增加不多但精度提升显著。

• 校准只在 25℃ 做一次:温漂是非线性的,只做 25℃ 单点校准,60℃ 时误差仍然超标。必须做多点温度标定,至少覆盖 -20℃、25℃、65℃ 三个点。

BMS 均衡精度的真谛:用薄膜电阻降 TCR、用两点校准消初始偏差、用温度补偿表压温漂。这套组合拳打下来,16 串采样误差能从 ±10 mV 压到 ±2 mV 以内,均衡动作不再“误伤”电芯,电池 pack 的循环寿命也能多撑 200 次。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭