做储能和备电项目的这几年,电芯不一致这个话题基本绕不开——尤其是两串电池包这种最基础的构型,看似简单,实际均衡逻辑做起来却有不少讲究。前段时间配合某储能项目,我用一颗 MP2642GR-Z 电荷泵均衡芯片和一颗 PIC18F86J15 做了个两串电池单元均衡方案,用在通信备电和小型储能设备里,效果比较稳,今天把整体思路、关键原理和调试中踩过的一些坑整理出来。
这方案的核心价值,是把传统被动均衡那种“把高压电芯能量白白烧掉”的模式,换成主动搬运——让高压电芯的能量经过电荷泵电容中转,直接搬给低压电芯。听起来高大上,但落到MP2642GR-Z这颗芯片上以后,本质上就是“一颗芯片负责能量搬运动作、PIC18F86J15负责什么时候搬、搬多久、搬完怎么停”。两串电池的均衡问题一旦解决,容量利用率、备电时长和循环寿命都能实打实地看到改善。
适合谁看?正在做 2S BMS 的硬件/嵌入式工程师,或者被 18650、磷酸铁锂两串模组一致性差困扰的同行。文中涉及的电荷泵均衡原理、PIC18F86J15 的配套电路、状态机逻辑和调试经验都可以直接拿去用。
1. 两串电芯到底在“不均衡”什么——核心需求拆解
1.1 储能和备电系统中两串电池的痛点
储能或者备用电源系统里,两串电池意味着总电压一般是 7.4V(锂离子满电)或 6.4V~7.3V(磷酸铁锂)。虽然结构简单,但实际使用中一定会遇到“串联电芯不一致”:
- 生产工艺决定每只电芯的容量在出厂时就有差异,哪怕标称 2000mAh,实际可能 1950mAh~2050mAh 各不相同。
- 同一包电池,在不同温度和倍率下,充电和放电深度不可能完全一致,长期循环后容量衰退速度也不同。
- 两串模组内低压侧接负载负端、高压侧接正端,处在不同位置的电芯散热条件也有差异,高温侧衰减更快。
结果就是一颗电芯已经满了,另一颗只有 80%~90%。充电时 BMS 为了保护过压只能强制停充,容量利用率直接打折;放电时低压电芯先触底,但整包还有能量,设备却已经欠压关断。备电系统的负载往往是通信设备或者安防系统,对续航时间要求很苛刻,这种打折是客户完全不能接受的。
均衡的作用就是把这颗“高电芯”多余的能量转移给“低电芯”,让两者在充电末端和放电末端尽量同步,相当于给电芯做了一次“能力拉平”。在2S这么小的模组里,均衡也能明显提升可用容量,尤其是在频繁浅充浅放的备电场景里,效果非常直观。
1.2 为什么这件事需要 MCU 来管,而不是一颗模拟芯片全包
市面上有专门做模拟均衡的芯片,比如把均衡阈值直接做在硅片上,电压到了就自动开启内部耗能回路。这种方案确实简单,但是有两个问题:
- 阈值固定,没法适应不同电芯化学体系和温度系数。磷酸铁锂的平坦平台区和三元锂电不一样,固定阈值容易误均衡或漏均衡。
- 没有算法空间,无法实现“搬运多少能量”“何时停止”“均衡优先级”这些策略控制。
所以这个项目里均衡动作交给 MP2642GR-Z 这个执行器件,但大脑放 PIC18F86J15 这颗 MCU 上。MCU 去采样单体电压、判断压差、控制均衡开关时间和占空比,必要时还能把数据上报给上位机。这套分工最大的好处是灵活,电芯配方一换,不用改硬件,改改算法就行。
2. 均衡方案选型:为什么锁定了电荷泵而不是电阻耗能
2.1 被动均衡与主动均衡的本质区别
传统被动均衡的路径是:检测到某颗电芯电压高 → 控制功率电阻和 MOS 管把多余能量以热的形式放掉 → 电压降到和低压芯接近后再断开。好处是实现成本低、电路简单、MCU逻辑也简单。
但它有两个明显的缺点:
- 能量白白发热消耗掉,尤其在备电系统长期浮充状态下,均衡电阻在不断发热,对电池包工作环境温度极不友好。
- 均衡电流通常只有 50mA~100mA 级别,遇到两串压差稍微拉大的电池包,充电后期根本没时间把它平衡干净。
主动均衡则是在电芯之间搬运能量——高压芯放电给电容,再由电容充电给低压芯,理论上能量利用率可以做到 80% 以上,电流也可以做到几百毫安甚至更高。在储能、备电这种对能源利用率敏感的场景,主动均衡是合理的选择。
2.2 MP2642GR-Z 电荷泵方案的优势与限制
MP2642GR-Z 是一颗基于飞渡电容的电荷泵均衡芯片,本质上是把一种电平的能量,借助外接电容暂存,再倒到另一个电平上。它对外只需要 PWM 信号控制开关序列,外部搭配一颗飞渡电容和几只 MOS 管(或芯片内部集成)就能完成双向能量转移。
我在这套方案里看中它的几点:
- 支持 2 串及以上串联电池均衡,正好匹配 2S 模组;
- 均衡电流可以通过飞渡电容容值和 PWM 频率来调控,设计自由度大;
- 能量转移路径损耗小,适合备电系统大批量长时工作的环境;
- 芯片外围器件很少,均流路径上的压降低,对散热依赖小。
限制也很明确——它需要 MCU 提供正确的 PWM 开关时序,如果时序不对,可能出现分流不均、电容充不满、甚至电荷泵倍压效应导致应力异常。所以 MP2642GR-Z 和 PIC18F86J15 在这个方案里是一对搭配,缺一不可。
2.3 为什么不选电感式或变压器式均衡
电感式均衡适合大电流搬移,但在2S这种低压小容量场合,单飞渡电容已经足够;变压器式均衡体积大、成本高,在两串这种模组里完全没有必要。飞渡电容方案在中等电流、低成本、紧凑布局之间平衡得最好,实际装进便携储能箱里占用面积很小,这也是最终锁定它的原因。
3. 系统总体架构:PIC18F86J15 在均衡系统中到底担什么角色
3.1 PIC18F86J15 的选型逻辑
很多同行问我:均衡系统又不复杂,为什么上了 80 脚的大号单片机?原因是除了均衡控制,这板子还需要承担电池电压采样、温度采样、与上位机通信、充电放电状态判断、异常保护逻辑以及系统状态灯等等功能。PIC18F86J15 的优势在于:
- 引脚数量充足(80脚封装),可以同时挂 ADC 采样网络、PWM 输出、串口/通信接口、数字IO状态指示,不用去扩 IO 芯片;
- 自带足够的定时器/CCP模块,输出均衡 PWM 完全没问题,多个定时器可以独立去管理均衡周期和上位机通讯间隔;
- 工业级工作温度范围,宽电压供电,在电池电压波动环境下稳定性好;
- 新项目如果从这颗芯片起步,后续不加额外处理也能直接控制更多串的均衡通道。
这算是一种“富余设计”的思路——当前功能的资源占用率在合理的范围内,后续版本扩展均衡策略或加通信协议时不必重新画板、换主控。
3.2 均衡系统的整体硬件框图与角色分工
这套系统拆开看,大概分四块:
- 电压与温度采集单元:分压电阻网络把每颗电芯电压降到 ADC 引脚可接受的范围,再经过输出缓冲送进 PIC18F86J15 的模拟输入口。温度用 NTC 贴在电芯表面,进入另一路 ADC。
- 均衡执行单元:MP2642GR-Z 根据 PWM 输入工作,它的两个端口分别跨接在高、低压电池上,中间配飞渡电容。PIC18F86J15 输出的 PWM 信号通过电平变换后接到芯片控制脚。
- 主控与通信单元:PIC18F86J15 根据电压数据判断是否需要均衡,并把均衡状态、电芯电压、温度等信息通过 UART/IIC 上传给上位机或主控 BMS。
- 保护与状态输出单元:电池包总压过高、电芯过温、均衡异常时输出告警信号或控制 MOSFET 切断充放电路径。
PIC18F86J15 在这里充当决策者,它决定“要不要均衡”“对哪一节均衡”“均衡多长时间”“是否超时保护”。MP2642GR-Z 是执行者,只负责把 MCU 的 PWM 指令变成实际能量搬运。这样职责分离的好处是调试时容易定位问题——是主控逻辑错了,还是执行芯片周边电路参数不对。
3.3 系统工作流程简述
常规流程是这样的:
- 系统上电后,PIC18F86J15 先做 ADC 自校准和延迟稳定,确保电压采样值可信。
- 每 100ms~200ms 采一次两节电芯电压,分别滤波后比较压差。
- 如果压差大于启动阈值(比如 30mV~50mV),且没有过压欠压保护标志,就开启对应方向的均衡。
- 均衡过程中每 100ms 重新评估一次,如果压差回落或者出现异常超时,停止均衡。
- 均衡状态和每节电芯 SOC 估算值存入数据区,供上位机查询。
整个流程用 8 位单片机实现毫无压力,逻辑清晰,时序可控。
4. 核心硬件设计与关键外围参数
4.1 MP2642GR-Z 的外围电路设计与飞渡电容选择
围绕 MP2642GR-Z,最重要的参数是飞渡电容(CFLY)的容值和耐压等级。
飞渡电容的容值直接影响一个开关周期内可以搬运的电量。粗略估算搬移电荷量公式:
Q = C × V_cap = C × (V_hi_cell - V_lo_cell)
如果每隔一个周期把电容从高压电芯侧充满、再切换到低压电芯侧放空,那么平均均衡电流约等于:
I_avg = C × (V_hi - V_lo) × f
举例:压差取 100mV,飞渡电容取 4.7µF,开关频率取 200kHz,理论均衡电流:
I_avg ≈ 4.7e-6 × 0.1 × 200e3 = 94mA
如果压差变大到 300mV,同样的电容和频率下均衡电流可以到 282mA 左右,说明主动均衡电流会随压差自动变大,这正是需要的特性。要进一步提高均衡能力,可以增加容值或提高频率,但频率太高开关损耗和芯片发热会跟着上去。我在这套项目里飞渡电容用的 2.2µF,X7R 介质,耐压 16V,开关频率 250kHz 左右跑下来均衡电流在 100mA~250mA 之间浮动,实测温升在合理范围。
注意:飞渡电容千万不能用高 ESR 的普通陶瓷电容,推荐 X7R 或者更低 ESR 的品种,否则大电流路径上的等效内阻会吃掉效率和均衡电流。
4.2 PWM 开关时序设计与电平匹配
MP2642GR-Z 的开关时序虽然只需要一个 PWM 信号,但实际内部会在高低电芯之间切换电容的连接方向。MCU 输出 PWM 需要做到:
- 频率固定,占空比一般在 50% 附近,过高或过低会导致电容充电/放电不充分。
- 信号电平必须和芯片的逻辑电平要求匹配。PIC18F86J15 工作在 3.3V/5V 供电,输出高电平能否让 MP2642GR-Z 正确识别,需要查芯片数据手册的 VIH 值,必要时加一级三极管或缓冲电路,避免用高压误伤芯片输入。
- 关均衡时必须彻底停止 PWM 并拉低使能脚,防止残余信号导致电荷泵在半使能状态下乱切。
实测中我踩过一个坑:一开始直接让 MCU 输出了 3.3V 的 PWM,但芯片要求的输入高电平最低是 0.7×VCC,MP2642 供电 5V 时 VIH 至少 3.5V,3.3V 勉强够但又不够稳,后面加了一颗电平转换缓冲后彻底解决。这里值得提醒:不要想当然认为 MCU 高电平一定能驱动,先查手册再定电路。
4.3 PIC18F86J15 的电压采样网络设计
两串电芯的电压采样,最简单的做法是用电阻分压后直接进 ADC。但要注意分压电阻上的电流不能太大,否则会拉低电芯电压造成采样误差。一般我习惯让分压支路电流控制在 100µA 以下,例如两颗电阻总阻值选 30kΩ~100kΩ。
ADC 参考电压建议用内部基准。PIC18F86J15 的 ADC 是 10 位分辨率,参考 3.3V 时每个 LSB 约 3.2mV;电池电压被分压到 ADC 量程范围内,软件里按比例反推单体电压,通常能做到 ±10mV 以内的精度。
采样网络前面最好加一级 RC 低通滤波,截止频率远低于 PWM 开关频率,防止电荷泵开关噪声串入 ADC 引脚。实测中这个滤波电容取 0.1µF,和几十 kΩ 电阻组合,效果良好。
4.4 PCB 布局与散热注意点
- 飞渡电容到 MP2642GR-Z 引脚的走线必须短而且粗,这是高频开关电流路径,寄生电感太大会产生振铃,影响开关波形和器件寿命。
- 电感、电容、芯片的地线要单点汇聚到功率地,避免和数字地形成环路。
- MCU 的地和模拟采样网络的地,在布局上尽量和功率路径分开,做独立模拟地后再单点连接,不然均衡工作时的电流尖峰会影响电压采样精度。
5. 软件逻辑与状态机实现细节
5.1 均衡状态机的设计
均衡状态机我习惯分成四态:空闲、启动、均衡中、异常退出。
- 空闲:定时查电压、温度,压差低于阈值时保持此状态。
- 启动:检测到压差大于阈值,置位均衡方向,定时器启动 PWM,进入均衡中。
- 均衡中:每 100ms 检查电压差和超时时间,如果压差降到停止阈值以下(比如 15mV~20mV 带回差),停止 PWM,回到空闲。
- 异常退出:如果均衡时间超过上限(比如 4 小时),或任何一节电芯温度超上限,强制关闭均衡并通过状态上报。
为什么要带“回差”?因为电芯电压在均衡过程中会有动态回弹,如果停止阈值和启动阈值设成同一个值,系统会在临界点反复开关,造成振荡式均衡。工程上启动阈值至少比停止阈值高 15~20mV,保证均衡过程是从“有明显压差”开始,到“基本均衡”停止,整个过程干净利落。
5.2 ADC 采样滤波与均衡期间的采样避让
均衡过程中飞渡电容在不停搬运能量,电芯电压会出现以开关频率为基频的纹波。这个时候 ADC 采样会捡到不少噪声。我的处理方式:
- 采样时刻避开 PWM 电平翻转沿,可以在 PWM 周期内固定延迟窗口去触发采样,或者干脆在均衡暂停的微空隙里采集。
- 软件内部对采样值做滑动平均滤波,一个值取 8 次样本去掉最大最小值再平均,增加稳定度。
- 均衡方向切换的瞬间不做电压判断,等两个周期之后再读电压。
这些细节决定了系统在主动均衡时不会把噪声当真值误判。一开始我没做这些处理,看到电压在 10mV~20mV 范围跳动,后来加了滤波和采样窗口后波形非常平滑。
5.3 与充放电保护的联动逻辑
均衡不能脱离充放电管理单独运行。常见问题有两个:
- 充电末期正在均衡时,如果高压芯触发了过压保护,均衡会被即刻打断,主控应立即记录异常状态,避免反复进出保护。
- 放电状态下,高压芯电压可能迅速下降,均衡方向需要动态调整,否则会出现“越均衡,压差越拉大”的反效果。
我的做法是:主循环里先更新电芯电压状态,然后判断当前是充电、放电还是浮空状态,只有充电和浮空时才允许长时均衡,放电状态只在保护性均衡模式下短时工作。这样既保证安全,又避免误动作。
6. 实操过程与核心环节实现参考
6.1 主循环框架参考
下面是 PIC18F86J15 下基于 C 语言的均衡主循环框架,去掉平台相关头文件,保留核心逻辑,读者可按自己习惯移植:
#define BALANCE_START_THRESHOLD_MV 50 #define BALANCE_STOP_THRESHOLD_MV 20 #define BALANCE_TIMEOUT_SEC 4u * 3600u // 4小时超时 typedef enum { BALANCE_OFF, BALANCE_START, BALANCE_RUNNING, BALANCE_FAULT } balance_state_t; balance_state_t bal_state = BALANCE_OFF; uint32_t balance_sec_counter = 0; void balance_task_100ms(uint16_t mv_cell1, uint16_t mv_cell2) { int16_t diff_mv = (int16_t)mv_cell1 - (int16_t)mv_cell2; switch (bal_state) { case BALANCE_OFF: if (diff_mv > BALANCE_START_THRESHOLD_MV) { // 电芯1偏高,把电芯1能量搬给电芯2 pwm_set_direction(BALANCE_HI_TO_LO); pwm_enable(); bal_state = BALANCE_START; balance_sec_counter = 0; } else if (diff_mv < -BALANCE_START_THRESHOLD_MV) { // 电芯2偏高,反向均衡 pwm_set_direction(BALANCE_LO_TO_HI); pwm_enable(); bal_state = BALANCE_START; balance_sec_counter = 0; } break; case BALANCE_START: case BALANCE_RUNNING: if (cell_temp_over_limit() || balance_sec_counter > BALANCE_TIMEOUT_SEC) { pwm_disable(); set_alert_flag(); bal_state = BALANCE_FAULT; break; } if ((diff_mv <= BALANCE_STOP_THRESHOLD_MV) && (diff_mv >= -BALANCE_STOP_THRESHOLD_MV)) { pwm_disable(); bal_state = BALANCE_OFF; break; } balance_sec_counter++; break; case BALANCE_FAULT: // 需人工复位或状态确认后恢复 break; } }这段逻辑是实际工程里可用的精简版,核心思想是“启动了就要有超时保护”,避免因为电压采样噪声导致均衡一直停不下来。
6.2 PWM 模块的初始化要点
PIC18F86J15 的 CCP 模块配置成标准 PWM 模式,注意设置输出引脚为数字IO功能,而不是默认的模拟输入。初始化和修改占空比时我的经验是:
- 周期寄存器 PR2 决定 PWM 频率。
- 占空比寄存器 CCPRXL 配合 CCPCON 寄存器使用。
- 修改占空比时最好在 PWM 周期结束点同步更新,否则波形会乱一个周期。
对 MP2642GR-Z 这类芯片,占空比设定在 50% 附近通常比较稳妥。代码里我会把方向切换和 PWM 使能分成两步,方向切换时先把 PWM 占空比清零,稳定后再输出目标占空比,尽可能减少瞬态冲击。
6.3 实测数据与调优过程
搭完板子以后,我用两节 18650 锂电芯(一颗 3100mAh 满电电压 4.20V,另一颗 2950mAh 满电电压 4.10V 左右模拟不均衡)做了实测:
- 初始压差约 100mV,开启均衡后,均衡电流稳定在 180mA~230mA 范围内,高压芯电压缓慢下降,低压芯电压上升。
- 运行约 25 分钟后,压差收敛到 15mV 以内,达到停止阈值,均衡自动关闭。
- 撤掉均衡关闭后静置 10 分钟,压差回弹到 22mV。这说明电芯内部极化电压影响了表面电压判断,如果在极化未消除时过早停止,系统仿佛“没均衡干净”。解决办法是保持停止阈值 20mV 不变,但增加一次停止判定延时——压差连续三次都低于阈值时才真正关断,压差一旦反弹就继续均衡。
这个回弹现象在磷酸铁锂电芯上会更明显。所以两串均衡的软件里,强烈建议加一个“停止确认窗口”,比单次阈值判定可靠得多。
7. 常见问题与排查技巧实录
7.1 均衡电流上不去
可能的原因:
- 飞渡电容容值太大或 ESR 太高,导致充放电时间常数远大于开关周期,电容根本来不及完全充放,等效均衡能力反而下降。遇到过有人把 10µF 大容量电容换上去后,理论电流应该更大,实际却小了很多,原因就是电容充放电时间常数过长。
- PWM 频率设置不合理,频率太高时寄生参数限制了电流爬升率。
- 芯片供电电压不足或使能脚电平不够,使内部开关没有完全导通。
排查方式:用示波器量飞渡电容两端波形。正常时可以看到电容两端在电池电压之间交替变化的方波,幅度差等于电芯压差;如果波形变化缓慢,多半是电容或频率问题。
7.2 均衡过程中电芯电压读数抖动严重
原因通常是 ADC 采样窗口和 PWM 开关时刻重叠。解决建议:
- 用 MCU 定时器触发 ADC 采样,采样时刻放在 PWM 周期后段的稳定窗口;
- 模数转换前加滤波电容,且电容位置尽量靠近 MCU ADC 引脚;
- 软件再做均值滤波。
我在实际测试中,加了窗口采样后,电压跳动从 ±15mV 压到了 ±2mV 以内,判断压差阈值就非常可靠了。
7.3 PWM 输出异常导致芯片过热
有一次调试发现 MP2642GR-Z 表面温度很高,波形检查发现 PWM 占空比在切换瞬间乱掉,出现长时间的高电平,电荷泵等效成直通路径。原因是软件里方向切换和占空比更新没有同步保护。修改方向切换时序,先关闭输出再改方向再重新启动,问题消失。
提示:MP2642GR-Z 内部虽然有多重保护,但 MCU 侧正确管理 PWM 仍然是最基本的保障。芯片手册里的“最大连续工作时间”参数,也要在软件超时逻辑中体现。
7.4 不同电芯化学体系的阈值选择
如果系统是锂离子电池,均衡启动阈值 30mV~50mV 都正常;如果换成磷酸铁锂,因为平台电压非常平坦且内阻变化复杂,建议启动阈值放到 50mV~80mV,避免静置状态下微小回弹反复触发均衡。温度影响也很明显,低温下电芯极化电压大,最好在温度低时自动提高均衡启动阈值。
8. 写在后面的一些经验
这套 MP2642GR-Z + PIC18F86J15 的均衡方案,在整个项目里只是电池管理的一部分,但它直接决定了备电系统的可用容量和长期一致性表现。经过几轮整机测试,最让我有感触的是:均衡这件事,硬件选型只决定上限,软件策略才决定能不能把这个上限真正用出来。同样的板子,采样滤波做得好的那版,均衡收敛时间比粗糙版本快了将近 30%。
最后给同行一个建议:两串电池模组看起来简单,但恰恰因为它简单,很多细节会被忽视。做均衡调试时,别只盯电压表,用示波器和电流探头配合记录波形,你会看到很多软件层面你看不到的问题。这类主动均衡方案,后续扩展到 3 串甚至更高串数时,只要把 PWM 通道数和状态机扩展一下,整套思路可以平滑移植,这也是当初选择 MCU 做控制核心的长期收益。