资讯动态

两串锂电池均衡方案:从硬件选型到软件策略

发布时间:2026/10/15 1:34:25 来源:尧图企业网站定制
两节锂电池串联听起来比 13 串、16 串的动力电池包简单多了但真要把“均衡”这件事做好踩过的坑一点不比大系统少。前阵子我刚好用 MP2642GR-Z 搭配 STM32F446RE 做了一套针对两串电池单元的均衡方案用在储能和备用电源设备里从硬件选型到均衡策略完整走了一遍。这篇记录一下整个设计过程包括我当时为什么这么选型、电路上哪些地方容易翻车、软件均衡逻辑怎么才算“能用”以及调试中实际遇到的一些诡异问题。如果你也在做小容量多串电池的主动管理或者正打算给现有系统加均衡功能这篇应该能帮你省不少时间。1. 为什么两节电池也要专门做均衡1.1 两节串联的失衡从哪来很多人觉得两节电池嘛出厂都是同一个批次内阻容量都差不多串联用哪儿那么容易失衡。但实际上只要电池投入实际系统失衡就只是时间问题。根本原因有这么几条。第一电芯出厂的一致性再好也有公差内阻差 1 毫欧、容量差 30 毫安时这种差异在出厂报告里根本看不出来但经过几百次充放循环后会被慢慢放大。第二电池自身有自放电率差异同一批电芯自放电率的离散度通常有百分之几十的偏差长期静置时低自放电的那节电压会明显偏高。第三储能设备里电芯的温度场并不均匀——比如两节电池叠放上面那节靠近散热结构、下面那节贴近 PCB 热源温度差个五六度老化和自放电速率就不一样了。备用电源系统还有一个特殊场景大部分时间电池浮充在满电状态只有断电时才真正放电。这种长期浮充下电芯的析气速率、电解液消耗速率差异会被放大失衡一旦出现就很难自行恢复。1.2 为什么“放着不管”不行两串电池如果完全不均衡后果比想象中严重。充电时总电压到了截止值实际是其中一节先到 4.2V 的保护上限系统只能停充另一节却永远充不满可用容量直接缩水。放电时则是反过来的容量小的那节先放到保护下限整机掉电另一节里面还有电等于每天背着一块“半空的电池”在跑。更麻烦的是如果充电管理和保护阈值都在电池包层面做不均衡会让单节电池实际工作电压区间不断收窄甚至会反复触发过压或欠压保护系统表现为“充不满”“掉电快”“时好时坏”。长期过充那一节还会加速老化内阻升高反过来进一步加大失衡——这是个自我强化的恶性循环。我见过一个备用电源设备两节串联锂电池用了大半年用户报故障“充满电只能用十分钟”拆开一测电池 A 内阻已经翻了三倍容量衰减到原来的六成电池 B 反而还行。这种局面靠换电池能解决但治标不治本板级的均衡能力才是长久之计。两串电池虽少但均衡管理系统的要素——采样、判断、执行、保护——一个都不能少。这也是我为什么没有直接买一个现成的电池保护芯片而是用独立电源管理芯片加 MCU 的组合保护芯片只负责安全底线均衡策略我希望能自己控制。2. 系统架构与器件选型思路2.1 MP2642GR-Z 在系统里的角色这套方案里 MP2642GR-Z 承担的是电源路径管理角色——输入电压的转换、充电阶段的控制都归它管。选它的原因有几个一是它是集成式的开关电源管理芯片外围器件少在储能设备这种对体积敏感的板卡上非常合适二是我需要 MCU 能参与电源管理状态的监测这颗芯片提供了相应的交互接口STM32F446RE 可以实时读到工作状态并介入控制三是它本身的保护功能比较齐全过压、过流、过温这些底线保障可以交给硬件去做MCU 均衡逻辑出问题也不会让系统直接烧掉。在实际系统里MP2642GR-Z 负责把输入电源高效地转换为电池充电所需的电压电流STM32F446RE 则专注于电芯状态监测、均衡决策和故障告警。两者分工明确硬件管功率路径软件管策略和状态。这里要强调一个思路电池管理系统里“监测”和“执行”尽量分离。功率路径上的事故往往是毫秒级的靠 MCU 软件去响应未必来得及但均衡这种慢变量恰恰适合软件来做精细控制。我在设计时把“安全”划给了硬件保护芯片“策略”留给了 MCU这样即使软件出现 bug 或者跑飞硬件保护仍然在线系统不会出大问题。2.2 STM32F446RE 的选型理由STM32F446RE 是一款 Cortex-M4 内核的单片机主频 180MHz带 FPU。做两串电池均衡可能有点“大材小用”但它有几个很实在的理由让我选它。首先是 ADC 资源够用且精度有保证。两串电池需要采样两个单元电压、一个总电压外加温度 NTC一共四路模拟量F446RE 的 ADC 有 12 位分辨率多通道扫描加上 DMA一轮采样加滤波做下来CPU 占用几乎可以忽略。均衡逻辑跑起来后还要处理通信、状态机、按键显示之类的外设M4 的性能余量让这些活互不干扰。其次是它的丰富外设和后续扩展空间。备用电源系统一般还要挂通信接口上报状态比如 RS485 或者自定义的串口协议F446 的多个 USART、CAN 接口都够用。如果后续系统要接上位机或者加入 SOC 估算、故障记录这类功能Flash 和 RAM 也都不会成为瓶颈。再有一点是生态和成本。F446 系列市场保有量大参考资料多开发工具成熟价格在同等性能下也算合理。做产品不是做艺术品选一颗好买、好开发、文档齐全的片子比选一颗指标极致但难伺候的片子要明智得多。2.3 均衡方式取舍被动均衡的工程合理性均衡有两种主流做法被动均衡电阻耗散和主动均衡能量转移。两串系统的体量决定了被动均衡基本上是更合理的工程选择。被动均衡的原理很简单电压高的电池通过并联的电阻放电把多余的能量以热的形式耗散掉等到它和低电压电池对齐了就停止。主动均衡则是通过电感或电容在两个电芯之间搬移能量效率高、不发热但电路复杂度和成本显著上升。对两串系统来说被动均衡最大的优势是简单可靠。整个均衡支路就是一颗电阻加一颗 MOSFET没有储能电感、没有复杂的驱动时序失效模式也容易分析。两节电池之间顶多几百毫瓦的耗散功率热管理压力很小PCB 铜箔散热就足够了。主动均衡的效率优势在两串场景里并不明显。本来电池间压差就不大均衡时间要求也不苛刻搬移几百毫瓦的能量多花点时间完全可接受。但主动均衡的电路成本和调试成本可能在两串应用里比整个 MCU 还贵很不划算。所以我最终定了被动均衡方案。两条均衡支路分别并联在两节电池两端每条支路由 MOSFET 开关加功率电阻组成MCU 通过 GPIO 控制 MOSFET 栅极实现独立的均衡开关控制。整体成本极低逻辑直观也好调试。3. 硬件设计核心细节采样、驱动与功率路径3.1 电压采样电路的精密度控制均衡的前提是测准电压。两串电池的电压采样精度直接决定了均衡策略能不能正确执行。如果采样误差有 20mV而均衡阈值设的也是 20mV那整个系统就是在拿噪声做决策反复误动作均衡效果会非常差。我给每节电池设计了一条电阻分压采样支路分压比大概在 2:1因为 STM32 的 ADC 输入范围是 0~3.3V单节锂电最高 4.2V 或者 4.35V必须降压到 ADC 量程内。分压电阻的选型是这里最容易省钱也最容易翻车的地方。当初我在实验室里用普通贴片电阻搭的采样电路常温下校准完精度很好误差只有几毫伏。结果冬天客户那边反馈说电压显示偏低了差不多 30mV找了好久才发现问题出在电阻温漂上。普通厚膜电阻的温度系数通常有 ±100ppm/°C 甚至 ±200ppm/°C温度从 25°C 变到 0°C分压比就飘了很大一截而电池本身的电压变化在这种温度下根本没这么大。后来全部换成 0.1% 精度、25ppm/°C 温漂的电阻问题就消失了。还有一个细节是采样点的位置。均衡电流和负载电流流过的 PCB 走线会有压降如果采样线从功率路径中间取采到的电压就不是电芯端电压。我给每节电池采样都单独拉了一根细线到电池端子附近走线尽量避开功率回路这样才采到真实的电芯电压。ADC 参考电压也要干净。STM32F446RE 的 ADC 如果直接拿 VDDA 做参考VDDA 上的纹波会直接叠加到采样结果上。我在 VDDA 引脚前加了一颗磁珠和 10µF 100nF 的电容滤波实测 ADC 采样的噪声明显下降。对于备用电源这种动态负载比较多的系统电源噪声的影响尤其明显这一路滤波钱不能省。3.2 均衡开关与泄放电阻怎么选均衡支路的功率设计要算清楚。两节串联锂电的电压范围大概是 6.0V~8.4V单节最高按 4.35V 算有些高压电芯还要高一点。我均衡电阻用的是 100Ω这样单节电压 4.2V 时均衡电流大约 42mA耗散功率 0.18W 左右电压 4.35V 时耗散约 0.19W。电阻的功率等级我选了 2512 封装、额定 1W 的厚膜电阻留了 5 倍以上的余量。长期在 0.18W 下工作电阻表面温升很小不会影响周边器件。如果选 0603 这种小封装0.18W 已经接近额定功率了表面温度会很高还可能影响附近采样电阻的温度特性得不偿失。均衡 MOSFET 我也特意挑了逻辑电平驱动的管子VGS(th) 低3.3V 的 GPIO 能直接驱动。导通内阻几十毫欧相比 100Ω 的均衡电阻完全可以忽略。有一点要注意MOSFET 的栅极必须加下拉电阻。第一次上电时如果 MCU 的 GPIO 还没配置好栅极悬空可能误导通均衡电阻会一直放电。我在调试时真遇到过这种问题均衡电阻上板就开始发热甚至能闻到味道。后来每个栅极都加了 100kΩ 下拉保证上电默认关断。均衡电流大小也是一个需要权衡的量。电流太大电阻发热严重而且可能让电池电压瞬间跌落导致本体电压误判电流太小均衡时间太长失去意义。42mA 的均衡电流看起来不大但对于一个 1Ah 的电池包来说1 小时能搬移 42mAh已经足够应付大多数失衡场景了。均衡本来就是慢工出细活不用追求一次均衡就把压差完全消灭。3.3 驱动电路与 PCB 布局注意事项被动均衡支路用 MCU GPIO 直驱 MOSFET 没问题但还得考虑不同电池组态对参考地的影响。两节电池串联时电池 A 的负极是系统地电池 B 的正极是总正FET 驱动源极参考各不相同如果驱动信号直接以单片机地为参考就会有问题。我在设计里把均衡 FET 都放在了低端——每节电池的负极端串联 MOS 加电阻到对应节点。这样驱动电平参考是系统地不存在浮地问题逻辑简单驱动安全。如果非要做高端驱动也不复杂但需要自举电路或者隔离驱动两串系统没必要增加这种复杂度。PCB 布局上均衡电阻尽量靠近电池连接器但不要贴着采样电阻放。均衡电阻工作时会有温升如果采样分压电阻就在旁边温度变化会影响采样精度。我把均衡电阻放在板边采样电阻放在板子另一侧中间留了隔断铜箔实测均衡开启半小时后采样值漂移不超过 3mV。功率路径的走线也要注意。电池的充放电电流回路上不要串入 MCU 的模拟地。我是单点接地——所有模拟采样参考地单独走线在电池负极连接器处汇合避免大电流在地线上产生压降影响 ADC 参考。这个细节不处理好采样数据就会随着负载电流波动校准都校准不出来。4. 软件实现从 ADC 采样到均衡策略4.1 ADC 采样与滤波两串电池需要采集两个单元电压和总电压。用 STM32 的 ADC 多通道扫描加 DMA 是最自然的做法一轮采完三个通道CPU 只需要在读 DMA 缓冲时做处理。但采样不是读一次就算完。电池电压在均衡过程中变化很慢而 ADC 单次采样的噪声可能有几个毫伏直接拿单次采样值做均衡判断阈值边界上会出现抖动。我做了两重处理硬件上 ADC 引脚前加 RC 低通滤波100Ω 1µF截止频率约 1.6kHz软件上每次判断用滑动平均。滑动平均的窗口长度我试过不同值。太短比如 4 次滤不干净噪声太长比如 64 次会让系统感觉迟钝——尤其均衡开启后电池电压本来就在缓慢下降窗口太长会掩盖电压变化趋势。我最后用的 16 次平均采样周期 100ms相当于 1.6 秒一个判断周期噪声抑制和响应速度平衡得不错。校准是另一个必须做的步骤。分压电阻虽然有 0.1% 精度但实际值仍然有偏差而且 ADC 本身的增益和偏置误差也需要修正。我在产线校准流程里用高精度万用表实测两个实际电池电压然后让设备自动记录 ADC 原始值算出每路的增益系数和偏置写入 Flash。这样每台设备的采样误差都能控制在 ±5mV 以内。有一点容易忽略ADC 的采样时间要足够长。STM32 的 ADC 输入阻抗和采样电容如果和外接 RC 不匹配会引入额外误差。我配置的采样时间是 84 个周期左右配合外部 RC 滤波没有出现采样值偏低的问题。如果某些配置下发现采样值比万用表明显偏低先检查采样时间是否太短。4.2 均衡控制策略带迟滞和超时均衡策略是这套方案的核心逻辑。硬件都搭好了如果策略写得粗糙均衡效果一样会大打折扣。我的均衡判断基于两个核心参数压差阈值和开启迟滞。压差阈值我设的是 30mV意思是一节比另一节高超过 30mV 时才开始均衡。为什么不是 5mV因为 5mV 级别的压差很多是采样噪声和瞬态波动造成的过于灵敏会频繁开关 MOSFET反而让系统不稳定。30mV 是一个在 12 位 ADC 上有足够分辨率的、也不会因为正常工况波动误触发的阈值。迟滞逻辑是必须的均衡开启之后如果压差降到 10mV 就关闭然后必须等压差升到 30mV 才再次开启。如果不加迟滞压差在阈值附近来回穿越时MOSFET 会反复开关均衡电阻和电池连接器都会承受不必要的冲击。我用一个简单的状态机来实现IDLE 状态检测压差是否超过阈值超过则进入 BALANCING 状态BALANCING 状态下持续检测压差降到迟滞阈值以下才回到 IDLE。超时保护同样关键。假设电池已经严重失衡或者某个 FET 击穿短路了均衡支路会一直工作不停止。散热好的情况下也许不会立刻烧板但电芯会被过度放电循环寿命受损。我在程序里给均衡状态加了最长持续时间限制默认 4 小时超时后强制关闭均衡并置一个故障标志。这个机制在调试时帮了我大忙——有次 FET 驱动电路虚焊导致控制失效如果没有超时保护那块电池会被放穿。均衡时间的自动终止条件还有一条当被均衡电池的电压曲线斜率接近零说明它的电量已经接近另一节电池的平衡点继续均衡没有意义。这个判断稍微复杂些用软件记录最近 10 分钟电压变化速率即可变化小于 1mV/分钟就视为达到平衡。4.3 关键代码骨架均衡控制状态机的核心逻辑大致如下和真实代码类似关键部分我做了一些简化typedef enum { BAL_IDLE, BAL_CHARGING, // 均衡节1比如电池A偏高正在泄放 BAL_DISCHARGING, // 均衡节2电池B偏高正在泄放备用 } BalState_t; typedef struct { float cell1_v; float cell2_v; float total_v; uint16_t status; } BatteryStatus_t; BalState_t bal_state BAL_IDLE; uint32_t bal_start_time 0; float bal_threshold_high 0.030f; // 30mV 启动阈值 float bal_threshold_low 0.010f; // 10mV 关闭阈值 void BMS_Task_100ms(void) { BatteryStatus_t bat Read_Battery_Voltages(); float delta bat.cell1_v - bat.cell2_v; switch(bal_state) { case BAL_IDLE: if (delta bal_threshold_high) { bal_state BAL_CHARGING; bal_start_time HAL_GetTick(); Set_Balancing_SW1(ON); // 开启电池A均衡回路 Set_Balancing_SW2(OFF); } else if (delta -bal_threshold_high) { bal_state BAL_DISCHARGING; bal_start_time HAL_GetTick(); Set_Balancing_SW1(OFF); Set_Balancing_SW2(ON); } break; case BAL_CHARGING: if (delta bal_threshold_low) { // 压差已经收敛 bal_state BAL_IDLE; Set_Balancing_SW1(OFF); } else if (HAL_GetTick() - bal_start_time 4 * 3600 * 1000) { // 超时保护 bal_state BAL_IDLE; Set_Balancing_SW1(OFF); Set_Fault_Flag(BAL_TIMEOUT); } break; case BAL_DISCHARGING: if (delta -bal_threshold_low) { bal_state BAL_IDLE; Set_Balancing_SW2(OFF); } else if (HAL_GetTick() - bal_start_time 4 * 3600 * 1000) { bal_state BAL_IDLE; Set_Balancing_SW2(OFF); Set_Fault_Flag(BAL_TIMEOUT); } break; } }这套逻辑里还有几个细节要补充。第一均衡只在合适的时机运行不是什么时候都开着。充电过程中均衡效率最高电池接近满电极化内阻小电压能真实反映电量差所以我的策略里加了一个“仅在充电状态且单体电压超过 3.9V 时才允许均衡”的条件。第二放电期间如果负载很大电池电压会被极化压低此时压差可能虚高均衡判断应该冻结。我在代码里加了一个标志检测到放电电流超过阈值就暂停均衡判断直到电流回落。此外均衡时电池电压会被均衡电流“拉低”。假设电池 A 比电池 B 高 50mV均衡开启后A 电压会因为内部压降显示降低但这个降低并不完全代表电量差在缩小。所以我在均衡开启后的前几秒钟不会立即用实时电压判断是否结束均衡而是要等电压稳定。这个细节说起来很小但直接影响均衡效果判断调试时很容易踩坑。5. 常见问题与排查实录5.1 采样偏差导致误均衡这是我调试中遇到的第一个难题。样机刚上电时ADC 采到的两节电池电压差显示有 45mV均衡逻辑立即启动。但我用万用表实测两节电池压差其实只有 6mV。也就是说系统在“均衡一个并不存在的失衡”白白消耗电池电量。排查第一步是怀疑 ADC 配置。我检查了采样时间和参考电压设置都没有明显问题。然后怀疑分压电阻精度结果量了一圈电阻值都在标注精度以内。最后把万用表表笔直接点在 ADC 输入引脚上测发现这里的电压确实比电池端子处低了 20 多毫伏——问题出在分压网络本身分压电阻的等效输出阻抗太高ADC 的采样电容在采样瞬间会从这里抽取电荷形成一个额外的压降误差。解决办法是增加一个电压跟随器运算放大器做缓冲或者在 ADC 和分压点之间加一个较大的电容比如 100nF。我在每路采样线上加了一个 100nF 电容后这个问题的根源被消除了。电容的作用是存储电荷为 ADC 采样提供瞬态能量不让分压电阻直接承受采样冲击。后来的教训总结一下凡是高阻抗分压网络后接 ADC都必须考虑 ADC 采样电容的电荷再分配效应。用跟踪保持电容大、采样时间长的配置能缓解但最稳妥的还是加缓冲或者大电容。5.2 均衡电流“越均越偏”有段时间均衡效果很差开启均衡后压差不但没缩小反而在缓慢增大。这个现象第一反应会怀疑是不是 FET 控制逻辑写反了开错了回路。检查完逻辑发现没错问题出在采样点的瞬态电压上。均衡支路开启后电池 A 的端电压会瞬间下降一个台阶——这是因为电池本身有内阻42mA 的均衡电流在内阻上产生了约 10mV 的压降。如果我在这个时候用 ADC 实测电压来判断均衡效果看到的自然是“电池 A 电压下降压差减小”但这不是真实的电量平衡只是内阻压降造成的假象。更麻烦的是均衡关闭的瞬间电池 A 电压会反弹回升压差又会“回到原点”看起来就像均衡完全没起作用。解决方案有两个。一是采样点尽量靠近电芯本体避开均衡电流产生的走线和导体压降。二是软件上不能只看瞬态电压要看“一段时间内的电压变化趋势”。我在均衡开始后先等待 5 秒让电压稳定之后再开始记录电压序列用滤波后的慢变量判断是否真正在缩小。这个办法见效很快均衡效果最终也变得可以验证。另一个类似的问题是均衡支路 MOSFET 导通压降。虽然我选的 FET 内阻很低但均衡电流在 PCB 走线上的压降、连接器接触电阻上的压降都不能忽略。这些压降会让电池 A 采样电压“看起来”降低和真实电压混在一起。所以采样线一定要从电池端子直接拉不要从均衡电阻的焊盘上取。5.3 发热与可靠性问题被动均衡本质上是把电能变成热能。42mA、0.18W 的耗散功率听起来不大但有个问题容易被忽略均衡是间歇性工作的可能连续几个小时都在跑。均衡电阻温升如果稳定在 50°C 以上附近的焊点会加速老化电阻本身的阻值也会漂移。我实测了一下均衡电阻在满功耗工作半小时后表面温度大约 70°C板子背面对应区域也有 55°C 左右。虽然没到器件极限但长期来看还是偏热。我把 2512 电阻换成两个 1206 电阻并联的布局每个分担一半功率表面积也翻倍了表面温度降了将近 20°C。另外在 PCB 底层对应位置铺了一大块铜箔加强散热效果很明显。散热设计还要考虑均衡电阻和采样电阻之间的距离。我开始设计时把均衡电阻放在了采样电路旁边结果均衡一开采样电阻被加热分压比随温度漂移采样电压跟着变。后来调整布局把采样电阻放到了远离均衡电阻的位置并且加了小面积的隔热铜箔隔离这个问题才算解决。还有一个可靠性问题值得提醒均衡 MOSFET 长期处于半导通状态会导致严重发热甚至烧毁。有一次我发现均衡支路电流只有 30mA正常应该 42mA但 MOSFET 却烫得厉害。查下来是驱动 GPIO 配置成了开漏模式没有上拉栅极电压只有 1.8V 左右MOSFET 工作在放大区而不是完全导通区内阻飙升。改成推挽输出后驱动电压恢复 3.3VMOSFET 完全导通发热立刻消失。这个坑提醒我凡是用 GPIO 驱动 MOSFET一定要确认输出模式配置正确开漏和推挽的区别在这种场合可能是烧板和不烧板的区别。写在最后的经验整套系统做下来我最大的体会是两串电池的均衡看起来简单真正做好需要“硬件、采样、策略”三者配合任何一个环节粗糙都会让整体效果大打折扣。硬件上被动均衡支路的成本很低但采样精度、散热布局这些基础工作必须扎实软件上核心不是“怎么开均衡”而是“什么时候不要开均衡”——迟滞、超时、放电冻结这些保护逻辑比均衡动作本身更重要。如果你也要做类似的小型电池管理系统建议第一次流片或打样时把采样电路做成可校准的预留校准焊盘或校准电阻位散热铜箔提前铺大FET 驱动尽量用推挽并加下拉。这些改动在打样阶段几乎不增加成本但能让你在调试阶段少掉无数头发。均衡这个东西投入产出比很高但前提是每个环节都做对。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