首页 / 资讯中心 / 文章详情

两节串联电池被动均衡系统:从MP2642GR-Z硬件到STM32F745ZG策略

两节串联电池被动均衡系统:从MP2642GR-Z硬件到STM32F745ZG策略 ★ FEATURED ARTICLE
1. 为什么串联电池组必须做均衡先从储能场景里的真实痛点说起做储能和备用电源系统的朋友应该都有过这种经历一组电池刚装上去的时候容量曲线漂漂亮亮跑上几十个循环之后系统总容量开始莫名缩水。明明每颗电芯单独测都还有90%以上的健康度但整组电池放出来的电量就是比预期少一截。如果这时候去量每一节电池的电压十有八九会发现一个规律——总有某一节电压明显偏高或者偏低而且这个偏差会随着充放电循环越拉越大。这个现象的背后是串联电池组天然的木桶效应。因为电流是串联流过的每一节电池的电量必然完全一致但每一节电池的实际可用容量、内阻、自放电率却不可能完全相同。生产批次再一致电芯出厂时也存在微小的容量差工作温度再均匀电池包内部不同位置也有温差再加上安装工艺、接触电阻的影响两节标称规格完全一样的电池实际在同一个电流下工作时各自的SOC荷电状态变化速度就是不一样。结果就是充电时容量偏小的那节先充满但整组电池还在继续充先充满的那节就会被过充放电时容量偏小的那节先放空但整组电池还在继续放先放空的那节就会被过放。锂电芯一旦过充轻则加速衰减重则热失控一旦过放铜箔溶解析出直接造成不可逆的容量损失甚至安全隐患。串联级数越多这个问题被放得越大但对两节串联的小型储能模组来说问题同样不可忽视——备用电源、便携储能、小型UPS里非常常见。我现在在做的这个项目就是针对两节18650串联这样的典型模组用MP2642GR-Z做被动均衡通道用STM32F745ZG做均衡策略的运算与控制搭了一套完整的主动监测被动均衡方案。这篇文章把整个系统的设计思路、电路搭建、策略实现、实测结果一次说清楚重点是那些我踩过坑之后才明白的细节——因为均衡这活儿看着简单做起来全是细节。2. 均衡方案怎么选MP2642GR-Z被动均衡的工作边界和电路逻辑2.1 主动均衡和被动均衡的取舍以及为什么这里选被动均衡本质上分两大类。主动均衡是用电感或电容做能量搬运把高电量电芯的能量转移到低电量电芯去效率高、不浪费能量但电路复杂、成本高、体积大控制逻辑也更难被动均衡则是把高电量电芯的能量通过电阻耗散掉让整组电池逐步趋于一致简单可靠但会以热量形式浪费掉一部分电能。对两节串联的小模组来说主动均衡的方案有点杀鸡用牛刀。电感主动均衡方案在这一层级上要做到2A以上的均衡电流开关管、电感、续流二极管每一颗物料都要精挑细选占板面积至少比被动均衡多出一倍成本也会明显上升。更何况两节串联的容量一般只有几安时单体电压差往往只有几十毫伏这个量级的偏差用被动均衡完全压得住多余的均衡能力本质上是在为用不上的性能买单。MP2642GR-Z这颗芯片在标题里已经点出来了它的定位就是面向两节/多节串联锂电池组的均衡控制。我实际用下来它的典型工作方式就是内置MOS开关加外部放电电阻通过控制导通时间来决定均衡电流的大小。相比完全用分立MOS管自己搭均衡电路这颗芯片最大的价值是把什么时候均衡、均衡多大的电流这个控制闭环的一部分固化在了芯片内部同时还汇总了电池组状态信息主控只需要通过通信接口读取数据、下发使能即可系统复杂度一下子降下来。2.2 MP2642GR-Z关键引脚和外围电路照着接就能跑我在原理图上设计MP2642GR-Z的典型接法时重点关注两条通路一条是均衡电流通路一条是信号采集通路。均衡电流通路的构成很直观芯片内部集成的放电开关串联一颗外部功率电阻然后并接在需要均衡的电芯两端。当某节电芯电压偏高需要消耗时对应通道的MOS导通电流从电池正极经电阻流入负极把这个多出来的电荷转成热量耗散掉。外部电阻的阻值直接决定均衡电流比如用4.7Ω的贴片电阻单节3.7V时均衡电流就在0.7A到0.8A之间实际上板之后受PCB走线电阻和MOS导通电阻影响会略低一点。这个电流不能贪大因为均衡产生的热量都集中在电池仓附近温度过高对电池寿命的影响可能比电压不平衡还严重。信号采集通路上MP2642GR-Z内部有采样电路能获取每节电芯的电压以及整组电池的温度信息。这里要特别提醒一点采样线的布局决定了你看到的电压准不准。曾见过有工程师把采样线走得很长、很细中间还绕了电感结果测出来的电压纹波大得没法用均衡策略被逼着加了很厚的迟滞才勉强不在两个状态之间来回跳。正确的做法是采样线尽量短粗、直接接到电芯两端并且远离功率线和电感类器件。如果板子空间实在紧凑至少要加一个RC滤波时间常数取微秒级就够太大会拖慢响应反而影响均衡判断的及时性。2.3 为什么最终还是需要用主控来调度均衡可能有人会问MP2642GR-Z既然自己就能做均衡控制为什么还要接一颗STM32F745ZG这个问题问到点子上了。芯片本身的均衡控制能力解决的是能不能放的问题但整个储能系统真正需要的是什么时候放、放到什么程度停、以及放的过程中心里有没有数。MP2642GR-Z这类芯片的均衡判断通常基于简单的电压阈值比较——超过阈值就开回到阈值之下就关这属于典型的线性控制遇到温度变化、负载波动、电芯老化这些因素策略就会显得粗糙。举一个实际场景系统正在充电电流较大电芯的端电压会有一个明显的上升这时候如果仅依赖电压判断均衡很容易误判为不平衡而持续给某一节放电均衡。但如果让STM32F745ZG介入它能同时监测充电电流、整组电压、单节电压和温度用更丰富的状态信息来修正判断——比如充电过程中暂时不均衡等待电流变小之后再看电压差比如低温状态下电压偏差可能只是极化效应均衡动作延后执行。这种策略在MCU、执行在专用芯片的架构是实用系统最合理的选择。3. STM32F745ZG在系统里的分工采样链路、控制链路和人机接口3.1 选型考虑为什么是这个级别的MCU而不是更便宜的片子STM32F745ZG这块芯片在标题里出现是有道理的。从命名规则看F745属于STM32F7系列核心是Cortex-M7主频高达216MHz自带硬件浮点单元跑算法和滤波都很轻松。但说实话单做均衡控制逻辑本身用一颗几块钱的Cortex-M0芯片也够用真正的选型逻辑藏在系统集成度上。这个项目不只是做均衡还要同时承担电池电压/电流/温度的采集换算、CAN通信、本地显示、以及和BMS上位机的数据交互。F7系列有丰富的通信外设多路ADC加上内置的缓冲和比较器功能能省掉外部不少器件。我在这块板子上直接用了STM32F745ZG自带的三路ADC交替采样加上DMA搬运数据CPU几乎不参与采样过程留出大量算力跑均衡策略和故障诊断。这是F7相对于F1/G0级别的芯片最核心的优势——不是说F1做不了而是F7能在做这些事情的同时从容地再加上电池SOC估算和寿命预测这类进阶功能。3.2 电池电压采样链路精度问题的根源在这里均衡系统做得好不好一半取决于采样精度。尤其是单节电压在均衡判断里是最关键的输入量差个10mV可能就改变了整个均衡策略的行为。STM32F745ZG内置ADC是12位的量程如果设为3.3V理论分辨率只有大约0.8mV听起来够用。但实际工程中要面对的问题是电池电压不能直接接到ADC引脚上因为锂电池电压可以到4.2V以上超过ADC参考电压必须先做分压衰减。用两个电阻分压比如100kΩ和47kΩ的比例把4.2V映射到2V以内。这时候ADC的量化精度和分压电阻的精度同时起作用1%精度的电阻就会引入几十毫伏的偏差应付均衡判断就比较勉强了。所以我在这块板子上用的是0.1%精度的低温漂电阻做分压同时每一路都加了一颗运放做电压跟随保证高阻抗输入不会因为源阻抗不平衡造成额外的误差。运放输出到ADC之间还串了一个RC低通时间常数选了10μs左右既不影响实时性又能把高频噪声压下去。实测下来校准之后各通道的电压误差能控制在±5mV以内这已经是民用级BMS系统里相当好的水准了。3.3 控制链路STM32F745ZG怎么让MP2642GR-Z听话MP2642GR-Z和STM32F745ZG之间的通信接口在我的设计里同时预留了I2C和带中断的GPIO两条路I2C用于读取状态寄存器GPIO用于快速使能/关闭均衡通道。实际控制时序是这样的STM32F745ZG周期性执行均衡策略函数计算出当前是否需要均衡、均衡哪个通道、均衡多少时间然后把结果写进控制寄存器或直接拉高对应的GPIO使能信号。MP2642GR-Z收到命令后执行具体的MOS开关动作。整个闭环的决策周期我设在500ms这个时间尺度对电池系统来说已经很快了——电池电压本身是个缓变量几百毫秒的决策周期完全能跟上动态变化同时又不会因为决策过于频繁导致均衡通道不断开关白白磨损MOS和缩短电阻寿命。这里插一个经验均衡动作执行后电池电压会随着极化效应的建立而出现一个短时间内的小幅变化。如果控制回路周期太短很容易在均衡-停止-再均衡之间反复震荡。我最终选择了500ms的决策周期配合后面要讲的迟滞控制实测效果非常稳定。3.4 通讯与显示部分让系统不再是一个黑盒子做嵌入式系统最大的一个坑就是系统出了异常没法快速定位。我在这块板上预留了CAN接口和一路串口CAN用于和储能系统的其他部件通信串口则引出来做调试诊断。另外板载了一个双色LED绿色表示系统正常均衡中红色表示故障报警。加上一个轻触按键来做人工触发的手动均衡启动方便产线测试时快速验证功能。这套人机交互设计看上去简单实际调试时帮了大忙。比如均衡功能出了偏差我从串口打印里能看到每一节电压的历史曲线配合LED状态基本上能秒级定位问题出在采样、策略还是执行器件上。做产品可维护性和功能本身同等重要这句话是我做过好几个项目之后的深刻教训。4. 均衡策略的实现从电压差判断到滞回控制的完整逻辑4.1 主流程STM32F745ZG里均衡策略的状态机均衡策略我写成了一套有限状态机核心状态有四个空闲、充电均衡、放电均衡和故障保护。STM32F745ZG每次进入控制周期时先读MP2642GR-Z的状态寄存器拿到两节电芯的电压和温度然后经过滤波和校准补偿得到最终的V1和V2再做判断。if (temp 45 || temp 0) { state FAULT_PROTECT; disable_balance(); } else if (fabs(V1 - V2) BAL_THRESHOLD_STOP) { state IDLE; disable_balance(); } else if (fabs(V1 - V2) BAL_THRESHOLD_START) { if (V1 V2) { enable_balance(CH1, BAL_CURRENT, bal_duration_ms); } else { enable_balance(CH2, BAL_CURRENT, bal_duration_ms); } }BAL_THRESHOLD_START和BAL_THRESHOLD_STOP这两个阈值我分别定为30mV和10mV。这里面的设计考量很关键如果你只设一个阈值比如20mV那么当电压差在20mV附近轻微波动时均衡会频繁启停MOS管和电阻的热循环累积起来会严重影响可靠性。设两个阈值形成一个回差区间——超过30mV才启动均衡回落到10mV以内才停止中间这段自然形成滞回保护。这其实和温控器控制空调的基本逻辑一样靠一段回差避免执行机构频繁动作。4.2 充电场景和放电场景下的差异化策略均衡策略需要区分充放电状态很多人容易忽略这一点。充电过程中电流方向是给电池注入能量电压偏高那节电芯的在充状态会持续放大不平衡此时均衡的意义在于防发散而在放电过程中容量小、电压偏低的那节会更早触底均衡的意义在于限制落差的扩大。我在实现中把充电均衡的优先级调高因为充电时的均衡直接关系到过充保护和热安全放电时则适当放宽判断条件因为低电压区电池的极化效应会带来更大的电压波动如果沿用充电时的严格阈值可能会造成不必要的均衡动作。具体做法是两套阈值参数充电时启动阈值30mV放电时启动阈值放宽到50mV。这个差异化的处理是在实测过程中根据电压曲线慢慢调出来的不是拍脑袋定的。4.3 温度补偿和老化修正策略里的隐藏加成项电池的电压与SOC的关系并不是一条固定曲线温度越低相同SOC下的电池端电压越高或者说极化越大单纯比较电压来判断平衡性会带来误差。我的策略里加入了一个简单的一次线性温度补偿在低温环境下把电压测量值按温度系数修正后再送入判断逻辑。这个系数不是拍出来的我是在恒温箱里测了三组温度点0℃、25℃、45℃之后拟合出来的虽然简单但效果明显低温下误均衡的概率大幅下降。老化修正目前做的是初步版本系统会记录每次充满电之后各节电芯的电压平台通过长期数据观察给每节电芯建立一个缓慢更新的偏差修正项。每次均衡判断时把这个修正项加到测量值上再做比较。这样一来即使其中一节电芯因为老化容量衰减系统也能通过学习不断调整判断依据而不是永远用出厂时的固定参数。这个功能目前已经跑通属于用了就回不去的那种体验。5. 实测数据与效果均衡前后的电压曲线对比和问题复盘5.1 搭建测试平台的过程以及测量误差的控制测试平台是这套系统验证的重要一环。我用了两块容量相同的18650电芯先把其中一节人为放掉一些电量制造出约50mV的开路电压差模拟真实场景中最常见的不平衡状态。然后接上均衡板用电子负载设定0.5A的放电电流用另一个可编程电源做充电测试全程记录两节电芯电压的变化轨迹。测量仪器上我用了六位半的台式万用表做标定先校验板子上的电压采样值确认整体误差在5mV以内之后才开始记录均衡数据。这里有个容易翻车的细节如果你用示波器探头去测电池电压探头本身的高阻输入也会和采样电路形成并联关系影响测量结果。我全程用的是独立的电压记录仪每路输入阻抗都在10MΩ以上对被测电路的负载效应可以忽略不计。5.2 被动均衡在时间轴上的表现波纹不太好看但最终能拉平测试结果符合预期。初始电压差约50mV均衡启动后高压侧电芯的电压开始以肉眼可见的速度下降。我选的均衡电阻让单节均衡电流约0.75A那么对一节容量2.5Ah的电芯来说每小时大概能消耗掉约0.75Ah的电荷对应电压下降的速度大约在每小时80mV左右取决于电芯的SOC-OCV曲线斜率。大约40分钟后电压差从50mV缩小到15mV以内随后滞回区间发挥作用均衡停止。这里要诚实地提一句被动均衡的电压曲线并不是平滑的而是有锯齿状的波动。原因在于均衡动作的电流会同时引起电池内部极化效应断开均衡之后电压会有一个回弹。如果只看几个采样点甚至会怀疑系统在震荡。看最终效果的话停止均衡静置30分钟后两节电芯的开路电压差能保持在5mV以内这个精度对绝大多数应用足够了。5.3 充放电循环后的一致性表现才是最该关注的结果单独的均衡效果测试只能证明能拉平真正要验证的是能不能保持住。我做了三轮完整的充放电循环测试每轮用0.5A充电到4.2V截止静置1小时再用0.5A放电到3.0V截止静置1小时记录整个过程中电压差的变化。结果很有意思。第一轮循环结束时两节电芯的最终放电截止电压差大约在12mV左右第二轮缩小到9mV第三轮基本稳定在8mV以内。这说明均衡系统在充放电周期里不断修正小的偏差让两节电芯的SOC轨迹越来越同步。这个趋势非常重要——这意味着系统的均衡策略是收敛的而不是只做一次性修正。收敛性才是评价均衡系统的最核心指标。5.4 实测踩坑记录最容易让均衡失效的三个坑我全都踩过第一个坑是PCB布局导致的采样误差。最初版本把均衡电流的走线和电压采样线平行走了很长一段结果均衡开启瞬间采样线感应到的压降导致单片电压读数跳变了好几十毫伏策略被干扰得乱七八糟。后来把采样线改成从电芯端直接单独引出远离功率走线问题才消失。第二个坑是均衡电阻的功率余量不足。我一开始用了0603封装的4.7Ω电阻标称功率0.1W实际均衡功率在0.7W左右连续工作十分钟电阻表面温度直接超过120℃颜色都变了。后来换了2512封装的2W电阻同时在电阻下方PCB上铺了大面积铜箔和过孔阵列辅助散热铜箔还有散热作用但过孔阵列对导热帮助确实明显这个问题才解决。第三个坑是关于均衡使能信号在MCU复位瞬间的毛刺单片机上电复位时GPIO电平会出现短暂的不确定状态如果此时MP2642GR-Z意外收到使能信号均衡可能会在系统初始化之前就开启而此时策略程序还没有跑起来均衡会一直开下去。解决方案是在GPIO配置阶段先设置默认拉低再初始化芯片同时在外围加一颗10kΩ下拉电阻确保复位阶段均衡通道处于关闭状态。这三个坑每一个都值得后来人引以为戒。6. 这套均衡模组的后续扩展方向和我在实际项目里的最后几点体会两节串联的均衡方案做扎实之后往更多节数扩展的路其实已经铺好了。MP2642GR-Z本身支持多节串联的级联使用只需要把每两节看作一个均衡单元用STM32F745ZG做统一的调度就能搭出4节、6节、甚至更多节的均衡系统。控制策略的框架完全不用动只是把数据数组拉长、把通道数量扩展一下的事。计算资源上SMT32F745ZG的余量还很大目前运行均衡策略只占用了CPU的10%都不到。我在考虑后续把电芯内阻在线辨识也做进来——通过短暂注入一个小电流脉冲监测电压响应从而估算每节电芯的当前内阻。内阻和容量是评估电池健康状态的两个核心参数能在同一个系统里实时动态更新对储能系统的运维很有价值。最后分享一点个人体会。均衡电路在整个BMS系统里看上去是功能最简单的一块——不过就是比较电压、决定放不放电阻而已。但恰恰是这种简单的功能最容易在工程化阶段翻车。我的经验是先做扎实的采样链路再谈策略优化最后才考虑扩展功能。采样不准再漂亮的均衡算法都是空中楼阁。而测试验证的阶段一定不要省略极端工况和长时间的老化循环我遇到的那些隐藏在常温短测里的问题几乎全部是在长时间的循环测试中暴露出来的。如果你也正在做类似的小型储能均衡系统希望这篇记录能帮你少走点弯路。
阅读完成 · 觉得有帮助?
咨询建站