1. 储能与备用电源场景下的电池均衡需求拆解
1.1 两串电池组为什么必须做均衡
储能和备用电源系统里,两串电池组是最常见的低压架构之一。不管是磷酸铁锂还是三元锂,只要两颗电芯串联,出厂容量、内阻、自放电率就不可能完全一致。用久了之后,容量偏小或者自放电偏大的那颗电芯会先被拉低,充电时又先到上限,放电时先到下限。结果就是整组可用容量被最弱的那颗电芯卡死,续航缩水,严重时还会因为过充过放加速老化。
很多人以为两串电池组电压低、结构简单,随便加个保护板就行。实际上保护板只负责切断回路,它不做能量转移。真正让两颗电芯重新回到同一水平线的,是均衡电路。均衡的本质是把电压高的那颗电芯里的能量,通过电阻消耗掉或者搬到电压低的那颗里去。前者叫被动均衡,后者叫主动均衡。两串场景下,被动均衡成本低但发热明显,主动均衡效率高但电路复杂,选哪种要看你的系统对效率、体积和成本的要求。
我接触过不少做便携储能和UPS备用电源的团队,他们最常踩的坑就是:一开始觉得两串电池组容量小,不做均衡也没事,结果跑了半年返修率飙升。拆开一看,两颗电芯压差已经拉到300mV以上,BMS早就触发保护了。所以均衡不是可选项,是两串电池组能不能长期稳定工作的关键。
1.2 为什么选MP2642GR-Z做均衡控制
MP2642GR-Z这颗芯片在电池管理圈子里不算陌生,它是一颗专门针对多串电池组设计的均衡控制器。我选它的理由很直接:它支持双向主动均衡,能把电压高的电芯能量转移到电压低的电芯,而不是单纯用电阻烧掉。对于储能和备用电源这种对效率敏感的场景,被动均衡那点发热量在密闭机箱里是灾难性的。
另外,MP2642GR-Z的均衡电流可以配置,外围只需要搭配电感和少量阻容,就能搭出一个完整的Buck-Boost均衡电路。它的工作电压范围覆盖两串锂电的典型区间,静态功耗也控制得不错,备用电源长期浮充的场景下不会把电池拖垮。还有一点很关键,它自带过温保护和欠压锁定,电芯电压太低的时候会自动停掉均衡,避免把电芯进一步拉空。
有人会问,为什么不直接用MCU的PWM加MOS管自己搭均衡电路?可以,但你要自己处理死区时间、电流采样、过流保护,调试周期至少多出两三周。MP2642GR-Z把这些都集成进去了,你只需要配置几个电阻就能设定均衡阈值和电流,省下来的时间够你把BMS通信协议调通好几遍。
1.3 TM4C129EKCPDT在系统中的角色定位
TM4C129EKCPDT是一颗带以太网和CAN控制器的ARM Cortex-M4 MCU,主频120MHz,Flash 1MB,RAM 256KB。放在储能和备用电源系统里,它通常扮演系统主控的角色:采集电池电压、电流、温度,跑SOC估算算法,控制均衡芯片,对外通过CAN或者以太网汇报状态。
为什么不用更便宜的MCU?因为储能和备用电源系统往往需要同时处理多路ADC采样、CAN通信、上位机协议解析,还要留出足够的算力做安全逻辑判断。TM4C129EKCPDT的浮点单元和DMA控制器在这类场景下很实用,ADC采样可以走DMA自动搬运,CPU专心跑控制逻辑。而且它的CAN外设支持硬件过滤,在多节点储能系统中能有效降低CPU负载。
在这套两串均衡方案里,TM4C129EKCPDT负责三件事:第一,通过ADC实时监测两颗电芯的电压;第二,根据压差决定是否启动MP2642GR-Z进行均衡;第三,把均衡状态和电池健康数据通过CAN上报给系统主机。它不直接驱动均衡功率级,而是通过GPIO和SPI跟MP2642GR-Z交互,这样分工明确,故障排查也方便。
2. 硬件架构设计与关键参数计算
2.1 整体框图与信号流向
整套系统的硬件架构可以分成三层:电池层、均衡层、控制层。电池层就是两颗串联的电芯,中间引出中点,方便分别测量上下两颗电芯的电压。均衡层以MP2642GR-Z为核心,外接电感和MOSFET,通过中点连接到两颗电芯的正负极。控制层是TM4C129EKCPDT,它通过分压电阻网络采集三路电压:电池组总压、上电芯电压、下电芯电压,然后通过SPI配置MP2642GR-Z的工作模式。
信号流向是这样的:TM4C129EKCPDT的ADC采样得到两颗电芯的电压值,计算出压差。如果压差超过设定的阈值,比如50mV,MCU就通过SPI给MP2642GR-Z发送均衡启动命令,并设定均衡电流方向。MP2642GR-Z驱动外部MOS管,把高电压电芯的能量通过电感转移到低电压电芯。均衡过程中,MCU持续监测电压变化,当压差缩小到回差阈值以内,比如10mV,就停止均衡。
这里有个细节要注意:MP2642GR-Z的SPI接口和TM4C129EKCPDT的SPI外设要匹配。TM4C129EKCPDT的SPI支持多种时钟极性和相位,配置的时候要跟MP2642GR-Z的数据手册对齐,否则通信会不稳定。我一般会在SPI线上串22欧姆的电阻,靠近MCU端放置,能有效抑制过冲。
2.2 均衡电流与电感选型计算
均衡电流的大小直接决定了均衡速度和发热量。假设我们选定的均衡电流是1A,两颗电芯的压差是100mV,那么均衡功率就是100mW,这个发热量在自然散热条件下完全可以接受。如果均衡电流拉到2A,功率翻倍到200mW,就需要考虑PCB铜箔面积和空气流通了。
MP2642GR-Z的开关频率可以配置,典型值在300kHz到500kHz之间。电感值的选择跟开关频率和纹波电流有关。公式是这样的:L = (Vout × (1 - D)) / (fsw × ΔIL),其中D是占空比,ΔIL是电感纹波电流,一般取均衡电流的20%到40%。假设均衡电流1A,纹波取30%即0.3A,开关频率400kHz,占空比0.5,那么L = (3.7V × 0.5) / (400kHz × 0.3A) ≈ 15.4μH。实际选型取标准值15μH或者22μH都可以,饱和电流要大于均衡电流的1.5倍,也就是至少1.5A,我一般会选3A以上的电感留足余量。
电感的直流电阻也很关键,DCR越小,均衡效率越高。但DCR小的电感往往体积大,这里要折中。我实测下来,15μH、3A、DCR 50mΩ左右的屏蔽电感在效率和体积之间平衡得比较好。注意一定要选屏蔽电感,否则均衡时的高频开关噪声会干扰MCU的ADC采样。
2.3 电压采样电路与精度保障
两串电池组的电压采样看起来简单,实际上很容易出问题。TM4C129EKCPDT的ADC参考电压是3.3V,而两颗串联锂电的总压可能到8.4V,所以必须用分压电阻。分压电阻的精度直接影响均衡判断的准确性,我建议用0.1%精度的电阻,温漂控制在25ppm/℃以内。
分压比的计算:假设上电芯最高电压4.2V,中点电压4.2V,总压8.4V。ADC输入不能超过3.3V,所以上电芯电压的分压比要小于3.3/4.2≈0.785。我一般取分压比为0.5,也就是用两个等值电阻分压,这样上电芯电压4.2V时分压后是2.1V,留足了余量。总压8.4V分压后是4.2V,超了,所以总压的分压比要更小,取0.33左右,用10k和20k电阻分压,8.4V分压后是2.8V,安全。
采样点要加RC滤波,截止频率设在1kHz左右,滤掉开关噪声。电容用100nF的X7R陶瓷电容,电阻用1kΩ,这样时间常数是100μs,对均衡这种慢速过程完全够用。注意RC滤波的电阻会跟ADC输入阻抗形成分压,TM4C129EKCPDT的ADC输入阻抗在采样时不是无穷大,所以滤波电阻不能太大,1kΩ是安全值。
注意:分压电阻的功耗也要算。总压8.4V加在30kΩ上,电流0.28mA,功耗2.35mW,用0603封装就够了。但如果用更小的电阻,比如3kΩ,功耗会到23.5mW,0603就有点勉强了。
3. 软件控制逻辑与均衡策略实现
3.1 电压采集与滤波算法
TM4C129EKCPDT的ADC是12位精度,参考电压3.3V,理论分辨率是0.8mV。但实际有效位数受噪声影响,可能只有10位左右。为了提高精度,我用了过采样加均值滤波的方法:每个通道连续采样16次,去掉最大最小值各2个,剩下的12个取平均。这样能把有效分辨率提高到12位以上,而且计算量不大,120MHz的M4核跑起来毫无压力。
采样时机也很重要。均衡电路工作时,电感和MOS管会产生开关噪声,如果这时候采样,电压值会跳得厉害。我的做法是:在均衡启动前采样一次作为基准,均衡过程中每隔100ms暂停均衡5ms,在暂停窗口内采样,采样完再恢复均衡。这样既不影响均衡效率,又能拿到干净的电压值。5ms的暂停对1A均衡电流来说,能量损失可以忽略不计。
代码实现上,我用了一个简单的状态机:
typedef enum { BAL_IDLE, BAL_SAMPLING, BAL_ACTIVE, BAL_PAUSE } bal_state_t; void bal_state_machine(void) { static uint32_t pause_counter = 0; switch (bal_state) { case BAL_IDLE: if (voltage_diff > BAL_START_THRESHOLD) { bal_state = BAL_SAMPLING; } break; case BAL_SAMPLING: sample_cell_voltages(); bal_state = BAL_ACTIVE; break; case BAL_ACTIVE: pause_counter++; if (pause_counter >= 100) { pause_counter = 0; bal_state = BAL_PAUSE; } break; case BAL_PAUSE: sample_cell_voltages(); if (voltage_diff < BAL_STOP_THRESHOLD) { stop_balancing(); bal_state = BAL_IDLE; } else { bal_state = BAL_ACTIVE; } break; } }这段代码的逻辑很直白:压差超过启动阈值就进入采样,采样完开始均衡,每100个循环暂停一次采样,压差降到停止阈值以下就退出。实际跑下来,两颗电芯从100mV压差均衡到10mV以内,大概需要40分钟,均衡电流1A。
3.2 均衡阈值与回差设置
均衡启动阈值和停止阈值不能设得太近,否则会在阈值附近反复启停,造成震荡。我一般设启动阈值50mV,停止阈值10mV,中间40mV的回差足够避免震荡。如果电芯容量差异比较大,可以把启动阈值放宽到80mV,停止阈值还是10mV,这样均衡时间会长一些,但不会频繁启停。
阈值设置还要考虑ADC的采样误差。如果采样误差是±5mV,启动阈值设50mV,实际压差可能在45mV到55mV之间触发,问题不大。但如果启动阈值设20mV,采样误差就可能造成误触发。所以启动阈值至少要是采样误差的3倍以上,我建议不低于30mV。
还有一个细节:均衡过程中,如果系统检测到总压低于欠压保护点,要立即停止均衡。因为均衡本身会消耗能量,电池已经欠压了还继续均衡,只会让情况更糟。MP2642GR-Z自带欠压锁定,但MCU层面也要做一层保护,双保险。
3.3 SPI通信配置与故障处理
TM4C129EKCPDT和MP2642GR-Z之间的SPI通信是控制链路的关键。TM4C129EKCPDT的SPI0配置为主机模式,时钟极性CPOL=0,相位CPHA=0,时钟频率设到1MHz。MP2642GR-Z的SPI最高支持2MHz,1MHz留足了余量,通信稳定性更好。
每次发送命令后,MCU要读取MP2642GR-Z的状态寄存器,确认命令是否执行成功。如果连续3次通信失败,MCU要关闭均衡,并通过CAN上报故障码。我遇到过SPI通信被均衡开关噪声干扰的情况,后来在SPI线靠近MP2642GR-Z端加了100pF的对地电容,问题就解决了。
故障处理逻辑要覆盖这几种情况:SPI通信超时、MP2642GR-Z过温报警、电芯电压超出安全范围、均衡电流异常。每种故障对应不同的恢复策略,比如过温报警就等温度降下来再恢复均衡,电压异常就永久关闭均衡直到人工复位。
4. 实测数据与常见问题排查
4.1 均衡效率与温升实测
我用两颗标称容量5000mAh的磷酸铁锂电芯做了测试,初始压差120mV。均衡电流设定1A,环境温度25℃,自然散热。实测数据如下:
| 时间 | 上电芯电压 | 下电芯电压 | 压差 | 均衡电流 | MP2642GR-Z温度 |
|---|---|---|---|---|---|
| 0min | 3.42V | 3.30V | 120mV | 1.0A | 28℃ |
| 10min | 3.40V | 3.32V | 80mV | 1.0A | 42℃ |
| 20min | 3.38V | 3.34V | 40mV | 1.0A | 48℃ |
| 30min | 3.37V | 3.35V | 20mV | 1.0A | 50℃ |
| 40min | 3.36V | 3.36V | 0mV | 0A | 35℃ |
从数据看,均衡效率大概在85%左右,能量损失主要来自电感的DCR和MOS管的导通电阻。MP2642GR-Z的温度在50℃左右稳定,没有超过芯片的过温保护点。如果均衡电流加到2A,温度会到70℃以上,这时候就需要加散热片或者降低均衡电流。
提示:均衡电流不是越大越好。1A均衡电流对5000mAh电芯来说,相当于0.2C的均衡倍率,已经很快了。再大电流带来的温升和EMI问题会抵消均衡速度的优势。
4.2 常见问题速查表
| 现象 | 可能原因 | 排查方法 | 解决方法 |
|---|---|---|---|
| 均衡不启动 | 压差未达阈值 | 用万用表实测电芯电压 | 调整阈值或检查采样电路 |
| 均衡启动后立即停止 | 欠压保护触发 | 检查总压是否低于保护点 | 先充电再均衡 |
| SPI通信失败 | 时钟极性配置错误 | 用逻辑分析仪抓SPI波形 | 核对数据手册配置CPOL/CPHA |
| 均衡电流偏小 | 电感饱和或DCR过大 | 测量电感两端波形 | 更换饱和电流更大的电感 |
| MP2642GR-Z过热 | 均衡电流过大或散热不良 | 红外测温枪测芯片表面 | 降低均衡电流或加散热片 |
| 电压采样跳动 | 开关噪声干扰 | 示波器看ADC输入 | 加RC滤波或暂停均衡采样 |
4.3 踩过的坑与实操心得
第一个坑:一开始我把分压电阻的地线跟功率地线共用,结果均衡时ADC采样值跳了50mV以上。后来把模拟地和功率地分开,单点接地,问题就解决了。模拟地和功率地一定要分开走线,最后在电池负极处汇合。
第二个坑:电感选型时只看电感值和饱和电流,忽略了DCR。第一批样品用了DCR 200mΩ的电感,均衡效率只有70%,电感烫得手都摸不得。换成DCR 50mΩ的屏蔽电感后,效率提到85%,温度也降下来了。
第三个坑:SPI通信线没有加串联电阻,均衡时偶尔出现通信错误。后来在SCK和MOSI上各串了22Ω电阻,错误率降到零。这个电阻靠近MCU放置效果最好,能吸收反射。
第四个坑:均衡阈值设得太低,设了20mV,结果电芯电压稍微波动就触发均衡,均衡电路频繁启停,反而加速了电芯老化。后来把启动阈值提到50mV,停止阈值10mV,系统就稳定了。
第五个坑:没有做均衡超时保护。有一次一颗电芯异常,压差一直降不下来,均衡电路连续工作了4个小时,MP2642GR-Z温度到了85℃。后来加了超时保护,单次均衡最长2小时,超时就强制停止并上报故障。
5. 系统集成与扩展建议
5.1 与BMS主控的CAN通信协议
TM4C129EKCPDT通过CAN总线跟系统主机通信,上报的数据包括:两颗电芯的电压、压差、均衡状态、均衡累计时间、MP2642GR-Z温度、故障码。CAN波特率设500kbps,报文ID分配要跟系统其他节点协调好,避免冲突。
我定义了一个简单的应用层协议:每100ms发送一帧状态报文,包含8个字节。字节0-1是上电芯电压,单位mV;字节2-3是下电芯电压;字节4是均衡状态,0表示空闲,1表示均衡中,2表示故障;字节5是温度,单位℃;字节6-7是故障码。主机收到报文后解析显示,操作人员就能实时看到均衡情况。
CAN通信的可靠性很重要,我在软件里加了发送失败重试机制,连续3次发送失败就复位CAN控制器。另外,CAN_H和CAN_L之间要加120Ω终端电阻,如果系统里已经有其他节点带了终端电阻,这里就不用再加了。
5.2 从两串扩展到多串的思路
这套方案扩展到四串或者更多串,思路是一样的:每两颗相邻电芯配一颗MP2642GR-Z,TM4C129EKCPDT通过多路SPI片选或者I2C扩展IO来控制多颗均衡芯片。电压采样需要增加多路分压电路,ADC通道不够的话可以用外部多路复用器。
扩展时要注意均衡芯片之间的地线隔离。每颗MP2642GR-Z的地参考点不同,SPI通信需要电平转换或者数字隔离器。我一般用ISO7741这类数字隔离器,把SPI信号隔离后再送到均衡芯片,这样各串之间不会互相干扰。
多串系统的均衡策略也要调整。不能同时均衡所有串,否则总电流太大。我的做法是轮询均衡,每次只均衡压差最大的一串,均衡完再处理下一串。这样对电源系统的冲击最小,均衡效率也最高。
5.3 低功耗待机设计
备用电源系统很多时候处于待机状态,均衡电路和MCU的功耗要尽量低。TM4C129EKCPDT有多个低功耗模式,待机时可以用Sleep模式,ADC和SPI都关掉,只留一个定时器唤醒。MP2642GR-Z在非均衡状态下静态电流只有几十微安,对电池的影响很小。
我实测下来,待机时整机功耗可以做到1mA以下,其中MCU占0.5mA,MP2642GR-Z占0.05mA,分压电阻网络占0.3mA。分压电阻的功耗是持续存在的,如果对功耗要求特别高,可以用MOS管切换分压电阻,采样时才接通,采样完就断开。这样待机功耗能再降0.3mA。
唤醒周期我设的是10秒一次,每次唤醒采样电压,判断是否需要均衡。10秒的周期对储能系统来说完全够用,电芯电压变化很慢,不会错过均衡时机。如果系统对响应速度要求高,可以缩短到1秒,但功耗会相应增加。
这套两串均衡方案我前后调了三个月,从硬件选型到软件策略都踩了不少坑。现在跑在几个储能项目上,最长的已经连续运行了一年多,两颗电芯的压差始终保持在20mV以内。均衡电路没有出过一次故障,MP2642GR-Z的温度也一直很稳定。如果你也在做类似的两串电池组管理,这套方案可以直接参考,硬件部分基本不用大改,软件根据你的系统协议调整一下就能用。