两串电芯,一串电压4.05V,一串4.18V,在备用电源系统里跑了两个星期之后直接触发过压告警停机——这是我在某备用电源项目里遇到的第一个实际问题。后来我把均衡方案改成了 MP2642GR-Z 加 dsPIC33EP512MU810 的组合:前者负责电芯之间的能量搬运,后者负责电压采样、均衡判据和启停控制,专门针对储能系统和备用电源里最常见的两节串联电池单元。这套方案不复杂,但它解决的问题一点也不小。如果你也在做48V以下的小型储能、后备电池、或者两轮车/小功率设备的BMS,这篇文章基本就是给你写的。
1. 为什么在储能与备用电源里,两节串联电芯的均衡不是配角
很多人觉得两串电池“简单”,串联只有两节电芯,哪个电压高就限制哪个,放电完事。真做系统集成的时候你会发现,问题恰恰卡在这个“简单”上:两串电芯互为唯一搭档,容量稍有差异,整组容量立刻变成最差那节电芯的容量。储能和备用电源又不像消费电子产品那样用几个月就换,一挂就是好几年的工况,失配被时间慢慢放大,最后就变成过压告警、欠压掉线、容量跳水。
1.1 失配的四个来源:容量、内阻、自放电、温度
先说容量差。出厂环节再严格的筛选,同一批电芯静置容量也会有百分之几的偏差。对两串系统来说,充电时低容量电芯先充满,放电时低容量电芯先放空,这节电芯就是整组的短板。它决定了你能充进去多少、放出来多少,而另外那节正常或偏大的电芯永远吃不满、放不净。
然后是内阻差。内阻差直接影响的是动态电压:同样10A电流,内阻偏高那节电芯会比另一节多掉几十毫伏,放电末端尤其明显。备用电源通常不常放电,但一旦掉电切换,电池要瞬间顶上大电流,内阻差异造成的压降会直接触发欠压保护,哪怕整组SOC还有六成。
自放电率差异是最阴的一个。电芯负极材料、电解液配方、存放温度不同,自放电率会差出不少。两串电芯充电回路一样,但自放电大的那节每天多漏掉一点,浮充只能补回一部分,长期搁置后压差就这么静悄悄拉开了。备用电源恰恰是“长时间搁置+偶尔满充”的使用方式,等于天天给自放电差异提供表演舞台。
温度梯度也不能忽略。机柜里上下层温差往往有3到5摄氏度,温度高的电芯内阻低、充放电流更“积极”,于是被分配了更多的化学反应量,老化自然更快。老化之后内阻进一步升高,温度又继续升高,形成正反馈回路。在两串系统里,这种温差导致的失配会直接体现在浮充末期的电压曲线上。
1.2 备用电源“浮充 + 长搁置”对压差的放大效应
消费电子里的两串电池,比如笔记本电池,使用频繁,充放电循环多,均衡机会也多。备用电源不一样,电池大部分时间挂在浮充电压上,充放电次数可能一年都不到二十次。浮充状态下充电电流趋近于零,电芯端电压主要由自放电和化学态决定,自放电率差半个百分点,浮充一直开着也拉不齐。
更麻烦的是备用电源的放电特性:平时不动,出动就是大电流短时放电。最弱那节电芯在大电流下瞬间被拉到低压区间,系统以为整组没电,直接切到保护状态,之后又重新浮充。这种“平时不坏、关键时候掉链子”的场景,作为系统开发人员最头疼。与其等到压差到300mV再靠维护人员上门换电芯,不如在BMS里就做均衡,把压差长期压在20mV以内,让两节电芯始终步调一致。
基于这个前提,我最终定的方案就是:MP2642GR-Z 做能量转移通道,dsPIC33EP512MU810 做采样和策略控制。下面把两个器件的分工拆开讲。
2. MP2642GR-Z 与 dsPIC33EP512MU810 的分工:谁搬电荷、谁定策略
这套系统里,两个芯片的定位是截然不同的。MP2642GR-Z 是一台“执行机构”,负责在两节电芯之间搬电荷;dsPIC33EP512MU810 是“大脑”,负责判断什么时候搬、搬多久、搬完怎么确认。把这两层分开之后,均衡逻辑的调试难度会明显下降。
2.1 MP2642GR-Z:电芯之间的能量搬运工
MP2642GR-Z 这类均衡控制芯片的核心工作,是在两个串联电芯之间建立一条可控的能量通道。使能之后,它通过开关管和外部电感、电容组成非隔离的功率变换路径,让电压高的那节电芯释放能量,经过储能元件,再注入电压低的那节电芯。方向是“从高到低”,不是把高压电芯的能量当成热量白白放掉。
放在我们的具体设计里,MP2642GR-Z 的输入侧接“电芯1正极与负极”,输出侧接“电芯2正极与负极”,节点就是两节电芯的串联中点。使能脚由 DSC 的 GPIO 控制,状态脚反馈回 DSC。它自己不做复杂的系统判断,均衡电流的大小、持续时长、什么时候停止,都由 DSC 决定。这种“执行机构”式的分工有一个好处:均衡策略可以用软件随时改,不用改硬件。
需要提醒的是,MP2642GR-Z 的具体外围电路一定要按官方数据手册的典型应用来接,不同版本的片子可能在使能逻辑、故障输出极性上有差异。代码里不要写死“高电平开启”或“低电平开启”,要把这个定义做成配置项,硬件调试时先确认极性再跑均衡逻辑。
2.2 dsPIC33EP512MU810:采样、控制与上报的大脑
dsPIC33EP512MU810 是一颗16位DSC,带多路ADC和比较丰富的通信外设。在均衡系统里,它并没有被当作传统意义上的DSP去跑复杂算法,而是当成一颗高可靠性的“采集+策略+通信”主控来用。
它在系统里承担三件事。第一,单体电压采集:两节电芯的电压通过分压网络进入ADC,软件做滑动平均和滤波,得到稳定的电压读数和压差。第二,均衡决策:根据压差、温度、母线电压、充放电状态,决定当前是否允许开启MP2642GR-Z,以及开启多长时间。第三,状态上报:把均衡电流、均衡时长、启动次数、故障码通过UART或CAN发给上层监控,方便后台知道这组电池的健康情况。
这颗DSC的外设数量对两串均衡来说绰绰有余。为了后续扩展,我建议把额外的ADC通道留给NTC温度采样和母线电流采样,别只盯着单体电压。备用电源系统里,温度对均衡允许窗口的影响非常大,没有温度采样的均衡策略等于盲人摸象。
2.3 为什么没选纯被动均衡或一片专用AFE
被动均衡是最常见的方案:高电压电芯通过一个电阻放电,把多余能量变成热。成本确实低,但问题很明显。压差越大需要放的时间越长,电阻上持续发热,小体积产品根本压不住;而且备用电源长期浮充,均衡电阻一挂就是几小时,热量积累后会影响旁边电芯的温升,反而加剧失配。我在早期方案里其实试过被动均衡,后来发现浮充结束后散热要很长时间,板子局部温度能比环境高出十几度,实在不能接受,就放弃了。
专用AFE是另一条路,片上集成了采样、均衡开关和部分保护逻辑,开发快,一致性也好。但对这个项目来说,专用AFE把均衡策略固化在芯片固件里,阈值、迟滞、最大均衡时间这些参数不透明,想加温度联锁或者“均衡一段时间再复测”这种自定义逻辑会很别扭,采购成本和供货周期也压不下来。
使用 MP2642GR-Z + dsPIC33EP512MU810 组合的好处,是把“策略灵活性”和“硬件可靠性”分开:功率路径交给专门芯片管,逻辑路径交给可编程控制器管。调试时我甚至可以在不改动功率板的前提下,连续换几版均衡策略固件,这在现场联调阶段非常省事。
| 方案 | 能量处理 | 策略可编程性 | 热管理难度 | 适合场景 |
|---|---|---|---|---|
| 纯被动均衡 | 高电芯电阻放电 | 低 | 高 | 低成本、小电流、不常浮充 |
| 专用AFE | 视型号而定 | 低 | 中 | 标准化大批量产品 |
| MP2642 + DSC | 高电芯向低电芯转移 | 高 | 低 | 储能/备用电源等长期浮充场景 |
3. 采样、驱动与功率级:两串均衡系统的硬件设计要点
确定芯片组合之后,真正的硬骨头在硬件设计上。均衡系统要稳定工作,采样精度和功率路径的取舍都很关键,任何一个环节偷懒,后面调试都会加倍还回来。
3.1 电压采样链路:共模电压与电阻精度问题
两串电池的总线电压最高约8.4V,DSC的ADC输入范围一般在0到3.6V,所以不能直接采样,必须用电阻分压或差分运放把电压降到ADC可用区间。这里最需要注意的是顶部电芯的采样:它的负极不是系统地,而是串联中点,电位大约在3到4.2V,属于浮动共模电压。直接简单分压后接ADC问题不大,但分压电阻的精度会直接影响压差判断。
我用了两个分压网络,分别测“电芯1正极到地”和“电芯2正极到地”,软件里做差值得到顶部电芯电压。这要求分压电阻的比值一致性足够好。早期用过1%精度的电阻,结果两路分压比在4.2V输入下能差出15到20mV,比15mV的均衡阈值还大,均衡根本没法正常判断。后来换成0.1%精度电阻,并在分压点并联100nF电容做低通滤波,压差读数才稳定下来。
如果你的BOM里0.1%电阻成本敏感,另一个做法是出厂校准:在电芯开路且已知压差很小的状态下,先记录ADC两路读数的偏差,做成offset存到数据区。这个方法能用1%电阻做到不错的实际精度,但要注意校准系数会随温度漂移,最好配合NTC做温度补偿,不能一劳永逸。
3.2 功率开关与电感选择:均衡电流怎么定
均衡电流的设定要结合电芯容量和均衡时间。被动均衡通常只有几十毫安,主动均衡一般希望做到几百毫安甚至更高。均衡电流的峰值受开关周期、导通时间和电感值约束,基础公式是:
[ \Delta I = \frac{V \times t_{on}}{L} ]
以我用的参考设计为例:电芯电压按4.2V算,开关导通时间1微秒,电感10微亨,单次电流上升大约是0.42A。如果期望的平均均衡电流在0.2到0.3A,这个配置基本合适。想要更快均衡,可以把电感换成3.3微亨,但峰值电流会到1.27A,电感和开关管的饱和电流、峰值电流规格都要跟着提高,否则电感饱和后电流失控,MP2642的故障脚就会频繁拉低。
开关管的选择上,优先关注导通电阻和栅极电荷。导通电阻过高会在均衡回路里产生额外压降,降低转移效率;栅极电荷过高则会让开关损耗变大。我们用的均衡电流不超过1A,导通电阻在几十毫欧级别的管子就够用,封装尽量选带散热焊盘的,方便均衡长时间开启时把热量导到铜皮上。
散热设计不要只看总功率。均衡电流0.3A,压差0.2V,功率才0.06W,听起来微不足道,但这是“平均功率”。开关管开关瞬间的损耗、电感的铜损、采样电阻的功耗都要算进去,尤其当均衡持续几十分钟时,板上局部温升可能比预期高不少。我习惯在功率路径周围铺大面积接地铜皮,并留好过孔阵列,防止均衡时间一长温度飘高。
3.3 使能/故障信号与时序设计
MP2642GR-Z 的使能和故障信号是均衡系统与DSC之间的关键接口。这里最容易出的问题就是上电时序。DSC复位或正在下载程序时,GPIO处于高阻态,如果MP2642的使能脚设计成内部上拉或默认有效,就会出现“主控还没起来,均衡已经开始乱跑”的情况。
解决方法是把使能脚的外部下拉电阻做实,保证DSC未初始化时MP2642处于禁止状态。同时驱动线串联一个100到220欧姆的电阻,避免DSC IO口在电平切换瞬间被功率回路的干扰拉出毛刺。故障脚建议接到DSC的中断引脚,而不是轮询读取。均衡开启过程中如果电感饱和、过流或者过热,故障信号能立刻触发中断,DSC马上关闭充电回路和均衡路径,这比靠软件慢慢查状态快得多。
4. 均衡控制状态机:从15mV压差到自动停止的完整逻辑
硬件只能保证“有能力均衡”,真正决定均衡靠不靠谱的是软件状态机。这部分我花的时间比硬件还多,因为均衡策略写不好,轻则频繁启停,重则在错误时机均衡,反而把电芯搞坏。
4.1 均衡判据、迟滞与滤波
均衡的启动阈值不是拍脑袋定的。阈值太低,采样噪声都会被当成压差,均衡频繁启停;阈值太高,又起不到提前预防失配的作用。我最后把启动阈值定在15mV,停止阈值定在5mV,中间留了10mV的迟滞区间,避免电芯电压在临界点附近抖动导致继电器式的来回开断。
数字滤波同样重要。每次开机初始化时,连续采集20次电压,每次间隔10毫秒,去掉最大最小值后取平均。压差判断也做了连续确认:连续3个滤波周期都超过15mV才真正进入均衡状态,宁可慢一点,也不要被瞬态噪声骗了。
这里有一个容易被忽略的点:均衡进行时不要直接用电芯动态电压做结束判据。均衡电流导致的内阻压降会体现在端电压上,高压电芯在均衡期间电压读数被拉低,低压电芯被抬高,看起来“压差已经消失”,实际上关掉均衡后又会弹回来。所以每次需要复测压差时,我都先关掉MP2642,等50到100毫秒让电压稳定后再采样,测完再决定下一步。
4.2 状态机:IDLE → FILTER → BALANCE → RE-CHECK
我把均衡逻辑拆成四个状态,用状态机实现,逻辑清晰也容易排查。
首先是IDLE态。压差在5mV以内,系统什么都不做,所有均衡输出关闭。其次是FILTER态,持续检测压差是否稳定超过15mV,同时检查前置条件:母线电压要在预设工作范围、系统不在放电、温度在允许区间。这些条件通过后进入BALANCE态。
BALANCE态开启MP2642GR-Z,同时启动一个均衡定时器,每轮均衡时间设为10秒。这个定时器不是随便选的,太短则每次开门关门都消耗开关次数,太长则可能单方向均衡过头。均衡期间DSC仍然周期性采样温度和母线电压,发现温度超过45度或者母线电压异常立刻中止。
一轮10秒结束后进入RE-CHECK态,关闭使能,等待电压恢复,重新采样。如果压差仍然大于15mV,继续下一轮BALANCE;如果压差已经小于5mV并且连续确认两次,回到IDLE。为了防止电芯严重老化导致永远拉不齐,我还加了一个最大累计均衡时间,比如2小时,超过之后强制退出并上报“均衡超时”告警,让维护人员知道这组电芯可能需要更换。
4.3 与充电器和放电回路的联锁逻辑
均衡不能在任何状态下都开启。充电过程中,充电器持续向电池注入电流,如果均衡也在搬运电荷,相当于两个源在对抗,均衡效率极低,还可能让充电器误判电流异常。放电过程中更不建议均衡,大电流负载下的电压值包含了大量欧姆压降和极化效应,拿这些数据做均衡判断,结果不可靠。
我设计的联锁逻辑是这样的:只有当系统处于静置或浮充状态时,才允许均衡启动。具体实现上,BMS要读充电器状态和放电负载状态,充电状态通过通信或电平信号送进DSC,放电状态用母线电流来判断,连续30秒电流低于某个小值才认定为静置。均衡运行期间,如果检测到负载启动,立即暂停均衡,等负载消失后再恢复或重新判断。
单体过压保护也要和均衡联动。均衡的目标是把高压电芯降到正常范围,但如果高压电芯已经接近充电截止电压,均衡期间充电器一旦继续充电,可能导致电芯过充。所以均衡启动前必须判断高压电芯电压低于截止电压至少50mV,否则只上报告警,不启动均衡。
5. 实测中的翻车现场与长期浮充验证
软件和硬件都做完了,真正调试过程中踩的坑比预想的多。这里把最典型的三个问题写出来,给后面做类似方案的朋友省点时间。
5.1 ADC噪声与“假压差”的排查
第一版固件里均衡启动阈值设成10mV,拿万用表实测两节电芯压差只有2mV,但系统一直显示25mV,均衡频繁启动然后立刻停止,整个BMS都在发抖。查了很久,最后定位到ADC采样时序和分压网络布局上。
采样点离均衡功率回路太近,功率开关切换瞬间产生的磁场耦合进了高阻分压网络,ADC恰好在这个时间窗口采样,把开关噪声当成了真实电压。解决方式分两路:一是分压网络加大了100nF滤波电容,降低采样源的交流阻抗;二是错开采样时间,均衡开关动作之后延迟200微秒再进行ADC采集,避开瞬态噪声。两个措施一起做,压差读数才算干净。
在这个问题上我的经验是:均衡系统的采样时序必须和功率开关动作强相关,不能靠运气。DSC里最好用定时器触发ADC采样,并预留采样窗口偏移寄存器,现场一旦发现噪声耦合,可以快速调整采样相位,不用重新改板。
5.2 采样线与功率线的敷设
第二个问题出现在功能样机阶段。均衡开启后,系统检测到的压差不但没变小,反而变大,高压电芯读数被额外抬高,低压电芯读数被压低,看起来“越均衡越差”。一开始我怀疑MP2642方向搞反了,换了两版板子查功率路径也没发现异常。
后来把示波器夹在采样点上才明白,这不是方向问题,是采样点和功率路径共用了一段导线。均衡电流从电芯端子流过连接线,连接线自身电阻产生压降,采样电路又把这段压降当成电芯电压的一部分。均衡电流越大,误判越严重,形成了闭环振荡。解决方案就是把采样线和功率线在电芯端子处分开,采用开尔文接法:功率电流走粗线,电压采样用细线单独连到电芯极柱,两者只在极柱处汇合。改完布局之后,均衡开启时的压差读数才变得真实可信。
5.3 长期浮充后的实测结果
方案定型后,我做了一组对比实测。一组采用这套MP2642GR-Z加dsPIC均衡方案,另一组保持纯被动均衡,两套电池都挂在同一批备用电源设备里长期浮充。三个月后再看数据,对比组的压差已经拉开到60到80mV,个别电芯接近100mV;而这套主动均衡方案的电芯压差始终稳定在5到10mV范围内,均衡每日启动时间也从最初的十几分钟降到几分钟。
我自己的体会是,均衡的价值不只是把那点压差抹平,而是把电芯老化的正反馈链条打断。电芯一旦开始失配,落后那节会越来越落后,主动均衡虽然没有能力修复老化,但能阻止失配扩大,把整组可用容量维持住。后续如果有余力,我建议在这个系统上再增加电芯内阻在线估算和自放电率记录,把均衡策略从“电压对齐”升级到“健康度对齐”,那又是另一个级别的BMS水平了。