☰
STM32F723ZE+MP2642实现2S串联电池均衡:状态机设计与实测调参
2026/10/15 1:42:11 网站建设 项目流程

把两节串联电池的均衡功能真正调通,不是给颗芯片、写个GPIO翻转就完事的。我最近在做一个储能/备用电源的主控板,硬件上用了 MP2642GR-Z 做电池采样和均衡前端,策略部分交给 STM32F723ZE 来跑,光是压差阈值、迟滞、均衡时长的组合就来回调了好几轮。这篇就把这套做法的完整思路写出来:硬件上谁负责什么、均衡状态机怎么写、参数怎么定、实测会遇到哪些“看起来像故障但其实是正常现象”的坑,给正在做 2S 电池组 BMS 或备用电源均衡逻辑的开发者一个可以直接参考的版本。

先说结论:均衡本身不复杂,但能不能稳定、不误判、不反复启停,拼的是细节。两节串联电池看似简单,实际跑起来之后,自放电差异、采样噪声、静置电压反弹都会跳出来找你麻烦。

1. 为什么两节串联电池组也要认真做均衡

1.1 串联一致性问题从哪来

很多人觉得只有十几串的大电池组才需要均衡,两节电池串联嘛,出厂都差不多,能有多大差别。实际上,哪怕是同批次、同容量、同内阻范围的电池,装到一起之后也会慢慢变得不一样。

串联回路的电流是同一个,充电时电流同时流过两节电池,但各节电池的有效容量、内阻、极化特性不同,导致每节电池实际到达的电压和荷电状态(SOC)不同。最直接的体现就是:容量偏小的一节先充满,容量偏大的一节还在路上。放电时反过来,容量偏小的一节先放空,整个系统的可用容量就被这节“短板”锁死了。

更隐蔽的是自放电率差异。两节电池的自放电率哪怕只差 0.5%/月,静置半个月后也会产生明显的电压差。储能和备用电源场景里,电池大多数时间挂在浮充或涓流状态下,长期积累的不一致比循环使用的电池组更明显。所以“两节电池也要均衡”这句话在备用电源场景里不是凑数,而是刚需。

1.2 不均衡会造成什么后果

把两节电压不一致的电池串联起来,最直接的风险是过充和过放。

充电时,电压高的一节会比电压低的一节先到达充电截止电压。如果系统只看总电压或者只看其中一节,就容易让另一节继续被“硬充”,超过安全电压区间。放电时反过来,电压低的一节先到达放电截止电压,继续放电就有过放风险。

对备用电源来说,还有另一个问题:电池长期处于高 SOC 状态,负极析锂等副反应在高压下会加速,导致电芯老化和内阻增长,内阻增长又进一步扩大不一致,形成恶性循环。所以均衡不是“把压差抹平”这么简单,它是在压制整个电池组最危险的那条老化链路。

我在实测中还遇到过“静置反弹”现象:均衡停止后,刚被拉低的电池电压会自己回升,压差似乎又回来了。第一反应是均衡没生效,其实这是极化电压在放电后的弛豫过程,是正常的电化学行为。后面第 5 节会专门用一组数据来说明。

2. MP2642GR-Z 在均衡系统中的实际分工

2.1 系统架构:采样、驱动、通信三件事

MP2642GR-Z 在我这块板子上的角色是电池前端管理,负责三件事:采集两节串联电池的电压、接收 MCU 的指令去控制均衡通道、把状态和告警上报。STM32F723ZE 不直接去读电芯电压,也不直接驱动均衡开关,它只通过总线对前端芯片下发参数、读取数据。

这样的分工是合理的。电池电压是高边浮地信号,MCU 的 ADC 直接采样要处理共模电压和地电平漂移问题,尤其两节串联时中间节点电压会跟着充放电上下浮动。前端芯片用差分结构去采每一节电池的电压,天然规避了这个问题。我把信号走向列一下:

  • 电池单元正负极 → MP2642GR-Z 的差分采样通道
  • MP2642GR-Z 均衡驱动输出 → 外部均衡电阻 → 电池单元两端
  • MP2642GR-Z 通过 I2C/SPI 接口 → STM32F723ZE
  • MP2642GR-Z 告警/中断脚 → STM32F723ZE 外部中断输入

