1. 为什么两串电池组需要主动均衡
两串电池组看起来简单,但真正做过储能和备用电源项目的人都知道,它是最容易出问题的一种结构。原因不复杂:两颗电芯从出厂那一刻起就不可能完全一致,容量、内阻、自放电率都有细微差别。串联之后,流过它们的电流完全相同,但每颗电芯的端电压会随着SOC、温度和老化程度逐渐拉开差距。
这个差距在充电阶段最危险。假设两颗电芯一颗3.4V、另一颗3.6V,充电器按总压7.0V判断,看起来还没到8.4V的截止点,但3.6V那颗可能已经接近过充边缘。锂电芯过充的后果不用我多说,轻则容量永久衰减,重则热失控。放电阶段同样麻烦,弱的那颗会先到欠压保护点,整组被迫停止放电,强的那颗还有大量能量没放出来,实际可用容量被白白浪费。
被动均衡靠电阻放电,把高的那颗拉下来,能量全变成热。对于小容量备用电源,成本低、电路简单,凑合能用。但储能系统动辄几安时甚至几十安时,被动均衡那点几十毫安的放电电流根本不够看,均衡一颗电芯可能要几个小时甚至几天。所以这个项目选择主动均衡路线,用MP2642GR-Z这颗双向升降压充电管理芯片,配合PIC18LF45K42做数字控制,实现能量在两颗电芯之间的转移,而不是烧掉。
这套方案解决的核心问题是:在两串电池的充放电全过程中,把两颗电芯的电压差控制在一个很小的范围内,同时保证均衡过程本身高效、可控、可监测。适合做储能BMS、UPS备用电源、便携式储能电源、太阳能储能模组的工程师参考,尤其是那些被被动均衡效率折磨过、想升级主动均衡方案的人。
2. 方案整体设计与核心器件选型
2.1 为什么选MP2642GR-Z而不是分立方案
MP2642GR-Z是一颗面向两串电池的同步升降压充电管理IC,内部集成了四个功率MOSFET和驱动电路,支持双向能量流动。它的工作逻辑是:当检测到两颗电芯电压不平衡时,可以从高电压电芯抽取能量,经过升降压转换后注入低电压电芯。整个过程是开关变换,效率典型值能到90%以上,远高于被动均衡的“发热效率”。
选它而不是自己搭分立MOS加驱动,主要考虑三点。第一,集成度高,外围只需要电感、电容和少量电阻,PCB面积小,对于空间紧张的备用电源模块很关键。第二,它自带充电管理功能,均衡和充电可以共用同一套功率级,不需要额外增加均衡电路,BOM成本反而更低。第三,芯片内部有完善的过压、过流、过温保护,做安全相关的储能产品时,这些保护能省掉大量外围检测电路。
当然它也有局限。MP2642GR-Z的均衡电流能力受限于芯片内部MOS的导通电阻和散热,实际能持续跑多大电流要看PCB铜箔和散热设计。我实测在四层板、2盎司铜厚、电感选10μH的情况下,持续2A均衡电流芯片温升在40℃左右,再往上就要加散热措施了。
2.2 PIC18LF45K42在这里扮演什么角色
PIC18LF45K42是一颗低功耗8位MCU,带12位ADC、硬件I2C/SPI、比较器和DAC。在这个方案里,它不直接参与功率变换,而是做“大脑”:采集两颗电芯的电压、总电流、温度,运行均衡策略,通过I2C或PWM接口控制MP2642GR-Z的工作模式,同时把状态上报给上位机或主控。
为什么不用MP2642GR-Z自己内部的逻辑做均衡?因为芯片内部的均衡阈值和策略是固定的,灵活性差。比如你想实现“只在充电末期均衡”、“均衡电流随温差动态调整”、“均衡过程中如果总压异常立即停止”这些逻辑,就必须有MCU介入。PIC18LF45K42的低功耗特性也很重要,备用电源系统在待机时整机功耗要尽可能低,这颗MCU在休眠模式下电流只有几十纳安级别,配合定时唤醒做电压巡检,不会把电池拖垮。
2.3 系统框图和能量流向
整个系统的能量流向可以这样理解:充电时,外部电源经过MP2642GR-Z给两串电池充电,MCU同时监测两颗电芯电压;一旦发现压差超过设定阈值(比如50mV),MCU就配置MP2642GR-Z进入均衡模式,把高电压电芯的能量通过电感转移到低电压电芯。放电时同理,均衡过程独立于充放电,只要压差超限就启动。
这里有个关键设计点:均衡电感和充电电感是同一个。MP2642GR-Z的拓扑支持双向工作,充电时电感参与降压或升压,均衡时电感参与能量转移。这样设计的好处是节省了一个功率电感,缺点是充电和均衡不能同时以最大功率进行,需要MCU做优先级调度。我的做法是充电优先,充电电流降到涓流阶段后再全力均衡,这样不影响充电速度,又能保证均衡效果。
3. 硬件设计细节与参数计算
3.1 电感选型与计算过程
电感是这套方案里最关键的被动器件。MP2642GR-Z的开关频率可以通过外部电阻设定,我一般设在400kHz到600kHz之间。频率高,电感可以小,但开关损耗增加;频率低,电感要大,但效率高。对于储能应用,效率优先,我选400kHz。
电感值计算公式基于升降压拓扑的电流纹波要求。假设均衡电流I_bal=2A,输入电压为高电压电芯电压V_high(最高4.2V),输出电压为低电压电芯电压V_low(最低3.0V),开关频率f_sw=400kHz,允许的电流纹波ΔI=40%×I_bal=0.8A。
升降压模式下,占空比D=V_low/(V_high+V_low)=3.0/(4.2+3.0)=0.417。电感值L=(V_high×D)/(f_sw×ΔI)=(4.2×0.417)/(400000×0.8)=5.47μH。取标准值10μH,实际纹波会更小,效率更高。电感的饱和电流必须大于I_bal+ΔI/2=2.4A,我选的是4.7A饱和电流的一体成型电感,留足余量。
注意:电感选型时不要只看饱和电流,还要看温升电流。很多电感标称饱和电流5A,但温升电流只有2A,持续跑2A均衡电流时电感会烫到不敢摸。实测温升电流至少要是均衡电流的1.5倍。
3.2 采样电路与ADC配置
PIC18LF45K42的12位ADC用来采集两颗电芯的电压。两串电池的电压范围是6.0V到8.4V,单颗电芯是3.0V到4.2V。MCU的ADC参考电压可以选内部2.048V或4.096V,但电芯电压最高4.2V,超过4.096V参考,所以需要分压。
我的做法是用两颗高精度电阻分压,把每颗电芯电压降到ADC量程内。分压比选1/2,这样4.2V变成2.1V,刚好在4.096V参考范围内。分压电阻选100kΩ和100kΩ,精度0.1%,温漂25ppm/℃。为什么用100kΩ而不是10kΩ?因为备用电源系统待机时,分压电阻会持续消耗电池能量。100kΩ分压网络在8.4V下消耗电流84μA,两颗电芯各42μA,对于几千毫安时的电池来说可以忽略。如果用10kΩ,消耗电流840μA,长期待机就是灾难。
ADC采样时要注意,PIC18LF45K42的ADC输入阻抗有限,分压电阻太大会导致采样不准。解决办法是在ADC输入端加一颗100nF电容,采样前先充电一段时间,或者用运放做缓冲。我图省事,直接在分压点和ADC引脚之间加了100nF,采样保持时间设长一点,实测精度能到±5mV,够用了。
3.3 均衡电流路径与PCB布局
均衡电流从高电压电芯正极流出,经过MP2642GR-Z内部的高侧MOS,进入电感,再经过低侧MOS流入低电压电芯正极。回路由两颗电芯的负极和芯片的GND引脚构成。这条路径上的寄生电阻直接影响效率,所以PCB布局要尽量短、粗。
我的布局经验是:电感靠近芯片的SW引脚,走线宽度至少2mm;两颗电芯的输入电容紧贴芯片的VIN和GND引脚,用10μF陶瓷电容加100μF电解电容组合;电流采样电阻放在低侧,用1mΩ的2512封装合金电阻,开尔文连接到芯片的采样引脚。
实操心得:MP2642GR-Z的散热焊盘必须大面积铺铜,并且打过孔到背面地平面。我第一版没注意,均衡电流跑到1.5A时芯片就触发过温保护了。后来在焊盘下打了9个0.3mm过孔,背面铺了2cm×2cm的铜皮,2A持续均衡温升只有35℃。
4. 软件控制策略与均衡算法实现
4.1 电压采集与滤波处理
PIC18LF45K42的ADC采集到的原始值会有噪声,尤其是均衡开关动作时,地弹和开关噪声会耦合进采样通道。我的做法是:在均衡启动前,先关闭均衡,采集32次电压值,去掉最大最小各4个,剩下的取平均,作为“静态电压”。均衡过程中,每隔100ms采集一次,用滑动平均滤波,窗口大小8。
为什么不用简单的单次采样?因为开关噪声是随机的,单次采样可能正好落在噪声尖峰上,导致误判。滑动平均能平滑掉高频噪声,但会引入延迟。100ms的采样周期加8点滑动平均,实际响应延迟约400ms,对于电池均衡这种慢过程完全够用。
代码上,我用PIC18LF45K42的ADC中断自动触发转换,转换完成后在中断里把结果存入环形缓冲区。主循环里做滤波和比较。这样CPU占用率很低,大部分时间可以休眠。
// ADC中断服务程序示例 void __interrupt() adc_isr(void) { if (PIR1bits.ADIF) { uint16_t raw = (ADRESH << 8) | ADRESL; adc_buffer[adc_idx] = raw; adc_idx = (adc_idx + 1) & 0x07; // 8点环形缓冲 PIR1bits.ADIF = 0; ADCON0bits.GO = 1; // 启动下一次转换 } }4.2 均衡启动与停止阈值设计
阈值设计是均衡策略的核心。太窄,均衡频繁启动,开关损耗大;太宽,电芯长期处于不平衡状态,容量损失大。我的经验值是:启动阈值50mV,停止阈值10mV。也就是说,当压差超过50mV时启动均衡,压差降到10mV以下时停止。
为什么要有40mV的回差?因为如果启动和停止阈值一样,压差在阈值附近波动时,均衡会频繁启停,继电器或MOS开关次数暴增,寿命缩短。回差设计让均衡一旦启动就至少运行到压差明显缩小才停,减少开关次数。
另外,充电和放电阶段的阈值可以不同。充电时电芯电压上升快,压差容易拉大,启动阈值可以设小一点,比如40mV。放电时电压下降,压差相对稳定,启动阈值设60mV。这些参数我放在MCU的EEPROM里,可以通过上位机在线调整,不用重新烧录固件。
4.3 均衡电流的动态调节
固定均衡电流在某些场景下不合适。比如两颗电芯压差很大时,用大电流快速拉平;压差很小时,用小电流精细调节,避免过冲。我的做法是用PWM控制MP2642GR-Z的使能引脚,占空比对应均衡电流大小。
具体实现:MCU的PWM模块输出1kHz方波,占空比0%到100%对应均衡电流0A到2A。压差大于200mV时,占空比100%;压差100mV到200mV,占空比50%;压差50mV到100mV,占空比25%;压差小于50mV,占空比10%。这样均衡过程先快后慢,既保证速度又避免过冲。
注意:PWM频率不能太低,否则电感会发出可听噪声;也不能太高,否则MP2642GR-Z的使能引脚响应不过来。实测1kHz到5kHz比较合适,我选2kHz,电感没有明显噪声。
4.4 温度保护与异常处理
储能系统安全第一。我在两颗电芯表面各贴了一颗10kΩ NTC热敏电阻,接到MCU的ADC通道。均衡过程中,如果任何一颗电芯温度超过45℃,立即停止均衡,并上报故障。如果温度在40℃到45℃之间,均衡电流减半。
异常处理还包括:总压异常(低于5.0V或高于8.6V)立即停止均衡;单颗电芯电压低于2.8V或高于4.25V立即停止;均衡超时(比如连续均衡30分钟压差仍大于50mV)停止并上报“均衡失效”。这些保护逻辑写在MCU的主循环里,优先级高于均衡策略。
5. 实测数据与性能分析
5.1 均衡速度实测
我用两颗标称2000mAh的18650电芯做测试,初始压差人为拉到300mV(一颗3.9V,一颗3.6V)。启动均衡后,记录压差随时间的变化。
| 时间(分钟) | 压差(mV) | 均衡电流(A) |
|---|---|---|
| 0 | 300 | 2.0 |
| 5 | 180 | 2.0 |
| 10 | 95 | 1.0 |
| 15 | 45 | 0.5 |
| 20 | 18 | 0.2 |
| 25 | 8 | 0.2 |
25分钟把300mV压差拉到8mV,平均均衡电流约1.2A。如果换成被动均衡,100mA放电电流,理论上需要3小时以上,实际因为放电电阻功率限制可能更久。主动均衡的速度优势非常明显。
5.2 效率与温升
在2A均衡电流下,用功率分析仪测输入输出功率。高电压电芯输出功率约7.8W(3.9V×2A),低电压电芯接收功率约7.0W(3.5V×2A),效率约90%。损耗主要来自电感铜损、MOS开关损耗和芯片内部驱动损耗。
温升方面,环境温度25℃,2A持续均衡30分钟后,MP2642GR-Z芯片表面温度58℃,电感表面温度52℃,PCB局部温度55℃。这个温升在储能产品里可以接受,但如果环境温度到40℃,芯片温度会到73℃,接近芯片的过温保护点(通常150℃结温,对应表面约85℃)。所以高温环境下要么降额使用,要么加强散热。
5.3 待机功耗
备用电源系统大部分时间处于待机状态,待机功耗直接影响电池自放电。我测了整套方案的待机电流:MCU进入休眠模式,MP2642GR-Z关闭,分压电阻网络消耗84μA,MCU休眠电流约1μA,LDO静态电流约5μA,总计约90μA。对于2000mAh电池,理论上待机时间约22000小时,约2.5年。实际因为电池自放电,大概1年左右需要补电。这个指标对于备用电源来说合格。
6. 常见问题与排查技巧实录
6.1 均衡不启动或频繁启停
最常见的问题是电压采样不准,导致MCU判断的压差和实际压差偏差大。排查步骤:先用万用表测两颗电芯的实际电压,和MCU上报的电压对比。如果偏差超过20mV,检查分压电阻精度和ADC参考电压。我遇到过用5%精度电阻分压,导致采样偏差50mV,均衡阈值完全失效。换成0.1%电阻后问题解决。
另一个原因是均衡启动阈值设得太小,比如设了20mV,而采样噪声就有15mV,导致均衡频繁启停。解决办法是增大启动阈值到50mV,或者在软件里加迟滞和滤波。
6.2 均衡电流上不去
MP2642GR-Z的均衡电流受限于内部MOS的导通电阻和电感饱和电流。如果设定2A但实际只有0.5A,先检查电感是否饱和。用示波器看电感电流波形,如果波形顶部变平,说明电感饱和了,需要换更大饱和电流的电感。
如果电感没问题,检查电流采样电阻和芯片的电流限制引脚。MP2642GR-Z内部有逐周期电流限制,采样电阻上的电压超过阈值就会限制电流。我用的1mΩ采样电阻,对应2A时压降2mV,芯片内部阈值通常是几十毫伏,不会误触发。但如果采样电阻焊错成10mΩ,2A时压降20mV,可能触发限流。
6.3 均衡过程中芯片过热
前面提过,散热焊盘必须大面积铺铜打过孔。如果已经铺了铜还是过热,检查开关频率是否太高。400kHz到600kHz是推荐范围,如果设到1MHz以上,开关损耗会急剧增加。另外,电感选得太小也会导致电流纹波大,增加MOS的RMS电流和损耗。
还有一个容易被忽略的点:MP2642GR-Z的VIN和GND之间的输入电容如果离芯片太远,开关瞬间的电压尖峰会耦合到芯片内部,导致额外损耗。输入电容必须紧贴芯片引脚,我用的是10μF X7R陶瓷电容加100μF铝聚合物电容,效果很好。
6.4 常见问题速查表
| 现象 | 可能原因 | 排查方法 | 解决措施 |
|---|---|---|---|
| 均衡不启动 | 采样偏差大 | 万用表对比实际电压 | 换0.1%分压电阻 |
| 均衡频繁启停 | 阈值太小或噪声大 | 示波器看采样波形 | 增大阈值,加滤波 |
| 均衡电流小 | 电感饱和或限流 | 看电感电流波形 | 换大饱和电流电感 |
| 芯片过热 | 散热不足或频率高 | 测芯片表面温度 | 铺铜打过孔,降频率 |
| 待机功耗大 | 分压电阻太小 | 测待机电流 | 换100kΩ以上分压电阻 |
| 均衡后压差反弹 | 电芯老化严重 | 测电芯内阻和容量 | 更换电芯 |
独家避坑技巧:均衡完成后,不要立即关闭所有电路。让MCU继续监测压差10分钟,如果压差反弹超过20mV,说明电芯自放电率差异大,需要标记该电池组为“老化”,在上位机提示维护。这个功能帮我提前发现了不少即将失效的电芯。
7. 方案扩展与个人实操体会
这套两串主动均衡方案跑了一年多,从实验室到小批量试产,踩过的坑基本都填平了。后来我在这个基础上做了几个扩展,效果不错,分享出来供参考。
第一个扩展是增加CAN或RS485接口,把电压、电流、温度、均衡状态上报给主控。PIC18LF45K42自带EUSART,加一颗收发器就能实现。协议用Modbus RTU,简单可靠,主控那边不用写复杂驱动。
第二个扩展是支持多组串联。两串是最小单元,如果要做4串、8串,可以用多颗MP2642GR-Z,每颗负责相邻两串的均衡,MCU通过I2C轮询管理。这样均衡能量可以在相邻电芯之间转移,虽然不如全局均衡高效,但电路模块化,扩展方便。
第三个扩展是加入历史数据记录。PIC18LF45K42的EEPROM有1KB,可以存最近100次的均衡事件,包括时间戳、初始压差、结束压差、均衡时长。电池组出问题时,这些数据是分析原因的第一手资料。
我个人在实际操作中的体会是:主动均衡方案的成本比被动均衡高不少,但省下来的电池容量和延长寿命的价值,在储能系统里很快就能回本。关键是均衡策略要调好,阈值、电流、保护逻辑都要根据实际电芯特性来,不能照搬手册参数。另外,PCB布局和散热设计比选芯片更重要,同样的芯片,布局好坏能差出10℃温升和5%效率。最后,测试阶段一定要用老化程度不同的电芯做验证,新电芯压差小,看不出问题,旧电芯才是真正的考验。