两串电池均衡方案:MP2642GR-Z与PIC18F56K42实战 1. 为什么串联电池组的均衡不是“可选项”而是“必答题”两节电芯串在一起用最直观的好处是电压翻倍、容量不变但真正做过电池包的人都知道麻烦也从这一刻开始。出厂时两颗电芯的容量、内阻、自放电率就不可能完全一致用久了差异只会越拉越大。串联回路里电流是同一个谁容量小谁先被充满、也最先被放空木桶效应在这里体现得淋漓尽致。我见过太多小功率储能和备用电源的方案前期为了省成本直接两串硬扛结果半年不到就出现一节鼓包、另一节还“半饱”的情况。根本原因就是没有均衡充电时容量小的那颗先到截止电压保护板为了安全直接切断整串充电容量大的那颗永远吃不饱放电时容量小的先到欠压点整串停止放电大容量那颗里明明还有电却放不出来。可用容量被最弱的那颗电芯死死锁住整包寿命也跟着打折。均衡要解决的就是这个“不一致”。它分两条技术路线被动均衡和主动均衡。被动均衡说白了就是给电压偏高的那颗电芯并一个电阻把多出来的能量以热的形式烧掉电路简单、成本低缺点是费电、发热、均衡电流小通常几十毫安。主动均衡则是把高电压电芯的能量“搬”到低电压电芯去效率高、不发热但拓扑复杂、成本高出一大截。这次要聊的方案核心是用MP2642GR-Z这颗电源管理芯片配合PIC18F56K42单片机在两串电池系统里做均衡控制。MP2642GR-Z 是一颗面向两串电池的电源管理器件集成了充电管理、电量计量和电芯均衡相关的功能PIC18F56K42 则负责采集状态、跑均衡策略、和上位机通信。两颗芯片分工明确一颗管“电”一颗管“脑”。这套组合特别适合中小功率的储能和备用电源场景比如家庭储能的小型电池模组、通信基站的备用电池、便携式储能电源、UPS 里的两串锂电包。它的价值在于用一颗集成度较高的模拟前端把均衡和计量做掉再用一颗通用 MCU 做灵活的策略控制既不用自己搭一堆分立器件又能把均衡逻辑攥在自己手里。下面我会从器件选型、硬件连接、均衡策略、固件实现到实测踩坑完整走一遍。2. MP2642GR-Z 与 PIC18F56K42 的分工逻辑2.1 MP2642GR-Z 到底管了哪些事很多人第一次看这类电源管理芯片的规格书会懵它到底是充电 IC、计量 IC 还是均衡 IC答案是“都沾一点”。MP2642GR-Z 面向两串电池组把充电控制、电压电流采集、电芯均衡驱动这些功能集成在一起。对做方案的人来说最大的好处是省掉了自己搭均衡 MOS 驱动和精密采样网络的那堆麻烦。它内部一般包含几路高精度 ADC用来分别测量每颗电芯的电压和整包电流还有专门的均衡开关引脚可以直接驱动外部均衡电阻或均衡通路。充电部分支持恒流恒压CC/CV流程能根据电芯状态调整充电参数。换句话说它把“电池前端”这件事做成了一个相对完整的模块MCU 只需要通过通信接口读数据、下指令。这里有个关键点要理解均衡动作的执行机构在 MP2642GR-Z 这边但均衡的决策权在 MCU 这边。芯片负责“我能帮你把某颗电芯的电放掉”或“我能帮你把电搬过去”但“什么时候该均衡、均衡多久、用多大电流”是 PIC18F56K42 根据采集到的数据算出来的。这种分工让策略可以随时改不用动硬件。2.2 PIC18F56K42 为什么适合当这个“大脑”PIC18F56K42 是 Microchip 的 8 位增强型单片机主频够用、外设丰富、功耗低最关键的是它自带CLC可配置逻辑单元、ADCC带计算功能的 ADC和多种串行通信接口。在这个方案里它要干几件事通过 I2C 或 SMBus 周期性读取 MP2642GR-Z 的电芯电压、电流、温度数据跑均衡判断算法决定开哪一路均衡、开多久控制充电流程的状态机处理过压、欠压、过流、过温保护通过 UART 或另一路 I2C 和上位机/主控通信上报电池状态。选它而不是选更便宜的 8 位机主要看中它的 ADCC 和 CLC。ADCC 可以在硬件层面做平均和阈值比较减少 CPU 负担CLC 可以把一些保护逻辑做成纯硬件通路响应速度比软件轮询快得多。对于备用电源这种“平时不动、出事要立刻反应”的场景硬件级的快速保护很值钱。2.3 两颗芯片之间的通信与握手MP2642GR-Z 和 PIC18F56K42 之间通常走 I2C。MCU 作为主机电源管理芯片作为从机地址固定或可配置。通信内容大致分三类读状态电压、电流、温度、故障标志、写配置充电参数、均衡使能、保护阈值、读事件过压、过温中断标志。这里有个实操细节上电时序要处理好。MP2642GR-Z 需要先完成自身初始化才能响应 I2C如果 MCU 一上电就猛发命令很可能收到 NACK。稳妥的做法是 MCU 上电后先延时 10~50ms再轮询芯片的“就绪”标志位确认能正常通信后再进入主循环。这个延时不是拍脑袋而是给芯片内部基准和 ADC 建立时间留余量具体值查规格书的上电时序章节。3. 两串电池均衡的硬件连接与关键参数3.1 电芯采样与均衡通路的接法两串电池的典型接法是电芯1负极接系统地电芯1正极接电芯2负极这个节点叫中间节点或 MID电芯2正极是整包正极PACK。MP2642GR-Z 需要分别采到每颗电芯的正负极电压所以它的采样引脚要接到 B-、MID、B 三个点。均衡通路的接法取决于用被动还是主动。被动均衡最常见每颗电芯并一个均衡电阻加一个开关 MOS开关由芯片的均衡驱动脚控制。当某颗电芯电压偏高对应的 MOS 导通电流流过电阻把能量烧掉。电阻取值要算功率假设均衡电流设计为 50mA电芯电压 3.7V那电阻约 74Ω功率约 0.185W选 0.25W 或 0.5W 的封装留余量。主动均衡的话芯片会控制一个电感或电容储能网络在电芯之间搬能量。这种方案效率高但外围器件多PCB 布局要求也高尤其是储能电感的选型和走线稍不注意就会引入干扰。对大多数中小功率备用电源来说被动均衡够用成本也友好。3.2 均衡电流怎么定一个容易被拍脑袋决定的参数均衡电流定多大很多人凭感觉。定太小均衡慢一颗电芯差 100mV 可能要均衡好几个小时定太大发热严重电阻和 MOS 都吃不消还可能影响电芯寿命。合理的做法是从“允许的均衡时间”倒推。举个例子两串 5Ah 电芯容量差异 3%也就是 150mAh。如果希望 2 小时内把差异补平需要的均衡电流约 150mAh / 2h 75mA。再考虑均衡只在充电末期或静置时进行实际有效时间可能只有一半那电流还得翻倍到 150mA 左右。这个电流下均衡电阻功率约 0.55W得选 1W 封装并注意散热。提示均衡电流不是越大越好。超过电芯允许的持续放电倍率或者让局部温升超过 10℃都会加速老化。一般小容量电池包把均衡电流控制在 0.5C 以下比较稳妥。3.3 采样精度对均衡效果的决定性影响均衡判断的依据是电压电压采不准均衡就是瞎均衡。MP2642GR-Z 的 ADC 精度通常在毫伏级但实际到板子上走线阻抗、共模干扰、基准漂移都会吃掉精度。我实测过同样一颗芯片采样线走得好和走得烂读数能差 20mV 以上而均衡阈值往往就设在 20~30mV这个误差直接导致该均衡的不均衡、不该均衡的乱均衡。几个保精度的做法采样线从电芯端子单独引出不要和功率走线共用中间节点的采样点尽量靠近电芯实际连接处避开大电流路径的压降ADC 基准脚加去耦电容靠近芯片放置软件上做多次采样取中值剔除明显跳变。这些细节看着琐碎但决定了均衡是“有效”还是“摆设”。4. 均衡策略从“什么时候均衡”到“均衡到什么程度”4.1 均衡触发的三个典型时机均衡不是随时都能做的。充电中均衡、放电中均衡、静置时均衡各有各的讲究。充电中均衡是最常见的。充电时电流方向固定电芯电压整体上升容量小的先到高电压。这时候对高电压电芯开启被动均衡相当于给它“分流”让它慢点涨给低电压电芯争取时间。这个阶段均衡效率高因为充电电流本身在给整包补能量均衡只是微调。放电中均衡要谨慎。放电时电芯电压整体下降如果对高电压电芯放电均衡会加速它掉电可能让它提前到欠压点反而缩短整包放电时间。所以放电中一般不做被动均衡主动均衡倒是可以考虑但策略要更复杂。静置时均衡适合消除自放电差异带来的电压偏差。电池静置一段时间后电压会回落到接近开路电压OCV这时候的电压差更能反映真实的 SOC 差异。很多方案会在静置阶段做一次“慢均衡”电流小、时间长对电芯最友好。4.2 阈值、回差与均衡窗口的设计均衡策略的核心是三个参数启动阈值、停止阈值回差、单次均衡最长时间。启动阈值决定“差多少才动手”。设太小电芯正常波动就触发均衡频繁启停反而增加损耗设太大差异积累到明显影响容量才均衡为时已晚。两串锂电常见做法是启动阈值 30mV、停止阈值 10mV也就是电压差超过 30mV 开始均衡降到 10mV 以内停止。这个回差是为了防止在阈值附近反复横跳。单次均衡最长时间是保护机制。万一采样出错或者某颗电芯异常均衡一直开着会把电芯放亏。设一个上限比如连续均衡 30 分钟就强制停 5 分钟重新评估状态。这个“喘口气”的设计在实际运行中救过不少板子。参数典型值作用设错后果启动阈值30mV触发均衡太小频繁启停太大均衡滞后停止阈值10mV结束均衡与启动阈值太近会震荡单次最长时间30min防止过放太长可能放亏电芯均衡电流50~150mA均衡速度太大发热太小太慢4.3 温度与安全的联锁逻辑均衡会产生热量电芯本身对温度也敏感。策略里必须把温度联锁加进去温度低于 0℃ 或高于 45℃ 时禁止均衡因为低温析锂风险高、高温加速老化。温度采样可以用 MP2642GR-Z 自带的温度通道接 NTC也可以 MCU 单独采。联锁逻辑要放在最底层优先级高于均衡判断。也就是说不管电压差多大只要温度超限均衡立即停。这个判断最好用 CLC 或硬件比较器做一层软件再兜一层双保险。备用电源很多时候在无人值守的环境里跑这种硬保护不能省。5. PIC18F56K42 固件里的均衡状态机实现5.1 主循环与定时任务的划分固件结构上我习惯把任务分成“快任务”和“慢任务”。快任务跑保护逻辑比如过压、过流、过温判断周期 1~10ms用定时器中断触发慢任务跑均衡策略和通信周期 100ms~1s放主循环里。均衡本身是个慢过程没必要每毫秒算一次。100ms 读一次电压累积几次做平均再判断是否需要调整均衡状态这个节奏足够。太快了反而被采样噪声带偏。PIC18F56K42 的 ADCC 可以在后台自动采样主循环直接取结果省 CPU。// 伪代码均衡任务的主循环骨架 void main_loop(void) { if (flag_100ms) { flag_100ms 0; read_cell_voltages(v1, v2); read_temperature(temp); update_protection(v1, v2, temp); update_balance_state(v1, v2, temp); } if (flag_1s) { flag_1s 0; report_status_uart(); } }5.2 均衡状态机的四个状态均衡逻辑用状态机写最清晰我一般分四个状态IDLE空闲、EVALUATE评估、BALANCING均衡中、COOLDOWN冷却。IDLE 状态下什么都不做等评估周期到。EVALUATE 读电压、算差值、查温度决定进 BALANCING 还是回 IDLE。BALANCING 里开启对应电芯的均衡同时计时到最长时间或电压差降到停止阈值就转 COOLDOWN。COOLDOWN 强制休息一段时间防止连续均衡过热休息完回 EVALUATE。这个状态机的好处是每个状态职责单一调试时看状态变量就知道当前在干嘛。我见过有人把均衡逻辑写成一大堆 if-else 嵌套出了问题根本没法查。状态机是这类控制逻辑的标配。5.3 和 MP2642GR-Z 的寄存器交互细节通过 I2C 操作 MP2642GR-Z核心是几个寄存器电压结果寄存器、电流结果寄存器、均衡控制寄存器、故障标志寄存器。读电压时要注意数据格式有的是 16 位有符号有的是分段表示单位可能是 mV 或 LSB。换算错了均衡阈值就全乱。写均衡控制时通常是一个位对应一颗电芯。置位开启清零关闭。写之前最好先读一次当前值改完再写回避免误改其他位。这个“读-改-写”的习惯在操作任何带位域的寄存器时都适用能避免很多莫名其妙的 bug。注意I2C 通信要有超时和重试。电池环境里干扰不小偶尔丢一帧很正常。连续 3 次读失败就报通信故障进入安全状态关闭均衡、停止充电别让系统带着错误数据继续跑。6. 实测中踩过的坑与排查链路6.1 均衡“看起来在工作”但电压差没缩小这是最典型的坑。现象是均衡标志位明明置了均衡电阻也在发热但两颗电芯的电压差就是不见小。排查下来原因往往有两个一是采样点选错了读到的电压差不是电芯真实差异而是走线压降造成的假差异二是均衡电流太小而电芯自放电差异或充电电流太大均衡那点电流根本不够看。排查链路先断开均衡静置电池用高精度万用表直接量电芯端子电压和芯片读数对比。如果差得多就是采样问题回去改走线。如果读数一致但均衡无效算一下均衡电流和实际差异看是不是量级不匹配。这个“先验证测量、再验证执行”的顺序很重要别一上来就怀疑算法。6.2 中间节点采样引入的共模干扰两串电池的中间节点电压是浮动的采样时如果处理不好共模干扰会让读数跳得厉害。我遇到过中间节点电压读数每隔几秒跳几十毫伏的情况均衡状态跟着乱跳。后来在采样输入端加了 RC 滤波电容选 100nF、电阻选 1kΩ截止频率约 1.6kHz把高频干扰压下去读数就稳了。RC 参数不是随便选的。电阻太大会影响 ADC 采样建立时间电容太大响应变慢。1kΩ 100nF 是这类电池采样常用的组合兼顾滤波和响应。如果干扰特别严重还可以考虑差分采样但那就需要芯片支持或者外加运放成本上去了。6.3 均衡开启瞬间的电压跌落误触发保护被动均衡一开启均衡电阻上的电流会让电芯电压瞬间跌一点如果保护阈值设得离工作电压太近就会误触发欠压保护系统直接停机。这个坑很隐蔽因为不均衡时一切正常一均衡就“保护”。解决办法有两个一是保护判断加延时电压低于阈值持续比如 500ms 才动作躲开均衡瞬间的跌落二是均衡开启后短暂屏蔽欠压判断等电压稳定再恢复。我一般两个都用延时兜底屏蔽提速。参数上均衡瞬间跌落通常在几十毫伏延时 200~500ms 足够。6.4 温度联锁误动作导致均衡频繁中断NTC 采样如果没做好滤波温度读数会有噪声偶尔跳到阈值以上均衡就被中断。表现出来就是均衡断断续续效率极低。给 NTC 加个简单的滑动平均滤波或者用 MCU 的 ADCC 做硬件平均就能解决。温度变化本来就慢滤波不会影响响应速度。还有个细节NTC 的安装位置要能真实反映电芯温度别贴在发热的功率器件旁边否则测的是板子温度不是电芯温度。均衡电阻附近尤其要注意那里局部温度高NTC 离太近会误判。7. 几个让方案更稳的工程习惯做这类电池管理方案硬件和固件是绑在一起的单看哪一边都不够。我总结几个实际用下来很值钱的习惯。第一所有阈值都做成可配置存在 MCU 的 EEPROM 里别写死在代码里。不同批次的电芯、不同的应用场景最优阈值不一样能改参数就不用重新烧固件。PIC18F56K42 有数据 EEPROM存这些参数正合适。第二关键状态要有日志。均衡什么时候开、什么时候关、触发原因是什么记在一个环形缓冲区里。出了问题把日志读出来一看就知道。备用电源这种长期运行的设备事后排查全靠日志。第三上电自检不能省。上电时读一遍电芯电压、温度、通信状态任何一项异常就进安全模式不启动充电也不均衡。我见过上电直接冲的方案结果电芯接反了都不知道一上电就冒烟。第四均衡和充电的优先级要理清。充电是主任务均衡是辅助。如果充电器能力有限均衡电流要算进总电流里别让充电电流加均衡电流超过适配器能力否则电压被拉垮充电都充不满。这套 MP2642GR-Z 加 PIC18F56K42 的组合我前后调过几版从最初均衡无效到后来稳定运行踩的坑基本都在采样精度、状态机设计和保护联锁这三块。把这三块做扎实两串电池的均衡就能跑得很稳。后面如果要做更多串思路是一样的只是采样通道和均衡通路要相应扩展MCU 的资源也要重新评估。