1. 从两个串联电芯的电压差说起:为什么被动均衡在储能场景里依然能打
储能和备用电源系统里,两串电芯的架构是最常见也最容易被低估的一种。很多人一听到"均衡"两个字,第一反应就是上主动均衡、上电感、上变压器,觉得被动均衡又土又费电。但真到了实际项目里,尤其是中小功率的备用电源、便携储能、通信基站后备电池这类场景,被动均衡反而是最稳、最省心、最容易过认证的方案。我这次做的项目,就是用 MP2642GR-Z 配合 PIC18F86J50,对两个串联电池单元做均衡管理,整套方案跑下来,成本、可靠性、开发周期都控制得不错。
先把场景说清楚。两串电芯串联,标称电压通常在 7.4V 左右(磷酸铁锂两串约 6.4V,三元两串约 7.4V),充电时最高可能到 8.4V 甚至 7.3V(铁锂)。问题在于,两颗电芯出厂容量、内阻、自放电率就不可能完全一致,用久了差异还会放大。充电时,容量小的那颗先到上限,如果继续充,它就会过充;放电时,它又先到下限,整组被迫提前截止。结果就是:整组可用容量被最弱的那颗电芯拖死,循环寿命也跟着缩短。均衡要解决的就是这个"木桶短板"问题。
那为什么选被动均衡?因为两串场景下,能量转移的收益其实很有限。主动均衡电路复杂、成本高、EMI 难搞,还要额外的电感和控制逻辑。而被动均衡只需要在电压高的那颗电芯上并一个耗散电阻,把多出来的那点能量以热的形式放掉,电路简单到几乎不会出错。对于容量不大、均衡电流需求在几十到几百毫安级别的备用电源系统,被动均衡的性价比是压倒性的。
MP2642GR-Z 这颗芯片在这里扮演的是"电池管理前端"的角色。它负责采集每颗电芯的电压、控制均衡开关、提供过压欠压保护,还能通过 I2C 或者类似的数字接口把数据吐给主控。PIC18F86J50 则是主控 MCU,负责读取前端数据、做均衡策略判断、管理充放电状态、跟上层系统通信。一个管模拟前端,一个管逻辑决策,分工非常清晰。
提示:两串被动均衡最容易踩的坑不是电路本身,而是均衡阈值和回差设置。设得太窄,电芯电压稍微抖一下就反复开关,均衡电阻发热还浪费电;设得太宽,均衡又起不到作用。后面我会详细讲这个参数怎么定。
这套方案适合谁?适合做中小功率储能、备用电源、便携设备电池包的工程师,尤其是那些不想在均衡电路上花太多精力、但又必须保证电池组一致性和安全性的项目。如果你正在用分立方案搭两串保护板,或者用通用 MCU 加运放自己采电压,那这套 MP2642GR-Z + PIC18F86J50 的组合值得认真看一下。
2. MP2642GR-Z 到底能干什么:前端芯片的能力边界与选型逻辑
2.1 这颗前端芯片的核心功能拆解
MP2642GR-Z 是一颗面向多串电池管理的前端芯片,虽然具体寄存器细节要看数据手册,但从它的定位来看,核心能力集中在几个方面:电芯电压采集、均衡开关驱动、保护阈值判断、以及数字通信接口。对于两串应用,它天然支持,不需要额外堆叠。
电压采集这块,它内部有多路 ADC 或者类似的采样通道,能分别测量每颗电芯的正负极电压。这里有个细节要注意:两串电芯是叠在一起的,第二颗电芯的负极就是第一颗的正极,所以采集第二颗电压时不能用普通的地参考方式,必须用差分或者高压侧采样。MP2642GR-Z 内部已经处理好了这个电平移位问题,你只需要把每颗电芯的采样线接对就行。
均衡驱动方面,它一般会提供专门的栅极驱动或者开漏输出,用来控制外部均衡 MOSFET。为什么要外置 MOSFET 而不是内置?因为均衡电流可能到几百毫安,内置开关的导通电阻和散热扛不住,外置一颗小功率 N-MOS 或者 P-MOS 更灵活,散热也好处理。均衡电阻的选型后面单独讲。
保护功能上,它通常支持过压、欠压、过流等阈值判断,有些型号还能配置延迟时间。这些保护是硬件级别的,响应速度比 MCU 软件轮询快得多,对于电池安全至关重要。PIC18F86J50 再快也有中断延迟和任务调度,真正要命的过压瞬间,还是得靠前端芯片自己扛。
2.2 为什么不用通用 MCU 直接采电压做均衡
有人会问:两串而已,我用 PIC18F86J50 的 ADC 直接采两颗电芯电压,再控制两个 MOSFET 不就行了?理论上可以,但实际做起来问题不少。
第一,共地问题。MCU 的 ADC 是以系统地为参考的,采第一颗电芯没问题,采第二颗时它的负极不是地,你得用差分放大器或者电阻分压网络把电压搬移下来。分压网络会引入误差,还会持续耗电;差分放大器增加成本和板面积。第二,精度和温漂。MCU 内部 ADC 的绝对精度和温漂通常不如专用前端芯片,电池电压采集要求的是长期稳定,不是实验室里读个数就完事。第三,保护响应。软件轮询有周期,遇到突发过压,等 MCU 反应过来可能已经晚了。专用前端芯片是硬件比较器,微秒级响应。
所以选 MP2642GR-Z 这类前端芯片,本质上是把"采集精度、保护速度、电平移位"这三件麻烦事交给专业芯片,MCU 只做策略和通信。这是分工,不是浪费。
2.3 两串应用下的引脚与外围配置思路
两串应用的接线逻辑其实不复杂,但有几个点必须注意。电芯正负极要按顺序接到前端芯片的对应通道上,中间那颗电芯的节点是共享的。均衡 MOSFET 的漏极接电芯正极,源极通过均衡电阻接电芯负极,栅极由前端芯片驱动。这样当开关导通时,电阻并联在电芯两端,电流流过电阻发热,电芯电压被拉低。
均衡电阻的选型要算功率。假设均衡电流目标 100mA,电芯电压 4.2V,那电阻就是 4.2V / 0.1A = 42Ω,功率是 4.2V × 0.1A = 0.42W。实际选型要留余量,至少用 1W 的电阻,而且不能只看稳态,还要考虑占空比。如果均衡是间歇工作的,平均功率会低一些,但峰值功率必须扛得住。封装上,0805 电阻通常只有 0.125W,扛不住,得用 1206 甚至 2512,或者用两颗并联分流。
注意:均衡电阻不要贴着电芯或者温度敏感器件放。它发热是实打实的,布局时留出散热空间,必要时铺铜散热。我见过有人把均衡电阻放在电芯旁边,结果均衡一开,电芯温度传感器读数直接飘了,保护逻辑跟着乱。
3. PIC18F86J50 在均衡策略里的角色:不只是读数据
3.1 主控要做的三件事:采集、决策、执行
PIC18F86J50 在这套系统里不是简单的"读寄存器然后打印",它要完成一个闭环。第一,周期性通过 I2C 读取 MP2642GR-Z 的电芯电压、电流、状态寄存器。第二,根据电压差和系统状态判断是否需要均衡、均衡哪一颗、均衡多久。第三,控制均衡的启停,同时管理充电状态、故障处理、与上层通信。
采集周期很关键。太快了没必要,电芯电压变化是慢过程,100ms 到 500ms 读一次完全够用。太快反而增加总线负载和功耗。我一般设 200ms 一次,兼顾响应和功耗。读取时要连续读多颗电芯的电压,确保是同一时刻的数据,否则电压差计算会失真。有些前端芯片支持同时采样锁存,MP2642GR-Z 如果有这个功能一定要用上。
决策逻辑是核心。最简单的策略是:充电时,如果最高电芯电压超过均衡阈值,且最高和最低的压差超过死区,就开启最高那颗的均衡。放电时一般不均衡,因为放电时能量本来就紧张,再耗散掉更亏。待机时如果压差大,可以间歇均衡,但要注意别把电放光。
执行层面,PIC18F86J50 通过 I2C 写前端芯片的均衡控制寄存器,或者直接控制 GPIO 驱动外部均衡开关。具体看 MP2642GR-Z 的接口设计。如果是写寄存器,要注意写入后的生效时间,有些芯片有延迟,别写完立刻读状态发现没变就以为失败了。
3.2 均衡阈值和回差:最容易拍脑袋拍错的地方
均衡阈值怎么定?很多人直接抄别人的 4.2V 或者 3.6V,这是不对的。阈值要跟电芯化学体系匹配。三元锂电芯满电 4.2V,均衡阈值一般设在 4.15V 到 4.18V,留一点余量防止过充。磷酸铁锂满电 3.65V,均衡阈值设在 3.55V 到 3.6V。阈值太低,电芯还没充满就开始均衡,充电时间被拉长;阈值太高,弱电芯已经过充了还没开始均衡。
回差(滞回)更重要。假设阈值设 4.15V,如果没有回差,电芯电压在 4.15V 附近抖动时,均衡会反复开关,MOSFET 和电阻频繁承受冲击,寿命受影响,还会产生噪声。回差一般设 20mV 到 50mV,也就是开启阈值 4.15V,关闭阈值 4.10V 或 4.12V。这样一旦开启,要等电压降到关闭阈值以下才停,避免抖动。
压差死区也要设。两颗电芯压差小于比如 30mV 时,没必要均衡,因为这点差异对容量影响微乎其微,均衡反而浪费能量。压差死区设 20mV 到 50mV 比较合理,具体看电芯一致性和系统对均衡精度的要求。
| 参数 | 三元两串典型值 | 铁锂两串典型值 | 说明 |
|---|---|---|---|
| 均衡开启阈值 | 4.15V | 3.55V | 单颗电芯电压 |
| 均衡关闭阈值 | 4.10V | 3.50V | 回差约 50mV |
| 压差死区 | 30mV | 30mV | 低于此值不均衡 |
| 均衡电流 | 50-150mA | 50-150mA | 由电阻决定 |
| 采集周期 | 200ms | 200ms | I2C 读取间隔 |
3.3 状态机设计:别让均衡和充电打架
均衡和充电的关系要理清楚。充电过程中均衡是合理的,因为弱电芯先到阈值,均衡它旁边的强电芯(其实是均衡电压高的那颗)能让整组继续充。但要注意,均衡开启时,那颗电芯的电压会被拉低一点,如果充电器是按整组电压判断截止的,可能会误判。所以均衡策略要和充电器逻辑配合。
我的做法是:充电时,如果某颗电芯超过均衡阈值且压差超死区,开启该颗均衡,同时把充电电流适当降低,避免均衡电阻和充电电流叠加导致局部过热。放电时关闭所有均衡。待机时,如果压差超过更大死区(比如 100mV),开启间歇均衡,每次均衡 10 秒停 30 秒,观察电压恢复情况。
故障处理也要有。如果前端芯片报告过压、欠压、过温,MCU 要立即关闭均衡,切到安全状态,并记录故障码。均衡电阻开路或 MOSFET 短路,可能导致某颗电芯一直被放电,这是危险故障,要通过电压异常下降来检测。
4. 硬件落地:从原理图到 PCB 的实操细节
4.1 采样线怎么走:开尔文连接不是可选项
电芯电压采样最怕的是线阻和接触电阻。均衡电流流过路径时,如果采样点和均衡电流路径共用一段走线,采样到的电压就会包含线阻压降,导致电压读数偏高或偏低。正确做法是开尔文连接:采样线从电芯极耳单独引出,不经过均衡电流路径。
具体到 PCB 上,每颗电芯的正负极采样点要尽量靠近电芯连接器,采样走线细一点没关系,因为采样电流极小。均衡电流路径要粗,和采样路径分开,最后在电芯连接器处汇合。如果板子空间允许,采样线走内层,均衡线走外层,减少耦合。
提示:连接器和线缆的接触电阻会随时间和振动变化。如果发现某颗电芯电压读数偶尔跳变,先查连接器,别急着怀疑芯片。我遇到过好几次都是端子压接不良导致的。
4.2 均衡 MOSFET 和电阻的布局散热
均衡 MOSFET 选 N-MOS 还是 P-MOS 取决于前端芯片的驱动能力。如果 MP2642GR-Z 提供的是高侧驱动,用 P-MOS 更方便;如果是低侧驱动,用 N-MOS。导通电阻 Rds(on) 要小,减少自身发热。比如 100mA 电流,Rds(on) 100mΩ,功耗才 1mW,可以忽略;但如果 Rds(on) 1Ω,功耗 10mW,虽然不大,但加上电阻的 0.4W,整体热设计就要考虑。
电阻布局要分散,不要两颗电阻紧挨着。如果两颗同时均衡(虽然两串场景下一般只均衡一颗),热量叠加。电阻下方铺铜,通过过孔把热量导到背面或内层。如果板子有金属外壳,可以用导热垫把电阻热量传到外壳。
4.3 电源和地去耦:别让数字噪声污染模拟采集
MP2642GR-Z 的供电要干净。它内部有 ADC 和比较器,电源纹波会直接影响采集精度。VCC 引脚旁边放 1uF 和 100nF 电容,尽量靠近引脚。如果芯片有单独的模拟电源引脚,用磁珠或电感隔离数字电源。
地平面处理上,模拟地和数字地单点连接,连接点选在芯片下方。PIC18F86J50 的数字开关噪声大,它的地去和前端芯片的模拟地分开走,最后在电源入口处汇合。I2C 走线要短,上拉电阻靠近主控,避免长走线引入干扰。
5. 软件实现:I2C 通信、均衡控制与异常处理
5.1 I2C 读写前端芯片的时序要点
PIC18F86J50 的 I2C 外设配置要注意时钟频率。MP2642GR-Z 支持的 I2C 速率看数据手册,一般 100kHz 或 400kHz。两串系统数据量不大,100kHz 足够,抗干扰也更好。上拉电阻选 4.7kΩ 到 10kΩ,太大上升沿慢,太小功耗高。
读电压的流程通常是:发送从机地址和寄存器地址,重复起始条件,读回数据。注意有些前端芯片的电压寄存器是 16 位,高字节低字节要拼对。拼错的话电压值会离谱,比如 4.2V 读成 0.2V 或者 20V。建议先读一颗已知电压的电芯校准。
写均衡控制寄存器时,要注意写保护或者解锁序列。有些芯片要求先写特定密钥才能改均衡配置,防止误操作。写完等几个毫秒再读状态确认。
// 伪代码示例:读取两串电芯电压 uint16_t read_cell_voltage(uint8_t cell_index) { uint8_t reg_addr = (cell_index == 0) ? CELL1_VOLT_REG : CELL2_VOLT_REG; uint8_t buf[2]; i2c_start(); i2c_write(MP2642_ADDR << 1); // 写地址 i2c_write(reg_addr); i2c_restart(); i2c_write((MP2642_ADDR << 1) | 1); // 读地址 buf[0] = i2c_read_ack(); buf[1] = i2c_read_nack(); i2c_stop(); return (buf[0] << 8) | buf[1]; }5.2 均衡控制的软件状态机
状态机我一般分四个状态:IDLE、MONITOR、BALANCE、FAULT。上电后进 IDLE,初始化前端芯片,配置保护阈值和均衡参数。然后进 MONITOR,周期读电压。如果满足均衡条件,进 BALANCE,开启对应均衡,同时继续监测。如果电压降到关闭阈值或压差进入死区,回 MONITOR。任何故障进 FAULT,关闭均衡,记录故障,等待恢复条件。
BALANCE 状态里要加超时保护。比如均衡连续开了 30 分钟还没达到关闭条件,强制关闭并报异常。这能防止因为采样错误或者电芯异常导致均衡一直开着,把电芯放亏。
// 均衡状态机简化逻辑 void balance_task(void) { static uint8_t state = STATE_IDLE; static uint32_t balance_start_time = 0; uint16_t v1 = read_cell_voltage(0); uint16_t v2 = read_cell_voltage(1); uint16_t vmax = (v1 > v2) ? v1 : v2; uint16_t vmin = (v1 < v2) ? v1 : v2; uint16_t diff = vmax - vmin; switch (state) { case STATE_MONITOR: if (vmax > BALANCE_ON_THRESHOLD && diff > DIFF_DEADZONE) { enable_balance(v1 > v2 ? 0 : 1); balance_start_time = get_tick(); state = STATE_BALANCE; } break; case STATE_BALANCE: if (vmax < BALANCE_OFF_THRESHOLD || diff < DIFF_DEADZONE) { disable_balance(); state = STATE_MONITOR; } else if (get_tick() - balance_start_time > BALANCE_TIMEOUT) { disable_balance(); log_fault(FAULT_BALANCE_TIMEOUT); state = STATE_FAULT; } break; case STATE_FAULT: // 等待恢复条件 break; } }5.3 异常处理:过压、欠压、过温、通信失败
过压和欠压由 MP2642GR-Z 硬件保护,MCU 读到状态位后要立即响应。过压时关闭充电,欠压时关闭放电,同时关闭均衡。过温看是电芯温度还是芯片温度,电芯过温要停充放电,芯片过温可以降额或者暂停均衡。
通信失败要区分是偶发还是持续。偶发失败重试三次,还失败就报故障。持续失败可能是 I2C 总线被拉死,需要复位前端芯片或者重新初始化 I2C。我一般会在通信失败时切到安全状态,关闭所有开关,然后尝试恢复。
注意:故障恢复不要自动无条件恢复。比如过压故障,要等电压降到恢复阈值以下,并且持续一段时间,才允许重新充电。否则电压一降就恢复,一充又过压,来回振荡。
6. 实测中遇到的坑与排查过程
6.1 电压读数跳变:从连接器查到采样电阻
项目调试初期,发现第二颗电芯电压偶尔跳变 50mV 以上。一开始怀疑是 I2C 干扰,加了滤波电容没改善。后来用示波器直接量采样点,发现是连接器接触电阻不稳定。换了连接器,问题消失。这个坑让我后来在所有采样路径上都加了 RC 滤波,10Ω 加 100nF,截止频率约 160kHz,不影响直流精度,但能滤掉高频噪声。
6.2 均衡开启后电压不降反升:采样点位置错了
另一个坑更隐蔽。均衡开启后,被均衡的电芯电压应该下降,但实测反而升高。查了半天,发现采样线接在了均衡电阻和 MOSFET 之间,均衡电流流过采样线,产生了额外压降,导致读数偏高。改成开尔文连接后正常。这个错误在原理图阶段很难发现,只有实测才会暴露。
6.3 均衡电阻发热导致温度保护误触发
均衡电阻选的是 0.5W 的 0805,实测均衡时表面温度到 80 度以上,旁边的温度传感器读数跟着上升,触发了过温保护。后来换成 1W 的 1206,并且把温度传感器移远,问题解决。教训是:均衡电阻的功率余量要留够,布局要远离温度敏感器件。
| 现象 | 可能原因 | 排查方法 | 解决措施 |
|---|---|---|---|
| 电压读数跳变 | 连接器接触不良 | 示波器量采样点 | 换连接器,加 RC 滤波 |
| 均衡后电压反升 | 采样点位置错误 | 检查采样线路径 | 改开尔文连接 |
| 温度保护误触发 | 均衡电阻发热 | 热成像仪看温度分布 | 换大功率电阻,移传感器 |
| I2C 通信失败 | 上拉电阻不当 | 示波器看波形 | 调整上拉阻值 |
| 均衡不开启 | 阈值或死区设置错误 | 读寄存器值 | 重新计算阈值 |
7. 均衡策略的进阶优化:从能用 to 好用
7.1 自适应均衡电流:根据压差调整占空比
固定均衡电流简单,但不够聪明。压差大时希望均衡快一点,压差小时希望慢一点避免过冲。可以用 PWM 控制均衡 MOSFET,根据压差调整占空比。压差 100mV 以上,占空比 100%;压差 50mV,占空比 50%;压差接近死区,占空比 10%。这样均衡更平滑,发热也更均匀。
PIC18F86J50 有 PWM 外设,驱动均衡 MOSFET 的栅极很方便。注意 PWM 频率不要落在音频范围,避免啸叫,一般选 1kHz 到 10kHz。频率太高,MOSFET 开关损耗增加;太低,均衡电流纹波大。
7.2 均衡与充电阶段的配合:恒流、恒压、浮充
充电分恒流和恒压阶段。恒流阶段电芯电压还没到阈值,一般不均衡。恒压阶段电压接近阈值,均衡开始工作。浮充阶段电压略低,均衡可以间歇工作。MCU 要知道充电器处于哪个阶段,可以通过充电电流判断,或者跟充电器通信。
恒压阶段均衡时,充电器输出电流会有一部分被均衡电阻分流,导致充电器以为还没充满,延长充电时间。这是正常的,但要注意充电器能力,别让均衡电流超过充电器剩余能力。
7.3 数据记录与寿命评估:让均衡有据可查
均衡次数、每次均衡时长、均衡时压差,这些数据记录下来,对评估电芯一致性很有价值。如果发现某颗电芯越来越频繁被均衡,说明它一致性在变差,可能要预警更换。PIC18F86J50 的 EEPROM 可以存这些统计,或者通过通信上传到上层系统。
我一般会记录最近 100 次均衡事件,包括时间戳、电芯编号、起始压差、结束压差、持续时长。这些数据在售后分析时非常有用,能判断是电芯问题还是系统问题。
8. 两串被动均衡的边界:什么时候该换方案
被动均衡不是万能的。如果电芯容量差异超过 5%,或者压差在静置时都超过 100mV,被动均衡那点电流根本追不上,这时候要考虑主动均衡或者直接换电芯。另外,如果系统对能耗极其敏感,比如太阳能供电的备用电源,被动均衡耗散的能量也是损失,要算进系统功耗预算。
两串以上,比如四串、六串,被动均衡的发热和布线复杂度上升,但原理一样。MP2642GR-Z 如果支持多串,可以级联。PIC18F86J50 的资源要评估,串数多了,I2C 读取和状态机管理会更重。
我个人在实际操作中的体会是:两串被动均衡的核心不是电路多复杂,而是参数设置和细节处理。阈值、死区、回差、采样点、散热,这五个点做对了,方案就稳了。做错了,芯片再好也白搭。这套 MP2642GR-Z 加 PIC18F86J50 的组合,我前后调了大概两周,大部分时间花在采样精度和均衡策略调参上,硬件本身反而没怎么改。如果你也在做类似的两串储能或备用电源项目,希望这些踩坑经验能帮你少走点弯路。