这几年一直在做便携储能和备用电源相关的项目2S电池包几乎是最常见的配置了。两节锂电池串联看起来简单但跑一段时间就会发现同一串电池的电压差越来越大整包容量也跟着缩水。标题里的这套组合——MP2642GR-Z 负责功率变换STM32G031K8 负责采样和控制——就是一套针对两个串联电池单元的主动均衡方案。简单说就是让电压高的那节电池把多余的能量搬到电压低的那节里去而不是简单把高电压电池的能量用电阻白白放掉。这篇文章我会把整个设计思路、硬件电路、软件策略、踩坑记录完整梳理一遍。不管你是刚开始接触电池均衡还是已经在做相关项目应该都能从中找到可以直接抄作业的部分。1. 方案整体思路拆解2S系统均衡为什么这么设计1.1 两节串联电池为什么会越用越偏电池出厂时参数虽然有分选但内阻、自放电率、容量不可能做到完全一致。串联回路里流过的是同一路电流两节电池却因为各自内阻和化学活性的差异在相同电流下实际分到的电压和放电深度都不一样。时间一长短板电池会先触发过放保护长板电池却还剩不少电量整包可用容量就被拉低了。备用电源场景里这个问题更明显。很多设备常年处于浮充或浅充浅放状态电池长期工作在同一个荷电区间充电末端电压平台附近的差异会被放大。两节电池的压差可能从刚开始的几毫伏慢慢拉到几十毫伏甚至上百毫伏。这时候如果不做均衡系统检测到单节过压会强制停止充电整包实际充进去的电量远低于标称容量。我给两个串联电池单元补充一点名词理解以两节电池串联为例电池1的正极是电池包总正电池1的负极同时是电池2的正极这个点一般叫中点电池2的负极是电池包总负。均衡要处理的就是电池1和电池2各自电压不一致的问题。标题里的“均衡”两个字的含义就是尽量让两节电池在同一个荷电状态附近工作。1.2 主动均衡比被动均衡好在哪被动均衡是老一代BMS常干的事发现哪节电池电压偏高就并联一个放电电阻把多的能量变成热量耗散掉。这方案成本低、控制简单但有几个硬伤。能量被白白浪费了而且电阻发热还会抬高电池包内部温度。均衡电流一般做得很小通常一两百毫安想拉回明显压差得花好几个小时对高容量电芯来说效果很差。主动均衡的思路恰恰相反能量不落地直接沿着“高电压电池→储能电感/电容→低电压电池”的路径搬过去。效率能做到百分之八十几甚至更高均衡电流也可以做大同时热量问题大幅减轻。在储能和备用电源系统中均衡的目的是保住整包容量所以主动均衡带来的那部分被“救回来”的电量就是实打实的备用续航时间这个价值远高于省下的那颗放电电阻。MP2642GR-Z 这颗芯片就是典型的主动均衡控制器它内部集成了双向升降压变换器所需的主要控制逻辑配合外围开关管和电感就可以在两节串联电池之间实现双向能量转移。相比用分立器件自己搭一个同步Buck-Boost芯片方案在环路稳定性和保护逻辑上要省事很多。1.3 MP2642GR-Z 和 STM32G031K8功率与策略分工这个方案里两片芯片的分工非常清晰。MP2642GR-Z 负责功率域的事接收来自其中一节电池的能量经过内部环路调节从另外一侧输出给另一节电池它自身具备电流检测、限流、保护等机制保证能量转移过程可控。STM32G031K8 负责策略域的事实时采集两节电池端电压、均衡电流、温度判断当前该不该均衡、往哪个方向均衡、均衡电流设多大它还能和上位机通信把均衡日志和电池状态发出去。也就是说MP2642GR-Z 是“执行机构”STM32G031K8 是“决策机构”。实际产品里这个分工还有个好处均衡策略可以随时改软件不用动功率板。比如我用的是额定1A均衡电流后来发现这个电芯体系的极化内阻偏大均衡电流太大反而干扰电压判据直接在固件里把目标电流改成0.5A再配合延迟判据就行硬件一行不用动。2. 核心硬件设计与关键参数计算2.1 MP2642GR-Z 的均衡电路拓扑与工作状态MP2642GR-Z 内部本质上是一个带同步整流的四开关Buck-Boost控制器外部接一个电感和一组MOSFET构成完整的升降压变换器。它跨接在两节电池之间电池1的正极、中点、电池2的负极这三个点就是整个均衡器的功率端口。当电池1电压高于电池2时能量从电池1取出经过降压或者升压通道灌回中点并给电池2充电这是“电池1→电池2”的均衡方向。反过来当电池2电压高于电池1时控制逻辑会把输入输出角色完全对调能量从电池2取出经过变换后送回电池1。因为系统电压在两节电池端处都处于3.0V到4.2V这个区间所以四开关结构可以灵活工作在降压、升压或升降压模式不需要外部切换开关。这里有个容易理解偏差的点储能电感和MOSFET组成的变换器它工作的输入侧和输出侧不是固定死的。我在项目里第一次搭板时就踩过这个坑以为输入端必须固定接总正结果电池2往电池1搬能量时效率奇差。后来重新看拓扑才明白双向变换器的“输入”和“输出”是由控制时序决定的电压高的一侧通过电感储能再由同步整流阶段把能量交给电压低的一侧。下表是四个常见工作状态的简表均衡方向实际工况变换器模式能量流路径电池1→电池2V1 V2且压差小降压BuckBAT → MID → BAT-电池2→电池1V2 V1且压差小降压BuckMID → BAT → BAT-电池1→电池2V1 V2且压差大升压BoostBAT → MID → BAT-电池2→电池1V2 V1且压差大升压BoostMID → BAT → BAT-硬件设计时要把MP2642GR-Z的电流检测引脚、PWM输出引脚、使能引脚全部引到MCU可控制的IO上。这样MCU不仅可以通过使能引脚切断均衡还可以通过读取电流检测信号做闭环调节。实际项目中MCU的DAC输出可以作为芯片的参考电压输入用来动态设定均衡目标电流。2.2 STM32G031K8 的最小系统与电压采集链路STM32G031K8 是一颗Cortex-M0内核的MCU主频64MHzFlash 32KBRAM 8KB封装为LQFP32。对均衡控制这个任务来说性能完全够用多出来的算力还能跑一些滤波算法。它自带一个12位ADC采样速度也不需要太高做电压采集和电流采集足够了。最小系统部分我用内部高速时钟直接跑省掉外部晶振。供电用一颗3.3V LDO从电池包总电压取电因为电池包最高电压在8.7V上下LDO压差不大效率损失可以接受。复位电路用一个简单的RC复位加看门狗处理即可。调试接口留一个SWD即可省引脚。电压采集链路是这个系统最要小心的部分。STM32G031K8的ADC输入范围是0到VREF我这里VREF直接接3.3V那么电池包总正、中点的电压都远高于3.3V必须先用分压电阻网络把电压按比例降到ADC安全范围内。我用的分压网络是总正用680k和100k分压分压比约7.8:1中点用两个等值电阻分压到地总负直接通过采样电阻接到系统地。三个节点的电压分别经过一级RC低通滤波后进ADC引脚。RC的时间常数取10ms左右可以有效滤掉开关噪声。分压电阻的阻值选择要兼顾功耗和采样精度。阻值太大会引入采样误差阻值太小会持续漏电。680k级别电阻在8.4V电池电压下损耗约10μA对动辄几十安时容量的储能电池来说可以忽略。但如果系统有低功耗休眠需求建议在分压网络和地之间串一个MOSFET开关仅在采样时刻导通。2.3 电感、MOSFET 与采样电阻的选型计算这部分是整个硬件设计里最值得花时间算的地方。我直接给出一套我实测过的参数推导过程你可以根据自己的目标均衡电流和开关频率套用。首先定开关频率。MP2642GR-Z内部振荡频率我按500kHz设计频率高可以减小电感体积但也增加了开关损耗。均衡电流目标取1A这是容量10Ah左右电池包的常用均衡电流档位相当于0.1C不会在电池内阻上产生太大额外压降。电感值按Buck模式纹波电流公式算L (Vin - Vout) × D / (fs × ΔIL)假设电池1电压4.2V电池2电压3.8V占空比D≈0.9允许电感纹波电流ΔIL取0.6A代入L (4.2 - 3.8) × 0.9 / (500k × 0.6) ≈ 1.2μH考虑到Boost模式电感电流会更大同时要留一定裕量避免饱和我实测选了4.7μH的电感。这个值在0.6A纹波设计下实际峰值电流约1.3A左右电感饱和电流选3A以上避免峰值电流时电感量骤降导致电流失控。MOSFET选型顺着四条原则走耐压不低于最大电池包电压的2倍也就是20V以上Rds(on)尽量小我选了10mΩ级别Qg要低否则驱动损耗太大会发热尽量用同一封装同一批次保证四个开关管参数一致性。同步升降压架构里四个MOSFET的开关时序由MP2642GR-Z内部驱动逻辑控制外部只需要保证驱动电路正常。采样电阻用来做均衡电流的闭环反馈。我选了5mΩ的合金电阻1A电流下压降5mV这个信号太小直接给ADC会淹死在噪声里。需要经过一级差分放大后再进MCU的ADC放大倍数取50倍采样电阻两端电压被放大到250mV左右配合12位ADC就能得到比较好的分辨率。采样电阻必须用四线开尔文接法走线要直接从电阻两端的焊盘引出不能带负载电流路径否则铜箔电阻会带来严重测量误差。2.4 硬件布局必须注意的4个细节这块板子不算复杂但功率路径和采样路径混在一起布局不好会埋下一堆调试隐患。我总结四个必查项。一是功率回路要短粗。电池1、电池2、四个MOSFET和电感组成的功率回路环路面积越小寄生电感越小开关尖峰越可控。我习惯把功率器件放在同一面底层整片铺地功率回路用铺铜连接而不是细走线。二是采样线远离功率开关节点。电感两端和MOSFET漏极是高频开关点dv/dt很大采样线如果从这里穿过ADC读到的数会跳得像心电图。采样线走底层上下左右都用地平面包裹必要时加一级屏蔽。三是中点连接要可靠。两节电池串联的中点承载了均衡能量转移的回流路径又是电压采样的参考点接插件上必须用独立端子不能用共用端子。曾经遇到过因为共用端子接触电阻大导致电池1、电池2分压测量同步漂移的问题查了很久才定位到是端子问题。四是预留均衡电流测试点。调试阶段需要实测电流来验证闭环是否正常没有测试点就得把探头怼在采样电阻两端非常痛苦。我一般在采样电阻两端各留一个过孔或针脚座方便飞线接示波器或万用表。3. 软件控制策略与均衡算法实现3.1 ADC采样滤波与电池状态判断STM32G031K8的ADC是12位配合3.3V参考电压理论分辨率约0.8mV。但实际采样值会有明显噪声主要来源是开关纹波、地弹和电池本身的极化波动。我在软件里做了两级处理先用硬件RC滤波滤掉高频分量再在MCU里做16次滑动平均。滑动平均的代码结构很直接一个环形缓冲区即可#define SAMPLE_NUM 16 uint16_t sample_buf[SAMPLE_NUM]; uint8_t sample_index 0; uint32_t sample_sum 0; uint16_t adc_filtered(uint16_t new_sample) { sample_sum - sample_buf[sample_index]; sample_buf[sample_index] new_sample; sample_sum new_sample; sample_index (sample_index 1) % SAMPLE_NUM; return (uint16_t)(sample_sum / SAMPLE_NUM); }采样周期我定在100ms一次。均衡系统并不需要毫秒级响应太快的采样反而会把动态工况下的瞬时电压当成真实压差。100ms既能跟上电池电压的缓慢变化又不会让处理器空转。得到两节电池的采样值后需要先判断当前处于什么工况。充电阶段、放电阶段、静置阶段对电压判据的影响完全不同。我维护一个简单状态机每个周期读取是否有充电电流或放电电流。没有电流且持续超过5分钟才认为进入静置状态这个状态下读取的端电压最接近开路电压均衡判据也只在这个状态启用。充电末端和放电末端的电压变化很快如果此时盲目均衡大概率会把能量搬错方向。因为动态极化电压会让高内阻电池的端电压看起来异常偏低等极化消退后才发现搬反了。我加了一个简单规则只要有充放电电流流过禁止启动新的均衡只维持已经进行的均衡直到电流停止后再收敛。3.2 均衡判据阈值、滞回与保护逻辑均衡启动判据不能只设一个固定压差阈值必须加滞回。我的实际配置是两节电池电压差大于50mV时启动均衡小于15mV时停止。中间这35mV的滞回区间就是为了防止均衡动作后在阈值附近反复横跳导致开关管频繁动作。这里有一个很关键的设计点均衡方向应该以“谁高搬谁”为原则。也就是哪节电池电压高就从哪节取出能量。我在状态机里用一个枚举变量记录当前均衡方向typedef enum { BAL_IDLE, BAL_CELL1_TO_CELL2, BAL_CELL2_TO_CELL1 } bal_state_t;判断逻辑大致是先比较两节电压电压高的一侧作为能量来源端电压低的一侧作为接收端。但直接切换方向要小心如果上一次均衡正在进行突然发现两端电压高低关系反转理论上应该立即反向。可实际中这种反转经常只是极化电压波动造成的假象立刻反向会导致能量在芯片内部来回“打乒乓”。我的做法是方向切换必须满足连续3个采样周期检测到反转且反转幅度大于30mV才允许执行反向。单纯一次采样反转不理睬。这个延迟判据在实测中有效避免了均衡状态的振荡。保护逻辑方面除了常规的过压、欠压保护还要加均衡超时保护。万一某节电池出现了内短路或采样故障均衡会一直“努力”搬能量有可能把好电池搬空。我设置了单次均衡最长工作时间2小时超时后强制停止并上报异常状态。同时均衡过程中如果检测到任意电池电压跌破2.8V或超过4.4V立即关断MP2642GR-Z的使能引脚。3.3 PWM控制时序与代码流程MP2642GR-Z 的闭合环路控制主要由芯片自身完成MCU这边要做的就是把方向指令和目标电流值给到位。如果你用的是完全独立的四开关Buck-BoostPWM时序需要MCU直接生成但在这套方案里芯片已经集成了大部分细节MCU其实只需要操作几个状态引脚。我的代码里初始化阶段把MCU的控制引脚全部配置好包括使能引脚、方向引脚、目标电流设置引脚。目标电流我通过DAC输出一个参考电压来设定MCU根据当前压差动态调节这个参考电压。均衡控制的整体流程如下周期性采样两节电池电压滑动滤波后得到本次测量值判断当前工况若不在静置状态跳过均衡控制判断压差是否超过启动阈值若超过根据电压高低设置方向如果方向与上次相同进入常规控制如果不同进入方向切换保护延迟使能MP2642GR-Z将DAC输出调整为目标电流对应的参考电压继续采样电压和均衡电流确认实际均衡电流与目标电流一致电压差收敛到滞回下限内关闭使能均衡状态回到空闲。代码层面我需要单独提一个经验MCU和MP2642GR-Z之间的互锁检查一定要做。也就是MCU下发“电池1往电池2均衡”指令后必须在下一个采样周期回读电流方向确认电流方向确实和数据手册预期一致。如果方向不对立即关断使能否则能量可能反着搬越均衡越偏。这种互锁在批量测试时救过我一次省了一整批不良品。3.4 均衡电流闭环参数整定均衡电流不是越大越好。我在调试时把目标电流从0.3A到1.5A都扫过一遍发现1A以上时电池端电压的波动开始影响判据。原因在于电池内阻并不等于零大电流均衡会在电池内阻上产生几十毫伏的压降这个压降直接叠加在ADC采到的端电压上导致“越均衡越觉得失衡”的假象。最终我把目标均衡电流固定为0.5A到1A之间可配置默认0.7A。这个值对10Ah左右的电芯足够用又不会对端电压判据产生致命干扰。电流闭环用最简单的比例调节即可。MCU通过采样电阻放大后的信号读回实际均衡电流与目标电流做差用PI输出调整DAC参考电压。实际测试中只用了比例项Kp取0.2左右已经足够稳。因为MP2642GR-Z自身的电感电流环路响应远快过MCU的采样周期MCU做的其实是外环慢调节不需要快速响应。参数整定过程中最重要的工具是波形。我把采样电阻放大后的电压信号接到示波器上观察均衡电流的启动波形。正常启动应该在一个几十毫秒的斜坡上平稳爬升如果出现台阶或过冲说明PI的Kp太大。整个调试过程中我用的是一个可调电阻箱模拟电池内阻再串一个电流表这样能快速复现各种极端工况。4. 联调问题排查实录与实测数据4.1 均衡方向反了连接与配置排查第一次接通负载测试时我观察到的现象是两节电池的电压差不但没变小反而稳定增大。第一反应是均衡方向反了。排查顺序是这样的先用万用表确认三个功率端口的连接电池1的正极是否接到了MP2642GR-Z的VIN侧中点是否接对了电池2的负极是否接到系统地。这个检查可能看起来太基础但实际项目中因为接插件线序定义不一致反接的概率非常高。我在一体化线束上吃过亏两根线颜色视觉上完全一致插上去才发现交叉了。连接确认无误后再检查MCU下发的方向指令脚电平是否符合预期。因为MP2642GR-Z的方向判断有两种来源硬件引脚的默认状态和MCU通过IO写入的状态。如果硬件脚悬空或上拉电阻接错芯片可能一直工作在同一个方向。我用一个LED指示灯做方向指示每个均衡方向点亮不同颜色的灯调试时肉眼直接确认方向是否与预设一致。最后一种少见但发生过的情况是芯片本身没坏但MCU的固件里方向变量被别处误修改了。比如中断服务函数里不小心修改了方向枚举变量导致方向被随机切换。这种情况最坑因为现象是偶发性的排查了很久才发现是中断优先级导致的共享变量冲突。4.2 采样抖动导致均衡频繁启停均衡系统正常运行一段时间后我发现它开始每隔几秒就切换一次运行和停止。观察ADC原始数据两节电池的电压在阈值附近波动噪声幅度大约十几毫伏已经超过了滞回区间的下限。这个问题本质是采样链路噪声没滤干净。硬件上我把RC滤波的时间常数从10ms加大到50ms软件里把滑动平均窗口从8次加大到16次。噪声幅度降到了3mV以内。但这里还有一个容易被忽视的坑ADC采样引脚本身的输入阻抗会与分压电阻一起形成额外分压产生采样误差。STM32G031K8的ADC采样电容在采样瞬间会抽取电流如果分压网络阻值太高供电能力跟不上采集值就会偏低。我在分压网络和ADC引脚之间加了一级运放跟随器这个问题才彻底解决。软件上还有一个好用的技巧启动均衡后暂时冻结均衡停止判据。也就是一旦均衡开启至少保持30秒再判断是否满足停止条件。这样可以避免均衡刚启动、采样值还在噪声中波动时就被误停。这个逻辑实现很简单但能显著提升系统稳定性。均衡频繁启停的另一个后果是MOSFET开关次数暴增开关损耗累积发热最终可能触发过温保护。解决启停问题后温升问题迎刃而解。4.3 均衡电流上不去电感饱和与驱动不足我遇到的另一种异常是均衡方向正确、闭环也正常但实际均衡电流就是上不去被限制在设定值的一半左右。用示波器看电感电流波形电流峰值出现明显的顶部凹陷这是电感饱和的典型特征。原因很直接我最初选的4.7μH电感额定饱和电流只有1.2A峰值电流一超过这个值电感量骤降电流马上失控。更换成饱和电流3A的同样感值电感后问题解决。MOSFET驱动不足也会表现为均衡电流上不去。同步整流架构中上管需要自举电路提供栅极驱动电压如果自举电容容量太小或漏电流过大上管导通不充分等效导通电阻大幅增加电流自然提不上去。我用示波器测了上管栅极波形发现开通时栅极电压没有到预期的10V以上判断自举电容问题换大容值电容后恢复正常。这个排查过程提示一个原则均衡电流异常时优先看波形而不是只盯读数。电流读数异常可能是闭环调节主动降压的结果真实原因可能是功率级已经尽力了。只看平均值很容易被误导。4.4 效率实测数据与优化方向实测效率这块我做了几组典型工况记录。测试时电池电压分别在4.1V和3.85V附近均衡电流0.7A输入输出压差约0.25V实测效率约88%到92%。当压差拉大到0.6V时变换器进入升压模式效率降到82%左右趋势符合预期。电池1电压电池2电压均衡电流实测效率变换器模式4.12V3.91V0.7A91%Buck4.20V3.62V0.7A84%Boost3.96V4.18V0.7A90%反向Buck3.70V4.20V0.7A83%反向Boost效率损失主要集中在开关损耗和电感磁损上。如果想进一步优化可以降低开关频率但代价是电感体积变大或者改用更低Rds(on)的MOSFET改善导通损耗。对于备用电源这类体积敏感的应用我保留了500kHz频率不做激进优化稳定可靠优先。效率数据还需要结合均衡时间一起看。假设两节电池SOC差2%以10Ah电池包和0.7A均衡电流估算需要转移约0.2Ah电量理论时间约17分钟考虑84%效率实际约20分钟。这个时长在备用电源的日常维护周期里完全可以接受。最后再分享一个装机后的小细节因为均衡系统是长期不关断运行的我在固件里加了定期自检每隔24小时主动做一个短时均衡动作验证电流通路完好。如果自检发现实际电流和预期电流偏差超过20%就上报故障并停止后续均衡。这个功能当时只是为了保险后来在售后返修中确实提前发现了两块采样电阻虚焊的板子算是额外收获。