
做储能和备电项目的这几年电芯不一致这个话题基本绕不开——尤其是两串电池包这种最基础的构型看似简单实际均衡逻辑做起来却有不少讲究。前段时间配合某储能项目我用一颗 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µFX7R 介质耐压 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×VCCMP2642 供电 5V 时 VIH 至少 3.5V3.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 不同电芯化学体系的阈值选择如果系统是锂离子电池均衡启动阈值 30mV50mV 都正常如果换成磷酸铁锂因为平台电压非常平坦且内阻变化复杂建议启动阈值放到 50mV80mV避免静置状态下微小回弹反复触发均衡。温度影响也很明显低温下电芯极化电压大最好在温度低时自动提高均衡启动阈值。8. 写在后面的一些经验这套 MP2642GR-Z PIC18F86J15 的均衡方案在整个项目里只是电池管理的一部分但它直接决定了备电系统的可用容量和长期一致性表现。经过几轮整机测试最让我有感触的是均衡这件事硬件选型只决定上限软件策略才决定能不能把这个上限真正用出来。同样的板子采样滤波做得好的那版均衡收敛时间比粗糙版本快了将近 30%。最后给同行一个建议两串电池模组看起来简单但恰恰因为它简单很多细节会被忽视。做均衡调试时别只盯电压表用示波器和电流探头配合记录波形你会看到很多软件层面你看不到的问题。这类主动均衡方案后续扩展到 3 串甚至更高串数时只要把 PWM 通道数和状态机扩展一下整套思路可以平滑移植这也是当初选择 MCU 做控制核心的长期收益。