资讯动态

两串磷酸铁锂电池组均衡板方案设计与调试记录

发布时间:2026/10/16 5:24:20 来源:尧图企业网站定制
前一阵把一块两串磷酸铁锂电池组的一体化均衡板调通主控用的 PIC18F87K22均衡功率通路里用到 MP2642GR-Z 这颗电源管理芯片。开始之前我以为两串电池能有多复杂真正做下来才发现串联节数越少反而越容易被“单节电压看似差不多”的假象麻痹。尤其在储能、备用电源这种长期浮充和偶发大电流放电并存的场合单体电压漂到什么程度完全是靠实测才看得清的。这篇就当把整个方案的选型、电路、软件和调试过程从头梳理一遍给同样在搞 2 串均衡的朋友做个参考。1. 项目背景为什么两串电池也需要认真做均衡1.1 串联电池不均衡的根本原因很多人有个误区觉得两串电池只要出厂容量一致、内阻差不多就能一直稳定运行。实际远不是这么回事。电芯的容量、内阻、自放电率都会随温度和老化发生漂移而且彼此相互影响。哪怕一开始是同一批次、同一分容柜出来的电芯用了半年之后两节电池的可用容量差个 3% 到 5% 很正常。串联回路电流相同容量偏小的那节会先充满、先放空在充电末期电压被顶得更高在放电末期电压被拉得更低于是单体电压差就像滚雪球一样越来越大。两串虽然只有两节但问题并不因为数量少而减轻反而有个尴尬点很多国产保护板方案都默认“4 串起步”2 串也完全没有合适 BMS 芯片的话只能靠通用 MCU 自己搭。你如果直接忽略均衡用个纯保护板把过压欠压管住短期内看电压表也觉得没问题但电池组会在长期浮充中越用越不平衡最终容量衰减很快。1.2 储能与备用电源场景的独特考验储能和备用电源这两个场景对均衡的要求和普通便携设备不太一样。先看储能系统比如阳台储能、小型光伏储能箱。电池大部分时间处于“浅充浅放”状态充电到 90% 就停了很少真正到达满充开路电压。均衡的核心不是把每节都顶到满电而是在平台电压区就开始纠正偏差否则一旦真正进入深度循环差异会被放大。再看备用电源比如 UPS、应急照明、安防备电。这类电池常年挂在浮充电压上充电器会持续给电池组补满电好的充电器还会做温度补偿。此时如果某个单体内阻偏高浮充电流在它上面的极化电压会更大导致它长期过充另一个单体则长期欠充。均衡电路的作用就是把这个“高个子”的额外能量泄放掉相当于不断地削峰填谷。这里的均衡策略和电动车那种“满充满放前的 soc 对齐”还有区别。备用电源希望在任何时刻都让两节电池电压尽量接近而且浮充条件下均衡动作时间往往很长所以散热、限时、防误动都比单纯压差判断更重要。设计这套方案的时候我把目标定成静置压差收敛到 20mV 以内充放电过程中压差不被进一步放大均衡功率尽量小避免对电池寿命产生负面影响。2. 方案架构与芯片分工2.1 均衡思路选型被动泄放 主动补电业界最常见的均衡方案就两类被动均衡和主动均衡。被动均衡原理最简单在电压偏高的电池上并联一个开关加一个功率电阻把多余能量变成热量放掉。主动均衡用电感、电容或者 DC-DC把高电压电池的能量转移到低电压电池。两种我都在别的项目上试过。被动均衡的优点很多控制直接、不会在单元间搬移能量、成本低缺点是均衡电流做不大通常在 0.5A 以内而且热量较集中需要仔细布局。主动均衡效率高适合大容量、大压差场合但驱动和时序逻辑复杂电感或变换器还可能引入噪声调试周期明显更长。对于 2 串这种最小系统我的方案是“被动均衡为主主动补电为辅”。日常小压差比如 20mV 到 50mV用被动均衡慢慢泄放高电压单体如果压差超过一定门限说明单纯泄放可能要好几个小时甚至十几个小时这时候再调用 MP2642GR-Z 搭的补充充电通路对电压偏低的那节小电流补电。这种混合思路的好处是多数时间不搬移能量只在压差较大时才启用主动通道既控制成本又不会因为频繁搬移导致系统效率变差。2.2 MP2642GR-Z 在均衡通路里的角色MP2642GR-Z 是一颗带电流设定能力的降压型电源管理芯片内部集成了功率开关外围搭好反馈网络、电感和采样电阻之后可以提供稳定的恒压或者恒流输出。GR-Z 后缀通常表示封装/载带规格和功能无关。在这套均衡方案里我没有把它当成一个普通的 DC-DC 给整板供电而是专门拿来搭一条“可控小电流充电通道”。它的输入可以直接接充电器或者系统电源轨输出经过切换开关接到需要补电的那节电池。通过设定电感峰值电流或者输出采样电阻把补电电流限制在 0.5A 到 1A 的可控区间避免大电流冲击电池。为什么最终选择了这样一颗芯片而不是自己搭分立器件一是因为它内部已经做好环路补偿输出电流和电压都稳定省掉很多调环路的时间二是因为它本身支持较宽的输入电压范围后续如果电池节数扩展到 4 串、输入电压到 16V 以上这颗芯片仍能复用不用推翻整个硬件设计。实际调试时只需要根据单体电压范围设定分压反馈电阻就能把输出目标电压限定在安全窗口内。2.3 PIC18F87K22 承担的控制任务PIC18F87K22 这颗 MCU 在 BMS 场景里算是“老将”了。它的资源对我这个方案来说很充足多路 ADC 通道负责单体电压采集几路 GPIO 用来控制均衡开关几个定时器用来做状态时间片和超时保护内部 Flash 空间足够写下一整套状态机和故障记录。我在设计时没有让它参与高频开关控制因为均衡功率级的 PWM 管理已经由 MP2642GR-Z 内部完成MCU 只做“什么时候均衡、均衡哪个电池、均衡多久”的决策以及记录故障。这种把功率环和控制环分开的思路最直接的好处是软件逻辑不会被底层环路参数牵制。你想如果 MCU 还要实时调节环路 PWM那滤波、震荡、驱动时序全搅在一起调试难度直接翻倍。顺带说一下两串系统里单体数量少ADC 通道不需要很多但通道隔离和参考电压精度必须特别讲究。PIC18F87K22 的内部 ADC 本身够用我给 ADC 参考电压配了一个 2.048V 的外部精密基准然后用低温漂分压电阻把单体电压映射到基准范围内。这套组合实测下来室温条件下单体电压的采样分辨率可以到 mV 级足够做 10mV 级别的均衡判定。3. 硬件电路设计与关键参数计算3.1 单体电压采样与分压网络设计电压采样是整个均衡方案的根基采样不准后面全是白搭。我的做法是这样的电池负极作为系统地第一节电池电压范围在 2.5V 到 3.65V直接经过电阻分压后进 ADC。为了留出余量分压比取 0.5也就是说单体最高电压 3.65V 时ADC 输入端最高大约 1.83V距离 2.048V 基准还有 10% 余量不会削顶。分压电阻取值看起来简单实际坑很多。我选的是 0.1% 精度、低温漂的 10k 和 10k 电阻两个单元电压采样共用同一组基准和同一片 PCB 区域保证温漂方向一致这样两路 ADC 读数的相对误差可以抵消一部分。另外提醒一下分压电阻后级一定要加一个小电容比如 100nF和分压电阻组成低通滤波滤掉开关节点和电源走线耦合进来的高频噪声。这个小电容我一开始没加后面调试时 ADC 读数跳得厉害加完之后立刻安静了。上节电池的采样就不能直接照搬了因为上节电池的负端不是系统地而是第一节电池的正极也就是 B 节点。如果把上节电池直接通过分压电阻拉到 ADC它的共模电压会超出 ADC 输入范围。我的处理方式是把 B 和 B上节正极分别分压两个分压输出用一个简单仪表运放做差分转单端再送进 ADC。仪表运放供电用单 5V 就行它的输出摆幅足够覆盖 2V 范围。在双串系统里这是最主流的做法比直接上隔离运放更便宜也比软件算差值更稳因为软件差值会把两个分压电阻的误差叠加差着 10mV 不利于均衡精度。3.2 被动均衡支路设计被动均衡支路的核心是一个功率电阻串一个 MOSFET和电池并联。以 50Ah 磷酸铁锂电池组为例均衡电流一般取容量的 0.5% 到 2%我按 0.6A 来设计。当单体最高工作电压是 3.65V 时泄放电阻阻值大约是 3.65V 除以 0.6A得 6.08Ω直接选标准值 6.2Ω。这个电阻上的最大功耗是 3.65V 的平方除以 6.2Ω约 2.15W。别被这个数字骗了散热条件必须按至少两倍余量考虑我实际用了两个 12Ω 电阻并联等效 6Ω每个只承担大约 1.1W 功耗再靠大面积覆铜散热表面温升控制在 30℃ 以内。MOS 管的驱动也要分高低边来讨论。下节电池的均衡 MOS 漏极接 B源极接电池负极栅极由 MCU 直接驱动非常好控制。上节电池就麻烦一点它的源极在 B 上栅极要拉到比 B 高好几伏才能完全导通。我用的是 P 沟道 MOS 加一个低边 NPN 的转换电路MCU 输出高电平时NPN 导通PMOS 栅极被拉到 B-PMOS 导通MCU 输出低电平时NPN 截止PMOS 栅极被上拉到 BPMOS 关断。注意 PMOS 栅极上那个 100kΩ 上拉电阻必须要加否则 MCU 复位或掉电瞬间 PMOS 可能误开启电池会一直往电阻里灌电放几天就过放了。高边被动均衡还有一个细节因为两节电池是串联的上节电池的泄放电流会流过下节电池给下节“充电”的假电压并不等于均衡。真正要防止的是出现低边 MOS 关闭、高边 MOS 打开时泄放电流走了一条意外路径把电短到地。设计 PCB 时我会让高边均衡回路尽量短粗并且和 ADC 采样线完全分开避免大电流的压降耦合到采样回路。3.3 以 MP2642GR-Z 为核心的补充充电通路主动补电通道是这套方案的亮点也是容易翻车的地方。MP2642GR-Z 的输出通过两个可控开关分别接到下节电池或者上节电池每次只补一节。输入电源我接的是系统充电器输出端因为充电器本来就给整个电池组充电再分一小路给低压单体补电不会对来源造成冲击。补电电流设在 0.8A通过采样电阻的阻值计算确定具体阻值按芯片数据手册的电流检测系数来算。切换开关的选择上我最初想用继电器因为继电器导通电阻极小压降几乎可以忽略。后来发现两串系统里空间和功耗都有限继电器线圈持续功耗太大了几小时均衡下来白白耗电于是改成了两路 P 沟道负载开关。每路负载开关自带防倒灌功能关断时双向阻断这样即使被补电池电压高于输出节点也不会反向灌进来把电源管理芯片打出故障。这里我要特别强调一个容易忽略的点补电通道的“目标电压”一定不要设死在某个固定值。磷酸铁锂在平台区电压变化很小如果固定输出 3.5V在电池已经 3.6V 时补电等于给一个高电压电池硬灌低电压芯片会进入恒流输出模式但电流可能反灌瞬间发烫。我的做法是 MPCU 在补电开始前先测一下目标电池电压通过 MP2642GR-Z 的反馈电阻配置两个档位或者干脆用 MCU 控制一个 DAC 微调反馈参考让输出目标电压始终比当前电池电压高 50mV 左右。这个“跟随电压”补电方式比固定电压更安全充电电流稳定大概率不会出现热失控。3.4 保护与温度采集均衡电路再先进也不能失去保护。我在设计里保留了常规的三重保护过压保护、欠压保护和过温保护。过压保护由 MCU 直接采样判断只要任意一节电压超过 3.8V不同电芯种类可配就立刻关闭均衡开关并告警同时把充电通路断开。欠压保护类似低于 2.3V 视为异常不再进行任何均衡动作防止把过低电池硬充导致危险。温度采集用了两路 NTC一路贴在电池表面另一路贴在被动均衡电阻群旁边。为什么特别把均衡电阻温度单独拉一路因为被动均衡把能量变成热量如果某一节电池电压偏高持续几个小时电阻温度会明显升高。一旦温度超过 55℃我会强制暂停该路均衡让热量散掉再继续。这是我在一次长时间均衡测试后总结出来的教训电阻散热面积看着够了但密闭壳体内热量堆积远超预期没有温度反馈的均衡程序跑久了就是个移动小火炉。4. 软件控制策略与状态机实现4.1 采样滤波与电压对齐硬件做好之后软件的第一步就是搞定可靠的单体电压读数。我这里的采样周期是 100ms 一次每个周期对两节电池各采集 8 次去掉最大最小值再平均形成一组有效数据。为什么这么繁琐因为电池电压本身不是恒定值极化效应会让电压在充放电停止后慢慢回弹回路里又有电源纹波单次采样很容易采到尖峰噪声。滤波之后还要做“电压对齐”也就是判断高低边。两节电池串联系统获得的整组电压是 V1 V2但 MCU 采样 V1 是直接分压得到V2 是差分放大得到两条通道的放大倍数和零点不可能完全一致。我通过一个校准流程来修正首先切掉所有均衡回路静置 10 分钟然后用高精度万用表分别实测两节电池电压和 ADC 读数对比算出每路的增益误差和偏移量存进 Flash 作为校准系数。实测下来校准后两路读数的一致性可以做到 3mV 以内这是后续均衡阈值设置的前提。4.2 均衡判定与迟滞逻辑均衡判定的核心参数是压差 ΔV |V1 - V2|。但压差本身并不足够还要结合电池状态。比如两节电池静置时压差很大但都在安全电压区间内这是典型的“容量不一致”如果其中一节已经接近满电 3.65V另一节还在 3.3V这时候均衡意义很大。但如果两节都处于低电量区间说明是放空状态不一致此时被动均衡泄放高电压电池反而会浪费能量更适合在下一轮充电时再处理。所以我设计的判定逻辑分两段。第一段只看绝对值阈值当 ΔV 大于 30mV 且最高电压电池达到 3.45V 以上时启动被动均衡放电高电压那一路。第二段看主动补电启动条件当 ΔV 大于 80mV 且低电压电池在 3.2V 以下时关闭被动均衡改由 MP2642GR-Z 给低电压电池补电直到压差收敛。逻辑里必须加迟滞。你想象一下均衡开启后电压慢慢下降到 30mV 就立刻关断关断后电池开路电压回升差又回到 31mV于是又开始均衡系统就在开关边缘来回抖。我给的迟滞是启动压差 30mV停止压差 18mV主动补电启动 80mV停止 40mV。这样一来均衡动作频率明显下降切换瞬间带来的电压扰动也被限制住。4.3 状态机与超时保护软件整体实现为一个简单的状态机核心状态包括 IDLE、PASSIVE_BAL、ACTIVE_BOOST、FAULT 和 DONE。这个状态机非常小但逻辑要写清楚比写个串口协议难的是各种边界条件。状态机里每 300ms 刷新一次控制输出。需要注意的是在不均衡状态下均衡 MOS 必须处于关闭状态MP2642GR-Z 的切换开关也必须断开。上电瞬间 MCU 所有引脚默认可能是高阻或者输出低电平硬件上的上拉下拉电阻在这里又起到关键保护作用别指望软件初始化够快能避免误触发。超时保护不能省。被动均衡最大允许连续运行 4 小时主动补电最大允许运行 90 分钟。如果超时没有把压差缩减到目标范围程序就把状态切到 FAULT 并记录一条错误编号同时点一个 LED 报警。为什么要设超时我曾经做过一次实验电池压差达到 150mV 后开启被动均衡理论上十几个小时能拉平结果均衡 6 小时后压差还是 90mV因为电池在慢慢放电时电压也在缓慢回弹打着“我正在均衡”的名义白白耗电。与其这样不如超时后停止动作让用户或者上位机重新评估电池状态。下面是我在 MCU 里用的核心判定片段按逻辑整理过和实际代码略有简化但结构一样。// 每次采样周期后执行 void bal_state_control(void) { // 读取滤波后两路单体电压 uint16_t v1 read_cell_voltage(CELL_1); uint16_t v2 read_cell_voltage(CELL_2); int16_t delta (v1 v2) ? (v1 - v2) : (v2 - v1); // 温度保护是第一优先级 if (ntc_temp 55 || ntc_fet_temp 70) { set_state(FAULT); return; } switch (state) { case IDLE: if (delta BAL_ON_DELTA max(v1, v2) 3450) { if (delta BOOST_ON_DELTA min(v1, v2) 3200) { set_state(ACTIVE_BOOST); } else { set_state(PASSIVE_BAL); } } break; case PASSIVE_BAL: if (delta BAL_OFF_DELTA || state_time_min 240) { set_state(IDLE); } break; case ACTIVE_BOOST: if (delta BOOST_OFF_DELTA || state_time_min 90) { set_state(IDLE); } break; case FAULT: // 故障恢复需要外部复位或者上位机指令 break; default: break; } }状态切换的同时对应的 GPIO 输出会驱动均衡 MOS 或者补电通道开关这里不再展开硬件上已经做了互锁软件不应出现同时开启被动均衡和主动补电的情况。为了实现这个互锁我在状态切换前用了一句话先关闭全部开关再打开目标开关绝不做“边关边开”那种交接。5. 调试记录与常见问题排查5.1 ADC 采样值漂移读数跳变这是整个调试过程里花费时间最长的问题。现象是板子一通电ADC 读数在 ±5mV 左右跳导致均衡阈值根本没法设。一开始我怀疑是分压电阻精度不够换了几组还是一样。后来用示波器测量 ADC 输入引脚发现上面叠加了许多尖峰频率和充电器开关频率一致。原因很快定位到分压电阻后面的滤波电容太小只有 1nF没有有效抑制开关噪声同时 ADC 采样引脚在 PCB 上走得很长又和被动均衡的功率走线平行噪声直接耦合进来。最终处理是滤波电容加大到 100nF重新把 ADC 采样线改成又短又宽的走线并在采样排针旁边围了一圈接地的过孔。改完以后读数稳定在 1mV 内问题解决。这类问题在 BMS 板上很常见但有两种不同解决路径一是加大滤波电容但注意不要让采样响应变得太慢因为我还要用这个电压来判断充放电状态如果滤波时间常数超过 100ms策略会有明显滞后二是从布线和地平面入手优化更根本但需要重新打板。我这次是先改电容稳住功能下一版再把地隔离做好。5.2 均衡关闭后电压反弹解决完采样之后我又遇到一个奇怪现象一节电池电压 3.55V另一节 3.50V相差 50mV开启被动均衡十分钟后高电压那节降到 3.52V两节差值看起来已经很小。我以为收敛了程序关掉均衡结果静置两分钟电压又回到 3.54V差值又变成了 40mV。这个现象其实非常典型叫做极化电压回弹。电池在大电流充电或者放电后极化和浓差电压会让开路电压暂时虚高均衡泄放的是这部分“虚电压”而不是真正把容量拉平。如果不加迟滞程序就会反复启停。我把停止阈值从 18mV 进一步加大到 15mV同时增加一个要求均衡关断后至少要观察 5 分钟确保电压稳定后差值确实低于阈值才允许进入 IDLE 状态。另外我还意识到被动均衡本质上是把高电压电池的容量一点点放掉把“虚高”压制下去让两节电池回到相近的荷电状态这个过程必定是慢的想快只能靠主动补电通道。后来我在策略里把主动补电的启动阈值适当调低让主动通道更频繁参与整体收敛速度反而比长时间被动均衡更快。5.3 高边均衡开关管发热与误动作高边均衡回路是独立测试时发现问题的。在单独测试上节电池均衡功能时PMOS 开关管温度在几分钟内明显上升摸上去烫手。检查波形发现PMOS 根本没有完全导通栅极电压被 100kΩ 上拉电阻和驱动管分压拖住工作在放大区漏源之间压降将近 1V。1V 压降乘上 0.6A 均衡电流那就是 0.6W 的热耗全撒在 MOS 管上。解决方法不复杂把驱动管的驱动能力加强同时把栅极电阻从 1kΩ 降到 100Ω加快开启速度。上拉电阻我保留 100kΩ因为它只在 MCU 复位时用来保证默认关闭导通时已经被驱动管拉低到足够电位。修改之后 MOS 管满电压导通漏源压降只有几十毫伏温度明显下降。这类问题在分立电路里非常容易埋雷因为量到电压波形存在并不代表开关处于理想状态一定要看是否完全导通。5.4 排查流程速查表这个表是我自己调试时反复对照的清单你遇到类似问题可以直接参照排查顺序能省不少时间。现象大概率原因检查/处理方法ADC 读数跳变 5mV 以上分压滤波器不足或采样线受开关噪声干扰加大滤波电容缩短采样走线参考地开尔文连接均衡开启后电压反复反弹极化电压未稳定、迟滞不够增加关断后的静置观察时间加大迟滞阈值高边 MOS 发热严重MOS 未完全导通驱动不足测漏源压降加强驱动管减小栅极电阻均衡电流偏大导致电池电压迅速下降泄放电阻功率不足或数值错误复核电阻阻值和功耗必要时并联电阻分流主动补电时芯片发烫输出目标电压低于电池电压电流倒灌让输出目标电压高于电池当前电压 50mV 左右上电瞬间电池电压异常掉电上拉下拉电阻缺失MOS 误开启为所有高边控制管加默认状态电阻两路采样读数一致性差分压电阻误差或差分放大器失调做软件标定保存校准系数6. 实测效果与可扩展方向6.1 实测数据这套方案在模拟浮充和强制失衡测试两种条件下跑过比较长时间。模拟浮充时先把两节电池人为拉开 92mV 压差然后接上均衡板。被动均衡阶段均衡电流约 0.6A电阻表面温升约 27℃连续运行约 1 小时 40 分钟后压差降到 20mV 以内之后进入间歇均衡阶段。在后续两个充放循环里静置压差进一步收敛到 12mV 左右主动补电通道累计运行约 40 分钟补电电流 0.8AMOS 开关温度正常。整个过程中MCU 记录的故障事件为零次温度保护从未触发。对比没有均衡的对照组两组电池在同等浮充条件下运行一个月后对照组压差从初始 8mV 扩大到 75mV而带均衡这组始终控制在 20mV 上下。这个结果说明均衡功能虽然没有改变电芯自身的物理差异但至少把差异对系统容量的负面影响压制住了。6.2 可扩展方向两串只是起点实际上这套软硬件框架可以平推。软件侧把状态机和均衡判定做成数组形式ADC 通道扩展到 4 路或者 6 路就能直接适配 3 串到 4 串硬件侧MP2642GR-Z 的输入范围和新参考节点只要略作调整同一颗芯片可以继续承担“补电通道”的角色。每个单体都加一组被动均衡支路和一个补电开关控制逻辑从“两串二选一”变成“多串选一路”整体架构不用推翻。如果想进一步提高均衡速度替代方案可以把被动均衡电流从 0.6A 提到 1A但散热问题会更突出需要重新考虑电阻选型和散热面积。也可以换成真正的双向主动均衡用反激或者升降压变换器在电池之间搬移能量但那种方案复杂度至少翻一倍未必适合低成本两串系统。我个人认为在 2 串这类最小电池组上混合方案是性价比和可靠性之间比较平衡的选择。最后再分享一个小技巧调试均衡板时不要只看着电压差判断是否生效最好把每节电池的电压、均衡电流、MOS 温度、累计均衡时间都通过串口打出来或者存到 Flash。很多“均衡没效果”的结论其实是因为程序不断开启和关闭均衡或者均衡开关处于半导通状态这些只有靠日志才能发现。我当时就是靠打印数据才看到被动均衡其实一直在断续运行而不是真正连续泄放最终定位到迟滞参数和驱动波形的问题。两串均衡看起来小但把每个细节调顺能学到的经验比想象中多得多。

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

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

免费获取报价 →
↑