1. 从两个串联电芯的电压差说起:为什么被动均衡在储能场景里依然是首选
储能电池组和备用电源系统里,两串电芯的电压不一致是个绕不开的问题。你拿万用表一测,可能一节3.62V,另一节3.48V,差了140mV。别小看这140mV,在串联结构里它意味着两节电芯的可用容量被最弱的那节拖住了,充电时强的那节先到截止电压,放电时弱的那节先到欠压保护点,整个电池组的有效容量可能直接缩水15%到25%。
均衡方案分两大类:被动均衡和主动均衡。主动均衡用变压器或者电容阵列把能量从高电压电芯搬到低电压电芯,效率高,但电路复杂、成本高、静态功耗也大。被动均衡说白了就是给电压高的那节电芯并一个电阻,让它多放一点电,把电压拉下来跟低的那节对齐。听起来很“笨”,但在两串电芯的储能和备用电源场景里,被动均衡反而是最务实的选择——元件少、控制简单、可靠性高,而且两串系统的能量浪费本来就有限。
我这次做的方案,核心器件选的是MP2642GR-Z,这是一颗专门为两串电池管理设计的模拟前端芯片,配合PIC18LF45K80这颗低功耗8位MCU来做均衡控制和系统管理。选这个组合的原因很直接:MP2642GR-Z集成了电压采集、均衡驱动和保护逻辑,PIC18LF45K80自带ECAN模块和纳瓦级低功耗管理,两者搭配可以用极简的外围电路实现完整的双串电池均衡与监控。下面我把整个设计思路、关键参数计算、实操中踩过的坑,以及最终验证结果完整拆一遍。
2. MP2642GR-Z 与 PIC18LF45K80 的选型逻辑与硬件架构
2.1 为什么是 MP2642GR-Z 而不是通用运放方案
很多人做两串均衡的第一反应是用运放加MOS管自己搭一个比较器电路,检测到压差超过阈值就开通均衡电阻。这个方案成本确实低,但问题在于:运放的失调电压温漂会导致均衡阈值不稳定,而且没有内置的保护逻辑,过充过放全靠外部电路兜底,可靠性很难保证。
MP2642GR-Z 是一颗专为双串电池包设计的模拟前端,内部集成了:
- 两路高精度电压ADC,精度可以做到±10mV以内,不需要外部校准电阻网络
- 内置均衡MOSFET驱动,直接推外部均衡电阻,不需要额外加驱动级
- 过压、欠压、过流保护逻辑,阈值可以通过外部电阻或者寄存器配置
- 低功耗待机模式,静态电流在微安级别
用这颗芯片,外围只需要加两颗均衡电阻、几颗滤波电容和去耦电容,电路板面积可以控制在很小的范围内。对于储能和备用电源这种对体积和可靠性都有要求的场景,这个集成度非常关键。
2.2 PIC18LF45K80 在系统中的角色定位
PIC18LF45K80 是一颗带ECAN模块的8位MCU,很多人觉得8位机做电池管理“不够用”,但在这个两串系统里,它的任务其实很明确:
- 通过I2C或者SPI读取MP2642GR-Z的电压、电流和状态寄存器
- 根据读取的数据判断是否需要启动均衡,以及均衡的占空比
- 管理系统的充放电状态机,处理保护事件
- 通过ECAN或者UART向上位机或者系统主控上报电池状态
- 在待机模式下进入低功耗休眠,靠MP2642GR-Z的中断唤醒
PIC18LF45K80的纳瓦级功耗管理在这个场景里非常实用。备用电源系统大部分时间处于待机状态,MCU如果一直全速运行,静态功耗会把电池慢慢耗干。这颗MCU在休眠模式下电流可以做到几百纳安,配合MP2642GR-Z的报警中断,系统可以在待机时几乎不耗电,只在需要均衡或者有异常时才唤醒。
2.3 整体硬件架构与信号链路
整个系统的硬件架构可以分成三层:
第一层是电池接口层,两节串联电芯的正负极接到MP2642GR-Z的VC1、VC2和GND引脚,每节电芯的电压通过内部多路开关轮流采集。均衡电阻分别接在每节电芯的正极和MP2642GR-Z的均衡驱动引脚之间,由芯片内部MOSFET控制通断。
第二层是控制层,PIC18LF45K80通过I2C总线跟MP2642GR-Z通信,读取电压数据和状态标志。MCU的GPIO用来控制MP2642GR-Z的使能引脚和模式选择引脚。如果系统需要跟外部主控通信,ECAN模块可以接到CAN总线上。
第三层是电源层,整个系统的供电从两串电池组直接取电,经过一颗低压差稳压器降到3.3V给MCU和MP2642GR-Z的VDD供电。这里要注意,LDO的静态电流要选低的,否则待机功耗会被LDO吃掉。
信号链路上有一个容易忽略的细节:MP2642GR-Z的电压采集引脚前面需要加RC滤波,截止频率大概在100Hz左右,用来滤掉均衡开关动作时产生的电压毛刺。如果不加这个滤波,ADC读到的电压会在均衡开启和关闭的瞬间跳变,导致均衡逻辑误判。
3. 均衡策略设计:从固定阈值到动态占空比控制
3.1 固定阈值均衡的局限性
最简单的均衡策略是设一个固定阈值,比如压差超过50mV就开启高电压那节的均衡电阻,直到压差降到10mV以下再关闭。这个策略在实验室里跑起来没问题,但放到实际储能场景里会碰到几个问题:
第一,均衡电阻的功耗是固定的,如果压差很大,均衡电流可能达到几百毫安,电阻发热严重,长时间运行会影响周边器件的寿命。第二,固定阈值没有考虑电池的充放电状态,在充电末期电芯电压本来就在快速变化,这时候开启均衡容易造成震荡。第三,两节电芯的容量如果差异较大,固定阈值均衡可能永远也拉不平,因为弱的那节电芯在放电时电压下降更快,均衡刚停又触发。
3.2 动态占空比均衡的实现思路
我最终采用的方案是动态占空比控制。核心逻辑是:MCU读取两节电芯的电压,计算压差ΔV,然后根据ΔV的大小查表得到一个均衡占空比D。压差越大,占空比越高,均衡电阻的平均电流越大;压差越小,占空比越低,避免过冲。
具体实现上,PIC18LF45K80用定时器产生一个1kHz的PWM信号,通过GPIO接到MP2642GR-Z的均衡使能引脚。MP2642GR-Z的均衡驱动是电平触发的,所以PWM信号直接控制均衡电阻的通断时间比例。占空比从0%到100%分成了8档,对应的压差阈值如下表:
| 压差ΔV (mV) | 均衡占空比 | 等效均衡电流 (mA) |
|---|---|---|
| < 10 | 0% | 0 |
| 10 ~ 30 | 12.5% | 12.5 |
| 30 ~ 60 | 25% | 25 |
| 60 ~ 100 | 37.5% | 37.5 |
| 100 ~ 150 | 50% | 50 |
| 150 ~ 200 | 62.5% | 62.5 |
| 200 ~ 300 | 75% | 75 |
| > 300 | 100% | 100 |
均衡电阻选的是100Ω、1%精度的贴片电阻,封装0805,功率裕量留了2倍以上。100Ω电阻在100%占空比下的电流是电芯电压除以电阻,按3.7V算就是37mA,但实际电路中MP2642GR-Z的均衡驱动有内阻,加上线路阻抗,实测电流在30mA左右。这个电流对于两串储能电池来说已经足够,因为两串系统的容量通常不大,均衡电流不需要做到安培级别。
3.3 均衡启停的迟滞设计
动态占空比解决了均衡力度的问题,但启停逻辑还需要加迟滞,否则在阈值附近会频繁开关。我的做法是:开启均衡的阈值比关闭均衡的阈值高20mV。比如压差超过50mV时开启均衡,但只有当压差降到30mV以下才完全关闭。这样在30mV到50mV之间,系统会保持上一次的均衡状态,不会来回切换。
这个迟滞窗口的大小需要根据电芯的特性和系统的采样周期来定。如果采样周期是100ms,迟滞窗口可以小一点,20mV够了;如果采样周期是1s,迟滞窗口要加大到50mV以上,否则在两次采样之间电芯电压可能已经变化超过阈值了。
3.4 充电和放电状态下的均衡策略差异
充电时,电芯电压整体在上升,均衡的目的是让两节电芯同时到达截止电压。这时候均衡策略要更积极一些,因为充电过程有时间限制,均衡太慢会导致充电时间过长。我的做法是在充电状态下把占空比整体提高一档,比如原本50%占空比的档位在充电时用62.5%。
放电时,电芯电压整体在下降,均衡的目的是让两节电芯同时到达欠压保护点。这时候均衡要更保守,因为放电时电压下降快,均衡过度可能导致弱电芯提前触发欠压保护。我的做法是在放电状态下把占空比整体降低一档,并且把开启阈值提高20mV,避免在电压快速下降时频繁触发均衡。
待机状态下,电芯电压基本稳定,均衡策略可以按标准表执行,但要注意待机时系统功耗要尽量低,所以均衡占空比的上限限制在50%,避免均衡电阻长时间大电流放电。
4. 固件实现中的关键细节与实测踩坑记录
4.1 I2C通信的时序陷阱与解决方案
MP2642GR-Z的I2C接口在数据手册上标称支持400kHz快速模式,但实际调试时我发现,在均衡开关动作的瞬间,I2C通信会出现偶发的NACK。用逻辑分析仪抓波形后定位到原因:均衡电阻通断时会在电源线上产生几十毫伏的纹波,这个纹波耦合到I2C的上拉电阻供电上,导致SCL或者SDA的电平在临界点附近抖动,从机识别出错。
解决方案有两个:一是在I2C的上拉电阻电源引脚旁边加一颗1μF的陶瓷电容做去耦,二是把I2C速率降到100kHz,并且在每次通信前先关闭均衡输出,通信完成后再恢复。我最终两个措施都用了,NACK率从原来的千分之几降到了零。
这里有个经验:MP2642GR-Z的寄存器读取需要先写寄存器地址再读数据,这个“写-读”组合操作中间不能被打断。我在固件里把I2C通信放在高优先级中断里,均衡PWM的中断优先级设低一级,确保通信过程中不会被均衡动作打断。
4.2 电压采集的滤波与校准
MP2642GR-Z内部ADC的原始数据有轻微跳动,实测峰峰值大概在±5mV左右。如果直接用原始数据做均衡判断,在压差接近阈值时会出现反复启停。我在固件里加了一阶低通滤波,滤波系数0.2,相当于时间常数大概是5个采样周期。采样周期设为100ms,滤波后的电压数据在压差判断时非常稳定。
校准方面,MP2642GR-Z出厂时已经做了增益和失调校准,但实际电路中由于分压电阻的误差,读到的电压跟万用表实测值还是有偏差。我在产线校准环节用高精度电源给两节电芯分别加3.0V、3.5V、4.0V、4.2V四个电压点,记录MP2642GR-Z的读数和标准值的偏差,然后在固件里做线性补偿。补偿后的电压精度可以做到±8mV以内,对于均衡判断来说完全够用。
4.3 低功耗待机与中断唤醒的实测数据
备用电源系统对静态功耗要求很严。我实测了三种模式下的系统电流:
| 工作模式 | MCU状态 | MP2642GR-Z状态 | 系统电流 |
|---|---|---|---|
| 正常运行 | 全速8MHz | 连续采集 | 3.2mA |
| 均衡运行 | 全速8MHz | 采集+均衡 | 38mA |
| 待机模式 | 休眠 | 低功耗监控 | 18μA |
待机模式下,PIC18LF45K80进入休眠,MP2642GR-Z配置为低功耗监控模式,只在电压超出保护阈值或者压差超过均衡阈值时产生中断唤醒MCU。18μA的待机电流对于容量几千毫安时的储能电池来说,自放电影响可以忽略。
这里有个坑:MP2642GR-Z的中断引脚是开漏输出,需要外部上拉电阻。我一开始用了100kΩ上拉,结果发现中断信号上升沿太慢,MCU在休眠唤醒时偶尔会错过中断。后来把上拉电阻换成10kΩ,问题解决。上拉电阻太小会增加待机功耗,10kΩ在3.3V下的漏电流是0.33mA,但只在中断引脚为低时才有这个电流,正常待机时中断引脚是高电平,不耗电。
4.4 均衡电阻的发热与布局注意事项
均衡电阻在100%占空比下功耗是3.7V×3.7V/100Ω≈137mW,0805封装的额定功率是125mW,看起来超了,但因为占空比通常不会长时间停在100%,实际平均功耗在50mW左右,0805封装够用。不过我在布局时还是把两颗均衡电阻放得离MP2642GR-Z远一点,中间用铜皮隔开,避免电阻发热影响芯片内部的温度传感器。
另外,均衡电阻的走线要尽量短而粗,减少线路压降。我一开始用0.2mm线宽走均衡电流,实测均衡电流只有25mA,比理论值低了20%。后来把线宽加到0.5mm,均衡电流恢复到30mA。这个细节在原理图上看不出来,但在PCB布局时必须注意。
5. 系统联调与验证:从台架测试到实际工况模拟
5.1 台架测试的搭建与初始结果
台架测试用两节18650电芯串联,初始电压分别设为3.9V和3.6V,压差300mV。系统上电后,MCU读取电压,压差超过300mV,均衡占空比直接给到100%。均衡开启后,高电压电芯的电压开始下降,低电压电芯的电压基本不变。每100ms记录一次电压,压差从300mV降到50mV用了大约18分钟,平均均衡电流30mA,跟理论计算基本吻合。
压差降到50mV以下后,占空比降到25%,均衡速度变慢,从50mV降到10mV又用了大约25分钟。整个均衡过程总共43分钟,把300mV的压差拉平。这个速度对于储能系统来说可以接受,因为储能系统的充放电周期通常是以小时计的。
5.2 充电工况下的均衡验证
充电测试用恒流恒压模式,充电电流1A,截止电压4.2V。两节电芯初始压差200mV。充电过程中,系统持续均衡,高电压电芯的电压上升速度被抑制,低电压电芯正常上升。最终两节电芯几乎同时到达4.2V,压差在截止时小于15mV。如果没有均衡,高电压电芯会先到4.2V,充电器转恒压后电流减小,低电压电芯可能只充到4.05V左右,容量损失大概8%。
这里有个细节:充电末期电芯电压变化很快,均衡占空比如果还按压差查表,可能会在电压快速上升时过度均衡。我在固件里加了一个判断:当电芯电压超过4.15V时,均衡占空比上限限制在50%,避免在充电末期把高电压电芯拉得过低。
5.3 放电工况下的均衡验证
放电测试用恒流0.5A,截止电压3.0V。两节电芯初始压差150mV。放电过程中,系统均衡高电压电芯,但放电时电压整体下降,均衡的效果不如充电时明显。最终放电截止时,两节电芯的压差从150mV缩小到60mV,弱电芯先到3.0V,强电芯还有3.06V。这个结果说明放电时的均衡只能部分补偿压差,不能完全消除,因为放电时电压下降速度太快,均衡电流相对容量来说太小。
对于这个现象,我的处理方式是在放电时把均衡开启阈值提高到80mV,避免在电压快速下降时频繁启停均衡。同时,在系统层面记录每次放电结束时的压差,如果压差持续偏大,说明电芯一致性变差,需要在上位机提示维护或者更换电芯。
5.4 长期运行的数据记录与异常处理
系统连续运行了72小时,每10分钟记录一次两节电芯的电压、压差、均衡状态和系统温度。数据显示,在待机状态下,压差基本稳定在10mV以内,均衡偶尔开启,占空比在12.5%到25%之间。在充放电循环中,压差在充电时缩小,放电时略有扩大,但整体趋势是稳定的。
异常处理方面,我测试了过压和欠压保护。当任一电芯电压超过4.25V时,MP2642GR-Z的过压标志置位,MCU读取到标志后立即关闭均衡,并通过ECAN上报过压事件。欠压保护阈值设在2.8V,同样会上报事件。过流保护通过MP2642GR-Z的外部检流电阻实现,阈值设在2A,响应时间在毫秒级。
6. 几个容易被忽略的工程细节与个人经验
6.1 均衡电阻的精度选择
均衡电阻的精度直接影响两节电芯的均衡电流一致性。如果两颗电阻的误差是5%,那均衡电流的误差也是5%,在压差很小时会导致均衡效果不对称。我选的是1%精度的电阻,两颗电阻的实际阻值差在1Ω以内,均衡电流的差异可以忽略。如果预算允许,0.5%精度的电阻更好,但1%对于这个应用已经足够。
6.2 MP2642GR-Z的寄存器配置顺序
MP2642GR-Z上电后需要按特定顺序配置寄存器,否则某些功能可能不工作。我的配置顺序是:先配置保护阈值寄存器,再配置均衡使能和占空比寄存器,最后配置ADC采集模式。如果顺序反了,均衡使能可能会被保护逻辑覆盖。这个细节在数据手册里没有明确写,是我在调试时试出来的。
6.3 PIC18LF45K80的ECAN模块初始化
ECAN模块的初始化比较繁琐,需要配置波特率、验收滤波器、屏蔽寄存器等。我一开始漏配了验收滤波器的屏蔽寄存器,结果MCU只能收到特定ID的报文,其他ID全部丢弃。后来把屏蔽寄存器设为0x00,接收所有ID,问题解决。ECAN的波特率配置要注意,PIC18LF45K80的ECAN模块对晶振精度有要求,我用的是8MHz晶振,波特率设了125kbps,通信很稳定。
6.4 系统上电时的均衡状态初始化
系统上电时,两节电芯的电压可能差异很大,如果一上电就开启均衡,大电流可能会拉低系统电源,导致MCU复位。我的做法是上电后先延迟500ms,等电源稳定后再读取电压,然后根据压差决定是否开启均衡。如果压差超过300mV,先以25%占空比均衡10秒,再根据电压变化决定是否提高占空比。这个软启动逻辑避免了上电时的电源跌落问题。
6.5 温度对均衡阈值的影响
电芯的内阻和电压都随温度变化,均衡阈值如果固定不变,在低温环境下可能会误触发。我在固件里加了一个温度补偿系数,温度每降低10℃,均衡开启阈值提高5mV。这个系数是根据电芯的温度特性曲线拟合出来的,实际测试中在0℃和25℃下均衡行为基本一致。
整套方案从选型到验证花了大概三周时间,其中大部分时间花在固件调试和异常处理上。硬件本身不复杂,MP2642GR-Z和PIC18LF45K80的搭配让外围电路很简洁,但均衡策略的细节和低功耗管理的调优需要反复测试。如果你也在做类似的两串储能或者备用电源项目,这套方案可以直接参考,关键是要根据自己的电芯特性和工况调整均衡阈值和占空比表。