第四节 电压检测电路设计:高精度ADC选型、分压电阻网络设计、差分采样与共模抑制
电压检测,是BMS的“眼睛”。
你想想看,如果连电池电压都测不准,那什么SOC估算、均衡策略、保护逻辑,全都是空中楼阁。我在POS机项目里吃过这个亏——第一批样机回来,电量显示忽高忽低,客户直接退货。后来一查,问题就出在电压检测电路上。
今天咱们就把这块彻底讲透。
4.1 高精度ADC选型:别只看位数
很多人选ADC,第一反应就是“我要16位、18位”。
嗯,位数确实重要,但绝不是唯一指标。我见过有人用24位ADC,测出来的电压还不如人家12位的准。为什么?因为有效位数(ENOB)才是关键。
核心指标优先级(我个人习惯):
- 有效位数ENOB:比标称位数重要得多。比如ADS1256标称24位,实际ENOB大概20-21位(10SPS时)。
- 积分非线性INL:决定了全量程的线性度。POS机电池电压范围3.0V-4.2V,INL最好小于±0.5LSB。
- 温漂系数:这个容易被忽略。我曾经用了一款ADC,常温下精度很好,一进高低温箱就飘了20mV。后来换成带内部基准的型号才解决。
- 采样率: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。共模噪声会被差分放大器抑制掉。
我常用的方案有两种:
- 专用差分ADC:比如ADS1115本身就支持差分输入。直接把电池正极接AIN0,负极接AIN1,配置成差分模式就行。
- 差分运放+单端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 实际电路设计流程
好了,理论讲完了。咱们走一遍实际设计流程:
- 确定需求:POS机电池1节,电压3.0-4.2V,精度要求±10mV。
- 选ADC:ADS1115,16位,差分输入,I2C接口。ENOB 14位,LSB = 4.096V / 32768 ≈ 0.125mV。够用。
- 设计分压:不用分压!ADS1115的差分输入范围是±4.096V,直接接电池正负极。
- 加滤波:在ADC输入端并联0.1μF电容,串联100Ω电阻(限流保护)。
- 布局布线:差分走线等长,远离电感、变压器等噪声源。
- 校准:用高精度万用表测出实际电压,写入校准系数。
最终电路图(简化版):
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机?到时候见。