从控制闭环看,MCU 是策略层,前端芯片是执行和感知层。MCU 拿到电压后判断要不要均衡、开哪个通道、用多大占空比,然后写寄存器让前端芯片执行。

2.2 电压采样精度与抗噪处理

前端芯片内部的差分 ADC 精度通常能做到毫伏级。对均衡控制来说,这个分辨率足够支撑 10mV 级别的压差判断。但硬件精度是硬件的,到了 MCU 这边还得做软件处理。

最典型的问题是采样噪声。开关电源的纹波、均衡电阻通断瞬间的电流跳变、PCB 走线耦合,都会在 ADC 码值上叠加噪声。我调试时见过原始采样值有 ±15mV 的抖动,这个幅度已经比均衡阈值还大了。如果不做滤波直接拿来判断,均衡开关会以秒级频率反复吸合、断开。

我在软件里做的是两段处理:先做滑动平均滤波,窗口取 8~16 次采样;再做一次中值滤波,剔除偶发的毛刺。不要一上来就用卡尔曼滤波之类的复杂算法,对于电池电压这种慢变化信号,滑动平均加中值已经能压掉绝大部分噪声,而且参数直观、好调。

另外有一点要提醒:均衡使能期间的采样数据要特殊处理。均衡通道打开时,电芯两端被等效并联了均衡电阻,测到的端电压会有小的跌落,这是正常现象。状态机里要把“均衡中”和“未均衡”两个阶段的采样值分开处理,或者干脆在均衡电流稳定后再采样。

2.3 均衡驱动的控制方式

MP2642GR-Z 的均衡通道在板级上对应的是外部均衡电阻网络,芯片内部集成了均衡开关管,MCU 通过寄存器控制开关的导通和关断。实际均衡电流取决于电芯电压、均衡电阻阻值和开关管的导通电阻。

如果芯片支持 PWM 占空比控制,就可以通过占空比来调节有效均衡电流。我用的简单模型是:

  • 均衡电流 I_bal = (V_cell × D) / (R_bal + R_on)
  • 其中 D 是占空比,R_bal 是外部均衡电阻,R_on 是芯片内部开关导通电阻

举个例子:电芯电压 3.7V,均衡电阻 100Ω,开关导通电阻 0.1Ω,占空比 50%,均衡电流约为 18.5mA。这个电流用来处理几十毫伏的压差是够的,而且 100Ω 电阻上的发热很小。如果想让均衡更快,可以把电阻降到 10Ω 并限制占空比在 20%~30%,兼顾速度和温升。具体参数怎么选,第 4 节会给出计算方法。

2.4 通信接口和告警中断

MP2642GR-Z 的寄存器读写接口走 I2C 或 SPI,我这边用的是 I2C,频率 400kHz。通信内容主要是:写均衡通道配置、写占空比/使能位、读电芯电压原始值、读芯片温度或外部 NTC 温度、读故障标志。

有一个经验值得分享:读电压不要一次性读完两节就完事,最好连续读多帧,在 MCU 端做一致性校验。比如连续读 3 次,任两次差值超过某个阈值就认为通信异常或采样异常,此时宁可不动作,也不要拿坏数据去触发均衡。

告警中断脚建议接到 STM32F723ZE 的一个 EXTI 引脚上,配置为下降沿触发。前端芯片检测到过压、欠压、过温等紧急状态时拉低中断脚,MCU 在中断回调里立刻关闭均衡通道、进入故障保护流程。这样比轮询总线更能保证响应速度,也让主循环里的状态机能保持简单。

3. STM32F723ZE 上的均衡状态机:策略细节与关键时序

3.1 四状态结构:IDLE、SAMPLE、JUDGE、ACTIVE

均衡逻辑我用一个简单但在工程上够用的状态机来实现。状态转换的伪代码长这样:

