1. 储能电池均衡的底层逻辑与方案选型
1.1 为什么串联电池组必须做均衡
先聊一个很多人踩过的坑。两块标称容量一致的电池单元串联使用,放电到截止电压时,你会发现其中一块已经跌到2.8V,另一块还有3.3V。继续放电,低的那块被过放,高的那块还有余量。充电时反过来,高的先到4.2V,低的还在4.0V。长期循环下来,容量差越拉越大,整组电池的可用容量被最弱的那块拖死。
这不是电池质量问题,是制造离散性和温度梯度共同作用的结果。即便是同一批次出厂的电池,内阻差异通常在5%到15%之间,自放电率差异更大。串联结构下,电流相同,内阻大的那块发热更多,老化更快,形成正反馈。
储能系统和备用电源系统对循环寿命的要求通常在2000次以上,不做均衡的话,可能800次就衰减到80%以下。所以均衡电路不是可选项,是必选项。
1.2 被动均衡与主动均衡的取舍
被动均衡最简单,每节电池并联一个电阻和开关,电压高的那节通过电阻放电,把多余能量烧掉。成本低、电路简单、可靠性高,缺点是效率低、发热大、均衡电流小(通常50mA到200mA)。对于小容量电池组或者对成本极度敏感的场景,被动均衡够用。
主动均衡则是把高电压电池的能量搬到低电压电池去。常见拓扑有电容开关式、电感储能式、变压器式。效率高、均衡电流大,但电路复杂、成本高、需要额外的控制逻辑。
这个项目用的是MP2642GR-Z,这是一颗双向主动均衡芯片,配合PIC32MX675F256L做系统控制。选主动方案的理由很直接:储能系统充放电电流大,被动均衡那点电流根本追不上不均衡的累积速度。而且储能场景对能耗敏感,把能量搬来搬去比烧掉更合理。
1.3 核心器件角色分工
MP2642GR-Z是一颗专为两串电池设计的双向均衡控制器。它内部集成了功率开关管和驱动电路,外部只需要配合电感和少量电容就能工作。支持双向电流,意味着它既可以把高电压单元的能量转移到低电压单元,也可以反过来。均衡电流可以通过外部电阻设定,典型值在1A到3A之间。
PIC32MX675F256L是一颗带浮点运算单元的32位MCU,主频80MHz,256KB Flash,64KB RAM。在这个系统里,它负责采集电池电压、温度,运行均衡算法,控制MP2642GR-Z的工作模式,还要处理与上位机的通信。选这颗MCU的原因是它外设丰富,有多路ADC、多个UART和SPI接口,运算能力足够跑简单的滤波和逻辑判断,而且工业级温度范围满足储能场景要求。
两者配合的逻辑是:MCU做决策,均衡芯片做执行。MCU通过ADC监测两节电池的电压差,当差值超过设定阈值时,通过GPIO或SPI接口告诉MP2642GR-Z往哪个方向均衡、均衡电流多大。MP2642GR-Z内部完成闭环控制,MCU不需要实时干预。
2. 硬件设计与关键参数计算
2.1 均衡电流的确定依据
均衡电流选多大,取决于三个因素:电池容量、不均衡程度、允许的均衡时间。
假设电池容量是50Ah,经过一段时间使用后,两节电池的荷电状态差异达到10%,也就是5Ah的容量差。如果均衡电流是1A,理论上需要5小时才能把差异补回来。如果均衡电流是3A,不到2小时。储能系统通常有夜间低谷电价时段充电、白天放电的循环,均衡可以在充电后期或者静置阶段进行,时间窗口比较充裕。
但均衡电流不是越大越好。电流大意味着电感体积大、发热多、EMI问题严重。而且均衡电流过大时,电池内阻上的压降会影响电压采样的准确性,导致均衡判断出错。
实际选型时,我一般按电池容量的1/20到1/10来估算均衡电流。50Ah的电池,均衡电流2.5A到5A比较合适。MP2642GR-Z支持的最大均衡电流取决于外部电感和MOSFET的选型,数据手册里给的是峰值5A,但持续工作建议降额到3A以内。
2.2 电感选型的计算过程
MP2642GR-Z是开关式均衡,工作频率典型值500kHz。电感值决定了电流纹波。
纹波电流公式:ΔI = (Vbat × D × (1-D)) / (fsw × L)
其中Vbat是单节电池电压,取3.7V标称值;D是占空比,最恶劣情况取0.5;fsw是开关频率500kHz。
假设允许纹波电流为均衡电流的30%,即3A × 0.3 = 0.9A。
代入公式:0.9 = (3.7 × 0.5 × 0.5) / (500000 × L)
解出L = (3.7 × 0.25) / (500000 × 0.9) = 0.925 / 450000 ≈ 2.06μH
实际选型取标准值2.2μH。电感的饱和电流要大于均衡电流加上纹波峰值,即3A + 0.45A = 3.45A,留20%余量选4.5A以上。直流电阻要小,否则效率低、发热大,建议选DCR小于20mΩ的。
2.3 采样电路的设计细节
电压采样精度直接决定均衡效果。PIC32MX675F256L内部ADC是12位,参考电压3.3V,理论分辨率是3.3V / 4096 ≈ 0.8mV。但实际精度受参考电压温漂、PCB布局、分压电阻精度影响。
分压电阻选0.1%精度的金属膜电阻,温漂25ppm/℃。分压比设计成1:2,这样4.2V电池电压分压后是2.1V,在ADC量程中间位置,线性度最好。
采样点要加RC滤波,截止频率设在100Hz左右,滤掉开关噪声。R取1kΩ,C取1μF,截止频率f = 1/(2πRC) = 1/(2×3.14×1000×0.000001) ≈ 159Hz。如果噪声还是大,可以把C加大到2.2μF,截止频率降到72Hz。
注意:采样地和功率地要分开走线,最后在电池负极单点连接。否则均衡电流在地线上的压降会串进采样回路,导致电压读数偏差几十毫伏。
2.4 温度监测的必要性
锂电池在0℃以下充电会析锂,45℃以上老化加速。均衡过程中电池本身会发热,如果温度已经很高还继续大电流均衡,风险很大。
我在电池表面贴了10kΩ NTC热敏电阻,分压后接入MCU的ADC。NTC的B值选3950,25℃时阻值10kΩ。分压电阻也用10kΩ,这样25℃时ADC读数正好是参考电压的一半。
温度计算用Steinhart-Hart公式的简化版:
T = 1 / (1/T0 + (1/B) × ln(R/R0))
其中T0是25℃对应的开尔文温度298.15K,R0是25℃时NTC阻值10kΩ,B是3950。MCU算这个公式需要浮点运算,PIC32MX675F256L有FPU,算起来很快,不会影响主循环。
温度保护阈值设两级:45℃时把均衡电流降到一半,55℃时直接停止均衡并上报故障。
3. 软件架构与均衡策略实现
3.1 主循环的任务调度
PIC32MX675F256L跑的是裸机程序,没有上RTOS。主循环按1ms节拍运行,用定时器中断做时基。
任务分配是这样的:每10ms采集一次电压和温度,每100ms运行一次均衡决策,每500ms更新一次状态灯和通信数据。均衡芯片的控制信号通过SPI发送,速率设1MHz,一帧数据8个字节,传输时间不到100μs,对主循环影响可以忽略。
电压采集用DMA搬运ADC结果,避免CPU频繁中断。ADC配置成扫描模式,自动轮流采集两节电池电压和两路温度,采完一轮触发DMA中断,在中断里更新数据缓冲区。
3.2 电压滤波与真实值提取
ADC读回来的原始值有噪声,直接用来判断均衡会频繁误动作。我用了滑动平均滤波,窗口大小16,每采一次新值就替换最旧的值,然后求平均。这样滤波后的数据更新率是100Hz,延迟80ms,对于均衡这种慢过程完全够用。
但滑动平均有个问题:如果电压突然变化,比如充电器刚接入,滤波后的值会滞后。所以我又加了一个判断逻辑:如果连续3次采样的原始值与滤波值偏差超过50mV,就重置滤波窗口,直接用新值填充。
代码片段:
#define FILTER_WINDOW 16 float voltage_buffer[2][FILTER_WINDOW]; uint8_t buffer_index = 0; float moving_average(uint8_t cell, float new_value) { voltage_buffer[cell][buffer_index] = new_value; float sum = 0; for (int i = 0; i < FILTER_WINDOW; i++) { sum += voltage_buffer[cell][i]; } return sum / FILTER_WINDOW; } void check_voltage_jump(uint8_t cell, float raw_value) { float filtered = moving_average(cell, raw_value); if (fabs(raw_value - filtered) > 0.05) { for (int i = 0; i < FILTER_WINDOW; i++) { voltage_buffer[cell][i] = raw_value; } } }3.3 均衡启动与停止的阈值设计
均衡不是一直开着的。电压差太小的时候均衡没意义,反而增加损耗。电压差太大的时候要小心,可能是某节电池坏了。
我设了三档阈值:
- 电压差小于20mV:不均衡,这是正常离散范围。
- 电压差在20mV到200mV之间:正常均衡,电流按比例调整。
- 电压差大于200mV:先小电流试探,如果电压差快速缩小说明只是不均衡,如果电压差不变说明某节电池可能失效,上报故障。
均衡电流的计算用比例控制:
I_balance = Kp × (V_high - V_low)
Kp取10,这样200mV差对应2A电流,20mV差对应0.2A电流。比例控制的好处是差大的时候快均衡,差小的时候慢均衡,避免过冲。
但比例控制有个缺点:当电压差接近阈值时,电流很小,均衡速度极慢。所以我又加了一个最小电流限制,当电压差大于20mV时,均衡电流至少0.3A。
3.4 与MP2642GR-Z的通信协议
MP2642GR-Z支持SPI和GPIO两种控制方式。GPIO方式简单,但只能控制方向和使能,电流大小要外部调。SPI方式可以读写内部寄存器,设置均衡电流、工作模式、读取故障状态。
我选SPI方式,因为可以动态调整电流,而且能读到芯片内部的故障信息。
SPI帧格式是16位:高8位是寄存器地址,低8位是数据。写操作地址最高位为0,读操作最高位为1。
初始化流程:
- 拉低片选,发送0x00 0x01,使能芯片。
- 发送0x01 0x0A,设置均衡电流为1A(具体值查数据手册的电流设置表)。
- 发送0x02 0x03,设置工作模式为双向自动。
- 拉高片选。
运行中每100ms读一次状态寄存器,地址0x10,判断有没有过温、过流、电池失效等故障标志。
实操心得:SPI的时钟极性要和芯片匹配,MP2642GR-Z是CPOL=0,CPHA=0,即空闲时时钟低电平,上升沿采样。我一开始设成CPOL=1,读回来的数据全是0xFF,查了半天才发现是模式设错了。
4. 实测数据与问题排查实录
4.1 均衡效果的实测验证
用两节50Ah的磷酸铁锂电池串联,初始电压分别是3.32V和3.28V,压差40mV。开启均衡,设定电流2A。
前10分钟,电压差从40mV缩小到25mV,速度很快。之后速度变慢,30分钟时压差15mV,60分钟时压差8mV,90分钟时压差稳定在5mV左右。
为什么后面变慢?因为比例控制下,压差小的时候电流也小。5mV压差对应0.05A电流,但最小电流限制是0.3A,所以实际还是0.3A在均衡。压差不再缩小是因为电池的自放电和采样噪声导致的波动,5mV已经在测量误差范围内了。
从能量角度看,40mV压差在50Ah电池上对应的容量差大约是0.5Ah(磷酸铁锂平台区电压变化平缓,40mV对应约1%的SOC差)。2A电流均衡0.5Ah需要0.25小时,实际用了1.5小时,效率大约17%。效率低是因为后期电流小,大部分时间在低电流下运行。
如果要提高效率,可以把最小电流限制提高到0.5A,但这样在压差接近阈值时容易过冲。折中方案是分段设置最小电流:压差大于50mV时最小0.5A,压差小于50mV时最小0.2A。
4.2 常见问题速查表
| 现象 | 可能原因 | 排查方法 | 解决方案 |
|---|---|---|---|
| 均衡不启动 | 电压差未超阈值 | 用万用表实测两节电池电压 | 检查阈值设置,确认采样准确 |
| 均衡电流上不去 | 电感饱和电流不够 | 用示波器看电感电流波形 | 换更大饱和电流的电感 |
| 电压采样跳动大 | 地线干扰 | 示波器看采样点波形 | 分开模拟地和功率地,加RC滤波 |
| 芯片发热严重 | 开关损耗大 | 测芯片表面温度 | 降低开关频率或换低Qg的MOSFET |
| SPI读回全0xFF | 通信模式错误 | 检查CPOL和CPHA设置 | 改成CPOL=0,CPHA=0 |
| 均衡方向反了 | 电池连接顺序错 | 核对BAT+和BAT-接线 | 调换两节电池的采样线 |
4.3 一个隐蔽的采样故障
调试时遇到一个怪现象:均衡开启后,高电压那节的读数反而变低了,低电压那节的读数变高了,导致均衡方向来回切换,像振荡一样。
用示波器看采样点波形,发现均衡电流在地线上产生了50mV的压降。高电压那节的采样地正好在均衡电流路径上,所以读数被抬高了。低电压那节的采样地不在路径上,读数正常。结果就是高电压那节读数虚高,低电压那节读数正常,压差被低估,均衡电流减小,然后压差又变大,循环往复。
解决方法很简单:把两节电池的采样地都接到电池组负极的同一个点,这个点不流过均衡电流。重新布线后,振荡消失。
这个坑花了我两天时间才找到。教训是:采样地的走线一定要单独拉,不要和功率路径共用。
4.4 温度对均衡的影响
夏天室温35℃时做均衡测试,电池表面温度从35℃升到42℃,均衡电流自动从2A降到1A。这是温度保护逻辑在起作用,45℃降额,但42℃还没到阈值,为什么降了?
查代码发现,NTC的读数偏高。原因是NTC贴在电池表面,但电池表面温度受环境温度影响大,而且NTC的引线太长,引入了额外电阻。10kΩ的NTC,引线电阻0.5Ω,在25℃时影响0.005%,可以忽略。但在高温时NTC阻值降到1kΩ左右,0.5Ω引线电阻的影响就变成0.05%,导致温度读数偏高约0.5℃。
虽然0.5℃不大,但加上NTC本身的精度±1℃,总误差可能到1.5℃。对于45℃降额这种阈值判断,1.5℃的误差可能导致提前降额或者延迟保护。
改进方法是把NTC的引线缩短,或者用四线制接法消除引线电阻影响。更简单的办法是在软件里做校准:在已知温度下测出NTC的实际阻值,反推引线电阻,然后在计算时减去。
5. 系统集成与可靠性设计
5.1 与储能系统的接口设计
这个均衡模块不是孤立的,它要接入储能系统的整体架构。接口分三部分:电源、通信、状态指示。
电源从电池组直接取电,经过一颗宽压输入的DC-DC降到3.3V给MCU和均衡芯片供电。DC-DC的输入范围要覆盖电池组的全电压范围,两节磷酸铁锂串联是5V到7.3V,两节三元锂是6V到8.4V。选输入范围4V到40V的DC-DC,留足余量。
通信接口用隔离型CAN收发器,因为储能系统里多个模块之间地电位可能不同,不隔离容易烧接口。CAN速率设250kbps,足够传输电压、温度、状态这些数据。
状态指示用双色LED,绿色表示正常,红色表示故障,黄色闪烁表示正在均衡。LED的驱动电流设5mA,限流电阻按3.3V算:(3.3 - 2.0) / 0.005 = 260Ω,取270Ω标准值。
5.2 故障保护与恢复逻辑
可靠性设计里,故障保护是重中之重。我设了四级保护:
第一级是软件保护,MCU检测到异常后主动停止均衡。响应时间100ms。
第二级是硬件比较器保护,用一颗窗口比较器监测电池电压,超出范围直接拉低MP2642GR-Z的使能脚。响应时间10μs。
第三级是保险丝,如果前两级都失效,持续过流会烧断保险丝,物理切断电路。
第四级是热熔断器,贴在电池表面,温度超过70℃永久断开。
故障恢复逻辑要区分可恢复故障和不可恢复故障。过温、过流是可恢复的,温度降下来、电流正常后自动恢复。电池失效、保险丝熔断是不可恢复的,需要人工干预。
注意:自动恢复要有次数限制。如果1小时内同一故障触发超过5次,就锁定为不可恢复,等待人工复位。否则可能出现故障反复触发、系统不断重启的情况。
5.3 PCB布局的实战经验
均衡电路是开关电源,PCB布局直接影响EMI和效率。我踩过的坑包括:
电感离芯片太远,走线电感大了,开关波形振铃严重,EMI超标。后来把电感放在芯片背面,走线长度控制在5mm以内,振铃明显改善。
输入电容离芯片太远,均衡电流的脉冲分量在走线上产生压降,导致芯片供电不稳。输入电容要放在芯片的VIN脚旁边,距离不超过3mm。
采样线走线太长,而且和功率线平行,耦合了开关噪声。采样线要远离功率线,如果必须交叉,要垂直交叉,不要平行。
地平面分割要合理。功率地和模拟地分开,但在芯片下方要有一个完整的接地平面,让回流路径最短。我一开始把地平面完全分割,结果回流路径绕远,噪声更大。后来改成单点连接,效果好很多。
5.4 长期运行的可靠性验证
实验室测试通过不代表现场可靠。我做了三组加速老化测试:
高温高湿测试:85℃、85%湿度,运行1000小时。测试后均衡精度从5mV劣化到8mV,原因是分压电阻的阻值漂移。换成抗硫化电阻后,劣化控制在6mV以内。
温度循环测试:-40℃到85℃,1000次循环。焊点出现微裂纹,原因是陶瓷电容和PCB的热膨胀系数不匹配。换成柔性端头电容后,问题解决。
振动测试:10Hz到2000Hz扫频,每个轴向2小时。电感磁芯出现松动,电感量下降10%。改用一体成型电感后,电感量变化小于2%。
这些测试花了不少时间和成本,但比现场出故障再召回划算得多。储能系统通常安装在偏远地区,维护成本极高,可靠性设计不能省。
6. 均衡策略的进阶优化
6.1 基于SOC的均衡而非基于电压
电压均衡有个天然缺陷:磷酸铁锂的电压平台太平坦,SOC从30%到70%电压只变化20mV。这时候电压差5mV可能对应10%的SOC差,但电压均衡系统认为压差很小,不启动均衡。
更好的方法是基于SOC均衡。SOC估算用安时积分加开路电压校正。安时积分需要电流采样,我用霍尔电流传感器,精度1%,放在电池组负极。
安时积分的公式:SOC(t) = SOC(0) - ∫I dt / Q
其中Q是电池额定容量。积分用MCU的定时器做,每100ms累加一次电流值乘以时间。
开路电压校正只在静置时进行。静置判断条件是电流小于0.1A且持续30分钟。这时候测开路电压,查SOC-OCV曲线得到SOC值,用来修正安时积分的累积误差。
基于SOC均衡的阈值设成5%,即两节电池SOC差超过5%才启动均衡。这样在电压平台上也能正确判断不均衡程度。
6.2 自适应均衡电流的尝试
固定比例控制的均衡电流在压差大时快、压差小时慢,但慢的时候效率低。我试过自适应电流:根据压差和温度动态调整Kp。
压差大于100mV时,Kp=15,快速均衡。压差在50mV到100mV时,Kp=10。压差小于50mV时,Kp=5,慢速精细均衡。
温度高于40℃时,Kp乘以0.7,降低电流减少发热。温度低于10℃时,Kp乘以0.5,因为低温下电池内阻大,大电流均衡会导致电压采样偏差大。
实测下来,自适应策略比固定Kp的均衡时间缩短了20%,而且末端精度更好,压差能稳定在3mV以内。
6.3 均衡与充电的协同
均衡最好在充电后期进行,因为这时候电池电压高,电压差也最明显。但充电电流会干扰电压采样,所以要在充电电流小的时候均衡。
我的策略是:充电电流大于1A时,暂停均衡,只监测。充电电流降到1A以下时,启动均衡。充电结束后,如果压差还大于阈值,继续均衡直到压差小于阈值或者电池电压降到静置电压。
这样做的原因是:充电时电池内阻上的压降会叠加在开路电压上,导致电压读数偏高。充电电流1A时,50mΩ内阻产生50mV压降,比均衡阈值还大,根本没法判断真实压差。
实操心得:如果你发现充电时均衡总是往错误方向动作,先检查是不是充电电流干扰了采样。最简单的验证方法是暂停充电,看电压读数是否突变。如果突变超过20mV,说明充电电流的影响不可忽略。
6.4 数据记录与远程监控
储能系统通常无人值守,均衡模块要有数据记录功能。我在MCU的Flash里划了一块区域做日志,每10分钟记录一次两节电池的电压、温度、均衡状态。Flash擦写寿命10万次,按10分钟一次算,可以记录约2年。
日志格式是紧凑的二进制,每条记录16字节:时间戳4字节,电压1和电压2各2字节(单位mV),温度1和温度2各1字节(单位℃,偏移40℃),均衡电流1字节(单位0.1A),状态1字节,保留3字节。
远程监控通过CAN上报实时数据,上位机可以看电压曲线、温度曲线、均衡次数统计。如果发现某节电池的电压总是偏低,而且均衡后很快又偏低,说明这节电池自放电大或者容量衰减严重,需要更换。
这个诊断功能很实用。我在一个备用电源项目里,通过数据分析提前发现了3节异常电池,在系统失效前就更换了,避免了停电事故。