1. 项目背景与核心需求拆解
1.1 为什么串联电池组必须做均衡
但凡接触过锂电池成组应用的人都知道一个铁律:串联电池组里,木桶效应是真实存在的。两颗标称容量、内阻、自放电率看似一致的电池,在经历几十次充放电循环之后,端电压就会慢慢拉开差距。容量小的那颗先到上限电压,充电阶段被保护板切断,容量大的那颗还没吃饱;放电阶段反过来,容量小的先到下限,整组被迫停止放电。结果就是整组可用容量被最弱的那颗电池锁死,而且随着循环次数增加,差距越拉越大,形成恶性循环。
储能系统和备用电源系统对这一点尤其敏感。这类场景的特点是长期浮充或者浅充浅放,单次充放电深度不深,但持续时间长,可能几年都不停机。在这种工况下,电池之间的微小差异会被时间放大。如果不管,轻则整组容量衰减加快,重则某颗电池过充过放导致鼓包甚至热失控。所以均衡电路不是可选项,是必选项。
这个项目要解决的核心问题就是:用MP2642GR-Z这颗专用的电池管理前端芯片,配合STM32F205RB主控,对两个串联的电池单元做主动或者被动的能量均衡,让两颗电池的荷电状态尽量保持一致。
1.2 MP2642GR-Z 与 STM32F205RB 的分工逻辑
先说说为什么选这两颗芯片搭伙。
MP2642GR-Z 是一颗面向 2 串电池组的模拟前端,内部集成了电压采集、均衡驱动、保护逻辑这些和电池直接打交道的功能。它的强项在于模拟侧的精度和响应速度,能直接跨接在电池两端,实时盯着每颗电池的电压,并且内置了均衡开关,可以直接控制外部的均衡电阻或者均衡通路。你不需要自己搭一堆运放和基准源去做差分采样,省事而且一致性有保证。
STM32F205RB 则是整个系统的大脑。它是 STM32F2 系列里比较经典的一颗,Cortex-M4 内核带 FPU,主频 120MHz,128KB Flash,64KB SRAM,外设资源对于这种电池管理应用绰绰有余。它负责的事情是:通过通信接口读取 MP2642GR-Z 采集到的电压数据,跑均衡策略算法,决定什么时候开均衡、开多久、用多大电流,同时管理整机的状态机、故障记录、对外通信。
这种“模拟前端 + 通用 MCU”的架构在电池管理里非常常见。好处是职责清晰:模拟前端保证采样精度和实时保护,MCU 负责策略和系统逻辑。坏处是两者之间的通信协议和时序要调好,否则会出现数据读回来不对、均衡指令下发延迟这类问题。后面我会详细讲这块怎么处理。
1.3 适用场景与目标读者
这套方案适合几类人参考:
- 做储能电池包的工程师,尤其是小容量、2 串结构的备用电源模组,比如通信基站的后备电池、小型光伏储能单元。
- 做便携式设备备用电源的开发者,需要在不大的板子上塞进均衡功能。
- 正在学习电池管理系统的学生或者转行者,想找一个规模适中、能完整跑通采集-策略-均衡闭环的练手项目。
如果你之前只做过单节电池的保护,没接触过串联均衡,那这个项目正好是一个很好的切入点。两颗电池的规模不大,但涉及的核心概念——电压采集、均衡策略、通信协议、故障处理——一个都不少。
2. 硬件设计与关键参数计算
2.1 整体硬件框图与信号流向
整个系统的硬件可以分成三块:电池侧、模拟前端侧、主控侧。
电池侧就是两颗串联的电池单元,假设是两颗标称 3.7V 的锂离子电池,串联后总压 7.4V 左右,满电 8.4V,放空 6.0V。这个电压范围决定了后面所有器件的耐压选型。
模拟前端侧以 MP2642GR-Z 为核心。它的电池电压采集引脚分别接到两颗电池的正极,参考地接在电池组负极。均衡输出引脚控制外部的均衡通路。它和 MCU 之间通过通信接口连接,具体是 I2C 还是 SPI 要看芯片手册,这里我按常见的 I2C 来展开,因为这类前端芯片用 I2C 的居多,引脚少、布线简单。
主控侧就是 STM32F205RB 最小系统,加上必要的去耦、晶振、调试接口。它通过 I2C 和 MP2642GR-Z 通信,另外可能还要驱动一个状态指示灯或者连一个上位机通信口。
信号流向是这样的:电池电压 → MP2642GR-Z 采集 → I2C 读取 → STM32 处理 → 均衡决策 → I2C 下发 → MP2642GR-Z 执行 → 均衡电流流过外部通路。
2.2 均衡方式选型:被动还是主动
均衡分两大类:被动均衡和主动均衡。
被动均衡说白了就是把电压高的那颗电池的多余能量,通过一个电阻以热量的形式消耗掉。优点是电路极其简单,一个均衡电阻加一个开关管就行,成本低、可靠性高。缺点是能量白白浪费,而且均衡电流不能太大,否则电阻发热严重,板子受不了。一般被动均衡电流在几十毫安到一两百毫安之间。
主动均衡则是把电压高的电池的能量搬到电压低的电池去,通过电感、电容或者变压器做能量转移。优点是效率高、不浪费能量,均衡电流可以做得比较大。缺点是电路复杂、成本高、占板面积大,而且控制策略复杂,搞不好还会引入新的不平衡。
对于这个项目,两颗电池、储能和备用电源场景,我的建议是优先考虑被动均衡。原因有三点:第一,储能和备用电源对能量效率的敏感度没有电动汽车那么高,损失几十毫安的能量在整体系统里占比很小;第二,被动均衡的可靠性经过大量验证,出问题的概率低;第三,MP2642GR-Z 这类前端芯片通常内置的就是被动均衡的驱动能力,用起来顺手。
当然,如果你做的储能系统对能量利用率有硬性要求,或者均衡电流需求超过 200mA,那就得考虑主动方案,但那通常意味着要换前端芯片或者外加均衡电路,复杂度上一个台阶。
2.3 均衡电阻与电流的参数计算
假设我们采用被动均衡,均衡电流目标定在 100mA。这个值怎么来的?先看电池容量。假设单颗电池容量是 2000mAh,那么 100mA 的均衡电流对应 0.05C 的倍率。对于储能场景,这个倍率足够在几个小时内把两颗电池的电压拉平,同时不会因为电流太大导致电阻发热失控。
均衡电阻的计算很简单。假设单颗电池满电电压 4.2V,均衡时电阻两端电压就是电池电压减去开关管的导通压降。如果开关管导通压降忽略不计,那么:
R = V / I = 4.2V / 0.1A = 42Ω
取标准值 43Ω 或者 39Ω 都可以。功率呢?P = V × I = 4.2V × 0.1A = 0.42W。所以电阻的额定功率至少要选 1W 以上,留足余量。实际选型时我一般会选 2W 的金属膜电阻或者贴片功率电阻,因为板子上的环境温度可能不低,降额使用更稳妥。
开关管的选择也要注意。它要承受电池电压,导通电阻要小,否则压降大了会影响均衡电流的精度。一般选低导通电阻的 N 沟道 MOSFET,Vgs 阈值要低于电池电压,保证能完全导通。
注意:均衡电阻的布局要远离温度敏感器件,比如 MCU 的晶振、模拟前端的基准源。电阻发热会通过 PCB 铜箔传导,布局不当会导致采样漂移。
2.4 电源与通信接口的硬件细节
MP2642GR-Z 的供电直接取自电池组,所以它的耐压必须覆盖电池组的最高电压。两颗锂电串联满电 8.4V,考虑瞬态尖峰,选耐压 12V 以上的器件比较安全。芯片本身的供电范围要查手册确认,如果超出范围,需要加预稳压。
STM32F205RB 的供电是 3.3V,需要从电池组降压得到。可以用一颗低压差线性稳压器或者小功率 DC-DC。这里要注意,MCU 的电源和电池组的负极是共地的,所以 I2C 通信的电平参考是一致的,不需要额外的电平转换。但如果 MP2642GR-Z 的 I/O 电平不是 3.3V,那就得加电平转换电路,否则可能损坏 MCU 的引脚。
I2C 总线的上拉电阻不能忘。一般取 4.7kΩ 到 10kΩ,具体看总线电容和通信速率。如果走线长、器件多,上拉电阻要适当减小,保证上升沿够陡。但也不能太小,否则灌电流超过器件能力。我一般先用 4.7kΩ 打样,实测波形再调整。
3. 软件架构与均衡策略实现
3.1 STM32 侧的软件分层设计
软件这块我习惯分成三层:底层驱动层、中间策略层、应用层。
底层驱动层负责和硬件打交道,包括 I2C 读写 MP2642GR-Z 的寄存器、GPIO 控制、定时器配置、串口打印调试信息。这一层的代码要尽量薄,只做寄存器的搬运,不掺业务逻辑。
中间策略层是核心,负责电压数据的处理、均衡条件的判断、均衡时长的计算、故障的检测和恢复。这一层不直接碰寄存器,而是调用底层驱动提供的接口。这样做的目的是让策略逻辑和硬件解耦,换一颗前端芯片时只需要改底层驱动,策略层基本不动。
应用层负责系统状态机、对外通信、参数存储。比如系统是处于待机、充电、放电还是故障状态,每种状态下均衡策略是否启用,这些都在应用层管理。
这种分层的好处是调试方便。你可以单独测试底层驱动,确认 I2C 能正确读写;然后单独测试策略层,用模拟的电压数据验证均衡逻辑;最后联调。如果一锅粥写在一起,出了问题很难定位是驱动错了还是策略错了。
3.2 电压采集与滤波处理
MP2642GR-Z 采集回来的电压数据是原始值,不能直接拿来用。原因有两个:一是 ADC 本身有噪声,单次采样可能有几毫伏的跳动;二是电池在充放电时电压本身就在变化,瞬时值不能代表真实的开路电压。
我的做法是:对每颗电池的电压做滑动平均滤波。比如每 100ms 采样一次,存最近 8 次的值,取平均。这样既能滤掉高频噪声,又不会引入太大的滞后。8 次 100ms 就是 800ms 的窗口,对于电池电压这种慢变量来说完全够用。
如果系统对响应速度要求高,可以用一阶低通滤波,公式是:
V_filtered = α × V_new + (1 - α) × V_filtered_old
α 取 0.1 到 0.3 之间。α 越小滤波越强但响应越慢,α 越大响应快但滤波效果弱。这个要根据实际噪声水平调。
还有一个细节:采集电压的时候要避开均衡开启的瞬间。因为均衡电流流过线路阻抗会产生压降,导致采集到的电压偏低。所以我的策略是均衡开启期间不采集,或者采集后做补偿。更稳妥的做法是均衡和采集分时进行,比如均衡开 10 秒,关 1 秒,在关的那 1 秒里采集。
3.3 均衡触发条件与阈值设定
均衡什么时候开?最简单的逻辑是:当两颗电池的电压差超过某个阈值时,开启电压高的那颗的均衡。阈值设多少?
设太小,比如 10mV,那电池正常波动就会触发均衡,均衡频繁启停,开关管和电阻反复受热冲击,寿命受影响。设太大,比如 100mV,那均衡效果不明显,电池长期处于不平衡状态。
我的经验值是30mV 到 50mV之间。对于储能场景,电池电压变化慢,可以取 30mV,精细一点。对于备用电源,可能充放电切换频繁,取 50mV 减少均衡动作次数。
除了电压差阈值,还要加一个滞回。比如开启阈值是 50mV,关闭阈值是 20mV。这样电压差降到 20mV 以下才停止均衡,避免在 50mV 附近反复开关。滞回窗口一般取开启阈值的 30% 到 50%。
还有一个条件是均衡只在特定状态下允许。比如充电时均衡效果最好,因为充电时电压高的电池先到上限,均衡可以把它压住,让电压低的继续充。放电时均衡意义不大,因为放电时电压差主要反映内阻差异,均衡消耗的能量反而加速了放电。所以我的策略通常是:充电阶段允许均衡,放电阶段禁止均衡,静置阶段根据电压差决定。
3.4 均衡时长与占空比控制
均衡不是一直开着就好。持续大电流均衡会让电阻温度飙升,而且可能过度均衡,把电压高的电池拉得过低,反而造成新的不平衡。
我的做法是采用占空比控制。比如均衡周期是 10 秒,其中均衡开 5 秒,关 5 秒,占空比 50%。这样电阻的平均功率减半,温升可控,同时均衡效果通过时间累积也能达到。
占空比可以根据电压差动态调整。电压差大时占空比高,比如 80%;电压差接近关闭阈值时占空比降低,比如 20%。这样既保证均衡速度,又避免过冲。
均衡时长的上限也要设。比如单次均衡最长不超过 30 分钟,超过就强制休息 5 分钟。这是防止某个异常情况导致均衡一直开着,比如电压采集故障导致一直判定电压差过大。
4. 通信协议与寄存器操作实操
4.1 I2C 通信的初始化与配置
STM32F205RB 的 I2C 外设配置有几个关键参数:时钟频率、地址模式、应答使能。
时钟频率一般设 100kHz 或者 400kHz。MP2642GR-Z 支持多高的速率要查手册,如果不确定,先用 100kHz,稳定后再往上提。400kHz 对布线要求高一些,走线长或者上拉电阻大的时候波形容易变形。
地址模式看芯片是 7 位地址还是 10 位地址。大部分电池前端芯片是 7 位地址,地址值由芯片的地址引脚决定,可以配置成几个不同的值,这样同一条总线上可以挂多颗芯片。两颗电池只需要一颗前端,所以地址固定就行。
初始化代码大概长这样:
I2C_InitTypeDef I2C_InitStruct; I2C_InitStruct.I2C_ClockSpeed = 100000; I2C_InitStruct.I2C_Mode = I2C_Mode_I2C; I2C_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2; I2C_InitStruct.I2C_OwnAddress1 = 0x00; I2C_InitStruct.I2C_Ack = I2C_Ack_Enable; I2C_InitStruct.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; I2C_Init(I2C1, &I2C_InitStruct); I2C_Cmd(I2C1, ENABLE);这段代码把 I2C1 配成 100kHz、7 位地址、使能应答。注意I2C_OwnAddress1在主机模式下其实用不到,但库函数要求填,填 0 就行。
4.2 读取电池电压的完整流程
读电压不是发一个命令就完事,中间有几个步骤。
第一步,发送起始条件,然后发送 MP2642GR-Z 的设备地址加写标志。等应答。
第二步,发送要读的寄存器地址。等应答。
第三步,发送重复起始条件,然后发送设备地址加读标志。等应答。
第四步,读取两个字节的数据,第一个字节是高位,第二个字节是低位。每读一个字节要发应答,最后一个字节发非应答。
第五步,发送停止条件。
这一套流程用 STM32 的标准外设库或者 HAL 库都能实现。HAL 库的话用HAL_I2C_Mem_Read一个函数就搞定了,传入设备地址、寄存器地址、数据缓冲区、长度就行。但要注意 HAL 库的超时时间要设够,否则通信偶尔卡一下就会返回错误。
读回来的原始数据是 ADC 码值,需要转换成电压。转换公式是:
V = raw × Vref / 4096
如果 MP2642GR-Z 的内部基准是 2.048V,ADC 是 12 位,那么每个码值对应 0.5mV。两颗电池的电压分别存在不同的寄存器里,读的时候要读两次,或者用连续读的方式一次读完。
4.3 下发均衡指令的注意事项
下发均衡指令就是写寄存器。MP2642GR-Z 的均衡控制寄存器里,每一位对应一颗电池的均衡开关。写 1 开启,写 0 关闭。
写寄存器和读寄存器类似,只是不需要重复起始条件。流程是:起始 → 设备地址写 → 寄存器地址 → 数据 → 停止。
这里有个坑:写均衡寄存器的时候要读-改-写。因为均衡寄存器里可能还有其他控制位,比如保护使能、采集使能。如果你直接写一个值进去,可能会把其他位覆盖掉。正确做法是先读回当前值,用位操作修改均衡位,再写回去。
uint8_t reg_val; HAL_I2C_Mem_Read(&hi2c1, DEV_ADDR, BALANCE_REG, 1, ®_val, 1, 100); reg_val &= ~0x03; // 清除两个均衡位 reg_val |= balance_mask; // 设置新的均衡状态 HAL_I2C_Mem_Write(&hi2c1, DEV_ADDR, BALANCE_REG, 1, ®_val, 1, 100);这段代码先读回寄存器值,清除低两位,再根据balance_mask设置。这样不会影响其他位。
注意:均衡指令下发后不要立刻读电压,因为均衡刚开启时线路上的瞬态还没稳定。建议延时 100ms 以上再采集,或者等下一个采集周期。
4.4 通信异常的处理与重试机制
I2C 通信不是百分百可靠的,尤其是在有电机、继电器等干扰源的环境里。所以必须有异常处理。
我的做法是:每次 I2C 操作都检查返回值。如果返回错误,重试最多 3 次。3 次都失败,标记通信故障,进入安全状态——关闭所有均衡,停止充放电,报警。
重试之间要加延时,比如 10ms。因为有时候总线是被干扰拉低了,需要时间恢复。如果连续多次通信失败,可以尝试重新初始化 I2C 外设,有时候是外设状态机卡死了,重新初始化能恢复。
还有一种情况是 MP2642GR-Z 本身复位了,寄存器回到默认值。这时候读回来的数据可能不对。可以在通信恢复后,重新配置一遍前端芯片的关键寄存器,确保它处于预期的工作状态。
5. 常见问题与排查技巧实录
5.1 电压采集值跳动大怎么办
这是最常见的问题。表现是读回来的电压值上下跳动几十毫伏,导致均衡判断不稳定。
排查思路按顺序来:
先看硬件。用示波器看电池电压引脚上的波形,如果有明显纹波,说明是电源或者布线的问题。检查去耦电容是否靠近芯片引脚,容值是否足够。一般 0.1μF 和 10μF 并联使用,0.1μF 滤高频,10μF 滤低频。
再看采样时序。如果采样时刻正好在开关管动作或者继电器吸合的瞬间,那跳动是正常的。解决办法是避开这些时刻采样,或者采样后做中值滤波。
最后看软件滤波参数。如果滑动平均的窗口太短,滤波效果不够。可以加长窗口,或者改用中值滤波加滑动平均的组合。中值滤波对脉冲噪声特别有效,先中值再平均,效果比单纯平均好很多。
5.2 均衡开启后电压反而更不平衡
这种情况通常是采集和均衡没有分时。均衡电流流过线路阻抗,在采集点上产生了额外的压降,导致采集到的电压偏低。如果均衡的是电压高的那颗,采集到的值反而显得低,策略就会误判。
解决办法前面提过:均衡和采集分时。具体实现可以用定时器中断,在均衡关闭后的固定延时(比如 50ms)触发采集。这样线路上的瞬态已经稳定,采集值反映的是真实电压。
还有一种可能是均衡电阻的阻值不一致。两颗电池的均衡通路如果电阻差异大,同样的开启时间下,消耗的能量不同,反而造成新的不平衡。所以均衡电阻要选精度至少 1% 的,最好配对使用。
5.3 I2C 通信偶尔失败怎么定位
I2C 通信失败的原因很多,定位要一步步来。
先确认硬件连接。用万用表测 SDA 和 SCL 对地的电阻,正常应该是上拉电阻的阻值。如果明显偏小,说明有短路。如果无穷大,说明断路。
再看波形。用示波器抓 I2C 的波形,看起始条件、地址、数据、应答位是否正常。常见的问题是上升沿太慢,原因是上拉电阻太大或者总线电容太大。解决办法是减小上拉电阻,或者降低通信速率。
如果波形正常但通信还是失败,可能是时序参数不匹配。比如 MP2642GR-Z 要求的数据建立时间比 STM32 提供的长。这时候需要调整 I2C 的时序寄存器,增加建立时间和保持时间。
还有一种隐蔽的情况:MP2642GR-Z 在某种状态下不响应 I2C。比如它正在做 ADC 转换或者保护动作,可能会暂时不响应。查手册确认是否有这个行为,如果有,就在通信失败后延时重试。
5.4 均衡电阻发热严重怎么处理
均衡电阻发热是正常的,但如果烫到不能摸,说明功率余量不够或者散热设计有问题。
先算实际功率。如果电阻是 43Ω,电池电压 4.2V,功率是 0.41W。如果选的电阻额定功率是 0.5W,那余量只有 20%,表面温度会很高。换成 1W 或者 2W 的电阻,温度立刻降下来。
如果空间允许,用两个电阻并联或者串联来分担功率。比如两个 82Ω 的 0.5W 电阻并联,等效 41Ω、1W,每个电阻只承受一半功率,温度低很多。
PCB 布局上,均衡电阻周围铺铜散热,但不要铺到温度敏感区域。可以在电阻下面开窗,增加空气对流。如果板子有外壳,外壳上对应位置开散热孔。
5.5 常见问题速查表
| 现象 | 可能原因 | 排查方法 | 解决措施 |
|---|---|---|---|
| 电压采集跳动大 | 电源纹波、采样时序不当、滤波不足 | 示波器看波形、检查采样时刻 | 加去耦电容、分时采样、加强滤波 |
| 均衡后更不平衡 | 采集与均衡未分时、电阻精度差 | 检查时序、测量电阻值 | 分时控制、选用 1% 精度电阻 |
| I2C 通信失败 | 上拉电阻不当、时序不匹配、芯片忙 | 测电阻、抓波形、查手册 | 调整上拉、改时序、延时重试 |
| 均衡电阻过热 | 功率余量不足、散热差 | 计算实际功率、测温 | 换大功率电阻、改善散热 |
| 均衡不动作 | 阈值设置不当、寄存器写入失败 | 打印电压差、读回寄存器 | 调整阈值、检查读改写逻辑 |
6. 系统联调与实测经验分享
6.1 从单板调试到整机联调的步骤
我一般分四步走。
第一步,单独调试 MP2642GR-Z。不接 MCU,用外部电源模拟电池电压,用逻辑分析仪或者 USB 转 I2C 工具读写寄存器,确认芯片能正常工作,电压采集值准确,均衡开关能控制。
第二步,调试 STM32 的 I2C 驱动。不接前端芯片,用示波器看波形,确认时序正确。然后接上前端芯片,读写寄存器,确认数据一致。
第三步,联调采集和均衡。写一个简单的测试程序,手动设置均衡开关,观察电压变化。确认采集和均衡互不干扰。
第四步,跑完整的策略。让系统自动运行,模拟充放电过程,观察均衡是否按预期动作。记录电压曲线,分析均衡效果。
每一步都要有明确的通过标准。比如第一步的通过标准是:采集误差小于 10mV,均衡开关响应时间小于 10ms。达不到就不往下走,否则问题会累积,后面更难查。
6.2 实测数据与均衡效果评估
我做过一组实测:两颗 2000mAh 的电池,初始电压差 80mV。开启均衡,均衡电流 100mA,占空比 50%。每隔 10 分钟记录一次电压。
| 时间 | 电池 A 电压 | 电池 B 电压 | 电压差 |
|---|---|---|---|
| 0min | 4.180V | 4.100V | 80mV |
| 10min | 4.175V | 4.108V | 67mV |
| 20min | 4.170V | 4.115V | 55mV |
| 30min | 4.165V | 4.122V | 43mV |
| 60min | 4.155V | 4.135V | 20mV |
| 90min | 4.150V | 4.142V | 8mV |
可以看到,电压差从 80mV 降到 8mV 用了 90 分钟。这个速度对于储能场景是可以接受的,因为储能系统通常有整晚的时间做均衡。如果要求更快,可以加大均衡电流或者提高占空比,但要注意发热。
均衡结束后,两颗电池的电压差保持在 10mV 以内,说明均衡有效。后续又做了几次充放电循环,电压差没有明显扩大,说明均衡策略是稳定的。
6.3 长期运行可靠性的几个关注点
储能和备用电源系统要求长期无人值守运行,所以可靠性是重中之重。
第一个关注点是均衡电阻的寿命。电阻在高温下长期工作会老化,阻值漂移。建议选用金属膜电阻或者防硫化电阻,比普通碳膜电阻可靠。如果环境温度高,降额使用,比如 1W 的电阻实际只用到 0.3W。
第二个关注点是 I2C 通信的长期稳定性。可以在固件里加一个通信质量计数器,记录通信失败次数。如果失败率超过阈值,报警提示维护。同时定期(比如每天一次)重新初始化 I2C 外设和前端芯片,防止状态机卡死。
第三个关注点是电池电压的长期漂移。如果发现某颗电池的电压持续偏低,即使均衡也拉不回来,可能是电池本身老化了。这时候要提示更换电池,而不是一味加大均衡力度。
第四个关注点是固件的看门狗。STM32F205RB 有独立看门狗和窗口看门狗。我一般用独立看门狗,超时时间设 2 秒。主循环里定期喂狗,如果程序跑飞,看门狗复位,系统重新初始化,均衡关闭,进入安全状态。
6.4 几个容易忽略的实操细节
第一个细节:MP2642GR-Z 的均衡引脚在芯片复位后默认是关闭的。所以每次上电或者看门狗复位后,都要重新配置均衡寄存器。不要假设它保持上次的状态。
第二个细节:STM32F205RB 的 I2C 引脚是复用功能,初始化的时候要记得使能 GPIO 时钟和 I2C 时钟,并且把引脚配置成复用开漏模式。漏了任何一步,I2C 都不工作。
第三个细节:如果电池组的总压超过 MP2642GR-Z 的供电范围,不要直接接。加一个预稳压电路,比如用齐纳二极管加限流电阻做一个简单的钳位,或者用 LDO 稳压。但要注意 LDO 的静态电流,储能系统对静态功耗敏感,选低静态电流的型号。
第四个细节:均衡电阻的走线要足够宽。100mA 的电流虽然不大,但如果走线太细,压降会影响到均衡电流的精度。一般 1oz 铜厚的话,走线宽度至少 0.5mm。
第五个细节:调试阶段可以在均衡通路上串一个跳线或者 0Ω 电阻,方便单独测量均衡电流。量产的时候换成 0Ω 电阻或者直接短接。
这套方案我在几个小功率储能项目里用过,两颗电池的均衡效果稳定,通信可靠,长期运行没有出现异常。如果你也在做类似的项目,希望这些经验能帮你少走弯路。