typedef enum { BAL_IDLE, BAL_SAMPLE, BAL_JUDGE, BAL_ACTIVE } bal_state_t; void bal_loop(void) { switch (state) { case BAL_IDLE: // 1秒定时器触发一次采样 if (flag_1s) { request_afe_sample(); state = BAL_SAMPLE; } break; case BAL_SAMPLE: // 获取两节电芯电压,软件滤波 v1 = cell_voltage_filter(CELL_1); v2 = cell_voltage_filter(CELL_2); temp = read_temperature(); state = BAL_JUDGE; break; case BAL_JUDGE: if (check_balance_entry_condition(v1, v2, temp)) { // 高电压单元投均衡 enable_balance(get_higher_cell(), calc_duty(v1, v2)); state = BAL_ACTIVE; } else { state = BAL_IDLE; } break; case BAL_ACTIVE: // 均衡中,按更短周期监控 if (flag_100ms) { refresh_cell_voltage(); if (check_balance_exit_condition(v1, v2) || check_fault_interrupt()) { disable_balance(); state = BAL_IDLE; } } break; default: state = BAL_IDLE; break; } }

IDLE 阶段保持低功耗,1 秒周期做一次采样。SAMPLE 阶段做滤波和数据校验。JUDGE 阶段判断是否进入均衡。ACTIVE 阶段均衡通道打开,但监控周期缩短到 100ms,随时准备退出。

均衡过程不是一锤子买卖。一次均衡周期结束后,回到 IDLE 等待下一次采样判断。如果压差仍然超阈值,会进入下一轮。这样即使均衡电流偏小,也能通过多个周期逐步把压差压下来。

3.2 使能条件和安全互锁

均衡使能条件我列成了一张安全检查表,每一条都有明确目的:

  • 电芯电压在安全区间内:过压/欠压状态下禁止均衡。过压时打开均衡电阻反而可能加速温升,欠压时均衡会把电芯拉到更低。
  • 温差在允许范围内:电芯间温差大于某限值时不均衡,避免误把“温度差异导致的电压差异”当作“容量差异”。
  • 通信链路正常:连续读不到有效数据时立刻退出均衡,并置故障标志。
  • 均衡通道累计时间不超过上限:单次均衡上限 30~60 分钟,防止系统异常时均衡电阻长时间发热。

还有一个容易被忽略的点:均衡开启要延迟。进入 ACTIVE 状态后,均衡电流建立和电化学过程稳定需要一点时间,不要在开启后的 100ms 内就重新采样判断退出条件,否则可能因为瞬态电压跌落而误判“压差已消除”。我在实际代码里就是等 500ms 左右再开始用均衡中的采样值做退出判断。

3.3 为什么用 STM32F723ZE:算力不是重点,外设才是

均衡状态机本身用一颗 8 位单片机也能跑,但 STM32F723ZE 在这里优势不在算力,而在外设资源和扩展能力。

F723ZE 的主频 216MHz、带硬件浮点单元,电池电压滤波、SOC 估算里用浮点运算非常轻松。更重要的是它集成以太网 MAC 和 USB HS OTG,对储能/备用电源这个场景很实用:均衡过程的数据可以通过以太网上报到后台,USB 可以接维护工具做本地调试。板子上如果还有充电管理、系统电源监控、通信网关等功能,F7 这颗芯片的资源余量足够,不用把多个功能硬压在一颗小 MCU 上。

均衡这种控制任务对实时性要求其实不高,1 秒采样周期已经足够,但故障响应链路要优先保障。所以我用了中断脚处理紧急告警,而不是靠主循环轮询。这也是我给 F723ZE 分配中断引脚后特别注意的一点:普通逻辑可以慢慢跑,但保护逻辑必须走独立、快速的路径。

4. 均衡参数怎么定:压差阈值、迟滞和均衡时间估算

4.1 阈值和迟滞:别让均衡在临界点反复横跳

均衡阈值定多少,要综合考虑采样噪声、电芯自放电差异、温度梯度带来的电压偏差。我最终用的参数是:启动阈值 20mV,停止阈值 8mV,中间留出迟滞带。

如果没有迟滞,会有一个经典问题:压差在阈值附近抖动时,均衡通道频繁通断。每次开关都会引入一次电流阶跃,长期反复动作不仅影响 MOS 管寿命,还会让电池电压波形很难看。迟滞的必要性就是避免临界振荡。

启动阈值和停止阈值不是拍脑袋定的。启动阈值要大于系统最差情况下的采样噪声和温度误差之和;停止阈值要小于目标压差,但要留出余地,避免非要等到压差完全为零才停——那几乎不可能也不必要。均衡目标是让压差收敛到不影响系统安全的范围内,不是追求绝对的电压相等。

4.2 均衡时间和电量的估算方法

均衡本质上是把高电压电芯的电荷转移/消耗掉一部分,让两节电池的 SOC 对齐。电压差和电荷差之间的换算关系来自电芯的电压-SOC 曲线。

简化计算,假设电芯在平台区 dV/dSOC 约为 20mV/1%SOC,即每 1% 的 SOC 差异对应约 20mV 的电压差。那么压差 30mV 对应的 SOC 差约为:

ΔSOC = 30mV / 20mV = 1.5%

对于 2Ah 电芯,1.5% SOC 对应电量差:

Q_diff = 2Ah × 1.5% = 30mAh

如果均衡电流为 30mA,需要时间:

t = 30mAh / 30mA = 1h

这个计算是工程估算,不是精确的库仑计算,但对于选型已经够用。实际在磷酸铁锂等平台区很平的电芯上,dV/dSOC 会更小,意味着同样的 SOC 差异在电压上表现不明显,均衡判断会更依赖静置电压或 SOC 估算。这里要特别注意:平台区平坦的电芯,电压差小不代表不需要均衡。

我把不同均衡电流下的时间估算列了个表:

压差(mV)估算SOC差电量差(mAh) @ 2Ah均衡电流 18mA均衡电流 50mA均衡电流 100mA
201.0%2067min24min12min
301.5%30100min36min18min
502.5%50167min60min30min

从表格能直接看出,均衡电流决定了策略的可用性。如果均衡电流只有十几毫安,碰到 50mV 压差就要跑两三个小时,这在充放电切换频繁的场合没法接受。所以均衡电阻和占空比的设计要提前按最恶劣压差来算,而不是按“正常情况”来算。

4.3 均衡电阻选型和温升控制

均衡电阻的选择要在均衡速度和发热之间找平衡。电阻越小,均衡电流越大,越快,但发热越严重。电阻太大,均衡电流小到没意义。

我实际测试的两档配置供参考:

  • 100Ω,占空比 50%:均衡电流约 18mA,电阻功耗约 0.07W,几乎不发热,适合长期缓慢均衡。
  • 10Ω,占空比 20%:均衡电流约 74mA,电阻平均功耗约 0.2W,需要保持散热空间,适合快速均衡。

PCB 布局上,均衡电阻要避开热敏元件,并且和电池温度采样点的距离拉开。我在第一版板子就把均衡电阻放在温度探头附近,结果均衡一开,温度读数直接跳了 2℃,影响了温度保护判断。后面改到板边位置才解决。

由于被动均衡本质上是把多余的能量以热的形式消耗掉,如果电芯压差持续存在,均衡电阻会反复发热。设计时还要考虑持续工作的最坏情况:长时间高占空比均衡下,电阻表面温度不能超过规格书的降额温度。必要时在软件里加均衡温升保护,比如连续均衡 30 分钟后强制休息 5 分钟。

5. 实测与调参:三组实验数据、波形现象与踩坑记录

5.1 实验一:正常均衡路径

我用两节标称 2000mAh 的串联电芯做测试。先通过充放电管理把两节电芯人为弄出约 25mV 的压差,然后静置 2 小时,等待电压稳定。静置结束后的初始状态如下:

项目电芯1电芯2
电压3.875V3.850V
温度25.3℃25.1℃
压差25mV-

开启均衡,均衡通道选择电压较高的电芯 1,占空比 50%,均衡电阻 100Ω,实际均衡电流约 18mA。前 10 分钟压差从 25mV 降到 18mV,后面速度变慢,40 分钟时压差降到 9mV,此时触发停止阈值 8mV 的边缘,再过 5 分钟均衡自动退出。

这个实验验证了状态机基本路径,也验证了阈值迟滞有效:整个过程中均衡开关只动作了一次,没有反复通断。

5.2 实验二:采样噪声导致均衡频繁启停

第二批测试时,我把均衡阈值调到了 12mV 想试试更小的压差能不能处理。结果发现状态机在 JUDGE 和 ACTIVE 之间反复横跳,均衡开关在 20 分钟内动作了 40 多次。

排查链路是这样的:先让前端芯片输出原始采样码值,在 MCU 端通过调试串口打印。发现未滤波的数据抖动范围达 ±15mV,12mV 的阈值完全被噪声淹没。第一轮修复是加滑动平均滤波,抖动降到 ±4mV 左右;但阈值 12mV 依然偏紧,偶尔还会触发误动作。第二轮修复是加迟滞:启动阈值调回 20mV,停止阈值 8mV,问题彻底消失。

这里想强调一个排查经验:不要先怀疑芯片或硬件,先把原始数据和滤波后的数据同时打印出来看。很多均衡逻辑的“幽灵故障”其实都是数据质量问题。

5.3 实验三:静置电压反弹与“伪均衡”

均衡正常退出后,我观察到电芯 1 的电压在 10 分钟内从 3.842V 回升到 3.855V,压差又从 8mV 涨回到 15mV 左右。如果只看即时电压,很容易得出“均衡没用”的错误结论。

原因在于均衡电阻通路断开后,电芯端电压的极化分量会逐渐恢复,电压出现回弹。这不是能量倒灌,也不是均衡失效,而是电化学体系的正常弛豫过程。判断均衡是否有效,正确的做法是看静置足够长时间之后的开路电压趋势,或者在均衡前后引入 SOC 估算作为辅助。我在系统里增加了基于安时积分的粗略 SOC 差异监控,均衡的目标改为“SOC 差收敛”,而不是“瞬时电压差为零”。这个改动让系统在动态负载切换时也不会乱触发均衡。

三组实验做完的结论是:均衡逻辑要有滤波、有迟滞、有静置判断,三者缺一个都会在真实工况下暴露问题。

6. 从两块电芯到整柜储能:这套架构的扩展边界

6.1 多串扩展:按前端芯片能力迁移

两节串联是这套架构的最小验证单元,但它可以直接向多串扩展。MP2642GR-Z 如果支持 2~4 串,那么同一套 I2C 通信逻辑、均衡状态机、滤波算法可以平移;超过单芯片采样通道数的系统,可以用多颗前端芯片级联,MCU 通过不同的片选地址或片选信号区分。

向更高串数扩展时,均衡策略的复杂度主要在多通道调度:一次可以同时均衡多个通道,但要综合考虑均衡电流总和、系统温升、充电状态等因素。我从 2S 方案里沉淀下来的经验是:核心逻辑做成“单通道均衡服务”,多串只是多个通道的并发调度问题,这样的软件架构最清晰。

6.2 主动均衡方向:什么时候值得换

被动均衡的成本和复杂度低,缺点是能量以热形式耗散、均衡时间长。对小型备用电源来说,被动均衡完全够用。但如果系统容量到了几十安时甚至更高,压差对应的电荷差可能是几百毫安时,用被动均衡去耗散,时间太长,发热也不好控制,这时候就值得考虑主动均衡。

主动均衡通过电感、变压器等储能元件,把高电压电芯的能量转移到低电压电芯,效率高、发热小。MP2642GR-Z 这类前端器件如果预留了外部功率级接口,MCU 可以通过 PWM 控制能量转移的时序,状态机框架不需要大改,主要是把“控制均衡电阻导通”换成“控制转移拓扑的开关时序”。

从产品角度看,主动均衡的边际收益在小容量系统里不明显。我建议先评估最大压差对应的电量差和允许均衡时间,如果被动均衡能在可接受时间内收敛,就别急着上主动均衡。

6.3 一些实际体会

最后说几点我在这个项目里的个人体会。

均衡是电池管理的“兜底”,不是“救命”。电芯筛选、热管理、充电策略才是保证一致性的前置手段,均衡只是在系统层面把残余的不一致压到安全范围。两节串联电池做均衡的最大价值,是以最小的硬件成本验证完整的 BMS 策略链路——采样、滤波、状态机、保护、通信、数据记录。把这套逻辑跑稳,后续无论是换更大串数的前端芯片,还是从被动均衡切到主动均衡,都只是换执行器、改参数的事。

调试均衡功能时,我花的时间有很大一部分不是在“调均衡”,而是在“把数据弄干净”:滤波窗口、迟滞带、采样时序、中断响应。这些细节决定了一个均衡系统在实验室里看起来正常,还是在真实工况下几十天不重启、不误动作地长期可靠运行。这也是这篇文章最想传递的东西。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询