1. 储能与备用电源场景下的双串电池均衡方案拆解
1.1 为什么双串电池组需要主动均衡
储能和备用电源系统里,两节电芯串联是最常见的低压架构之一。串联之后电压叠加,容量不变,但问题也随之而来:两节电芯出厂容量、内阻、自放电率不可能完全一致,充放电循环几百次之后,差异会被放大。容量偏小的那节会先充满、先放空,整组可用容量被它拖住,木桶效应非常明显。
被动均衡靠电阻放电,把电压高的那节多余能量烧掉,效率低、发热大,在备用电源这种长期浮充的场景里,电阻持续耗电也不划算。主动均衡则是把能量从高电压电芯搬到低电压电芯,效率高、发热小,特别适合储能系统这种对循环寿命和能量利用率都有要求的场合。
我这次做的方案,核心就是用MP2642GR-Z这颗双向升降压充电管理芯片,配合STM32L4A6RG做主控,实现两节串联电芯之间的能量搬运式均衡。选这个组合的原因很直接:MP2642GR-Z 本身支持双向工作,既能给电池充电,也能反向把电池能量放出来,天生适合做均衡;STM32L4A6RG 带 12 位 ADC、多路定时器和丰富的外设,跑均衡算法和采样监控绰绰有余,而且 L4 系列低功耗特性好,备用电源系统常年待机也不怕。
1.2 方案整体架构与信号流
整个系统可以拆成四块:电芯组、均衡功率级、主控采样与控制、以及对外通信。两节电芯串联成 BAT+ / MID / GND 三个节点,MID 就是两节之间的中点。MP2642GR-Z 接在 BAT+ 和 MID 之间,或者接在 MID 和 GND 之间,通过切换工作方向,把能量从电压高的那节搬到电压低的那节。
STM32L4A6RG 负责三件事:一是通过 ADC 分别采集两节电芯的电压,二是根据压差判断均衡方向和强度,三是通过 I2C 或 PWM 控制 MP2642GR-Z 的工作状态。采样精度直接决定均衡效果,所以分压电阻的选型和 ADC 参考电压的稳定性是重点。
信号流大致是这样:ADC 采样两节电压 → 主控计算压差和 SOC 估算 → 判断是否需要均衡、往哪个方向均衡 → 配置 MP2642GR-Z 的使能、方向、电流设定 → 功率级开始搬运能量 → 再次采样,闭环调节。整个过程是周期性的,比如每 100ms 采样一次,每 1s 调整一次均衡电流。
1.3 关键器件选型背后的考量
MP2642GR-Z 是一颗同步双向升降压控制器,外围需要配 MOS 管、电感、采样电阻。选它而不是用分立方案搭,主要看中三点:集成度高,省掉自己设计驱动和死区控制的麻烦;双向控制逻辑清晰,方向切换靠寄存器配置就行;支持宽输入电压范围,两节锂电串联的 6V 到 8.4V 完全覆盖。
STM32L4A6RG 这边,选它是因为它有 5 个 MSPS 的 12 位 ADC,多通道扫描模式下可以快速轮询两节电压,不用外挂 ADC。另外它带硬件 I2C,跟 MP2642GR-Z 通信稳定,CPU 占用低。L4 系列还有多种低功耗模式,备用电源系统大部分时间在待机,主控可以定期唤醒采样,平均功耗能压到很低。
电感选型容易被忽视。均衡电流设 1A 的话,电感饱和电流至少要 1.5A 以上,DCR 要小,否则效率掉得厉害。我实测用 4.7μH、饱和电流 3A 的一体成型电感,1A 均衡电流下效率能到 92% 左右,换普通绕线电感效率掉到 88%,发热也明显。
2. 硬件设计与采样电路细节
2.1 两节电芯电压采样电路怎么搭
两节串联电芯的电压采样,难点在于第二节电芯的电压是浮地的,不能直接用单端 ADC 采。常见做法有两种:差分采样和电阻分压后差分输入。我选的是电阻分压加差分运放的方式,把 MID 和 BAT+ 之间的压差转换成对地的单端信号,再送进 STM32 的 ADC。
具体参数:BAT+ 到 MID 之间用 100k 和 100k 分压,MID 到 GND 之间也用 100k 和 100k 分压,这样两节电压都被缩到一半。分压电阻精度选 0.1%,温漂 25ppm 以内,否则两节采样比例不一致,均衡判断会出错。分压点后面各加一个 RC 低通,1k 加 100nF,截止频率约 1.6kHz,滤掉开关噪声。
STM32L4A6RG 的 ADC 参考电压用内部 2.048V 还是外部基准,我建议用外部基准,比如 2.5V 的低温漂基准。内部基准受温度和电源波动影响大,均衡系统对电压精度要求高,外部基准多花几毛钱,换来的是稳定的采样结果。
注意:分压电阻不能选太大,否则 ADC 采样保持电容充电时间不够,采样值会偏低。100k 分压配 STM32 的 ADC 采样时间设 247.5 个周期,实测误差在 1mV 以内,可以接受。
2.2 MP2642GR-Z 外围功率级设计
MP2642GR-Z 做双向升降压,外围需要四个 MOS 管组成 H 桥,加一个电感。上管和下管选低导通电阻的 N 沟道 MOS,比如导通电阻 10mΩ 以内的,1A 电流下导通损耗只有 10mW,基本可以忽略。栅极驱动电压用芯片内部的 5V 稳压,不用额外加驱动。
电感值计算:假设开关频率 400kHz,输入输出电压都在 3V 到 4.2V 之间,占空比接近 50%,纹波电流取额定电流的 30%,也就是 0.3A。根据公式 L = (Vout × (1-D)) / (f × ΔI),代入 Vout=4V,D=0.5,f=400kHz,ΔI=0.3A,算出来 L 约 16.7μH。实际选 15μH 或 22μH 都可以,我用的 15μH,纹波实测 0.28A,在预期范围内。
采样电阻放在电芯和功率级之间,用来检测均衡电流。选 10mΩ、1% 精度的合金电阻,1A 时压降 10mV,MP2642GR-Z 的电流检测放大器增益够用。采样走线要开尔文连接,否则走线电阻会引入误差。
2.3 主控与芯片的通信接口配置
STM32L4A6RG 和 MP2642GR-Z 之间用 I2C 通信,地址通过芯片的 ADDR 引脚配置。I2C 速率设 400kHz,上拉电阻用 4.7k,走线尽量短,旁边加 100nF 去耦。如果 I2C 走线超过 10cm,上拉电阻要降到 2.2k,否则上升沿变缓,通信容易出错。
除了 I2C,还有几根控制线:使能引脚接 STM32 的 GPIO,用来开关均衡;中断引脚接 STM32 的外部中断,芯片出故障时能及时响应。方向控制可以通过 I2C 寄存器写,也可以用独立的 GPIO,我选 I2C 写寄存器,省引脚。
STM32 这边 I2C 用 DMA 模式,采样和通信不占 CPU,主循环可以专心跑均衡算法。实测 I2C 读写一次寄存器约 50μs,1s 调整一次均衡电流,CPU 占用不到 1%。
3. 均衡控制算法与软件实现
3.1 电压采样与滤波处理
ADC 采样不能只采一次就用,开关噪声和工频干扰都会影响结果。我的做法是每个通道连续采 16 次,去掉最大最小各 4 个,剩下 8 个取平均。这样一次采样耗时约 200μs,1s 内采 5 次,完全够用。
采样值转电压:ADC 读数 × 基准电压 / 4096 × 2(因为分压了一半)。比如读数 2048,基准 2.5V,算出来 2048 × 2.5 / 4096 × 2 = 2.5V,对应电芯实际电压 2.5V。两节电压都算出来之后,压差 = |V1 - V2|。
滤波方面,除了 ADC 层面的平均,软件里再加一个一阶低通,系数 0.2,让电压变化平滑。压差小于 10mV 时不启动均衡,避免频繁切换方向导致振荡。
3.2 均衡方向与电流的决策逻辑
决策逻辑不复杂,但细节决定效果。压差大于 30mV 时启动均衡,方向是电压高的那节向电压低的那节搬能量。均衡电流跟压差挂钩:压差 30mV 到 100mV 之间,电流设 0.5A;压差大于 100mV,电流设 1A。这样小压差时温和均衡,大压差时快速拉平,兼顾效率和发热。
为什么不在压差 10mV 就启动?因为采样精度和噪声就在 5mV 左右,压差太小判断不准,容易来回切换。30mV 的阈值是实测下来比较稳的,既不会让压差积累太大,也不会频繁动作。
均衡过程中每 1s 重新采样一次,如果压差降到 20mV 以下,停止均衡。停止后继续监测,压差再次超过 30mV 再启动。这个滞回设计避免了在阈值附近反复启停。
3.3 代码框架与关键函数
代码用 HAL 库搭,主循环里跑状态机。关键函数有三个:Battery_Sample()负责 ADC 采样和滤波,Balance_Decide()负责判断方向和电流,MP2642_Config()负责写寄存器。
void Battery_Sample(void) { uint16_t adc_buf[2]; // 启动 ADC 扫描,DMA 搬运 HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buf, 2); HAL_Delay(1); // 中值滤波 + 平均 v_cell1 = Filter(adc_buf[0]) * VREF / 4096.0f * 2.0f; v_cell2 = Filter(adc_buf[1]) * VREF / 4096.0f * 2.0f; } void Balance_Decide(void) { float diff = v_cell1 - v_cell2; if (fabs(diff) < 0.02f) { balance_state = BAL_OFF; } else if (fabs(diff) < 0.10f) { balance_state = BAL_LOW; balance_dir = (diff > 0) ? DIR_1_TO_2 : DIR_2_TO_1; } else { balance_state = BAL_HIGH; balance_dir = (diff > 0) ? DIR_1_TO_2 : DIR_2_TO_1; } }MP2642_Config()里根据balance_state和balance_dir写芯片的使能、方向、电流设定寄存器。写完之后读回状态寄存器确认,如果芯片报故障,立刻关断并记录错误码。
实操心得:I2C 写寄存器之后一定要读回验证,我遇到过写进去没生效的情况,原因是 I2C 时序在高温下裕量不够。后来把 I2C 速率降到 200kHz,问题消失。工业级产品留裕量比跑高速重要。
4. 调试过程与常见问题排查
4.1 上电调试的步骤与观察点
第一次上电不要直接接电芯,先用直流电源模拟两节电芯,电压设 3.7V 和 3.8V,限流设 0.5A。上电后先测 STM32 的 3.3V 和 MP2642GR-Z 的 5V 是否正常,再用调试器读 ADC 采样值,看两节电压读数是否跟电源设定一致。如果偏差超过 20mV,先查分压电阻和基准电压。
采样正常后,手动触发一次均衡,用示波器看电感和 MOS 管的开关波形。重点看死区时间够不够,有没有直通。MP2642GR-Z 内部有死区控制,但外围 MOS 的栅极电荷如果太大,开关沿变缓,死区裕量会变小。我用的 MOS 栅极电荷 15nC,400kHz 下驱动电流约 6mA,芯片内部驱动够用。
均衡电流用电流探头测采样电阻两端波形,看平均值是否跟设定一致。如果偏差大,检查采样电阻精度和电流检测放大器的增益配置。
4.2 常见问题速查表
| 现象 | 可能原因 | 排查方法 | 解决措施 |
|---|---|---|---|
| 采样电压跳动大 | 分压电阻温漂大、基准不稳 | 用万用表对比分压点电压 | 换 0.1% 低温漂电阻,加外部基准 |
| 均衡不启动 | 压差阈值设太高、I2C 通信失败 | 读芯片状态寄存器 | 降低阈值,检查 I2C 上拉和地址 |
| 均衡电流偏小 | 电感饱和、采样电阻偏大 | 测电感电流波形 | 换大饱和电流电感,减小采样电阻 |
| 芯片发热严重 | 开关损耗大、MOS 导通电阻高 | 测 MOS 漏源波形 | 换低导通电阻 MOS,降低开关频率 |
| 压差反复振荡 | 阈值无滞回、采样噪声大 | 观察压差变化曲线 | 加滞回窗口,加强滤波 |
| 待机功耗高 | 主控未进低功耗、芯片未关断 | 测整机静态电流 | 主控进 STOP 模式,芯片使能拉低 |
4.3 独家避坑经验
第一个坑是分压电阻的功耗。100k 分压,两节 8.4V 满电时,分压支路电流约 42μA,两路加起来 84μA。备用电源系统待机电流要求 100μA 以内的话,这个功耗就占了大头。后来我把分压电阻改成 1M,功耗降到 8.4μA,但 ADC 采样时间要加长到 640 个周期,否则采样不准。这个取舍要看系统待机指标。
第二个坑是均衡停止后的电压回弹。电芯有内阻,均衡时电流流过内阻,采样到的电压包含内阻压降。停止均衡后电压会回弹,如果按均衡中的电压判断停止,会停早了。我的做法是停止均衡后等 10s 再采样判断,让电压稳定下来。
第三个坑是低温下的 I2C 通信。零下 20 度时,I2C 上拉电阻如果用的是 10k,上升沿明显变缓,通信误码率上升。后来换成 4.7k,并在软件里加了重试机制,连续 3 次失败才报错,低温下也能稳定工作。
第四个坑是 MP2642GR-Z 的方向切换时序。从充电方向切到放电方向,中间要留至少 10ms 的死区,让电感电流降到零再切,否则电感电流突变会产生高压尖峰,可能打坏 MOS。我在软件里加了 20ms 延时,实测尖峰从 30V 降到 12V,安全裕量足够。
5. 系统集成与长期运行验证
5.1 整机联调与保护逻辑
单板调通之后,接上真实电芯做联调。保护逻辑分三层:第一层是芯片内部的过流、过温、短路保护,响应最快;第二层是 STM32 的软件保护,采样到电压异常、电流异常、温度异常时关断均衡;第三层是硬件看门狗,主控死机时复位。
温度保护用 NTC 贴在电芯表面和 MOS 管旁边,STM32 的 ADC 采 NTC 分压。电芯温度超过 45 度降额,超过 55 度停止均衡;MOS 温度超过 85 度降额,超过 100 度停止。这些阈值根据实际散热条件调整,我的板子自然散热,MOS 温度在 1A 均衡时约 60 度,裕量够。
5.2 长期运行的数据与体会
连续跑了 30 天,每天充放电一次,压差从初始的 80mV 降到 15mV 以内,之后稳定在 10mV 到 20mV 之间。均衡系统每天工作约 2 小时,消耗的能量不到总能量的 1%,相比被动均衡的 5% 到 8%,优势明显。
待机功耗实测 85μA,其中主控 STOP 模式 2μA,MP2642GR-Z 关断后 1μA,分压支路 8.4μA,剩下的被 LDO 和外围电路吃掉。如果要把待机压到 50μA 以内,分压电阻还得加大,或者用 MOS 开关分压支路,采样时才接通。
我个人在实际操作中的体会是,双串电池均衡看起来简单,但采样精度、阈值设定、方向切换时序这三个地方最容易出问题。采样精度不够,均衡就是瞎搬;阈值没滞回,系统会振荡;方向切换没死区,MOS 早晚炸。把这三点做扎实,剩下的就是调参数的事。
最后分享一个小技巧:调试阶段可以在 MP2642GR-Z 的电感旁边放一个电流环测试点,用示波器电流探头直接看电感电流波形,比看采样电阻电压更直观。电感电流波形能直接反映饱和、纹波、方向切换是否干净,是排查功率级问题最快的手段。