基于MP2642GR-Z与ATSAME70Q21B的2S电池主动均衡方案设计与实测
做储能和备用电源的朋友对两节串联电池均衡这几个字应该不陌生。这篇文章要聊的主角是 MP2642GR-Z 和 ATSAME70Q21B 的组合——MP2642GR-Z 负责在两节电芯之间主动搬运电荷ATSAME70Q21B 这颗 Cortex-M7 内核的 MCU 负责采样、判定、保护和控制。整套方案已经在一块实际的 2S 备电模块上跑通文章会从选型逻辑讲到硬件电路、软件状态机再到实测数据和调试踩坑适合正在做 2S 电池包、小型储能、UPS 备用电源的硬件和嵌入式工程师参考。为什么想写这个因为我发现很多人对串联电池均衡的理解还停留在加个电阻放电就行的层面。去年我经手的一个 2S 备电模块客户反馈循环不到 300 次容量就开始明显跳水。拆开检测时两节电芯的静置压差已经拉到 80mV 以上充电时高的一节先顶到 4.2V 保护低的那节还挂在 3.8V整包的可用容量硬生生缩水了一成多。就是那次之后我才决定把主动均衡方案认真做一遍也才有了下面这些内容。1. 串联两节电池为何也会出问题压差背后是容量在流失1.1 失配的三个来源制造、温度、老化两节电芯串联理论上电流完全相同SoC 应该一直保持一致。但实际电池包从来不是理想情况失配在出厂那一刻就已经埋下了。第一是制造误差。同一批电芯的容量、内阻、自放电率都有离散性厂家给出的容量规格比如 1800mAh实际可能是 1780 到 1820mAh 的分布。这个差异在出厂时就有只是比较小通常静置压差在 10mV 以内不太容易引起注意。但请注意它是后续所有问题的种子。第二是温度梯度。电池包内部的热分布不均匀靠近发热元件的电芯温度可能比另一节高 3 到 5℃。温度高的一节自放电更快极化也更小在充电末端的电压拐点会滞后。这直接导致同一个充电电流下两节电芯的电压曲线分离而且是越靠近满电状态分离越明显。第三是老化速度不同。循环次数越多容量衰减越快而且衰减速度跟温度、充放电深度强相关。两节电芯如果长期处在不同温区循环几百次之后容量差可能从 2% 拉大到 8%。这时静置压差会明显变大充电时高压保护提前触发整个电池包的可用容量就由较差的那节电芯决定。1.2 不均衡的系统代价充不满也用不完串联电池包的可用容量遵循木桶效应——由最低的那节电芯决定。充电时电压高的一节先到达截止电压比如 4.2VBMS 为了保护它只能切断充电回路。此时低电芯可能才充到 90%整包就满了。放电时反过来电压低的那节先到放电截止电压比如 3.0VBMS 切断放电高电芯还剩不少余量整包就空了。我统计过一组实际数据当两节电芯静置压差达到 80mV 时整包可用容量大约损失 12%达到 150mV 时损失接近 20%。对储能和备电系统来说这不仅是容量缩水还会因为频繁触发保护而增加循环次数进一步加速老化形成恶性循环。所以别觉得两节电芯没那么复杂。恰恰因为电池节数少每一节在整个包里的权重更高压差的影响反而更直接。这也是我坚持在这个项目里上主动均衡的原因。2. 方案选型主动均衡为什么能压过被动均衡2.1 被动均压板为什么先被 pass 掉做 2S 电池包最省事的方案是买一块被动均衡板每节电芯并联一个放电电阻检测到哪节电压高就通过电阻把多余的电量耗掉。优点是电路简单、成本低、几乎没有软件难度。缺点也很明显。被动均衡的均衡电流通常只有 50 到 100mA而且只放不补。假设两节电芯压差 100mV内阻差异导致的偏离电流可能只有几十毫安被动均衡勉强能维持现状但要真正把压差拉平需要放掉几十 mAh 的电量也就是好几个小时。在充电末端那点时间里根本来不及。更重要的是热问题。被动均衡把电量变成热量均衡电流越大电阻发热越厉害。在密闭的储能壳体内这等于给电池包额外加了一个热源。容量衰减本来就受温度影响这么做等于自己给自己挖坑。所以我从一开始就把被动方案排除了。下面是当时做的对比表供大家参考对比项被动均衡MP2642GR-Z 主动均衡能量去向电阻耗散成热转移到低电芯循环利用典型均衡电流50~100mA数百 mA 级100mV 压差收敛时间数小时约 35 分钟热影响明显升温少量温升外围复杂度简单中等电感电容软件难度低中等状态机保护2.2 MP2642GR-Z 的主动均衡逻辑MP2642GR-Z 是一款面向两节串联电池的集成式主动均衡芯片。它内部集成了功率开关和控制逻辑通过电感储能的方式在相邻两节电芯之间搬运电荷。核心特点有三个。第一是双向传输。芯片可以根据指令把电荷从 CELL1 搬到 CELL2也可以反过来从 CELL2 搬到 CELL1方向由控制引脚决定。这样无论充电、放电还是静置状态都可以让电压高的电芯接济电压低的电芯。这个双向很关键因为很多时候高压侧和低压侧的位置是动态变化的尤其是动态负载下。第二是均衡电流可观。相比被动均衡的几十毫安MP2642GR-Z 在合理配置下可以达到数百毫安级别的均衡电流。实测几十分钟就能把 100mV 量级的压差拉到 10mV 以内。这在备用电源要求快速恢复一致性的场景里是决定性优势。第三是集成度高。芯片内部已经包含功率开关管、驱动电路、电流检测和保护逻辑外围只需要一个电感、少量电容和电阻就能工作。这对缩小 PCB 面积、降低 BOM 复杂度非常友好。当然这颗芯片也有一些使用约束。它对输入电压范围有明确要求超出范围会进入保护电感选型影响均衡电流和效率选小了电流上不去选大了又会饱和。这些约束我在后面硬件部分会具体讲。2.3 ATSAME70Q21B 在这个系统里管哪几件事ATSAME70Q21B 属于 SAM E70 系列Cortex-M7 内核主频最高 300MHz2MB Flash384KB RAM。放在一个 2S 均衡系统里性能显然过剩但我要的就是这种过剩。它在这个系统里承担四件事。一是电压采样。利用 MCU 自带的 12 位 ADC配合外部精密分压和滤波把两节电芯的电压数字化。300MHz 主频下ADC 可以跑出足够高的采样率配合过采样做平均能把分辨率再拔高几 bit。二是均衡判定。跑状态机和均衡算法根据实时电压差、温度、工作状态决定是否开启均衡、均衡方向和均衡时长。三是保护与告警。监测过压、欠压、过温处理看门狗和通信异常。SAM E70 的定时器、中断控制器和故障输入引脚都足够丰富可以做到硬件级和软件级双重保护。四是通信。SAM E70 自带多路 UART、SPI、I2C 和 CAN-FD 接口往上可以跟主机通过 CAN 或 RS485 交互往下可以跟均衡芯片通过 GPIO 通信。做储能产品的人都知道通信接口的余量直接决定了产品后续的扩展空间。选这颗 MCU 还有一个原因它的 ADC 和 PWM 外设配置灵活后续如果要扩展成 4S、6S 电池包或者要接双向 DCDC 控制同一颗芯片都还能继续用。对我这种不喜欢频繁换平台的人来说这种余量很值钱。3. 硬件电路搭建采样精度决定均衡效果的上限3.1 电压采样链路开尔文连接与 RC 滤波均衡算法再聪明如果电压采不准一切都是白搭。这是我在这个项目里最重要的体会。两节串联电池的电压测量常见的错误是直接从功率母线上分压。功率路径上的大电流会在地线上产生压降导致采样到的电压叠加了噪声和偏移。正确做法是开尔文连接电芯的正、负极分别引出独立的细线接到采样电路采样线路不承载功率电流。以我们的设计为例CELL1 电压是 VTOP 到 VMIDCELL2 电压是 VMID 到 VBOT。三条采样线从电芯端子直接引出经过 100Ω 串联电阻和 100nF 电容组成的一阶 RC 滤波再进入 ADC 输入引脚。RC 截止频率约 16kHz既能滤掉均衡芯片开关产生的纹波又不会让电压信号响应变迟钝。ADC 的参考电压也很关键。SAM E70 的 ADC 可以用内部参考但内部参考的温漂系数不够理想。我们用的是外部高精度基准精度 0.1%温漂 5ppm/℃这样整个采样链路的误差预算才能控制在 ±5mV 以内。另外一定要做逐台校准。每块板子在出厂测试时用精密电源给两个已知电压读 ADC 原始值计算出增益和偏移写入 Flash。这样即使电阻有 1% 误差校准后也能把精度拉回 1mV 以内。量产阶段这个步骤不能省。3.2 均衡主回路MP2642GR-Z 周边电路要点MP2642GR-Z 的外围电路看起来简单但有几个细节决定了它能不能稳定工作。电感选型是第一位的。根据芯片的规格建议我们选了一颗 4.7μH、饱和电流大于均衡峰值电流的电感。峰值电流和输入输出电压差有关压差越大峰值电流越大。电感饱和电流不够的话会出现电流尖峰轻则均衡效率下降重则触发芯片的过流保护。我后来在调试中因为选错电感吃过亏这部分放到第五节细说。输入输出电容不要省。靠近 VTOP 和 VBOT 引脚各放一颗 10μF 陶瓷电容再并联一颗 0.1μF 高频电容目的是给内部功率开关提供低阻抗的电流回路。如果电容离引脚太远寄生电感会导致开关节点电压振铃EMI 超标不说芯片还容易误触发保护。控制引脚的上下拉电阻要按照手册配置。我们使用 GPIO 直接控制 EN 和 DIR 引脚GPIO 默认电平在 MCU 启动阶段是浮空或低电平因此硬件上要把 EN 引脚用 10kΩ 电阻下拉到地确保 MCU 复位期间均衡处于关闭状态。这个细节如果漏了上电瞬间均衡芯片可能处于不确定状态造成意外均衡电流。STAT 状态引脚同样接 LED 和 MCU 的 GPIO方便调试时直接观察均衡是否在工作。量产阶段这个引脚可以用来做产线自检判断芯片是否正常上电。3.3 控制接口与隔离MCU 和均衡器的连接方式在这个 2S 方案里MCU 和 MP2642GR-Z 之间的控制信号不多一个使能 EN、一个方向 DIR、一个状态 STAT。用 GPIO 直连即可不需要 I2C省去了协议解析的开销。但信号完整性要注意。均衡芯片工作时开关节点会有较大的 dV/dt控制信号如果走线太长且没有回流地容易收到串扰。我们的做法是控制线走短、走粗旁边铺地铜必要时加 33Ω 串联电阻。这样即使开关噪声耦合进来幅度也不足以触发误动作。至于隔离2S 电池包电压范围大致在 6 到 8.4V属于安全特低电压不需要光耦隔离。但如果系统里有市电供电的充电器或者电池包要跟其他高压设备共地就需要评估接地环路。我们在备电整机里采取的策略是均衡系统和充电管理共地但用独立的电源轨给采样运放供电避免数字电路的开关噪声通过电源串进模拟链路。这个分开供电的做法虽然多花了一个 LDO 的钱但换来的是 ADC 读数干净很多。4. 均衡状态机与安全阈值软件要回答的三个问题4.1 数据准备滤波与校准均衡控制本质上是对电压差做闭环控制所以软件的第一步是把电压读准。ADC 采集我们在每个控制周期10ms内采集 32 次去掉最大最小值后取平均相当于一个简单的中值平均滤波。这比单纯均值滤波更能抑制尖峰噪声。然后再套一阶低通滤波系数 alpha 取 0.2也就是当前值占 20%历史值占 80%。这个滤波器的截止频率大概在 1Hz 左右既能平滑电压抖动又不会让控制响应慢到无法接受。均衡不是越快越好而是越稳越好。校准的数据在出厂时写入 Flash上电初始化时读出来对原始 ADC 值做增益和偏移补偿。校准后实测两台样机在 2 到 4.2V 范围内电压测量误差都在 ±2mV 以内。这个精度配合 50mV 的启动阈值有足够裕量。4.2 判定逻辑起停阈值、迟滞与时间窗均衡状态机我分成五个状态IDLE、MEASURE、CHECK、ACTIVE、VERIFY。系统上电后进入 IDLE等待一定延时后进入 MEASURE在 MEASURE 里连续采样一段时间比如 2 秒得到稳定的 V1、V2 和 ΔV。然后进入 CHECK做如下判定if (abs(delta_mv) START_THRESHOLD) /* 50mV */ { set_balance_dir(delta_mv 0 ? CELL1_TO_CELL2 : CELL2_TO_CELL1); enable_balancer(true); state BAL_ACTIVE; } else { enable_balancer(false); state BAL_IDLE; }在 ACTIVE 状态里每个控制周期都重新计算 ΔV。如果 |ΔV| 低于 STOP_THRESHOLD10mV说明已经均衡到位关闭均衡进入 VERIFY。VERIFY 里等 1 分钟确认压差没有反弹再回到 IDLE。这里有几个工程细节。一是迟滞。启动阈值 50mV停止阈值 10mV中间的 40mV 就是迟滞带。如果不设置迟滞压差在阈值附近抖动时均衡器会反复启停每次启停都有瞬态冲击长期下来对芯片和电芯都不好。二是最长时间窗。我们给单次均衡设置了最长 1 小时的保护时间。如果到了 1 小时压差还没收敛说明可能电芯内部有微短路或容量严重失配这时候应该停止均衡并上报异常而不是无限均衡下去。三是静置判定。均衡只允许在静置或小负载状态下进行。如果检测到充电或大电流放电立即暂停均衡避免均衡电流和主回路电流叠加造成电芯局部过载。if (load_current_ma LOAD_LIMIT_MA) { suspend_balancing(); }4.3 故障兜底过压、欠压、过温、看门狗MP2642GR-Z 本身有过流和过温保护但系统级的故障还得靠 MCU 来兜底。过压保护任一电芯电压超过 4.25V立即关闭均衡同时切断充电 MOS如果整机里有。均衡过程中如果发现电压异常上升说明充电回路可能失控此时均衡本身不能解决问题必须进故障锁存状态。欠压保护任一电芯电压低于 2.8V关闭均衡。电芯电压过低时强行均衡会导致过度放电损伤电芯。过温保护在电芯表面和均衡芯片附近各放一颗 NTC电芯温度超过 55℃ 或芯片温度超过 110℃ 时停止均衡。均衡本身就是一个能量转移过程虽然有损耗但效率不是 100%热量会累积。散热设计再好也要在软件层面兜底。看门狗SAM E70 的独立看门狗设置为 2 秒超时。主循环里每个周期喂狗如果软件跑飞看门狗复位后GPIO 初始化会把 EN 拉到低电平确保均衡处于关闭状态。这个默认安全的设计非常重要。故障处理我统一采用锁存 上报 手动恢复一旦进入故障状态置故障标志通过 CAN 上报给主机同时 LED 快闪提示。恢复条件因故障类型而异过温和通信类故障可以自动恢复过压欠压类必须等待人工确认。这是考虑到储能设备的维护场景宁可系统停不能让电池带着隐患继续跑。5. 实测结果从 100mV 压差到 5mV以及在调试中踩的坑5.1 静态均衡测试数据我们做了三种静态测试。第一种是标准压差测试用精密电源把 CELL1 充到 4.1VCELL2 放到 4.0V初始压差 100mV。开启均衡后记录压差随时间的变化前 10 分钟压差从 100mV 降到 45mV20 分钟后降到 18mV35 分钟后降到 8mV最终稳定在 5mV 以内。均衡电流平均值大约在 280mA整个过程的效率和芯片温度都在规格范围内。第二种是小压差测试初始压差 20mV低于启动阈值系统正确保持 IDLE 状态不产生误动作。第三种是超时保护测试人为让压差一直维持在 50mV 以上通过持续给高电压电芯充电1 小时后系统按设计停止均衡并上报异常没有出现无限均衡的情况。测试数据汇总如下测试项初始状态均衡后用时标准压差CELL1 4.1V / CELL2 4.0VΔV100mVΔV 5mV约 35 分钟小压差ΔV20mV不启动—充电叠加ΔV60mV 1A 充电ΔV 10mV约 15 分钟高温工况40℃ 环境ΔV60mVΔV 10mV约 40 分钟5.2 动态工况下的表现在充电状态下测试1A 充电电流初始压差 60mV均衡开启。因为均衡转移的是相邻电芯之间的电量充电电流本身也会促进电压趋近叠加效果下压差收敛速度明显加快15 分钟内降到 10mV 以内。而且全程没有触发过压保护说明均衡方向判断和高侧转移逻辑是正确的。在脉冲负载下测试模拟备电系统的放电脉冲比如 2A 持续 1 秒关断 3 秒均衡在负载过限时正确暂停负载消失后自动恢复状态机切换流畅没有出现卡死状态。还有一项高低温测试在 40℃ 环境箱里做 60mV 压差均衡均衡时间从常温的 25 分钟延长到 40 分钟。分析原因是高温下电芯自放电加快、等效内阻降低平衡点漂移使得收敛变慢。这个结果提醒我们高温场景的均衡策略要更保守阈值适当放宽。5.3 三个实测踩坑记录第一个坑是 ADC 噪声导致均衡反复启停。第一版固件里滤波强度不够ADC 读数在阈值附近来回跳均衡器以秒级频率启停。后来用示波器看了 ADC 输入引脚发现均衡器工作时开关噪声通过地平面耦合进了采样链路把原本干净的信号叠加了约 30mV 的毛刺。解决方法是加强 RC 滤波、优化 ADC 采样时序在均衡器开关周期的静默间隙采样、增大迟滞带。三者叠加之后误启停完全消失。第二个坑是电感饱和引起的电流尖峰。最初为了追求均衡电流选了饱和电流偏小的电感结果在压差较大时出现电流平台期和异常发热。换上饱和电流余量 50% 以上的电感后波形干净了芯片表面温度也降了 10℃ 以上。这提醒我电感选型不能只看电感量饱和电流和 DCR 同样决定系统的稳定性。第三个坑是 STAT 状态引脚在 MCU 启动期间的误判。MCU 复位后 GPIO 默认是高阻输入STAT 引脚的 LED 会因为芯片内部状态而被点亮或闪烁容易让产线测试误判为异常。最后在固件初始化里显式配置 STAT 引脚的上下拉并增加 100ms 的启动延时再读取问题解决。6. 如果再让我做一次我会在哪些地方调整写到最后分享几个经过这次项目沉淀下来的判断不一定对但都是实操中形成的。首先是主动均衡的性价比问题。2S 电池包的均衡被动方案在成本上确实有优势但如果产品定位是长期运行的储能或备电设备主动均衡带来的容量保持率提升往往能在一年内从少换一次电池里赚回来。这次方案里 MP2642GR-Z 的 BOM 成本增加换来的是整包使用寿命和可用容量可见的提升账算得过来。其次是 MCU 选型。ATSAME70Q21B 的性能对这个项目来说确实冗余但冗余恰恰是它的价值——当客户要求增加远程诊断、历史数据记录、更复杂的 SoC 估算算法时不需要换主控重写固件同一个平台上直接加功能就行。选型时多留 30% 的余量比事后迁移平台省的成本多得多。再一个是测试方法的建议。均衡电路的验证不能只做功能测试一定要做边界测试人为制造最大压差、最小压差、高温压差、脉冲负载叠加压差。很多问题只在边界条件下才暴露。我们后来把这套测试固化成产线标准效果比单纯的功能测试好很多。最后是一个小技巧均衡是否真的在搬运能量而不是两边都在放电可以通过监测总电流来判断。我们会在均衡期间持续监控电池包的输入输出电流如果总电流有明显的变化趋势说明效率有问题需要检查电路。这个判断方法简单有效推荐大家试一下。