1. 为什么储能系统里“两串电池均衡”是个绕不开的硬骨头如果你拆过任何一款便携式储能电源、户外电源或者小型UPS大概率会看到里面是几节电芯串起来用的。两串是最常见的入门配置——两节3.7V的锂电芯串起来得到7.4V标称电压或者两节磷酸铁锂串起来得到6.4V再或者两节铅酸/超级电容组合。串联的目的很简单把电压抬上去满足后级DC-DC或者逆变器的输入要求。但串联这件事从电池管理的角度看就是给自己找麻烦。两节电芯出厂时容量、内阻、自放电率就有微小差异用了一段时间之后差异会被放大。充电时串联回路里流过两节电芯的电流完全一样容量小的那节先到截止电压BMS如果此时切断充电容量大的那节就没充满放电时反过来容量小的那节先到欠压保护点整组就停止放电容量大的那节还剩一堆电没放出来。这就是木桶效应——整组可用容量由最弱的那节决定。更麻烦的是这种不均衡是正反馈的。每次充放电循环弱的那节都在被“过充”和“过放”的边缘反复摩擦老化速度比强的那节更快于是差异越来越大。到最后整组电池的循环寿命可能只有单节电芯标称寿命的一半甚至更少。所以均衡电路不是可选项是串联电池组的必需品。而两串系统的均衡又和四串、八串的方案有本质区别——串数少意味着你可以用更简单、更便宜的拓扑但同时对均衡精度和静态功耗的要求反而更苛刻因为储能和备用电源系统经常需要长期浮充或者待机均衡电路自身的耗电如果控制不好反而会把电池拖垮。我这次要聊的就是用MP2642GR-Z这颗均衡专用芯片配合STM32L442KC这颗低功耗MCU搭一套两串电池的主动均衡方案。MP2642GR-Z是MPS芯源系统出的一颗双向主动均衡IC支持两串应用内置MOSFET外围极简STM32L442KC是ST的Cortex-M4低功耗系列带硬件加密和丰富的定时器资源用来做均衡策略调度和系统监控非常合适。这套组合在储能和备用电源场景里算是一个性价比和可靠性都比较平衡的选择。下面我会从芯片选型逻辑、硬件设计细节、均衡策略实现、实测数据、踩坑记录几个维度把整个方案拆开讲清楚。如果你正在做两串电池的BMS或者均衡模块这篇内容应该能帮你省下不少调试时间。2. MP2642GR-Z 到底解决了什么问题以及它的工作边界在哪里2.1 主动均衡和被动均衡的本质区别在聊MP2642GR-Z之前得先把均衡的两条技术路线说清楚。被动均衡最简单就是给每节电芯并联一个电阻和开关哪节电压高了就接通电阻放电把多余的能量以热量形式消耗掉。优点是电路简单、成本低、可靠性高缺点是能量全浪费了而且均衡电流通常只有几十毫安均衡速度慢。对于两串系统被动均衡的典型做法是在每节电芯上并一个100Ω左右的电阻通过MCU的GPIO控制MOSFET通断。但问题是如果你在储能系统里用被动均衡待机时电阻上的漏电流会持续消耗电池长期浮充场景下这个损耗不可忽视。主动均衡则是把能量从高电压电芯搬到低电压电芯或者从整组搬到单节。常见拓扑有电容开关式、电感Buck-Boost式、变压器式。主动均衡的优点是能量不浪费、均衡电流可以做得比较大几百毫安到几安培缺点是电路复杂、成本高、需要控制策略配合。MP2642GR-Z走的是电感式双向主动均衡路线。它内部集成了两个N沟道MOSFET和驱动电路外部只需要一个电感、几个电容和电阻就能实现两节电芯之间的双向能量转移。芯片的工作逻辑是检测两节电芯的电压差当差值超过设定阈值时启动均衡把高电压那节的能量通过电感泵到低电压那节直到差值缩小到阈值以内。2.2 MP2642GR-Z 的关键参数与选型依据选这颗芯片主要看中以下几个点参数典型值对储能/备用电源的意义工作电压范围4V ~ 36V覆盖两串锂电6V~8.4V、两串磷酸铁锂5V~7.3V、两串铅酸4V~14V均衡电流可编程最高约1A两串系统容量通常不大1A足够在几小时内拉平差异静态电流典型值低于10μA关断时长期待机场景下均衡电路不能成为主要耗电源内置MOSFET是双N沟道外围元件少PCB面积小适合紧凑型储能模块通信接口无纯硬件阈值触发简化设计但需要MCU做状态监控和策略调整封装QFN-163mm×3mm小封装适合高密度布局这里要特别说一下静态电流。很多做储能的朋友容易忽略这一点均衡芯片在待机时如果漏电流有几百微安对于一节2000mAh的电芯来说理论上几个月就能放空。MP2642GR-Z的关断电流在数据手册里标的是典型值几微安实测在EN脚拉低的情况下整条均衡支路的漏电流可以控制在10μA以内这对于长期浮充的备用电源系统来说是可以接受的。另一个关键点是均衡阈值可调。MP2642GR-Z通过外部电阻分压网络设定均衡启动和停止的电压差阈值。比如你可以设成当两节电芯压差大于30mV时启动均衡小于10mV时停止。这个迟滞设计是为了防止在阈值附近反复启停造成振荡。实际调试时这个阈值需要根据电芯特性和系统要求来定——磷酸铁锂的电压平台很平压差阈值要设小一点比如20mV否则均衡启动太晚三元锂的电压曲线斜率大阈值可以设大一点比如50mV避免频繁动作。2.3 这颗芯片不适合什么场景MP2642GR-Z不是万能的。它的定位是两串小电流主动均衡所以以下场景不要选它串数超过2串它只支持两串三串以上需要多颗级联或者换其他方案。均衡电流要求大于1A虽然标称可到1A但那是理想散热条件下的极限值实际持续跑500mA以上就要认真考虑散热了。需要精确电量计量它只做均衡不做库仑计数SOC估算需要另外的芯片或者MCU算法。高压系统36V是上限再高就得换方案。所以如果你的储能系统是两串锂电、均衡电流需求在几百毫安级别、对静态功耗敏感MP2642GR-Z是一个很合适的选择。接下来看MCU这边。3. STM32L442KC 在均衡系统里的角色定位与资源分配3.1 为什么选L4系列而不是F0或者G0STM32L442KC属于ST的L4系列Cortex-M4内核带FPU最高80MHz主频Flash 256KBRAM 64KB。相比常见的F0系列Cortex-M0或者G0系列Cortex-M0L4的优势在于低功耗模式更丰富L4有Stop 2模式典型功耗1.1μARTC走时RAM保持Standby模式0.3μA。对于备用电源系统MCU大部分时间应该待在低功耗模式里定期醒来巡检一下电压和温度然后继续睡。模拟资源更全12位ADC、内部参考电压、运放、比较器都有。两串电池的电压采集、温度采集可以直接用片内ADC省掉外部ADC芯片。硬件加密L442带AES硬件加速如果系统需要做数据加密上传或者防篡改这个资源很有用。定时器资源多个16位和32位定时器可以用来做均衡电流的PWM控制、看门狗、超时保护。当然如果你只是做一个最简单的均衡板F0也够用。但储能和备用电源系统通常还需要做电压监控、温度保护、通信上报、故障记录L4的资源余量更充足后期扩展不用换平台。3.2 引脚分配与功能映射以STM32L442KCUFQFPN32封装32脚为例一个典型的两串均衡系统引脚分配如下引脚功能说明PA0ADC_IN0电芯1电压采集经分压PA1ADC_IN1电芯2电压采集经分压PA2ADC_IN2整组电压采集经分压PA3ADC_IN3NTC温度采集PA4GPIO输出MP2642GR-Z使能控制PA5GPIO输入MP2642GR-Z状态指示如故障标志PA6TIM3_CH1均衡电流PWM控制如果芯片支持PA9/PA10USART1通信接口上报数据PA13/PA14SWD调试接口PC13GPIO状态指示灯这里要注意电压采集的分压电阻精度直接影响均衡效果。如果分压电阻有1%的误差两节电芯的采集通道误差可能达到几十毫伏而均衡阈值本身可能只有30mV那均衡就变成瞎调了。所以分压电阻建议用0.1%精度的薄膜电阻并且ADC参考电压要用外部精密基准或者至少用L4内部的VREFINT做校准。3.3 低功耗策略与唤醒周期设计储能和备用电源系统的一个核心需求是长期待机。MCU不能一直跑80MHz那样功耗受不了。合理的策略是主循环MCU大部分时间在Stop 2模式RTC定时唤醒唤醒周期比如10秒。唤醒后快速采集两节电芯电压、整组电压、温度做均衡判断如果需要均衡就使能MP2642GR-Z然后继续睡。均衡期间如果均衡正在进行MCU可以保持运行或者用更短的唤醒周期来监控均衡状态防止过流或过热。异常处理如果检测到电压异常过压、欠压、温差过大MCU进入更高频率的监控模式并通过通信接口上报。实测下来这种策略下MCU的平均功耗可以做到20μA左右不含均衡电路对于一节2000mAh的电池来说理论待机时间超过10年——当然实际电池自放电会先到但至少MCU不是瓶颈。4. 硬件设计从原理图到PCB布局的实操细节4.1 均衡功率级的外围元件计算MP2642GR-Z的外围电路不复杂但每个元件都有讲究。核心是一个均衡电感它的取值决定了均衡电流的大小和纹波。电感计算公式基于芯片数据手册的Buck-Boost模式[ L \frac{V_{cell} \times (1 - D)}{f_{sw} \times \Delta I_L} ]其中(V_{cell})是电芯电压取3.7V典型值(D)是占空比两串均衡时通常接近50%(f_{sw})是开关频率MP2642GR-Z内部固定频率典型值1MHz(\Delta I_L)是电感纹波电流一般取均衡电流的30%。假设目标均衡电流为500mA纹波取150mA[ L \frac{3.7 \times 0.5}{1 \times 10^6 \times 0.15} \approx 12.3 \mu H ]所以选一个10μH到15μH的功率电感饱和电流至少1A直流电阻尽量小比如小于50mΩ否则电感上的压降和发热会很明显。我实际用的是12μH、1.5A饱和电流的屏蔽电感尺寸5mm×5mm效果不错。输入输出电容方面每节电芯并一个22μF的X5R陶瓷电容再加一个100nF的高频去耦电容。陶瓷电容的ESR低对抑制开关噪声很有效。注意电容的耐压要选10V以上两串锂电满电8.4V留够余量。4.2 电压采集通道的精度保障前面提到分压电阻要用0.1%精度这里再补充几个细节分压比设计两串锂电满电8.4VL4的ADC参考电压如果是3.3V分压比至少要1/3。但为了留余量和提高分辨率建议分压比设为1/4左右这样8.4V对应2.1V在ADC量程的2/3处线性度最好。RC滤波分压点后面加一个1kΩ电阻和100nF电容组成的低通滤波截止频率约1.6kHz可以有效滤掉开关噪声。但电阻不能太大否则ADC采样时的输入阻抗会影响精度。L4的ADC输入阻抗在采样时间足够长的情况下可以接受几十kΩ1kΩ完全没问题。参考电压如果对精度要求高建议用外部基准芯片比如2.5V或3.0V的精密基准。如果成本敏感可以用L4内部的VREFINT校准。VREFINT的出厂校准值存在系统存储区精度大概±1%对于均衡阈值30mV来说1%的参考误差对应30mV的阈值误差是0.3mV可以接受。4.3 PCB布局的噪声控制要点均衡电路是开关电源布局不好会干扰ADC采集。几个关键原则功率回路最小化电感、芯片的SW引脚、输入输出电容构成的功率环路面积要尽量小。这个环路里电流变化率很高环路面积大就会辐射噪声。模拟地和功率地分开ADC采集的地和均衡功率级的地在单点连接避免功率地上的开关噪声串到模拟地。采集走线远离电感电压采集的走线不要从电感下面或者旁边经过最好用地线包起来做屏蔽。芯片散热焊盘MP2642GR-Z的QFN封装底部有散热焊盘必须焊接到PCB的铜皮上并且打足够多的过孔到背面地平面帮助散热。均衡电流500mA时芯片内部MOSFET的导通损耗大约几十毫瓦加上开关损耗总功耗可能到100mW以上散热不好会触发过热保护。我第一版PCB就是忽略了散热焊盘的过孔结果均衡跑了十分钟芯片就烫得不行效率也掉下来了。第二版加了9个过孔温度降了20多度。5. 均衡策略的软件实现从阈值判断到状态机5.1 电压采集的滤波与校准ADC采集原始数据后不能直接用。两串电池系统里均衡开关动作会在电压上叠加纹波所以需要做数字滤波。我用的方法是滑动平均中值滤波连续采样16次去掉最大和最小的4个剩下的取平均。采样频率和均衡开关频率错开比如均衡开关是1MHzADC采样是10kHz这样不会采到固定的纹波相位。校准方面每块板子在生产时做一次两点校准用一个精密电源输出已知电压比如3.000V和4.200V记录ADC读数算出增益和偏移存在MCU的Flash里。这样可以把采集精度做到±5mV以内。5.2 均衡启动与停止的迟滞逻辑均衡策略的核心是一个带迟滞的状态机#define BALANCE_START_THRESHOLD 30 // mV #define BALANCE_STOP_THRESHOLD 10 // mV #define BALANCE_MAX_DURATION 3600 // 秒 typedef enum { BALANCE_IDLE, BALANCE_ACTIVE, BALANCE_FAULT } balance_state_t; balance_state_t balance_state BALANCE_IDLE; uint32_t balance_start_time 0; void balance_task(void) { int16_t v1 get_cell_voltage(1); int16_t v2 get_cell_voltage(2); int16_t diff abs(v1 - v2); switch (balance_state) { case BALANCE_IDLE: if (diff BALANCE_START_THRESHOLD) { enable_balance_chip(); balance_start_time get_tick(); balance_state BALANCE_ACTIVE; } break; case BALANCE_ACTIVE: if (diff BALANCE_STOP_THRESHOLD) { disable_balance_chip(); balance_state BALANCE_IDLE; } else if (get_tick() - balance_start_time BALANCE_MAX_DURATION) { disable_balance_chip(); balance_state BALANCE_FAULT; log_fault(FAULT_BALANCE_TIMEOUT); } break; case BALANCE_FAULT: // 等待人工复位或者自动恢复条件 break; } }这个逻辑里最大均衡时长是一个保护机制。如果均衡跑了1小时压差还没降到停止阈值说明要么电芯有问题要么均衡电路故障必须停下来报警不能一直跑。5.3 温度保护与故障降级温度保护分两级一级保护温度超过45°C降低均衡电流如果芯片支持PWM调节或者暂停均衡等温度降下来再继续。二级保护温度超过60°C直接关闭均衡芯片上报故障并且禁止在温度降到40°C以下之前重新启动。故障降级策略是如果均衡芯片报故障比如过流、过热MCU先尝试重新初始化如果连续三次失败就锁定故障状态只允许通过通信接口远程复位。这样避免在硬件故障时反复重启造成更大损坏。6. 实测数据均衡效果、功耗与温升6.1 均衡速度实测用两节容量不同的18650电芯做测试一节2000mAh一节1800mAh初始压差80mV。环境温度25°C均衡电流设定500mA。时间电芯1电压电芯2电压压差0min3.92V3.84V80mV30min3.89V3.86V30mV60min3.87V3.86V10mV90min3.86V3.86V0mV大约90分钟把80mV的压差拉到0平均均衡电流约450mA因为有迟滞停停走走。这个速度对于两串储能系统来说够用了——通常均衡是在充电末期或者待机时慢慢做的不要求几分钟搞定。6.2 静态功耗实测把MP2642GR-Z的EN脚拉低MCU进入Stop 2模式RTC每10秒唤醒一次。用高精度电流表测整板功耗状态电流MCU Stop 2 均衡芯片关断18μAMCU Stop 2 均衡芯片待机25μAMCU运行 均衡芯片工作12mA18μA的待机电流对于2000mAh电池来说理论待机时间 2000mAh / 0.018mA ≈ 111111小时 ≈ 12.7年。当然实际电池自放电会先到但至少均衡电路不是短板。6.3 温升测试均衡电流500mA持续跑1小时用热成像仪看MP2642GR-Z芯片表面温度42°C环境25°C温升17°C电感表面温度38°CPCB局部温度35°C这个温升在可接受范围内。如果均衡电流加到800mA芯片温度会到55°C左右这时候就需要考虑加散热片或者降低环境温度了。7. 踩坑记录那些数据手册不会告诉你的事7.1 电感选型不当导致均衡电流上不去第一版我用了一个22μH的电感想着电感大一点纹波小。结果实测均衡电流只有200mA远低于设计的500mA。后来查波形发现电感太大导致电流上升斜率不够在固定的开关周期内电流还没爬到设定值就换相了。换成12μH之后电流立刻上到500mA。经验电感值不是越大越好要按照公式算并且留20%的余量。另外电感的饱和电流要至少是目标均衡电流的1.5倍否则大电流时电感饱和电流会失控。7.2 地线处理不好导致ADC采集跳变第一版PCB把模拟地和功率地混在一起结果均衡一启动ADC采集的电压就跳变几十毫伏均衡逻辑完全乱套。后来改成单点接地模拟地和功率地在芯片下方通过一个0Ω电阻连接跳变降到5mV以内。经验开关电源和模拟采集共存时地平面分割是必须的。如果不想分割至少要把模拟采集部分远离功率回路并且用星型接地。7.3 均衡阈值设得太小导致频繁启停一开始我把启动阈值设成10mV停止阈值设成5mV。结果均衡芯片在阈值附近反复启停每次启停都有电流冲击电感发出吱吱声效率也很低。后来改成启动30mV、停止10mV迟滞20mV就稳定了。经验迟滞窗口至少要大于ADC采集噪声的2倍。如果ADC噪声是5mV迟滞至少10mV。另外磷酸铁锂的电压平台平迟滞可以小一点三元锂的电压斜率大迟滞可以大一点。7.4 忘记处理芯片的故障引脚MP2642GR-Z有一个开漏的故障输出引脚第一版我直接悬空了。结果有一次均衡芯片过热保护了MCU完全不知道还在那里等压差降下来等了半天没动静。后来把故障引脚接到MCU的外部中断一有故障立刻处理问题就解决了。经验芯片的每一个状态引脚都要用起来尤其是故障指示。悬空等于放弃了一层保护。8. 这套方案还能怎么扩展两串均衡只是起点。如果你要做四串系统可以用两颗MP2642GR-Z分别管两串然后MCU通过通信接口协调。但要注意两颗芯片之间的地参考不一样通信需要隔离。或者换用支持多串的均衡芯片比如MPS家有支持4串的型号但外围电路会复杂一些。另一个扩展方向是加入库仑计。现在这套方案只做电压均衡不做SOC估算。如果加一颗库仑计芯片比如TI的BQ34Z100或者MPS的MPF42791就可以做更精确的剩余电量显示和健康状态评估。库仑计和均衡芯片可以共用MCU的I2C接口软件上做数据融合。通信方面现在用的是UART可以改成CAN或者RS485适合多模块组网。储能系统经常需要把多个电池模块串起来用通信接口的可靠性和抗干扰能力很重要。最后如果你要做产品化生产校准这一步不能省。每块板子的分压电阻误差、ADC增益误差、参考电压误差都不一样必须逐板校准。校准数据存在Flash里上电时加载。校准工装可以用一个多路输出的精密电源配合一个简单的夹具几秒钟就能完成一块板子的校准。这套MP2642GR-Z加STM32L442KC的两串均衡方案我从选型到量产踩了不少坑但最终稳定性和功耗都达到了预期。如果你正在做类似的东西希望这些经验能帮你少走点弯路。