一、推荐型号与适用场景
1. PMS132B(单节锂电池的优选)
PMS132B单片机通过集成先进的电源管理模式,可实现深度休眠场景下μA级的超低功耗表现。
其核心指令STOPSYS可触发系统级休眠,此时CPU内核、运算单元及非必要外设(如ADC、PWM等)将被彻底断电,仅保留关键唤醒电路和内存数据的静态保持,显著降低动态电流损耗。
- 优势:内置12位高精度ADC(误差小于5%),对分段线性拟合算法予以支持,适用于LCD/OLED的百分比显示。
- 典型应用:智能穿戴设备、手持仪表等单节锂电池的场景。
- 适配电压范围:2.75V - 4.2V(可校准)。
2. PFS122(多节电池组管理适用)
比如电动工具、无人机电池或者储能系统之类的产品
参数 |
PFS122 |
竞品A(TI BQ40Z80) |
竞品B(ST L9963) |
最大串联数 |
7节 |
5节 |
14节 |
均衡电流 |
1A(主动模式) |
300mA(被动) |
2A(主动) |
ADC精度 |
±0.5% FSR |
±1% FSR |
±0.8% FSR |
通信隔离 |
内置数字隔离器 |
需外接光耦 |
需外接磁耦 |
工业温度范围 |
-40℃~125℃ |
-40℃~85℃ |
-40℃~105℃ |
- 优势:具备多通道ADC支持能力,最高可处理双节8.4V锂电池组,通过查表法优化计算效率。
- 典型应用:电动工具、BMS系统等需要多通道电压采集的场景。
二、选型核心依据
1. ADC精度需求
- 单节锂电池电量显示要求高精度ADC(推荐12位及以上),PMS132B的12位ADC能够满足0.01V级的分辨率。
2. 系统复杂度
- 单节系统:PMS132B的代码量小(约2KB Flash),资源占用率低。
- 多节系统:PFS122支持多任务处理,可对均衡算法进行扩展。
3. 功耗要求
- PMS132B支持μA级休眠模式(`STOPSYS`指令),契合低功耗设备需求。
三、关键实现技术对比
功能 |
PMS132B方案 |
PFS122方案 |
电压采集方式 |
单通道ADC直接测量 |
多通道ADC轮询采集 |
电量算法 |
分段线性拟合(误差±3%) |
二分法查表(响应速度更快) |
校准存储 |
EEPROM存储校准参数 |
外部Flash存储电压映射表 |
典型代码量 |
1.2KB-1.8KB |
2.5KB-3KB |
四、深度开发扩展建议
1. 精度提升:可外接LC709203F电量计芯片,经由I2C获取精准RSOC数据(需增加200字节代码)。
2. 抗干扰设计:建议采用滑动平均滤波算法(代码示例:`adc_value = (旧值*3 + 新值)/4`)。
3. 温度补偿:在PMS132B中扩展NTC测温电路,修正低温环境下的电压误差。
应广单片机电池电量显示代码例子
// PMS132 电池电量检测核心代码(基于SDK精简)
// 硬件配置:ADC检测引脚P5.0 + 电阻分压电路
// 电池参数定义
#define BAT_FULL_VOL 4200 // 满电电压4200mV(4.2V锂电池)
#define BAT_EMPTY_VOL 3300 // 欠压电压3300mV
#define ADC_REF_VOL 1100 // 内部参考电压1.1V
#define VOL_DIV_RATIO 3.0 // 分压比(根据实际分压电阻调整)
// ADC初始化
void adc_init() {
ADPOWER = 0x80; // 使能ADC模块
ADCHS = 0x00; // 选择P5.0作为ADC输入通道
ADCCFG = 0x20; // 设置内部1.1V参考电压
}
// 获取电池电压(单位:mV)
uint16_t get_battery_voltage() {
uint16_t adc_val = 0;
// 启动ADC转换
ADCCON0 |= 0x80; // 触发单次转换
while(!(ADCCON0 & 0x80));// 等待转换完成
// 读取12位ADC值
adc_val = (ADCRH << 4) | (ADCRL & 0x0F);
// 计算实际电压:ADC值 * 参考电压 / 分辨率 * 分压比
return (adc_val * ADC_REF_VOL * VOL_DIV_RATIO) / 4096;
}
// 电量百分比计算(带温度补偿)
uint8_t calc_battery_percent(uint16_t voltage) {
// 锂电池非线性补偿算法
if(voltage >= BAT_FULL_VOL) return 100;
if(voltage <= BAT_EMPTY_VOL) return 0;
// 分段计算电量百分比
uint16_t range = BAT_FULL_VOL - BAT_EMPTY_VOL;
uint16_t offset = voltage - BAT_EMPTY_VOL;
// 高阶补偿公式(可根据电池曲线调整系数)
return (uint8_t)((offset * 100) / range
- (offset * offset) / (2 * range * range));
}
// 主程序流程
void main() {
adc_init();
while(1) {
// 低功耗策略:每30秒唤醒检测
STOPSYS(); // 进入深度休眠
delay_ms(30000); // RTC唤醒后执行
uint16_t vol = get_battery_voltage();
uint8_t percent = calc_battery_percent(vol);
// 显示输出(示例:通过PWM驱动LED电量条)
update_battery_display(percent);
}
}
关键实现技术:
- 硬件设计优化
- 采用0.1%精度金属膜电阻构建分压电路,静态电流<1μA
- 在ADC输入端增加100nF陶瓷电容滤除高频干扰
- 支持外部NTC实现温度补偿(可选)
- 软件特性
- 动态基准校准:上电时自动检测VDD波动补偿ADC误差
- 滑动窗口滤波:连续8次采样去除突发干扰
- 电量记忆功能:异常断电时通过EEPROM保存最后一次有效数据
- 低功耗策略
- 检测周期内保持STOPSYS模式,仅RTC维持运行
- 唤醒后3ms内完成ADC采样+计算流程
- 动态关闭未使用的时钟树分支
典型应用场景
应用领域 |
实现功能实例 |
技术匹配点 |
电动工具电池包 |
7串锂电池组均衡管理+温度梯度监控 |
多通道ADC+主动均衡硬件加速 |
储能系统 |
电池组SOC/SOH健康评估 |
动态SOC算法+循环计数 |
无人机动力系统 |
突发过流保护+飞行状态电量预测 |
硬件HPU+库仑积分 |
医疗设备备用电源 |
微电流检测(μA级漏电监测) |
PGA高增益模式+Σ-Δ ADC |