资讯动态

基于MP2642GR-Z与STM32F103RC的两串电池被动均衡方案设计与实现

发布时间:2026/10/17 1:36:54 来源:尧图企业网站定制
1. 从两个串联电芯说起为什么被动均衡在储能BMS里依然是主流选择储能和备用电源系统里电池组通常由多节电芯串联而成以满足电压和容量需求。但串联结构有个绕不开的问题每节电芯的自放电率、初始容量、内阻、温度分布都不完全一致充放电循环跑下来电芯之间的荷电状态SOC和端电压会逐渐拉开差距。木桶效应在这里体现得淋漓尽致——整组电池的可用容量由最弱的那节电芯决定充电时最弱的那节先到上限放电时它又最先触底长期下去差距越拉越大整组寿命急剧缩短。均衡电路就是来解决这个问题的。它分两条技术路线被动均衡和主动均衡。主动均衡用变压器、电感或电容做能量搬运把高电压电芯的能量转移到低电压电芯效率高但电路复杂、成本高、体积大。被动均衡则是给每节电芯并联一个耗散电阻通过电阻把电压偏高的电芯多余的能量以热量形式消耗掉结构简单、成本低、可靠性高。在中小功率的储能和备用电源场景里被动均衡依然是绝对主力原因很直接电芯一致性没那么差的时候需要耗散的能量很小几毫安到几百毫安的均衡电流就够用没必要为这点能量去搭一套复杂的主动均衡电路。这次要聊的方案就是用MP2642GR-Z这颗均衡前端芯片配合STM32F103RC主控对两个串联电池单元做被动均衡。两颗电芯的串联结构在备用电源里非常常见——比如12V铅酸替代场景下的磷酸铁锂两串方案或者某些小型储能模块。两串系统虽然电芯数量少但均衡逻辑、采样精度、保护时序一样都不能马虎因为两串系统里任何一节电芯出问题整组直接失效。MP2642GR-Z 是一颗集成度比较高的电池管理前端内部集成了均衡开关和驱动外部只需要配均衡电阻就能工作省掉了分立MOSFET和驱动电路。STM32F103RC 则是大家非常熟悉的Cortex-M3主控72MHz主频、256KB Flash、48KB RAM资源对于两串BMS来说绰绰有余而且外设丰富ADC、定时器、CAN、UART都有做数据采集和通信非常顺手。这套组合的核心价值在于用最低的硬件成本实现可靠的被动均衡同时保留足够的采样和保护能力适合成本敏感的储能和备用电源产品。这篇文章会从硬件设计、均衡策略、软件实现、实测调试几个维度把这套两串均衡方案完整拆开讲。不管你是刚接触BMS的新手还是想找一套低成本两串方案的从业者都能从中拿到可以直接参考的东西。2. MP2642GR-Z 的均衡机制与外围电路设计要点2.1 芯片内部均衡开关的工作逻辑MP2642GR-Z 的均衡功能不是简单地在电芯两端并一个电阻就完事。芯片内部集成了均衡开关管外部均衡电阻串联在电芯正极和芯片对应的均衡引脚之间。当芯片收到均衡使能信号后内部开关导通电芯正极经过外部电阻、内部开关管到电芯负极形成回路电流流过电阻产生热量电芯电压随之下降。这里有个关键点均衡开关的导通电阻和外部均衡电阻共同决定了均衡电流。MP2642GR-Z 内部开关的导通电阻在数据手册里标得很清楚通常在几欧姆量级。如果你选的均衡电阻是几十欧姆那内部开关的导通电阻就不能忽略实际均衡电流会比按外部电阻单独计算的值小。我见过有人按100Ω算出来均衡电流50mA结果实测只有30mA出头就是因为没把内部导通电阻算进去。均衡电流的计算公式是I_balance V_cell / (R_external R_on_internal)假设电芯电压3.6V外部均衡电阻51Ω内部导通电阻5Ω那么均衡电流就是 3.6 / (51 5) ≈ 64mA。这个电流下均衡电阻的功耗是 I² × R 0.064² × 51 ≈ 0.21W所以至少要选0805封装以上的电阻稳妥点用1206封装功率余量留够。2.2 均衡电阻的选型与散热处理均衡电阻的选型要同时考虑阻值、功率和温度系数。阻值决定了均衡电流大小功率决定了封装尺寸温度系数决定了均衡过程中阻值漂移对电流的影响。阻值选小了均衡电流大均衡快但发热严重PCB局部温升会影响旁边电芯采样精度。阻值选大了均衡电流小均衡慢对于容量较大的储能电芯可能充放电一个循环下来均衡量都追不上电芯差异的扩大速度。我的经验是两串磷酸铁锂方案电芯容量在10Ah到50Ah之间时均衡电流取50mA到100mA比较合适对应均衡电阻在33Ω到68Ω之间。功率计算要留足余量。以68Ω、100mA为例功耗是 0.1² × 68 0.68W这时候必须用2512封装的功率电阻或者用两颗1206电阻并联分担。如果强行用0805额定0.125W电阻会烧得发黑甚至开路。我早期调试时就烧过一批0805电阻后来统一换成2512再没出过问题。散热方面均衡电阻下方PCB铜箔要尽量铺大最好在电阻焊盘下面打过孔到背面铜层利用PCB本身做散热。如果产品外壳是金属的可以考虑在电阻上方贴导热垫把热量导到外壳。实测下来2512封装、0.68W功耗的电阻在铺铜良好的PCB上表面温度比环境温度高40℃左右如果环境温度50℃电阻表面就到90℃了这个温度下电阻本身能扛住但旁边的电芯采样走线要远离否则热电势会影响ADC读数。2.3 采样走线的开尔文连接与滤波MP2642GR-Z 对每节电芯的电压采样精度直接影响均衡判断的准确性。两串系统里电芯采样点有三个电芯1负极也是整组负极、电芯1正极/电芯2负极、电芯2正极整组正极。这三个点必须用开尔文连接方式接到芯片采样引脚也就是从电芯极耳处单独拉一对采样线到芯片而不是从大电流走线上随便引一根。为什么要开尔文连接因为大电流走线上有压降充放电电流10A时一段10mΩ的走线就有0.1V压降这个压降叠加到采样电压上会让芯片读到的电芯电压偏差0.1V均衡判断直接错乱。开尔文连接让采样线不流大电流只流过芯片采样引脚的微安级电流走线压降可以忽略。采样线进入芯片引脚前要加RC滤波。典型值是100Ω串联电阻加0.1μF对地电容截止频率约16kHz能滤掉开关噪声和均衡开关动作时产生的尖峰。注意这个串联电阻不能太大否则和芯片采样引脚的输入漏电流作用会产生额外误差。100Ω配合1μA漏电流误差是0.1mV可以接受。电容要选C0G或X7R材质容值稳定性好。2.4 与STM32F103RC的接口设计MP2642GR-Z 和 STM32F103RC 之间的接口分两部分控制接口和采样接口。控制接口是STM32输出均衡使能信号给MP2642GR-Z采样接口是MP2642GR-Z把电芯电压以模拟或数字形式传给STM32。如果MP2642GR-Z输出的是模拟电压STM32F103RC的12位ADC可以直接采集。F103RC的ADC参考电压是VDDA通常接3.3V12位分辨率下LSB是3.3/4096≈0.8mV。电芯电压3.6V不能直接进ADC需要分压。分压电阻选1%精度的金属膜电阻分压比根据电芯最高电压确定。两串磷酸铁锂最高电压按3.65V×27.3V算分压到3.0V以内分压比取1/3比较合适用20kΩ和10kΩ串联电芯电压7.3V时分压点电压2.43V留足了余量。分压电阻的精度直接影响采样精度。1%电阻带来的分压比误差也是1%3.6V电芯电压下误差36mV对于均衡判断来说偏大。更好的做法是用0.1%精度的电阻或者用软件校准——在已知电压下读ADC值算出实际分压比存到Flash里运行时用校准系数修正。我一般两个都做硬件用0.1%电阻打底软件再做一次单点校准双保险。如果MP2642GR-Z支持数字接口比如I2C或SPI那就直接读寄存器省掉外部ADC和分压电阻精度由芯片内部ADC决定通常比STM32的ADC精度高。具体用哪种接口要看MP2642GR-Z的型号配置设计前务必确认数据手册里的接口类型。3. 两串均衡策略什么时候均衡、均衡多久、怎么判断结束3.1 均衡触发的电压阈值与滞回设计均衡不是随时都能开的。充电过程中电芯电压在上升这时候开均衡均衡电流和充电电流叠加采样电压会跳变容易误判。放电过程中电芯电压在下降开均衡会加速低电压电芯的下降可能触发过放保护。所以均衡最合适的时机是充电末期和静置阶段。充电末期当最高电芯电压达到均衡触发阈值时开启均衡。磷酸铁锂的均衡触发阈值一般设在3.45V到3.55V之间。设太低电芯还没充满就开始均衡浪费能量设太高接近过充保护点均衡窗口太窄。我通常设3.50V配合充电截止电压3.65V有0.15V的均衡窗口。滞回设计是为了防止电压在阈值附近波动导致均衡反复开关。比如触发阈值3.50V释放阈值3.45V电芯电压降到3.45V以下才停止均衡。滞回宽度取50mV左右比较合适太窄了容易震荡太宽了均衡效果打折扣。两串系统里均衡判断逻辑是比较两节电芯电压如果压差超过均衡开启压差比如30mV并且高电压电芯电压超过触发阈值就对高电压电芯开启均衡。压差阈值不能设太小否则采样噪声就能触发均衡均衡电阻频繁开关寿命受影响。30mV是经验值对应采样精度0.8mV的ADC来说有足够的噪声容限。3.2 均衡占空比控制与热管理均衡开关一直导通电阻持续发热PCB局部温度会升得很高。更好的做法是用PWM控制均衡开关占空比根据温度动态调整。比如正常温度下占空比100%均衡电流64mA当板载NTC检测到电阻附近温度超过85℃时占空比降到50%均衡电流减半发热减半温度回落。PWM频率选1kHz到10kHz之间。太低会有可听噪声太高开关损耗增加。我一般用2kHz占空比分辨率用STM32定时器做到1%步进。占空比调整要有滞回比如温度超过85℃降占空比降到75℃才恢复避免在阈值附近反复调整。热管理还有一个细节两节电芯同时需要均衡的情况。两串系统里如果两节电芯压差大可能只有一节需要均衡但如果两节电压都超过触发阈值且压差不大可以同时均衡加快整体电压回落。但同时均衡时总发热量翻倍占空比要相应降低比如各自50%总发热和单节100%时相当。3.3 均衡结束条件的多条件判断均衡什么时候停最简单的条件是电芯电压降到释放阈值以下。但实际使用中还有几个条件要同时判断第一压差条件。如果两节电芯压差已经小于停止压差比如10mV即使高电压电芯还在触发阈值以上也可以停止均衡因为均衡的目的已经达到——两节电芯一致了。第二温度条件。如果均衡电阻温度超过保护阈值比如105℃强制停止均衡等温度降下来再恢复。这是保护电阻不被烧毁的最后防线。第三时间条件。单次均衡持续时间超过设定上限比如2小时强制停止防止某个异常情况导致均衡一直开着。这个上限根据电芯容量和均衡电流算50Ah电芯100mA均衡电流均衡1%容量需要0.5小时设2小时上限对应4%容量足够覆盖正常均衡需求。第四充电状态条件。如果充电器拔掉了系统进入放电或静置均衡策略要相应调整。静置时均衡可以继续但放电时最好停止避免加速低电压电芯下降。这几个条件用与逻辑组合所有条件都满足才继续均衡任何一个不满足就停止。软件里用一个状态机管理每个控制周期比如100ms检查一次条件决定均衡开关状态。3.4 均衡与保护逻辑的优先级协调均衡和保护是两套逻辑必须明确优先级。保护永远优先于均衡。当出现过充、过放、过流、过温任何保护条件时立即关闭均衡然后执行保护动作断充电MOS或放电MOS。具体实现上STM32的均衡控制函数在每次执行前先检查保护标志位。如果保护标志置位直接跳过均衡逻辑输出均衡关闭信号。保护恢复后均衡不自动恢复要等下一个控制周期重新判断条件。这样避免保护刚恢复、电压还没稳定就开均衡导致保护再次触发。还有一个容易忽略的点均衡开关动作时会产生电流尖峰可能干扰采样。所以采样和均衡不要同时进行。我的做法是均衡开关状态改变后延时1ms再采样等尖峰过去。STM32的定时器可以精确控制这个时序用TIM触发ADC在均衡关闭窗口内采样。4. STM32F103RC 上的软件架构与关键代码实现4.1 系统初始化与外设配置STM32F103RC 的初始化顺序有讲究。先配时钟外部8MHz晶振经PLL倍频到72MHzAHB、APB1、APB2分频设置好。APB1最高36MHzAPB2最高72MHzADC时钟不能超过14MHz所以ADC预分频器要设成6分频72/612MHz在范围内。然后配GPIO。均衡使能引脚配成推挽输出初始状态输出低电平均衡关闭。采样相关的GPIO配成模拟输入注意F103的ADC引脚有些是复用功能要确认引脚定义和ADC通道对应关系。比如PA0是ADC1_IN0PA1是ADC1_IN1两串系统用这两个通道采两节电芯电压。ADC配置用规则组扫描模式两个通道依次转换。采样时间设长一点比如239.5个ADC周期让采样电容充分充电提高精度。F103的ADC在最长采样时间下源阻抗要求小于50kΩ分压电阻20kΩ10kΩ并联后等效阻抗约6.7kΩ满足要求。定时器配置一个1ms基准中断用于控制周期计时。再配一个PWM定时器输出2kHz方波给均衡开关做占空比控制。PWM定时器用TIM3通道1和通道2分别控制两节电芯的均衡开关。如果MP2642GR-Z的均衡使能是单引脚控制两节那就只需要一个PWM通道具体看芯片接口定义。4.2 电芯电压采样与校准算法ADC采样用DMA搬运避免CPU频繁中断。配置DMA通道1从ADC数据寄存器搬到内存数组两个通道循环搬运。DMA传输完成中断里置标志位主循环检测标志位后处理数据。采样值转电压的公式// 假设12位ADC参考电压3.3V分压比1/3 #define VREF 3.3f #define ADC_RES 4096.0f #define DIVIDER_RATIO 3.0f float adc_to_voltage(uint16_t adc_val) { float v_adc (float)adc_val / ADC_RES * VREF; return v_adc * DIVIDER_RATIO; }但实际分压比和参考电压都有误差需要校准。校准方法用高精度电源给电芯输入端加已知电压比如3.600V读ADC值算出实际系数。存到Flash的特定地址运行时读取。// 校准系数存储结构 typedef struct { float k; // 斜率 float b; // 截距 } CalibCoeff; // 两点校准加3.000V和3.600V读ADC值 // k (3.600 - 3.000) / (adc2 - adc1) // b 3.000 - k * adc1两点校准比单点校准更准能同时修正增益和偏移误差。校准后精度可以做到±5mV以内对于均衡判断足够了。采样还要做软件滤波。我一般用滑动平均加中值滤波的组合连续采8次去掉最大最小各2个剩下4个取平均。这样既能滤掉随机噪声又能抑制偶发尖峰。滤波窗口大小要权衡窗口大滤波效果好但响应慢窗口小响应快但滤波效果差。均衡判断对响应速度要求不高100ms更新一次电压就够所以窗口可以取大一点。4.3 均衡状态机的设计与实现均衡逻辑用状态机实现最清晰。定义几个状态IDLE空闲、BALANCING_CELL1均衡电芯1、BALANCING_CELL2均衡电芯2、BALANCING_BOTH同时均衡、COOLDOWN冷却、FAULT故障。状态转移条件IDLE → BALANCING_CELL1电芯1电压 触发阈值 且 电芯1电压 - 电芯2电压 压差阈值 且 无保护IDLE → BALANCING_CELL2电芯2电压 触发阈值 且 电芯2电压 - 电芯1电压 压差阈值 且 无保护IDLE → BALANCING_BOTH两节电压都 触发阈值 且 压差 压差阈值 且 无保护BALANCING_* → COOLDOWN电压降到释放阈值以下 或 压差 停止压差 或 温度过高 或 超时COOLDOWN → IDLE冷却时间到比如30秒任何状态 → FAULT保护触发FAULT → IDLE保护恢复且故障清除代码框架typedef enum { BAL_IDLE, BAL_CELL1, BAL_CELL2, BAL_BOTH, BAL_COOLDOWN, BAL_FAULT } BalState; BalState bal_state BAL_IDLE; uint32_t bal_timer 0; void balance_state_machine(void) { float v1 get_cell_voltage(1); float v2 get_cell_voltage(2); float vdiff v1 - v2; uint8_t prot get_protection_flags(); switch (bal_state) { case BAL_IDLE: if (prot) { bal_state BAL_FAULT; break; } if (v1 BAL_TRIGGER_V vdiff BAL_DIFF_V) { bal_state BAL_CELL1; bal_timer 0; } else if (v2 BAL_TRIGGER_V -vdiff BAL_DIFF_V) { bal_state BAL_CELL2; bal_timer 0; } else if (v1 BAL_TRIGGER_V v2 BAL_TRIGGER_V fabs(vdiff) BAL_DIFF_V) { bal_state BAL_BOTH; bal_timer 0; } break; case BAL_CELL1: if (prot) { bal_state BAL_FAULT; break; } if (v1 BAL_RELEASE_V || vdiff BAL_STOP_DIFF || bal_timer BAL_TIMEOUT || temp_high()) { bal_state BAL_COOLDOWN; bal_timer 0; } break; // 其他状态类似... } // 根据状态输出均衡控制 set_balance_output(bal_state); }状态机每100ms执行一次用1ms定时器计数分频得到。状态切换时记录时间戳用于超时判断。4.4 保护逻辑与故障处理保护逻辑独立于均衡状态机在更高优先级的中断或主循环前段执行。保护包括过充保护任一电芯电压 3.65V断充电MOS过放保护任一电芯电压 2.50V断放电MOS过流保护电流 阈值断对应MOS过温保护NTC温度 阈值断充放电MOS保护触发后置保护标志位均衡状态机检测到标志位后进入FAULT状态关闭均衡。保护恢复条件要严格过充恢复电压3.40V过放恢复电压3.00V都有滞回。恢复后清除标志位均衡状态机从FAULT回到IDLE重新判断。故障处理还要记录故障码到Flash方便售后分析。故障码包括故障类型、发生时间、故障时的电压电流温度。STM32F103RC的Flash有256KB划出最后几KB做故障记录区用环形缓冲区存储写满后覆盖最旧记录。5. 实测调试从波形异常到均衡效果的完整排查链路5.1 上电后均衡不启动的排查过程板子焊好上电程序烧进去发现均衡电阻一直不热均衡没启动。排查从几个方向入手先查硬件。用万用表量MP2642GR-Z的均衡使能引脚看STM32有没有输出高电平。如果STM32输出正常但芯片引脚没反应查芯片供电和使能逻辑。MP2642GR-Z的使能可能是高有效也可能是低有效数据手册确认清楚。我遇到过使能极性搞反的情况STM32输出高芯片要求低有效结果均衡一直关着。再查软件。在均衡状态机里加调试输出把状态、电压、压差打印出来。用串口打到PC上看。如果状态一直在IDLE不转移看电压值是不是没达到触发阈值。这时候用高精度万用表量实际电芯电压和ADC读数对比。如果ADC读数偏低查分压电阻值和校准系数。我碰到过一次分压电阻焊错20kΩ焊成了200kΩADC读数只有实际值的十分之一电压永远达不到触发阈值。还有一种情况电压和压差都满足但保护标志位误置位状态机直接进FAULT。查保护逻辑的阈值设置过充保护3.65V如果电芯电压3.60V就触发说明阈值设错了或者ADC校准偏了。把保护阈值临时调高验证如果均衡能启动就是保护阈值问题。5.2 均衡电流实测值与理论值偏差分析均衡启动后用电流钳表量均衡电阻上的电流发现实测值比理论计算值小不少。理论算64mA实测只有45mA。偏差来源有几个第一内部开关导通电阻。前面提过MP2642GR-Z内部开关有几欧姆导通电阻和外部电阻串联实际电流比按外部电阻算的小。查数据手册确认导通电阻典型值重新计算。第二电芯电压在均衡时下降。均衡电流流过电芯内阻产生压降电芯端电压比开路电压低。如果电芯内阻50mΩ均衡电流64mA压降3.2mV影响不大。但如果电芯老化内阻大压降就明显了。第三PCB走线电阻。均衡回路里的PCB走线、过孔、连接器都有电阻加起来可能几十毫欧到几百毫欧。对于51Ω的均衡电阻来说几百毫欧可以忽略但如果均衡电阻选得很小比如10Ω走线电阻就不能忽略了。第四电阻温漂。均衡电阻发热后阻值变化金属膜电阻温度系数50ppm/℃温升50℃阻值变化0.25%影响很小。但如果是厚膜电阻温度系数可能几百ppm影响就大了。排查方法用四线法测均衡电阻实际阻值排除电阻本身误差。用示波器看均衡开关两端的电压波形算出开关导通电阻。把外部电阻换大一点比如100Ω看电流是否接近理论值如果接近了说明之前是内部电阻影响大。5.3 采样噪声导致均衡频繁开关的解决调试中发现均衡开关频繁动作示波器看均衡使能引脚电平在几十毫秒内反复跳变。这是采样噪声导致电压在阈值附近波动状态机反复切换。解决分几步第一步加大软件滤波窗口。原来4次平均改成16次平均噪声幅度降到四分之一。但响应变慢从100ms变成400ms可以接受。第二步加大滞回宽度。触发阈值3.50V释放阈值从3.45V改成3.40V滞回100mV。这样电压波动50mV也不会导致状态切换。第三步均衡开关动作后延时采样。均衡开启瞬间电流突变采样线耦合噪声。在均衡状态改变后延时5ms再采样避开尖峰。第四步硬件上在采样线加磁珠。100MHz的磁珠串在采样线上抑制高频噪声。注意磁珠的直流电阻要小否则影响采样精度。选直流电阻小于1Ω的磁珠。第五步检查地线布局。采样地和功率地要分开走单点连接。如果采样地和功率地混在一起均衡电流在地线上的压降会串到采样回路。我一般用星型接地所有采样地线汇到芯片AGND引脚再单点连到功率地。这几步做完均衡开关动作变得干净利落不再频繁跳变。5.4 长时间均衡后电芯压差收敛效果验证均衡效果最终要看电芯压差能不能收敛。测试方法把两节电芯故意放到不同电压比如一节3.60V一节3.40V压差200mV。开启均衡记录电压变化。实测数据初始压差200mV均衡电流64mA电芯容量20Ah。理论上均衡1%容量需要 20Ah × 1% / 64mA ≈ 3.1小时。压差200mV对应容量差大概2%磷酸铁锂平台区电压变化小需要6小时左右均衡完。实际测下来前2小时压差从200mV降到80mV后4小时从80mV降到20mV最后稳定在10mV以内。收敛曲线是指数型的前期快后期慢符合RC放电规律。验证时要注意均衡过程中电芯电压会整体下降因为能量被消耗了。如果系统在充电充电电流会补充能量电压下降不明显。如果静置均衡电压会持续下降降到释放阈值就停了。所以静置均衡适合压差小的情况压差大还是充电时均衡效率高。还有一个现象均衡停止后电芯电压会反弹。因为均衡时电芯内部有浓度极化停止后极化消失电压回升。回升幅度和均衡电流、电芯特性有关一般几毫伏到几十毫伏。所以判断均衡结束时要等电压稳定后再看不要刚停就判断。6. 两串均衡方案的成本控制与可靠性加固经验6.1 元器件选型的性价比权衡两串BMS的成本大头在MOSFET、采样电阻、主控和均衡前端。MP2642GR-Z集成均衡开关省掉了分立MOSFET和驱动这是成本优势。但MP2642GR-Z本身价格比普通运放方案高所以适合均衡电流不大、对集成度要求高的场景。均衡电阻选普通厚膜电阻还是金属膜电阻厚膜便宜但温度系数大长期稳定性差。金属膜贵一点但温度系数小精度高。对于均衡电阻这种功率型应用厚膜电阻的功率密度更高2512封装能做到1W金属膜同样封装可能只有0.5W。所以均衡电阻我倾向用厚膜但选温度系数100ppm以下的型号。采样分压电阻必须用金属膜0.1%精度25ppm温度系数。这个钱不能省采样精度直接决定均衡效果和保护可靠性。我用过0.5%的电阻校准后精度也能做到±10mV但温度变化后漂移大夏天冬天表现不一致。换成0.1%后全温度范围精度稳定在±5mV以内。STM32F103RC 的选型考虑256KB Flash对于两串BMS绰绰有余48KB RAM也够用。如果成本压力大可以降级到F103RB128KB Flash或F103C864KB Flash但要注意引脚数和外设是否够用。F103C8是48脚对于两串系统可能刚好够但如果有CAN通信和多个NTC引脚就紧张了。F103RC是64脚余量充足。6.2 PCB布局中容易被忽略的细节PCB布局对均衡电路的性能影响很大几个关键点均衡电阻的放置位置要远离采样走线和NTC。均衡电阻发热量大热辐射和热传导会影响旁边的温度传感器读数。我一般把均衡电阻放在板子边缘NTC放在电芯附近而不是板子上用引线接过来这样NTC测的是电芯温度而不是板子温度。大电流走线和采样走线要垂直交叉不要平行走。平行走线有容性耦合大电流走线上的噪声会串到采样线。垂直交叉时耦合最小。如果必须平行中间加地线隔离。过孔要足够。均衡电流64mA一个0.3mm孔径的过孔载流能力约0.5A看起来够用。但过孔有电阻每个过孔约0.5mΩ如果均衡回路经过多个过孔累积电阻就不可忽略了。均衡回路尽量少用过孔必须用时多打几个并联。丝印标注要清晰。均衡电阻旁边标上阻值和功率采样点标上电芯编号调试时不用翻原理图。我吃过亏调试时把电芯1和电芯2的采样线搞反了均衡逻辑完全错乱查了半天才发现是丝印不清晰导致的接线错误。6.3 电磁兼容性加固与现场干扰应对储能和备用电源现场电磁环境复杂充电器、逆变器、继电器都在旁边工作干扰不可避免。均衡电路虽然电流不大但采样线是敏感节点容易受干扰。第一道防线是RC滤波前面提过100Ω0.1μF。第二道防线是磁珠采样线串100MHz磁珠。第三道防线是屏蔽如果采样线较长超过10cm用屏蔽线屏蔽层单端接地。软件上再加一道防线电压变化率限制。正常电芯电压变化率不会超过1V/s如果ADC读到电压在1ms内变化超过10mV判定为干扰丢弃这次采样用上次值。这个逻辑简单但有效能滤掉大部分尖峰干扰。现场调试时如果发现均衡误动作先查干扰源。用示波器看采样线波形如果看到周期性尖峰和某个设备开关频率一致那就是那个设备干扰。解决办法采样线远离干扰源或者加共模扼流圈。共模扼流圈对共模干扰抑制效果好选100μH以上的直流电阻小于1Ω。6.4 长期运行中的均衡电阻老化与维护均衡电阻长期工作在高温下阻值会慢慢漂移。厚膜电阻在额定功率下工作1000小时阻值变化可能达到1%到2%。阻值变大均衡电流变小均衡效果变差。如果阻值变小均衡电流变大发热更严重可能进入恶性循环。定期维护建议每半年测一次均衡电流和初始值对比。如果偏差超过20%检查均衡电阻阻值。如果阻值漂移超过5%建议更换。更换时选同型号同批次电阻保证一致性。还有一个老化点是MP2642GR-Z的内部均衡开关。开关管导通电阻会随使用时间增加导致均衡电流下降。如果发现均衡电流下降但外部电阻正常可能是芯片内部开关老化。这种情况只能换芯片。STM32F103RC的Flash数据保持能力也要关注。故障记录和校准系数存在Flash里Flash在高温下数据保持时间会缩短。工业级F103RC在85℃下数据保持10年如果产品工作在更高温度要定期刷新Flash数据或者改用外部EEPROM存储关键参数。7. 这套两串方案还能怎么扩展两串均衡方案跑通后扩展方向有几个。一是增加串数MP2642GR-Z如果支持级联可以扩展到三串、四串软件上把状态机从两节扩展到多节均衡策略从两两比较改成找最高电压和最低电压。二是增加通信接口STM32F103RC有CAN和UART可以接上位机或整车控制器把电压、电流、温度、SOC、均衡状态传出去。三是增加SOC估算两串系统用开路电压法加安时积分F103RC的Flash存SOC-OCV曲线运行时查表加积分精度能做到5%以内。我在实际项目里还加了一个小功能均衡次数统计。每次均衡状态从IDLE进入BALANCING计数器加一存到Flash。运行一年后看这个计数能判断电芯一致性变化趋势。如果均衡次数明显增加说明电芯差异在扩大提醒用户检查电芯或准备更换。这个功能代码量很小但实用价值高推荐加上。最后分享一个调试技巧用STM32的DAC输出均衡状态的模拟电压接示波器看波形。均衡开启时DAC输出高关闭时输出低这样均衡时序一目了然。比用串口打印方便不占用CPU还能看实时波形。DAC输出接一个RC滤波把PWM方波变成模拟电压示波器上就能看到均衡占空比的变化。这个技巧在调试PWM占空比控制时特别好用。

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

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

免费获取报价 →
↑