基于MP2642GR-Z与PIC24FV16KA304的两串锂电池被动均衡设计
一块 2S 电池组从满电状态搁置了几个月再想启用时第一节电压还有 3.6V第二节已经掉到 2.1V。这种场景做过备用电源或者储能设备的人多少都遇到过。前端充电管理芯片看着整组电压偏低要么直接拒绝工作要么按整组电压判断当前充电阶段结果就是补电时一直顶着某一个单节过压另一节却始终吃不饱。要解决这个问题就得让系统能够单独看到每一节电池并且主动把两节电池的电压差拉回来。我这次做的是一个基于 MP2642GR-Z 加 PIC24FV16KA304 的小型两串电池均衡模块用在前端设备供电和后备电源场景里。MP2642GR-Z 负责把输入电源按两串锂电池的充电曲线送到电池组PIC24FV16KA304 负责逐节采样、均衡开关控制和异常判断。整套方案难度不算高但在均衡开关选型、采样时序、门限设置和板级布线上有不少细节值得完整记录。1. 两块电池为什么必然失配失配之后备用系统会怎样1.1 失配的三个来源很多人第一次接触电池均衡时下意识会觉得既然两节电池是从同一个厂家、同一批货里拿出来的容量、内阻、自放电率都应该差不多均衡是不是有点多余实际跑过几个循环之后就知道这个假设站不住脚。第一是容量差异。就算出厂时标称容量一致真实容量也会因为制造工艺留有余量而存在 1% 到 3% 的偏差。对 2000mAh 的单体来说3% 就是 60mAh。串联回路里电流相同60mAh 的容量差会在充放电过程中表现为明显的电压差小容量的那节电压升得快、放得也快。第二是自放电差异。锂离子电池的自放电受电解液、隔膜工艺和存储温度影响很大。同一个电池组里靠近热源的那一节自放电率可能比另一节高一倍。备用电源通常处在长期浮充或浅充浅放状态自放电差异会持续拉开两节的荷电状态。第三是内阻差异。使用一段时间后电池内部微短路和极片老化的程度不可能完全一致内阻差别会越来越大。充电时内阻大的那节端电压偏高放电时它又最先被拉到保护电压系统只要按整组电压切保护就会频繁出现“某节明明还有电但整组被迫停机”的情况。1.2 只看整组电压会有什么后果充电管理芯片一般只关心整组电池电压和整组电流。以两串锂离子电池为例充电目标电压是 8.4V芯片把整个电池组当作一个黑盒一直往上顶电压直到整组达到 8.4V 或者充电电流降低到终止门限。这个逻辑本身没问题问题在于整组 8.4V 完全可能是一节 4.32V、另一节 4.08V 的加和。顶到 4.32V 的单节已经处于过充区电解液加速分解正极结构开始受损电池鼓包甚至失效只是时间问题。而 4.08V 的那节还没充满可它处于串联回路里充电结束之后只能眼睁睁看着自己被整组电压拖着走。下一轮放电时过充的那节容量下降更快失配继续扩大。备用电源系统对这种问题的容忍度更低。数码产品里的 2S 电池用两三个月就循环几十次均衡问题暴露得早。备用电源大部分时间挂在母线上电流很小充电器长期浮充失配在缓慢积累中很难被用户察觉。等停电真正到来需要电池顶上去的时候整组容量可能已经缩水了三分之一。因此均衡不是可有可无的功能而是保证储能和备用系统可靠性的一个必要环节。2. 方案分工与硬件结构MP2642GR-Z管充放电路径PIC24FV16KA304管单体判断2.1 整体架构整个模块可以按功能拆成四个部分前端充电管理、微控制器采样判断、均衡执行支路、系统供电输出。前端由 MP2642GR-Z 组成它把适配器、USB 输入或原有供电母线的电能转换成适合两串锂电池组的充电电压和充电电流同时提供充电状态、输入有效这类信号。设计时把充电状态引脚接到 PIC24FV16KA304 的 I/O 口上微控制器就能知道当前是正在恒流充电、恒压补满、已经停充还是没有输入。PIC24FV16KA304 的核心工作有三件采样总电压和中点电压、计算两个单体的电压差、根据均衡策略控制两路平衡开关。它本身是一款低功耗 16 位微控制器主要看重的是多路 ADC 和多个定时器以及休眠时非常小的电流。对于这种不需要跑复杂协议的均衡控制场景性能足够成本也可控。均衡执行部分每一节电池独立一路。采用被动均衡方式给电压偏高的那一节并联一个功率电阻把这节电池多余的能量以热量形式消耗掉让它在充电过程中落后于另一节最终两节电压趋于一致。被动均衡的效率是不高但胜在电路简单可靠非常适合成本敏感、本身就对能量利用率不那么苛刻的后备电源场景。系统输出部分可以直接使用 MP2642GR-Z 的系统端同时电池组也参与了母线供电PIC24 从系统输出端取电经一个低压差线性稳压器转换到 3.3V 供电。2.2 电压采样两个分压器加一个低侧采样开关两串电池采样常用两种方式一种是用差分放大器直接量每节电池电压一种是利用单片机地线参考电池组负极用两个分压器分别量总电压和中点电压。第二种成本更低只要单片机的 ADC 是单端模式且系统地和电池负极接在一起就能通过简单的数学关系得到每一节的电压。以 PIC24FV16KA304 工作电压 3.3V 为例ADC 量程就是 0 到 3.3V。电池单体电压按 3.0V 到 4.3V 估算两串满电总电压最高 8.6V因此分压比至少要把 8.6V 降到 3.3V 以内。我这里用了 1/3 增益上分压电阻选 200kΩ下分压电阻选 100kΩ总电压 8.6V 时 ADC 输入端约 2.87V中点电压 4.3V 时 ADC 输入端约 1.43V。都留有余量。另一个问题是分压支路本身会把电池组的能量白白漏掉。两个分压器在最高电压下大约产生 42µA 的漏电流短时间放着无所谓可备用电源要长期挂机能省一点是一点。做法是在两个分压器的地端串联一个采样开关管平时断开采样前先打开并延迟几毫秒稳定后再让 MCU 进入 ADC 转换。这样不采样时漏电几乎为零采样时也不会影响精度。2.3 均衡执行部分底电池用N-MOS顶电池用P-MOS均衡开关的选型是最容易被忽略的地方。很多人想当然地以为两路都用一个 N-MOS 放在地端就行结果顶部那节电池的均衡根本打不开。原因在于底部电池的负极是系统地它那一路可以从电池中点到地之间串联 N-MOS 和功率电阻MCU 输出 3.3V 栅极电压就能导通。但顶部电池的负极是中点这个点在正常工作时大约是 4V 以上如果还用 N-MOS源极带了 4V 电位栅极 3.3V 比源极还低根本没法导通。所以顶部电池那一路要换思路源极接电池组正端漏极经过功率电阻接中点栅极通过三极管或驱动器相对中点拉取电位。用一个小 NPN 管把栅极拉到中点附近MOS 处于关闭态MCU 输出高电平导通 NPN栅极相对中点变低P-MOS 导通电流从电池组正端经功率电阻流向中点实现顶部电池单独放电。底部电池那一路则简单得多N-MOS 源极接地漏极接功率电阻到中点栅极接 MCU 的 PWM 输出。注意两路均衡开关的驱动电压不同最好在 PCB 布局上分开走线避免顶部高压开关信号干扰底部低压控制信号。功率电阻我用的是两个 100Ω 电阻并联成 50Ω。单体电压 4.2V 时理论均衡电流约 84mA单颗电阻功耗约 0.17W两颗分担热应力更均匀。PWM 开到不同占空比还能平滑调整平均均衡电流后面固件部分会细说。3. 均衡策略与状态机什么时候该均衡什么时候必须停手3.1 状态机划分均衡不是简单看到压差超过门限就开开关。尤其在备用电源系统里系统可能处于充电、放电、浮充、停机待机等不同状态每种状态下均衡的时机和副作用完全不同。我把模块状态分成四类空闲态没有输入电源负载也很小系统处于低功耗监听。充电态MP2642GR-Z 正在给电池组充电入充电流较大。浮充态电池已经接近满电充电电流减小处于补满阶段。放电态输入中断电池组向负载供电。均衡只能在充电态和浮充态启用放电态和空闲态严禁开启均衡。原因是均衡的本质是让电压高的电池额外消耗能量放电态下这种消耗相当于直接削减后备容量属于帮倒忙。伪代码逻辑大致如下读取总电压和中点电压 计算顶部电压和底部电压 计算压差 delta_mv if (系统处于放电态) { 关闭所有均衡 返回 } if (delta_mv 均衡启动门限) { 判断电压较高的一侧 打开对应 PWM 均衡 记录均衡累计时间 } else if (delta_mv 均衡停止门限) { 关闭所有均衡 }看起来很简单实际上还要加入均衡超时、采样去抖动、温度保护等条件。否则就是一个两节电池电压抖一下就把 PWM 乱开一通的失控状态机。3.2 启动/停止门限和均衡时间怎么定启动门限和停止门限之间必须留出迟滞区间。我最终设置为压差大于 30mV 启动小于 15mV 停止。如果启动和停止门限一样比如都是 20mV均衡开启后电压差可能刚好在 20mV 附近来回摆动MOS 开关不断切换很容易引入噪声也会让功率电阻不断经历热冲击。设置 30mV 启动、15mV 停止之后系统一旦进入均衡就会把压差压到明显低于启动门限才停止避免震荡。均衡时间也不能无限长。被动均衡把高电压电池的能量变成热量长期开着会持续抬高电池仓温度对锂离子电池是不利的。我给了两个限制条件一个是压差收窄到停止门限以下并保持 10 分钟稳定后关闭均衡。另一个是总均衡时间超过 4 小时强制休息 30 分钟再重新判断。强制休息很重要。电池的极化电压在停止均衡后会慢慢回落强行判断得很小可能只是测量假象。让系统停下来观察一段真实电压比一直顶着均衡要可靠得多。3.3 PWM限流、迟滞和充电判定的配合之前提到功率电阻是 50Ω理论上均衡电流最大 80 多毫安。但在充电器恒流充电阶段均衡电流是要从充电器输出里“抢”的。如果充电器设定恒流 500mA均衡拉到 80mA实际给电池充电的电流只有 420mA充电时间变长。这本身可以接受但要注意总负载不能超过充电器的最大输出能力。我建议把大电流均衡放在浮充阶段恒流阶段用较小的 PWM 占空比。比如恒流阶段开 40% 占空比平均均衡电流 34mA进入浮充后再提到 80%。这样既不会让充电器在恒流阶段负载过重也能在浮充阶段快速收尾。具体到 PIC24FV16KA304 的实现上它内部的定时器可以产生固定频率的 PWM。我用的 PWM 频率是 5kHz太高了 MOS 开关损耗上升太低了均衡电流脉动明显。5kHz 下用占空比寄存器实时调节平均电流效果很平稳。另外MP2642GR-Z 的充电状态信号要参与判断。芯片如果已经给出停充状态说明整组电压已经足够高这时候均衡的作用更像是对某一节的“软停止”要防止把原本充满的单节电压硬生生拉到过放方向。我的做法是充电状态下单体电压高于 4.18V 时只允许对高于另一节的那路开均衡同时监控该节电压不得低于 4.05V。这样既能把压差收回来又不会因为过度均衡毁掉一颗健康电池。4. 调板中绕开的几个坑ADC噪声、地弹和被“带偏”的均衡判断4.1 采样值乱跳先别怀疑芯片样板上电后第一版固件读出来的电压让我一度以为 ADC 模块坏了。同一节电池每次读出来相差 30 到 50mV均衡开关一动作数值更是跳得毫无规律。排查第一步先排除分压电阻的问题。两个分压支路的电阻用了 1% 精度温度系数也算可以理论误差不至于这么大。第二步检查 ADC 配置发现采样时间确实偏短源阻抗是 100kΩ 量级ADC 内部采样电容根本来不及充满读了也是白读。把 ADC 采样时间拉长到最大乱跳幅度明显变小。剩下的波动来自均衡开关的开关动作。MOS 通断瞬间功率电流在地回路里产生短时冲击采样值被地弹拉偏。解决方法是错峰采样先关均衡等 20ms再采样两次取平均后恢复均衡。这样采样窗口避开了电流突变读出来的数值稳定很多。4.2 分流电阻热起来之后会发生什么被动均衡的发热不是秘密但实际温度影响往往被低估。我用两个 100Ω 电阻并联单个电阻在最大占空比下功耗约 0.17W常温环境下外壳温度能到 60 多度。最开始我图省事把均衡电阻贴着电池摆放结果电池表面温度跟着上升了将近 10 度。过热的问题在于功率电阻阻值会随温度漂移。金属膜电阻温漂大约 ±50ppm/°C算下来温升 40 度也就 0.2% 的变化倒不大。真正要担心的是热量传递到电芯上提高自放电率反而制造新的失配。所以在 PCB 布局上均衡电阻尽量远离电芯放在板边并且预留散热过孔。如果结构空间允许给功率电阻区域加一个小的开窗散热铜皮。测温点在电阻本体附近和电池表面各放一个固件里超过 70 度就强制降低占空比超过 85 度直接关均衡。4.3 组合系统测试比单独均衡更麻烦单测均衡模块时一切正常一旦接上真实充电器和负载问题就冒出来了。最典型的是充电器进入恒压阶段后均衡会导致整组电压微降充电器以为是电池没充满又加大电流往上顶。这时 MP2642GR-Z 的充电状态引脚可能会在“充电中”和“停充”之间反复跳变。这种情况下不能直接拿充电状态作为均衡的唯一判据要在固件里加消抖延时至少连续 30 秒处于停充状态才认为真正饱和。还有一个容易被忽视的现象是均衡没有开错路但压差反而变大。后来发现是电池内阻差异造成的极化电压。充电过程中内阻高的那节端电压测量值偏高被算法误判为“电压高”结果把均衡开在它身上。而实际上它属于容量偏小的那一节本身就更容易过充如果再对它放电就会拉大真正的失配。处理办法是采样时避开大电流阶段或者用短时静态电压判断。具体操作是这样每隔一段时间短时切断充电等 50 到 100 毫秒后采样两节电池电压再用这个静态电压差作为均衡依据。瞬时压差只用于保护判断不用于均衡方向判断。这样虽然提高了一些采样复杂度但长期运行的准确性明显更好。5. 实测记录从 132mV 压差开始压到 12mV 要多久5.1 测试条件测试环境是两块旧锂离子电池组成的两串电池组标称容量 2200mAh其中一节因为服役时间长实际容量明显偏低。充电管理部分用 MP2642GR-Z均衡控制用 PIC24FV16KA304分压比 1/3均衡电阻 50ΩPWM 5kHz。测试开始时两节电池充电到一半左右压差 132mV场景模拟备用电源长期浮充后突然停电再恢复充电的状态。测试期间记录电压、压差和均衡状态每 30 分钟读一次均衡过程中只对电压较高的一侧开 PWM平均占空比约 70%。5.2 数据与曲线记录时间顶部电压底部电压压差状态0min4.085V3.953V132mV均衡开启30min4.062V3.974V88mV均衡开启60min4.043V3.989V54mV均衡开启90min4.024V3.997V27mV均衡开启120min4.009V3.992V17mV均衡开启150min3.996V3.984V12mV均衡停止180min4.023V4.010V13mV静置观察从 132mV 收到 12mV花了两小时出头。过程不算快但对备用电源来说完全够用。均衡期间电池表面温度上升不到 6 度功率电阻外壳温度在 60 度上下。值得注意的最后两行均衡停止后给电池组重新补了一点电两节电压一起升到 4.0V 以上压差仍然稳定在 13mV 左右。这说明均衡结束后并没有立即打回原形状态是可持续的。5.3 对储能与备用电源的建议实测做完我最大的感受是被动均衡不是万能的但在备用电源场景里它只要能把长期漂移的压差压到 20mV 以内就已经解决了绝大多数安全性问题。把均衡重点放在浮充阶段而不是刻意追求单次大电流把压差瞬间拉平更符合这类系统的使用习惯。如果后续要扩展可以考虑把两串均衡模块级联通过隔离通信把多组电池的状态汇总到上位机。当前这套方案的核心价值不在于均衡速度而在于用一个低功耗单片机把充电前端的盲区补了回来让系统从“只看整组”升级到“能看每一节”。这个能力对储能和备用电源来说比单纯的充电精度更关键。