最近一直在调一块主动均衡板,项目背景是给一套备用电源柜里的两串磷酸铁锂电芯做长期均衡。以前用电阻被动均衡,电池温度倒是不高,但压差始终在50mV上下晃。后来换了方案:功率侧用MP2642GR-Z做双向DC-DC能量搬运,控制侧用STM32L4S5ZI做采样和均衡状态机,终于把压差稳定压到15mV以内。这篇文章想把这套系统里值得记录的取舍、参数计算和调试坑都写出来,给正在做储能BMS、备用电源、电池包均衡相关项目的朋友一个参考。不管你是刚接触电池管理,还是已经在多串BMS里踩过坑,这套最小系统的完整思路都能直接搬过去用。
1. 两节串联电池为什么也绕不开均衡
1.1 串联电池组里的“木桶效应”是怎么放大的
很多人觉得两节电池串联很简单,不需要像14串、16串那样精细管理。这个想法在短期测试里没问题,但放到储能和备用电源这种长周期运行场景,很快就露馅。
原因在于电池从出厂那一刻起就不是完全一致的。同一批次电芯,容量可能差1%~3%,内阻差得更多,自放电率也有差异。这些差异平时感觉不到,一旦串联,电流对每节电池是相同的,但每节电池的电压变化却完全不同。容量小、内阻高的那一节,充电时电压先顶到上限,放电时电压又先掉到下限。
串联电池组的总容量,由最弱的那节电芯决定,这个就是电池行业的“木桶效应”。我习惯用一个生活化的类比:串联电池就像几个水桶在一条流水线上,出水量由最矮的桶沿决定。充电时,最浅的桶先满,系统必须停;放电时,最浅的桶先空,系统也必须停。中间那些高桶明明还有余量,却始终用不上。
备用电源的工况更加特殊。设备常年挂在浮充状态,低容量电芯长期处于轻微过充区,高容量电芯却永远充不满。每个循环都在加剧失配,压差就越滚越大。所以哪怕只是两节串联,只要你希望系统能长期稳定运行,电池均衡就不是可选功能,而是必备功能。
1.2 被动均衡只是权宜之计
均衡方案里,大家最熟悉的是被动均衡,也叫耗散式均衡。原理特别简单:检测到某节电芯电压偏高,就通过并联在它上面的电阻把多余的电能放掉,转化成热量。消费类电子、两轮车BMS里用得很多,因为便宜,控制逻辑也简单。
但被动均衡解决不了储能和备用电源的核心矛盾——它只是在“烧掉”高压电芯的能量,而不是把能量补到低压电芯里去。均衡速度受限于散热能力,实际均衡电流通常只有几十毫安到几百毫安。电芯的充放电电流动辄几安培甚至几十安培时,均衡速度根本追不上电压漂移速度。
更麻烦的是长期浮充场景。被动均衡会把高压电芯一直“放气”,电芯内部发热,加速老化。低压电芯却始终得不到补充,永远处于略微欠充的状态。不少备用电源项目用被动均衡,用了两年后拆开看,高压电芯鼓包、低压电芯容量衰减,整串电池寿命被明显拉低。
我当时在项目初期也试过被动均衡,压差确实能压下来一点,但代价是电芯温度升高、均衡电流上不去、电压一有波动就反弹。所以没多久就决定改主动均衡。
主动均衡和被动均衡的本质区别可以用一句话概括:被动均衡是“把多的扔掉”,主动均衡是“把多的搬到缺的地方”。主动均衡不浪费能量,发热小,均衡电流可以做得更大,这才适合储能和备用电源这种对长期可靠性和效率都有要求的场景。
1.3 主动均衡的三种拓扑,我为什么选双向升降压
主动均衡的电路拓扑主要有三类:开关电容式、变压器反激式、电感式双向DC-DC。
开关电容式也叫飞渡电容均衡,通过一组开关把电容在两节电芯之间来回切换,把高压电芯的电先存到电容里,再放到低压电芯里去。优点是电路简单、没有磁性元件,缺点是均衡电流脉冲很大,对开关管应力高,而且电容两端电压必须和电芯电压接近时转移效率才高,控制不好容易造成较大的能量损耗。
变压器反激式适合多节串联的远距离均衡,可以做电气隔离,一次搬运多节能量,但变压器体积大、EMI控制麻烦,对于两节串联这种近距离能量搬运来说属于杀鸡用牛刀。
电感式双向DC-DC是我最终选择的方案。它的核心是一个带同步整流的升降压功率级,电流可以双向流动,效率高、体积小,控制灵活。对于两节串联的场景,只需要一个这样的功率级,就能把电压高的那节电芯的能量搬到电压低的那节里去。能量路径短,控制逻辑清楚,硬件成本也压得住。
这里稍微解释一下为什么“双向”这么重要。电池均衡的触发方向不是固定的,今天可能是第一节电压高,明天可能变成第二节电压高。如果用单向DC-DC,就得设计两套方向不同的功率级,成本翻倍。双向功率级天生支持两个方向,MCU只需要改变控制逻辑,就能让能量按需要流动。这也是我选用MP2642GR-Z的核心原因。
2. 硬件架构:MP2642GR-Z和STM32L4S5ZI各自扛什么活
2.1 MP2642GR-Z:只负责把能量搬到需要的地方去
MP2642GR-Z这颗芯片,第一眼看过去更像一颗通用的电源管理IC,但它的关键特性是支持双向能量流动,本质上是一颗集成度高、带同步整流的双向DC-DC功率级。它在电路里的位置,相当于一个“可控能量水龙头”。
当第一节电芯电压高于第二节,MCU发出方向信号,功率级把第一节的能量抽出来,先以磁场形式储存在外部电感里,再切换到第二节的回路里释放。反过来,如果第二节电压更高,控制逻辑整体反转,能量从第二节反向搬运到第一节。整个过程不产生大量热量,能量只是换了个位置。
选型时我主要看四个条件:第一,必须支持双向功率流;第二,开关频率要够高,我目标工作在400kHz附近,这样电感可以做得比较小;第三,自带过流保护、过温保护这类安全功能,别让MCU每时每刻盯着功率管;第四,外部元件尽量少,毕竟备用电源板卡内部空间有限。对比了几颗候选器件之后,MP2642GR-Z在体积和外围复杂度上优势最明显。
这里有一个给初次做主动均衡的工程师的经验:集成电源芯片虽然省事,但它毕竟还是电源功率部分,不是单片机外设。第一次调试时,一定要把功率级的使能脚和控制信号分开处理,让MCU上电完成自检之后,再去打开功率级。如果一上电就让功率级直接开始工作,电源浪涌很容易把采样数据和外围电路一起带崩。
2.2 STM32L4S5ZI:为什么选它来做控制和采样
控制核心选择了STM32L4S5ZI。单看性能,它不是顶级,但它的外设组合实在太适合电池管理这类用途。
Cortex-M4F内核加上浮点单元,跑120MHz,用来跑均衡状态机、滤波算法和通信协议绰绰有余。片上有多路12位ADC,可以同时采集两节电芯电压、充放电电流和温度,配合DMA和定时器触发,能实现连续采样。高级定时器TIM1、TIM8可以输出带死区插入的互补PWM,正好满足双向功率级对开关信号的要求。Flash和RAM空间都非常充裕,跑RTOS、记录历史故障日志都毫无压力。
更关键的是低功耗特性。备用电源设备往往需要长期在线,均衡模块自身的待机电流必须压得很低。平时STM32L4S5ZI可以进入STOP模式,用一个低速定时器定时唤醒,比如每5分钟采一次压差,如果超过阈值再启动均衡功率级。这样整个均衡模块的平均待机电流能做得非常小,对于靠电池自供电的备电柜来说,这个优势是实打实的。
另外,这个型号的ADC自带硬件过采样能力,配合DMA和定时器触发,可以很轻松实现每路电压连续采几十次再求平均,还不需要CPU频繁介入。省下来的开发时间,远比选一颗更便宜的MCU所省的BOM成本值钱。
2.3 能量流动路径和PCB布局的三个纪律
整个系统的能量流动可以分成三块:电池组给负载供电的主回路、MP2642GR-Z负责的均衡搬运通道、STM32L4S5ZI负责的采样与控制回路。理解这三条路径清晰分开,是硬件设计的基本前提。
均衡通道搬运的能量是从两节电池的电压差里来的,不是凭空产生的。它的存在不会增加系统总能耗,只是把本该浪费掉的能量转移到了另一端。所以功率级的效率决定了均衡过程最终有多少能量真的被利用,多少变成了热损耗。
PCB布线方面,我总结了三条纪律,都是实际打样踩出来的经验。
第一,功率回路、采样回路、逻辑回路不能混。MP2642GR-Z附近的电感电流变化率很高,开关节点电压跳变非常快。如果采样线从功率级底下走过去,ADC读数会被耦合噪声污染,轻则均衡判据抖动,重则压根没法用。
第二,采样线要采用开尔文接法,直接连到电芯端子,不要和其他大电流走线共用路径。大电流路径上的铜箔压降在毫伏级,如果采样线也走同一段路径,多出来的压降会直接叠加到电芯电压上,造成虚假的压差,让均衡策略错误触发。
第三,功率级的输入电容位置要靠近芯片,走线要短而粗。第一次打样时我为了布线方便,把输入电容放得比较远,结果示波器一量,开关节点关断瞬间出现接近2倍电压的振铃。把电容挪到芯片同一面、走线加粗之后,振铃才压下去。功率电路的寄生电感是高频振铃的主要来源,这个点再强调都不为过。
3. 关键参数计算与硬件调校实录
3.1 电压采样滤波:ADC想读准,先算好RC
均衡的前提是电压测得准。如果采样误差超过10mV,那20mV的均衡阈值就没有意义了。
我这套系统里,两节磷酸铁锂电芯的工作电压范围是2.5V到3.65V,MCU的ADC参考电压是3.3V,所以需要分压。分压电阻的选择有两个约束:一是精度和温漂要够好,我用的是1%精度、低温度系数的电阻;二是等效源阻抗不能太高,否则ADC内部的采样电容充不满,采出来的值会偏低。
我用的分压结构是10kΩ和6.2kΩ的组合,等效源阻抗大约是两者的并联,约3.8kΩ。这个值对STM32的ADC来说偏高,所以我把ADC的采样时间配置成最大值,给采样电容足够长的充电时间。
在分压电阻和ADC引脚之间,我还加了一级RC低通滤波。取值是1kΩ电阻加100nF电容,截止频率大约是1.6kHz。对于几十赫兹的电压采样率来说,这个滤波既不会影响真实电压信号,又能有效滤掉高频噪声。
软件层面,我用了两种滤波手段叠加。第一是连续采样32次取平均,等效可以把ADC量化噪声压掉一部分;第二是在平均结果上再做一次滑动平均,把剩余的高频毛刺磨平。实测下来,单纯裸采的电压波动可能有十几毫伏,加滤波之后能稳定到2mV以内。
还有一个很容易被忽略的点:参考电压校准。STM32内部有一个VREFINT基准电压,它的标准值是已知的,但会随温度和供电电压漂移。我每次上电后先测一遍VREFINT,和出厂标准值做对比,修正3.3V参考电压的实际值。这一步不做,冬天和夏天测出来的电池电压能差十几个毫伏,均衡阈值再准也没用。
3.2 功率电感和均衡电流:从目标电流倒推参数
均衡电流不是越大越好。很多设计一上来就追求2A、3A,结果电感、散热、MOS管全部要升级,实际系统反而不稳定。
我项目的电池容量是30Ah,目标均衡电流设在0.5A附近。这个数值大概是0.017C,对30Ah的电池来说足够用了。50mV的压差对应几十毫安时的电量差,0.5A的均衡电流可以在几小时内把电量拉平。再往上加大电流,对消除压差的时间帮助有限,但发热和体积代价成倍增加。
电感值的计算,我按Buck-Boost储能电感的工程公式来估算。开关频率400kHz,允许的纹波电流取0.15A,工作电压约3.2V,占空比按中间值50%算。算出来L约等于26.7μH,实际取22μH到33μH都在合理范围。我最终选了27μH、饱和电流1.5A的功率电感,留了充足裕量。
电感选型时要注意的不是额定电流,而是饱和电流。一旦电感电流超过饱和点,电感量会急剧下降,均衡电流反而上不去,而且发热明显。所以饱和电流至少要留1.3到1.5倍的峰值裕量。
输出电容和输入电容我全部用的X7R陶瓷电容。选陶瓷电容时有个坑:MLCC的标称容量是在零偏压条件下测的,实际施加直流电压后容量会下降,耐压越低的电容下降越严重。所以选型时要按30%~50%的容量衰减来反推标称值,耐压至少取工作电压的两倍。
电流采样方面,我用的方案是在功率级电流路径上放一个毫欧级采样电阻,比如0.03Ω,0.5A均衡电流时压降只有15mV,再经过放大后送ADC。如果芯片有内部电流检测输出,就按芯片手册设置限流点。限流点不能设得太紧,我一般会比设计值高30%左右,否则瞬态电流很容易触发保护,表现出来就是均衡电流一直上不去。
3.3 保护电路和上下电时序:这东西不能省
主动均衡功率级的保护设计,比普通DC-DC更严格,因为它工作在电池组内部,一旦开关管直通,就是两节电芯短路的大事故。
我在硬件上做了三层保护。第一层是输入端和输出端各放一个快断保险丝,万一后面发生短路,保险丝先断。第二层是TVS管,放在电池端,吸收浪涌和尖峰电压。第三层是芯片自身的过流、过温保护,作为最后一道防线。
上电时序同样重要。我的固件里规定了一个顺序:MCU先上电,完成ADC自检和状态初始化,延时50到100ms,此时功率级使能引脚保持低电平。软件确认两节电池电压都在安全范围内之后,才对功率级置位使能,然后开始发PWM。这样做是为了避免上电瞬间的浪涌直接把功率级的开关管或者其他外围电路打坏。
故障恢复逻辑也要设计好。当系统检测到过压、欠压、过温、过流时,关闭PWM输出,同时拉掉使能信号。故障恢复不能简单清一个标志位就重新使能,必须等一段时间,比如10秒,确保故障源已经解除。很多均衡板烧管子,就是故障后立刻自动恢复,复位的瞬间又碰到相同的故障条件,直接把管子二次击穿。
4. 软件状态机与核心代码骨架
4.1 电压采集、滤波和均衡判据的代码实现
软件部分,我首先用定时器触发ADC采样,通过DMA把数据搬进内存。这样CPU不用一直等在中断里,采样率也更稳定。
下面是ADC+DMA采集并做均值滤波的核心代码骨架,具体的HAL API以你使用的软件库版本为准:
#define ADC_SAMPLE_NUM 32 uint16_t adc_raw[ADC_SAMPLE_NUM]; uint32_t adc_sum = 0; uint16_t adc_avg = 0; void ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc) { if (hadc->Instance == ADC1) { adc_sum = 0; for (uint8_t i = 0; i < ADC_SAMPLE_NUM; i++) { adc_sum += adc_raw[i]; } adc_avg = (uint16_t)(adc_sum / ADC_SAMPLE_NUM); } }在实际项目里,我用了两路ADC并行采集两节电芯电压,还有一个通道采NTC温度。每个通道都做了同样的32次过采样平均,再经过前面的RC硬件滤波,最终给到状态机的电压值已经很平稳。
均衡判据我定义为三段逻辑:压差大于20mV且两节电芯电压都在2.8V~3.6V的安全窗口内,进入均衡;压差小于10mV,退出均衡;温度超过45℃,无论压差多大都暂停均衡。安全窗口的存在很关键,如果某个电芯已经过放,你还把能量往它那里搬,结果就是过充或者过放进一步恶化。
这里有一个必须加的东西:滞回死区。如果进入阈值和退出阈值都设成同一个值,比如20mV,那系统会在边界处来回切换。电池电压在充电和放电瞬间会有极化波动,状态机可能在几分钟内反复开关几十次,对功率管非常不友好。进入20mV、退出10mV,这个10mV的间隙就是死区,能有效防止这种高频振荡。
4.2 双向均衡状态机:切换方向前先让电流归零
状态机是整个软件的核心。我定义了四个状态:空闲、从第一节搬到第二节、从第二节搬到第一节、故障。
typedef enum { BAL_IDLE = 0, BAL_1_TO_2, BAL_2_TO_1, BAL_FAULT } bal_state_t;主循环每100ms跑一次状态机,逻辑并不复杂。先读两节电压,计算压差,判断是否进入均衡;确定方向后,把对应方向的控制引脚拉高,PWM占空比按斜坡逐渐增加,避免阶跃冲击;任务结束或压差进入死区后,先把占空比斜坡降到零,再切换状态。
方向切换有一个必须遵守的纪律:绝不能直接反转。如果当前正在从第一节往第二节搬能量,电感和开关管里还有能量流动,此时直接把方向反转,能量会顺着体二极管形成额外通路,轻则效率降低,重则功率管炸裂。我的做法是先把PWM占空比降到0,等10ms,确保电感电流完全回零,然后才允许翻转方向。
高级定时器输出互补PWM时,死区时间由寄存器控制。我最初设的0.2μs,用示波器看开关节点波形时发现对称的死区时间还不够,个别批次芯片关断较慢,有两管短暂同时导通的现象。后来把死区调到0.5μs,再观察波形才正常。死区不能太小,否则直通;也不能太大,太大均衡效率会下降。这个值最好针对具体使用的MOS/集成功率管实测确定。
故障状态的处理也要单独说:进入故障状态后,所有PWM输出关闭,功率级使能拉低,然后在故障变量里记录原因代码。恢复条件不是时间,而是故障条件消失且持续一段时间。我在代码里用了一个独立的故障计时器,要求故障条件消失后稳定5秒才允许退出故障状态,防止故障还在时反复重启。
4.3 串口日志和参数标定:没有它没法联调
做电源和电池相关的项目,最怕的就是“黑盒调试”。看不到内部状态,只能靠万用表猜,效率极低。我在这块板子上留了一路UART串口,用printf重定向输出状态日志,格式统一成一行:
[BAL] t=12345 v1=3302 v2=3288 dv=14 dir=1 pwm=48 temp=35这条日志里包含了时间戳、两节电压、压差、均衡方向、PWM占空比和温度。光是这一行日志,就能判断出相当多问题:方向对不对、PWM有没有起来、压差有没有在下降、温度是否异常。
参数标定方面,我把均衡进入阈值、退出阈值、温度保护点、PWM最大占空比都定义成可配置参数,通过串口命令修改。比如输入set th=20,10,就能实时把进入阈值和退出阈值改成20mV和10mV。参数修改后存入Flash,下次上电自动读取。后期如果需要接上位机,也可以把这些寄存器映射成Modbus保持寄存器,统一由主站配置。
现在回头看,当初如果省掉这个调试串口,联调时间至少翻一倍。特别是功率级和软件第一次打通的时候,能看到PWM占空比和实际压差的变化曲线,比示波器量几十根线要直观得多。
5. 实测问题与排查心得
5.1 故障现象速查表:先看到结果再谈原因
调试过程中遇到不少问题,我整理成一张速查表,按现象、可能原因、排查顺序列出,给后来者少走点弯路。
| 故障现象 | 可能原因 | 排查与解决 |
|---|---|---|
| 均衡电流明显偏小 | 电感饱和、限流点设置过低、PWM死区过大、方向配置错误 | 先看日志确认方向和占空比,再量电感电流波形确认是否饱和,最后查限流设置 |
| 压差反复进入和退出均衡 | 触发阈值和退出阈值没有死区、采样值抖动 | 增加滞回区间,增加滤波窗口长度 |
| ADC采样值乱跳 | 采样线离功率级太近、缺少RC滤波、采样时间太短 | 改开尔文接法,加滤波,采样时间开到最大 |
| 均衡过程热量偏高 | 死区时间不足导致直通、散热不足、电感磁损过大 | 示波器看开关节点波形,确认无直通尖峰,检查电感选型 |
| 上电瞬间电压跌落 | 功率级和MCU同时上电、浪涌过大 | 调整上电时序,MCU先启动,功率级使能延后 |
| 均衡方向反了 | 采样通道接反或者方向逻辑写反 | 日志里看v1、v2数值和dir字段是否一致,交换通道或修改逻辑 |
这张表里最值得琢磨的是“方向配置错误”。有一次我发现均衡开启后压差不但没减小,反而增大了,日志里方向和电压差完全对不上。一开始以为是硬件接反,后来把采样通道在软件里对调才发现是ADC注入序列顺序写反了。所以第一版固件跑起来后,我先做了一组“模拟测试”,用一个可调电源模拟两节电压不同的电池,确认每个通道的电压值和方向都能对上,才敢接真实电池。
5.2 调试时我遵循的排障顺序
调试这类系统,我的排障顺序是固定的:先软件后硬件,先日志后示波器,先量电压再动烙铁。
第一步永远是看日志。日志里有电压、方向、PWM占空比的变化过程,能直接判断控制逻辑是否正确。很多问题在日志阶段就能定位,根本不用拆板子。
第二步量功率级两端电压。用万用表确认实际电压和日志里测到的一致。如果日志显示3.2V,但实测只有2.9V,那问题出在采样通道;如果实测和日志一致但系统表现不对,那问题出在逻辑或者控制策略。
第三步用示波器看开关节点波形。主要看三件事:开关频率对不对、死区时间是否足够、有没有异常振铃。振铃的解决方法是调整驱动电阻或重新布局/输入电容位置;直通的解决方法是调大死区时间。
最后才轮到动烙铁换元件。我见过同行一上来就换电感、加电容,搞了半天发现是PWM初始化没配置成功,白折腾。先看清信号,再换硬件,这个顺序能节省大量时间。
5.3 几个值得长期记住的避坑经验
第一,电池电压采样点一定要贴近电芯端子,不要放在保护板经过长走线之后的位置。长走线上的铜箔压降在充放电时会有明显的动态变化,让采样电压和真实电芯电压产生偏差。开尔文接法在这里同样适用。
第二,均衡策略不要写在ADC中断回调里。ADC采集完成中断里只做最轻量的滤波处理,把结果丢给主循环的状态机去决策。中断里做决策,稍有延迟或者逻辑变复杂就会引入优先级问题,在低端项目里可能看不出来,但在有通信、有保护逻辑的备用电源系统里很容易踩坑。
第三,备用电源浮充场景下,均衡不一定要持续运行。我的策略是让MCU定时唤醒,每10分钟采一次电压,压差超过阈值时才开启均衡,压差稳定后立刻关闭。这个策略的好处是均衡模块自身发热小,待机电流低,对电池的影响也最小。持续均衡看起来更“认真”,但很多时间都是在处理电池极化带来的虚假压差,白白磨损功率器件。
6. 这套两串均衡方案能延伸到哪里
6.1 扩展到更多串联电芯的两种路径
两节串联是主动均衡的最小系统,但也是最能练手的设计。很多经验可以直接迁移到多串场景。
第一种扩展思路是“相邻均衡”。每个功率级只管相邻的两节电芯,多节串联就放多个功率级。这种方式控制逻辑最简单,每两个电芯之间的均衡是独立闭环,缺点是功率级数量多,成本高,适合串数不太多的电池包,比如4串、6串。
第二种思路是“轮询均衡”。用一个功率级配合继电器或模拟开关阵列,轮流切换到不同的相邻电芯对上。这样功率级数量少,但切换时序复杂,而且同一时刻只能均衡一对电芯,均衡速度受限。
无论哪种思路,都有一个原则:同一时刻只允许一个均衡通道运行。多个通道同时工作,可能在公共节点上产生电流叠加,导致某节电芯被过度充电或放电。软件层面要做一个通道占用互斥,这个我在两串状态机里已经做好了雏形,扩展多串时直接复用。
6.2 从压差均衡升级到SOC均衡
电压均衡是工程上最容易实现的方案,但它有一个先天不足:电压并不总能准确反映SOC。磷酸铁锂电池的放电平台区很平,电压在3.2V到3.3V之间可能对应20%到80%的SOC,光靠电压判据,很容易误判哪节电芯真的缺电。
升级方向是引入SOC估算。硬件上增加库仑计芯片,或者利用MCU的ADC持续积分充放电电流,配合开路电压法校准,得到每节电芯的SOC估计值。均衡判据从“压差大于多少”变成“SOC差大于多少”,这样即使在平台区,也能准确判断哪节电芯需要补充能量。
这套软件状态机的骨架不需要大改,只是把判据输入从电压换成SOC。也可以保留两套判据:平时用SOC差,SOC算法还没收敛的初期用电压差兜底。我建议一开始不要直接上复杂算法,先跑通电压均衡,再把SOC判据叠加上去,出现问题也好定位。
6.3 备用电源场景下的运行策略细节
备用电源最大的特点是“长期待机+偶尔大电流放电”。均衡策略必须围绕这个特点来设计。
浮充策略下,电池的电压本来就偏高,均衡窗口要往上限偏移。我的做法是让均衡只在浮充期间运行,而且电压窗口限制在安全上限以下一点点。放电瞬间压差会被电池内阻拉开,这时不适合打开均衡,因为均衡速度远跟不上大电流放电的速度,贸然介入只会徒增功率级压力。
待机期间的唤醒周期也需要调整。我最终选了10分钟唤醒一次,但如果项目里的电池失配比较严重,可以缩短到5分钟;如果电池一致性很好,可以拉长到30分钟。这个值不需要改代码,我把它做成了一个可配置参数,现场调试时根据压差走势调整。
还有一点是对外通信。备用电源设备通常要接入上位监控,均衡模块至少要上报三个量:当前压差、均衡状态、累计均衡时长。这三个量既能反映电芯健康状态,也能帮助运维人员判断是否需要人工干预。我从一开始就把这些数据整理成结构体,通过Modbus寄存器暴露出来,后期接入监控平台几乎没花额外功夫。
如果让我再做一版,我会把MP2642GR-Z这一侧做成独立的功率模块,MCU只负责发均衡允许信号和方向信号,把功率级的驱动细节全部封装起来。调试时永远在板上留出串口和开关节点测试点,这个习惯比任何仿真工具都实用。这次能调通,靠的其实不是哪颗芯片多厉害,而是把采样、判据、功率级死区每一个环节都盯住了。两串只是最小系统,但在这个最小系统上养成的调试习惯,反而比直接上十几串更值钱。最后再说一个小技巧:第一次上电之前,先把MP2642GR-Z的使能脚断开,只让MCU跑起来看采集日志,确认电压判断对了再把功率级接上,能少烧一堆管子。