第四节 电压检测电路设计:高精度ADC选型、分压电阻网络设计、差分采样与共模抑制

电压检测,是BMS的“眼睛”。

你想想看,如果连电池电压都测不准,那什么SOC估算、均衡策略、保护逻辑,全都是空中楼阁。我在POS机项目里吃过这个亏——第一批样机回来,电量显示忽高忽低,客户直接退货。后来一查,问题就出在电压检测电路上。

今天咱们就把这块彻底讲透。

4.1 高精度ADC选型:别只看位数

很多人选ADC,第一反应就是“我要16位、18位”。

嗯,位数确实重要,但绝不是唯一指标。我见过有人用24位ADC,测出来的电压还不如人家12位的准。为什么?因为有效位数(ENOB)才是关键。

核心指标优先级(我个人习惯):

  1. 有效位数ENOB:比标称位数重要得多。比如ADS1256标称24位,实际ENOB大概20-21位(10SPS时)。
  2. 积分非线性INL:决定了全量程的线性度。POS机电池电压范围3.0V-4.2V,INL最好小于±0.5LSB。
  3. 温漂系数:这个容易被忽略。我曾经用了一款ADC,常温下精度很好,一进高低温箱就飘了20mV。后来换成带内部基准的型号才解决。
  4. 采样率:BMS不需要太快,10-100SPS足够。但要注意,采样率越低,ENOB越高。

给大家一个参考选型表,都是我在项目中实际用过的:

型号 标称位数 ENOB(10SPS) INL(LSB) 温漂 适用场景
ADS1115 16位 14位 ±1 ±10ppm/°C 低成本POS机
ADS1256 24位 20位 ±0.5 ±2ppm/°C 高精度BMS
MAX11612 12位 11.5位 ±0.5 ±5ppm/°C 多通道扫描

我的小技巧:选型时直接看数据手册里的“Effective Resolution”曲线,别被“No Missing Codes”这种宣传词忽悠了。那只是说不会丢码,不代表精度高。

4.2 分压电阻网络设计:精度与功耗的博弈

单节锂电池电压3.0V-4.2V,但ADC的输入范围通常是0-3.3V或0-5V。所以分压是必须的。

但分压电阻选不好,问题就来了。

第一个坑:电阻精度

我曾经用1%精度的电阻做分压,结果每块板子测出来的电压都不一样。后来换成0.1%的,一致性立马好了。你想想看,如果分压比是2:1,1%的电阻误差就能带来2%的电压误差——对于4.2V的电池,那就是84mV的偏差。

第二个坑:温度系数

普通贴片电阻温漂是±100ppm/°C,高精度的是±25ppm/°C。在-20°C到60°C的范围内,差别有多大?算一下:

  • 普通电阻:100ppm × 80°C = 8000ppm = 0.8%
  • 高精度电阻:25ppm × 80°C = 2000ppm = 0.2%

嗯,差了4倍。所以BMS电路里,分压电阻我建议至少用±50ppm/°C的。

第三个坑:功耗

分压电阻一直在耗电。如果总阻值太小,电池自放电会加快。POS机待机时,电池漏电流要求小于10μA。分压电阻的电流最好控制在1μA以内。

设计公式:

// 假设ADC输入范围0-3.3V,电池最高4.2V
// 分压比 = 3.3 / 4.2 ≈ 0.786
// 取R1 = 1MΩ,R2 = 3.7MΩ(实际用3.6MΩ+100kΩ串联)
// 总电流 = 4.2V / (1M + 3.7M) ≈ 0.89μA ✓

// 实际电路:
// BAT+ --- R1(1MΩ, 0.1%, 25ppm) --- ADC_IN --- R2(3.6MΩ+100kΩ, 0.1%, 25ppm) --- GND
// 在ADC_IN处并联一个0.1μF电容到GND,用于滤波

注意:分压电阻的耐压值要够。1MΩ电阻两端电压可能达到2V以上,0805封装的额定电压是150V,没问题。但如果是0402封装,额定电压只有50V,虽然也够,但余量太小,我不建议。

4.3 差分采样与共模抑制

单端采样简单,但精度有限。为什么?

因为电池负极和GND之间可能有压差。POS机里,充电器、电机、屏幕都在工作,地线上难免有噪声。单端采样会把地线上的噪声一起采进去。

差分采样的优势

说白了,就是直接测电池正负极之间的电压,不依赖GND。共模噪声会被差分放大器抑制掉。

我常用的方案有两种:

  1. 专用差分ADC:比如ADS1115本身就支持差分输入。直接把电池正极接AIN0,负极接AIN1,配置成差分模式就行。
  2. 差分运放+单端ADC:先用INA826这类差分运放把信号转成单端,再送给普通ADC。

共模抑制比(CMRR)

这是衡量差分电路好坏的关键指标。单位是dB,越大越好。

  • 普通运放:60-80dB
  • 专用差分运放:100-120dB
  • 仪表放大器:120-140dB

我曾经在一个项目里用LM358做差分放大,结果CMRR只有70dB。充电器一工作,电压读数就跳。后来换成INA826,CMRR 120dB,问题立刻解决。

差分采样电路示例:

// 使用INA826仪表放大器
// 增益设置:G = 1 + (49.4kΩ / Rg)
// 取Rg = 49.4kΩ,则G = 2
// 输入范围:0-4.2V差分,输出0-8.4V(需要后续分压或使用5V供电)

// 实际电路:
// BAT+ --- R1(10kΩ) --- INA826+IN
// BAT- --- R2(10kΩ) --- INA826-IN
// INA826 REF引脚接2.5V基准(用于电平偏移)
// INA826输出 --- ADC_IN
// 
// 注意:R1和R2要严格匹配,否则CMRR会下降

避坑指南:我曾经犯过一个低级错误——差分输入的两个走线长度不一样。结果高频噪声耦合进来,共模抑制效果大打折扣。后来我强制要求:差分走线必须等长、等宽、紧耦合。这个习惯一直保留到现在。

4.4 实际电路设计流程

好了,理论讲完了。咱们走一遍实际设计流程:

  1. 确定需求:POS机电池1节,电压3.0-4.2V,精度要求±10mV。
  2. 选ADC:ADS1115,16位,差分输入,I2C接口。ENOB 14位,LSB = 4.096V / 32768 ≈ 0.125mV。够用。
  3. 设计分压:不用分压!ADS1115的差分输入范围是±4.096V,直接接电池正负极。
  4. 加滤波:在ADC输入端并联0.1μF电容,串联100Ω电阻(限流保护)。
  5. 布局布线:差分走线等长,远离电感、变压器等噪声源。
  6. 校准:用高精度万用表测出实际电压,写入校准系数。

最终电路图(简化版):

BAT+ --- 100Ω --- AIN0
BAT- --- 100Ω --- AIN1
AIN0 --- 0.1μF --- GND
AIN1 --- 0.1μF --- GND
// ADS1115配置:差分模式,PGA=±4.096V,连续转换模式

嗯,这样设计出来的电路,实测精度在±5mV以内。我在三个项目里验证过,效果很稳定。

最后提醒一句:别迷信高位数。把电路布局、电阻精度、滤波做好,12位ADC也能出好结果。反之,24位ADC配烂电路,照样白搭。

下一节咱们讲电流检测——霍尔传感器和采样电阻,哪个更适合POS机?到时候见。