1. 从两个串联电芯的电压差说起:为什么被动均衡在储能场景下依然能打
储能和备用电源系统里,两串电芯的电压不一致是个绕不开的问题。你拿万用表一测,可能一节是3.62V,另一节是3.48V,差了140mV。别小看这140mV,在串联结构里,充电时电压高的那节先到截止点,放电时电压低的那节先到保护点,整组电池的可用容量就被最弱的那节卡死了。时间一长,容量差越拉越大,整组电池提前报废。
解决这个问题的思路分两派:被动均衡和主动均衡。主动均衡用变压器或者电容把电量从高电压电芯搬到低电压电芯,效率高,但电路复杂、成本高、占板面积大。被动均衡说白了就是给电压高的那节电芯并一个电阻,让它放电放到跟低电压电芯差不多,能量以热的形式消耗掉。听起来很浪费,但在小容量、低成本、空间受限的储能和备用电源场景里,被动均衡反而是最务实的选择。
我这次做的方案,核心器件就两颗:一颗是MP2642GR-Z,另一颗是PIC18F46K20。MP2642GR-Z是一颗带均衡功能的电池管理前端,内部集成了均衡MOSFET和驱动电路,能直接对两串电芯做被动均衡。PIC18F46K20是一颗8位单片机,负责采集电压、判断均衡条件、控制均衡开关、做状态指示和通信。两颗芯片配合起来,整个均衡系统就搭起来了。
这篇文章面向的是做储能BMS、备用电源管理、便携设备电池包的硬件工程师和嵌入式开发者。我会把选型逻辑、电路设计、均衡策略、固件实现、实测数据、踩过的坑全部摊开讲。不管你是刚接触电池管理的新手,还是想找一个低成本两串均衡方案的老人,都能从里面找到能直接用的东西。
注意:本文讨论的是两串电芯的被动均衡方案,适用于容量在几安时到几十安时、对成本敏感、对均衡电流要求不高的场景。如果你的系统是电动汽车动力电池或者大容量储能柜,需要的是主动均衡或者更高阶的BMS架构,本文的方案只能作为入门参考。
2. MP2642GR-Z 到底能干什么:芯片能力边界与外围电路设计
2.1 芯片内部集成了什么,省掉了哪些外围器件
MP2642GR-Z这颗芯片的定位很明确:两串锂电池的电压采集和被动均衡。它内部集成了分压电阻网络、多路复用开关、14位ADC、均衡MOSFET和均衡电阻驱动。你不需要在外面再搭分压电路,也不需要单独做均衡开关管,芯片直接就能干活。
具体来说,它支持两串电芯的电压采集,每节电芯的电压通过内部多路开关轮流送到ADC,采样精度在±10mV以内。均衡部分,每节电芯对应一个内部均衡MOSFET,你只需要在对应的引脚上接一个均衡电阻到地,芯片内部逻辑控制MOSFET导通,电芯通过电阻放电。均衡电流的大小由外部电阻决定,公式很简单:I = V_cell / R_balance。比如你接一个33Ω的电阻,电芯电压3.6V,均衡电流就是109mA。
这颗芯片省掉的外围器件包括:分压电阻网络、均衡MOSFET、均衡驱动电路、多路复用开关。对于两串应用来说,外围只需要几个滤波电容、均衡电阻、去耦电容,再加一个I2C上拉电阻,电路非常干净。
2.2 均衡电阻怎么选:功率、温升与均衡电流的三角关系
均衡电阻的选型是这套方案里最需要动脑子地方。选大了,均衡电流小,均衡时间长;选小了,均衡电流大,电阻功率和温升上去了,PCB布局也要跟着调整。
先算功率。假设你选33Ω的电阻,电芯最高电压4.2V,均衡电流就是4.2/33=127mA,电阻上的功耗是4.2×0.127=0.53W。这时候你不能用0603或者0805的电阻,至少要用1206封装,最好用两个电阻并联或者串联来分摊功率。我实际用的是两个68Ω的1206电阻并联,等效34Ω,每个电阻承担0.26W,温升控制在20℃以内,摸上去只是温热。
再算均衡时间。假设两节电芯容量是2000mAh,电压差100mV,需要转移的电量大约是2000mAh×100mV/3.7V≈54mAh。用127mA的均衡电流,理论时间54/127≈0.43小时,也就是26分钟。实际因为电芯电压在均衡过程中会变化,均衡电流也会跟着变,时间会更长一些,大概40分钟到1小时。这个速度对于备用电源系统来说完全可以接受,因为备用电源大部分时间都在浮充状态,有的是时间慢慢均衡。
提示:均衡电阻的功率降额至少要做到50%。也就是说,算出来0.53W,你要选1W以上的电阻,或者用多个电阻分摊。电阻长期工作在高温下,阻值会漂移,寿命会缩短,严重的话还会导致均衡电流不一致。
2.3 I2C通信与地址配置:怎么和主控对接
MP2642GR-Z通过I2C接口和主控通信,支持标准模式(100kHz)和快速模式(400kHz)。芯片的I2C地址可以通过ADDR引脚配置,接GND、VCC或者悬空对应不同的地址。在两串应用里,通常只有一颗MP2642GR-Z,地址配置比较随意,我一般把ADDR接地,地址就是0x0B(7位地址)。
I2C总线上需要接上拉电阻,典型值是4.7kΩ到10kΩ。上拉电阻接到3.3V还是5V,取决于你的主控IO电平。PIC18F46K20的IO是5V tolerant的,但为了和MP2642GR-Z的3.3V逻辑匹配,我建议I2C上拉接到3.3V,这样电平匹配最稳妥。
通信线路上,SDA和SCL要尽量短,如果走线超过10cm,建议加一些滤波电容,比如100pF到地,防止信号振铃。另外,MP2642GR-Z的ALERT引脚可以配置成中断输出,当电压采集完成或者出现过压欠压时,拉低通知主控。这个引脚我一般会接到PIC18F46K20的外部中断引脚上,这样主控不用一直轮询I2C,效率更高。
2.4 电压采集精度的影响因素与校准方法
MP2642GR-Z的ADC精度是14位,理论分辨率很高,但实际精度受几个因素影响:内部基准电压的温漂、分压电阻的匹配度、PCB布局带来的噪声、电芯连接线的压降。
内部基准电压的典型温漂是50ppm/℃,在0℃到50℃范围内,基准变化大概0.25%,对应到4.2V量程就是10mV左右。分压电阻的匹配度芯片出厂时已经修调过,但PCB上的走线电阻和过孔电阻会引入额外误差。电芯连接线的压降更隐蔽,如果连接线细或者接插件接触电阻大,采集到的电压会比实际电芯电压低。
校准方法很简单:在已知电压下读ADC值,算一个比例系数。我一般用两个点校准,比如3.0V和4.2V,分别读出ADC原始值,然后算斜率和截距。校准后的精度可以做到±5mV以内,对于被动均衡来说完全够用。
3. PIC18F46K20 的固件架构:从电压采集到均衡决策的完整链路
3.1 主循环与定时器节拍:为什么不用RTOS
PIC18F46K20是一颗8位单片机,资源有限,跑RTOS有点勉强。我的做法是用一个1ms的定时器节拍,在主循环里做状态机调度。定时器用Timer0,配置成1ms中断,中断里只做一件事:给各个软件定时器计数器减一。主循环里检查计数器是否到零,到了就执行对应的任务。
任务分几个:电压采集任务每100ms执行一次,通过I2C读MP2642GR-Z的电压寄存器;均衡决策任务每1s执行一次,根据电压差判断是否需要均衡;状态指示任务每500ms执行一次,控制LED闪烁;通信任务处理上位机的查询请求。这几个任务的优先级通过执行顺序来保证,电压采集最优先,通信最低。
不用RTOS的好处是代码简单、RAM占用小、没有任务切换开销。坏处是如果某个任务执行时间过长,会影响其他任务的实时性。所以我在写I2C读取函数时加了超时机制,如果MP2642GR-Z没有响应,最多等10ms就退出,不会卡死主循环。
3.2 I2C读取MP2642GR-Z电压寄存器的时序细节
MP2642GR-Z的电压寄存器是16位的,高字节在前,低字节在后。读取流程是:发送起始条件,发送设备地址+写标志,发送寄存器地址,发送重复起始条件,发送设备地址+读标志,读取高字节,发送ACK,读取低字节,发送NACK,发送停止条件。
PIC18F46K20的MSSP模块支持I2C主模式,但需要手动处理起始、重复起始、停止、ACK/NACK。我封装了一个函数MP2642_ReadVoltage(uint8_t cell, uint16_t *voltage),内部处理完整的时序。关键点是:在发送重复起始条件之前,要确保SCL被释放为高电平;在读取最后一个字节后,要发送NACK而不是ACK,然后发送停止条件。
实际调试时遇到过一个坑:MP2642GR-Z在电压转换期间不响应I2C,如果正好在转换窗口内发起读取,会收到NACK。解决办法是读取之前先查状态寄存器的转换完成标志,或者干脆在两次读取之间留足够的间隔。我选择后者,100ms的采集周期远大于MP2642GR-Z的转换时间(典型值10ms),所以不会撞上。
3.3 均衡开启与关闭的阈值设计:迟滞比较的必要性
均衡决策的核心是阈值比较。最简单的逻辑是:如果两节电芯电压差大于50mV,开启高电压电芯的均衡;如果电压差小于10mV,关闭均衡。但这样会有一个问题:当电压差在阈值附近波动时,均衡会频繁开启关闭,导致MOSFET反复开关,增加损耗,也可能引入噪声。
解决办法是加迟滞。开启阈值设50mV,关闭阈值设10mV,中间40mV的迟滞带。电压差超过50mV才开启,开启后即使电压差降到50mV以下也不关闭,直到降到10mV以下才关闭。这样均衡状态稳定,不会频繁切换。
迟滞带的大小要根据实际系统来调。如果电芯容量小,均衡电流相对较大,电压差下降快,迟滞带可以小一些,比如30mV。如果电芯容量大,均衡电流小,电压差下降慢,迟滞带可以大一些,比如50mV。我一般先用40mV的迟滞带,实测后再调整。
3.4 状态机设计:空闲、采集、决策、均衡、故障五个状态
固件的核心是一个状态机,五个状态:空闲、采集、决策、均衡、故障。上电后进入空闲状态,等待定时器触发。采集状态读取两节电芯电压,做校准计算,存入全局变量。决策状态根据电压差和迟滞逻辑判断是否需要均衡,以及均衡哪一节。均衡状态控制MP2642GR-Z的均衡寄存器,开启对应的均衡MOSFET。故障状态处理过压、欠压、I2C通信失败等异常。
状态转换条件很清晰:空闲到采集是定时触发,采集到决策是采集完成,决策到均衡是决策结果为需要均衡,决策到空闲是决策结果为不需要均衡,任何状态到故障是检测到异常,故障到空闲是异常清除。每个状态执行时间都很短,最长的是采集状态,I2C读取两节电压大概2ms,不会阻塞其他任务。
注意:故障状态要设计成可恢复的。比如I2C通信失败,不要直接锁死,而是重试三次,三次都失败才进入故障状态。进入故障状态后,每隔10s尝试恢复一次,恢复了就回到空闲状态。这样系统鲁棒性更好。
4. 均衡策略的实战调优:从固定阈值到自适应均衡
4.1 固定阈值均衡的局限性:为什么大容量电芯吃亏
固定阈值均衡的逻辑是:电压差超过50mV就均衡,低于10mV就停止。这个逻辑在小容量电芯上工作得很好,因为均衡电流相对容量来说比较大,电压差下降快。但在大容量电芯上,问题就出来了。
假设电芯容量是10Ah,均衡电流还是127mA,电压差100mV,需要转移的电量是10Ah×100mV/3.7V≈270mAh,均衡时间270/127≈2.1小时。这还只是理论值,实际因为电压差减小后均衡电流也减小,时间会更长,可能要4小时以上。如果系统每天只有2小时的充电窗口,均衡根本完不成,电压差会一直存在。
更麻烦的是,固定阈值不考虑电芯的实际状态。如果两节电芯都接近满电,电压差50mV可能只是充电末期的正常差异,不需要均衡。如果两节电芯都在中间电压段,电压差50mV可能意味着容量差异很大,需要尽快均衡。固定阈值一刀切,没法区分这些情况。
4.2 自适应均衡:根据电压区间和温度动态调整阈值
自适应均衡的思路是:根据电芯电压所处的区间和当前温度,动态调整均衡开启阈值和迟滞带。具体来说,把电芯电压分成三个区间:低压区(3.0V到3.4V)、中压区(3.4V到3.9V)、高压区(3.9V到4.2V)。
低压区电芯电压低,均衡电流小,而且低压区电压变化快,容易误判,所以均衡阈值设大一些,比如80mV。中压区是电芯的主要工作区间,电压平台平坦,电压差能真实反映容量差异,均衡阈值设小一些,比如30mV。高压区接近满电,电压变化快,均衡阈值设中等,比如50mV。
温度也要考虑。低温下电芯内阻大,电压差可能是内阻差异导致的,不是容量差异,这时候均衡阈值要设大一些,避免误均衡。高温下电芯活性高,电压差更能反映容量差异,均衡阈值可以设小一些。我用的温度补偿系数是:温度每降低10℃,均衡阈值增加10mV;温度每升高10℃,均衡阈值减小5mV。
4.3 均衡电流的软启动:避免瞬间大电流拉低电芯电压
均衡MOSFET开启的瞬间,均衡电阻上的电流从零跳变到V_cell/R_balance,这个跳变会在电芯内阻上产生一个瞬间压降,导致采集到的电压突然降低。如果这个压降被误判为电压差减小,均衡逻辑可能会提前关闭均衡,然后电压恢复后又开启,形成振荡。
解决办法是软启动。MP2642GR-Z的均衡MOSFET是内部驱动的,没法直接控制栅极电压。但可以通过PWM控制均衡开启的占空比,从0%逐渐增加到100%,等效实现软启动。PIC18F46K20的PWM模块可以输出1kHz到10kHz的PWM波,我用2kHz的PWM,占空比从0%到100%用100ms过渡,均衡电流平滑上升,电芯电压不会突变。
软启动还有一个好处:减少对I2C通信的干扰。均衡电流跳变会在电源线上产生噪声,可能影响I2C信号质量。软启动让电流变化平缓,噪声小很多。
4.4 均衡过程中的电压采集:如何避免均衡电流干扰测量
均衡开启后,电芯电压会因为均衡电流在内阻上的压降而偏低。如果这时候采集电压,读到的值比实际开路电压低,会影响均衡决策。比如实际电压差是60mV,均衡开启后因为内阻压降,采集到的电压差可能只有40mV,低于关闭阈值,均衡就提前关闭了。
解决办法是分时采集:均衡开启期间不采集电压,或者采集电压时暂时关闭均衡。我用的方法是:均衡开启后,每隔10s关闭均衡100ms,在关闭期间采集电压,采集完再重新开启均衡。这样采集到的电压是接近开路电压的,均衡决策准确。
100ms的关闭时间足够MP2642GR-Z完成一次电压转换和I2C读取。关闭期间电芯电压会回升,回升幅度取决于电芯的极化特性,一般几毫伏到十几毫伏。这个回升不影响均衡决策,因为均衡决策看的是电压差,两节电芯都会回升,差值变化不大。
5. 实测数据与踩坑记录:从实验室到实际系统的差距
5.1 实验室条件下的均衡效果:从120mV到15mV用了多久
实验室测试用的是两节18650电芯,标称容量2000mAh,初始电压分别是3.85V和3.73V,电压差120mV。环境温度25℃,均衡电阻34Ω,均衡电流约110mA。开启均衡后,每隔10分钟记录一次电压。
前30分钟电压差下降很快,从120mV降到60mV,因为高电压电芯放电时电压下降快,低电压电芯电压基本不变。30分钟到60分钟,电压差从60mV降到30mV,下降速度变慢,因为高电压电芯进入电压平台区,放电时电压下降慢。60分钟到90分钟,电压差从30mV降到15mV,进入迟滞带,均衡继续。90分钟时电压差降到10mV以下,均衡关闭。总用时约95分钟,比理论计算的40分钟长了一倍多,主要原因是电压平台区电压下降慢。
这个结果说明:被动均衡的时间不能按理论值估算,要留足够的余量。如果你的系统每天只有2小时充电窗口,均衡电流要选大一些,或者电芯容量要选小一些,否则均衡完不成。
5.2 实际系统里的干扰问题:I2C通信失败与电源噪声
实验室测试很顺利,但装到实际系统里就出问题了。实际系统的电源是开关电源,纹波比较大,I2C通信经常失败,MP2642GR-Z偶尔返回错误数据。用示波器看I2C波形,发现SCL和SDA上有明显的毛刺,幅度大概500mV,足以导致误判。
解决办法分三步:第一步,在I2C线上加RC滤波,SDA和SCL各串一个100Ω电阻,对地接100pF电容,截止频率约16MHz,对400kHz的I2C信号影响很小,但能滤掉高频毛刺。第二步,在MP2642GR-Z的电源引脚上加一个10μF的陶瓷电容和一个1μF的陶瓷电容,靠近芯片放置,滤掉电源纹波。第三步,在固件里加I2C重试机制,每次读取失败后重试三次,三次都失败才报错。
这三步做完,I2C通信失败率从原来的5%降到了0.1%以下,系统稳定运行。
5.3 均衡电阻发热导致采集偏差:布局与散热经验
均衡电阻发热是另一个坑。我一开始把均衡电阻放在MP2642GR-Z旁边,想着走线短。结果均衡开启后,电阻温度升到80℃以上,热量传导到芯片,芯片内部基准电压漂移,采集到的电压偏高,均衡决策出错。
后来把均衡电阻移到PCB边缘,远离MP2642GR-Z,并且加大铜箔面积帮助散热。电阻温度降到50℃左右,芯片温度降到40℃以下,采集偏差从20mV降到5mV以内。另外,均衡电阻的走线要尽量宽,减少走线电阻带来的压降。我用的是1mm宽的走线,1oz铜厚,1A电流下压降约0.5mV,可以忽略。
提示:均衡电阻的布局要远离温度敏感器件,比如晶振、基准电压源、ADC。如果PCB空间紧张,可以把均衡电阻放在背面,通过过孔连接,利用PCB本身散热。
5.4 电芯连接线电阻的影响:四线制采集的必要性
电芯连接线的电阻会直接影响电压采集精度。假设连接线电阻是10mΩ,均衡电流100mA,线上的压降就是1mV。听起来不大,但如果连接线长、接插件接触电阻大,总电阻可能到50mΩ,压降就是5mV。两节电芯的连接线电阻不一致,压降差就是电压采集误差。
解决办法是四线制采集:电压采集线和电流线分开。MP2642GR-Z的电压采集引脚直接接到电芯正负极,不经过任何电流路径。均衡电流走单独的线,从电芯正负极接到均衡电阻。这样采集线上没有电流,压降为零,采集精度不受影响。
四线制采集在PCB上要多走两根线,但精度提升很明显。我实测过,两线制采集的电压误差在10mV到20mV,四线制采集的误差在2mV以内。对于被动均衡来说,2mV的精度完全够用。
6. 从两串到多串:这套方案的扩展思路与边界
6.1 多颗MP2642GR-Z级联的可行性分析
两串方案跑通后,自然会想扩展到四串、六串。MP2642GR-Z本身只支持两串,但可以多颗级联。每颗MP2642GR-Z负责两串电芯,通过I2C总线连接到同一个主控。主控轮流读取每颗芯片的电压,做均衡决策。
级联的关键问题是I2C地址冲突。MP2642GR-Z的I2C地址通过ADDR引脚配置,只有几个可选地址。如果级联四颗,需要四个不同的地址。MP2642GR-Z支持四个地址,刚好够四颗芯片用。如果级联更多,就需要I2C多路复用器,比如PCA9548,把I2C总线分成多路,每路接一颗MP2642GR-Z。
级联的另一个问题是均衡电流的电源路径。每颗MP2642GR-Z的均衡电阻是独立的,均衡电流从对应的电芯流出,不经过其他电芯。所以级联不会导致均衡电流互相干扰。但PCB布局要注意,每颗芯片的电源去耦要独立,避免通过电源线耦合噪声。
6.2 主控资源评估:PIC18F46K20能管几颗芯片
PIC18F46K20的资源:64KB Flash,3.8KB RAM,1KB EEPROM,36个IO,2个MSSP模块(一个做I2C,一个做SPI或者第二个I2C),5个定时器,13个ADC通道。管理四颗MP2642GR-Z,每颗芯片需要读取两个电压寄存器,总共8个电压值,RAM占用很小。I2C通信速率400kHz,读取一颗芯片的电压大概1ms,四颗芯片轮流读取4ms,100ms的采集周期绰绰有余。
如果管理八颗芯片,I2C读取时间8ms,还在可接受范围内。但要注意I2C总线的电容负载,每颗芯片的SDA和SCL引脚有10pF左右的电容,八颗芯片就是80pF,加上走线电容,可能超过I2C规范的400pF上限。这时候需要降低I2C速率到100kHz,或者用I2C多路复用器把总线分段。
6.3 什么时候该放弃被动均衡:主动均衡的适用场景
被动均衡的边界很清晰:均衡电流小、均衡时间长、能量以热的形式浪费。如果你的系统满足以下条件,被动均衡是合适的:电芯容量小于20Ah,均衡电流需求小于200mA,系统有足够的静置时间做均衡,对成本敏感,PCB空间受限。
如果电芯容量大于50Ah,或者系统要求快速均衡(比如电动汽车快充后需要立即均衡),或者能量效率要求高(比如太阳能储能系统),被动均衡就不合适了。这时候要考虑主动均衡,用变压器或者电容把能量从高电压电芯搬到低电压电芯。主动均衡的电路复杂得多,成本也高得多,但均衡电流可以做到几安培,效率可以做到90%以上。
我个人的经验是:两串到四串、容量20Ah以下、成本敏感的备用电源系统,被动均衡是最优解。超过这个范围,就要认真评估主动均衡方案了。
6.4 固件升级与参数存储:EEPROM的合理使用
PIC18F46K20有1KB的EEPROM,用来存储均衡参数很合适。我把均衡阈值、迟滞带、温度补偿系数、校准系数都存在EEPROM里,上电时读出来。这样如果现场需要调整参数,不用重新烧录固件,通过通信接口修改EEPROM就行。
EEPROM的写入次数有限,典型值10万次。均衡参数不会频繁修改,所以寿命没问题。但要注意,EEPROM写入需要时间,典型值5ms,写入期间CPU要等待。我一般在系统空闲时写入,不阻塞关键任务。另外,EEPROM写入前要先擦除,擦除和写入的电压要求比较严格,电源波动可能导致写入失败。我在写入后回读校验,校验失败就重写,最多重试三次。
校准系数我建议存两份,一份在EEPROM,一份在Flash的固定地址。上电时先读EEPROM,如果EEPROM数据无效(比如全0xFF),就从Flash读默认值。这样即使EEPROM损坏,系统也能用默认参数运行。
7. 几个容易被忽略的细节:从PCB布局到固件容错
7.1 PCB布局的优先级:模拟部分和数字部分怎么分
MP2642GR-Z的电压采集引脚是模拟输入,对噪声敏感。PIC18F46K20的I2C和PWM是数字信号,噪声大。PCB布局时,模拟部分和数字部分要分开,地平面要单点连接,避免数字噪声通过地平面耦合到模拟部分。
具体做法:MP2642GR-Z放在PCB的模拟区,靠近电芯连接器。PIC18F46K20放在数字区,靠近通信接口。两个区域的地平面用0Ω电阻或者磁珠连接,单点接地。I2C走线从数字区到模拟区,要尽量短,并且包地处理,减少辐射。
均衡电阻放在PCB边缘,远离模拟区。均衡电流的走线要宽,减少压降和发热。电芯连接器的引脚要粗,接触电阻要小。如果电芯连接线较长,建议用屏蔽线,屏蔽层接模拟地。
7.2 固件看门狗与异常恢复:怎么防止程序跑飞
PIC18F46K20有内置看门狗定时器,我把它使能了,超时时间设2s。主循环里每隔1s喂一次狗,如果程序跑飞,2s后看门狗复位,系统重新启动。看门狗复位后,固件要能恢复到正常状态,不能因为复位导致均衡状态丢失。
我的做法是:均衡状态存在RAM里,复位后重新采集电压,重新决策。如果复位前正在均衡,复位后电压差还在,决策逻辑会重新开启均衡。如果复位前均衡已经完成,复位后电压差很小,决策逻辑不会开启均衡。这样复位对系统的影响很小,用户甚至察觉不到。
另外,I2C通信失败、电压采集异常、温度过高等异常都要有对应的处理逻辑。我的原则是:异常分级处理,轻微异常重试,严重异常进入故障状态,故障状态可恢复。不要一有异常就锁死,也不要无视异常继续运行。
7.3 均衡使能的条件判断:温度、电压、电流三重保护
均衡开启不是无条件的,要满足几个条件:电芯电压在均衡允许范围内(比如3.0V到4.2V),温度在允许范围内(比如0℃到45℃),没有充电或放电大电流(比如电流小于0.1C)。这三个条件任何一个不满足,均衡都要关闭。
温度保护很重要。低温下电芯内阻大,均衡电流在内阻上的压降大,采集到的电压偏低,可能导致误判。高温下电芯活性高,均衡电流过大可能导致热失控。我用的温度传感器是NTC热敏电阻,接到PIC18F46K20的ADC引脚,固件里做查表或者公式计算。
电流保护也重要。充电或放电大电流时,电芯电压会因为内阻压降而偏离开路电压,这时候均衡决策不准确。我一般等电流小于0.1C时才开启均衡。电流检测用霍尔传感器或者采样电阻,输出接到ADC。
7.4 通信协议设计:上位机怎么读取均衡状态
上位机需要读取均衡状态、电压、温度、故障信息。我设计了一个简单的Modbus RTU协议,PIC18F46K20做从机,上位机做主机。寄存器地址分配:0x0000到0x0001是第一节电芯电压,0x0002到0x0003是第二节电芯电压,0x0004是温度,0x0005是均衡状态,0x0006是故障码。
Modbus RTU的帧格式是:地址+功能码+数据+CRC。PIC18F46K20的UART模块支持异步串行通信,波特率9600bps,8位数据,无校验,1位停止位。固件里实现Modbus从机协议,解析上位机的请求帧,组装响应帧。CRC校验用查表法,速度快,占用RAM小。
通信接口我一般用RS485,抗干扰能力强,传输距离远。RS485收发器用MAX485或者类似芯片,PIC18F46K20的UART引脚接到收发器,收发器的A和B接到总线。总线上要接终端电阻,120Ω,减少反射。
8. 这套方案的成本与替代选型:什么情况下该换芯片
8.1 BOM成本拆解:MP2642GR-Z方案的实际花费
MP2642GR-Z单颗价格在1.5美元左右,PIC18F46K20在1.2美元左右,加上均衡电阻、电容、连接器、PCB,整个两串均衡系统的BOM成本大概在5美元以内。这个成本在备用电源和储能系统里是很有竞争力的。
如果换成主动均衡方案,变压器或者电容阵列的成本就要3到5美元,加上驱动电路和控制芯片,总成本可能到10美元以上。对于成本敏感的应用,被动均衡的优势很明显。
当然,成本不只是BOM成本,还有开发成本、测试成本、认证成本。MP2642GR-Z方案电路简单,开发周期短,测试容易,认证也简单。主动均衡方案电路复杂,开发周期长,测试和认证都更麻烦。所以从总成本来看,被动均衡方案的优势更大。
8.2 替代芯片对比:TI、ADI、国产方案的差异
MP2642GR-Z不是唯一的选择。TI的BQ76920、ADI的LTC6804、国产的SH367309都是类似的电池管理前端。BQ76920支持3到5串,均衡电流可编程,精度高,但价格贵,大概3美元。LTC6804支持12串,精度极高,但价格更贵,而且需要隔离通信。SH367309支持3到6串,价格便宜,但精度和一致性稍差。
选型时要考虑几个因素:串数、精度、均衡电流、通信接口、价格、供货。两串应用,MP2642GR-Z的性价比最高。三到五串,BQ76920更合适。六串以上,LTC6804或者国产的多串方案更合适。
国产芯片最近几年进步很快,精度和一致性已经接近进口芯片,价格便宜30%到50%。如果项目对成本敏感,可以考虑国产方案。但要注意,国产芯片的供货稳定性和技术支持可能不如进口芯片,选型时要评估风险。
8.3 什么时候该用专用BMS芯片而不是分立方案
分立方案就是用运放、比较器、MOSFET搭均衡电路,成本低,但电路复杂,精度差,可靠性低。专用BMS芯片把采集、均衡、保护集成在一起,精度高,可靠性高,电路简单。对于两串以上的应用,专用BMS芯片的优势很明显。
分立方案适合什么场景?单串电池,或者对成本极度敏感、对精度要求不高的场景。比如玩具电池、手电筒电池,用分立方案就够了。两串以上的储能和备用电源系统,建议用专用BMS芯片,省心省力。
我个人的经验是:不要为了省几毛钱用分立方案,后面调试和维修的成本远高于省下的芯片钱。专用BMS芯片虽然贵一点,但开发快、问题少、可靠性高,总体成本更低。
8.4 未来升级路径:从被动均衡到主动均衡的平滑过渡
如果你现在的系统用被动均衡,未来可能升级到主动均衡,怎么设计才能平滑过渡?我的建议是:主控和通信接口按主动均衡的需求设计,均衡部分先做被动,后面再换主动。
具体来说,PIC18F46K20的IO和RAM要留足够的余量,主动均衡需要更多的PWM通道和ADC通道。通信接口要支持更高的速率,主动均衡的数据量更大。PCB布局要预留主动均衡器件的空间,比如变压器或者电容的位置。
这样升级时,只需要换均衡部分的电路和固件,主控和通信不用动。升级成本低,风险小。我做过一个项目,第一版用被动均衡,第二版升级到主动均衡,因为主控和通信接口预留了余量,升级只用了两周时间,非常顺利。
提示:升级路径要在项目初期就规划好,不要等到需要升级时才改设计。预留余量的成本很低,但后期改设计的成本很高。
9. 写在最后:几个让我印象深刻的调试瞬间
第一个瞬间是第一次看到均衡电流波形。用电流探头夹住均衡电阻的走线,看到电流从零跳变到110mA,然后慢慢下降,因为电芯电压在下降。那个波形让我直观理解了被动均衡的工作过程,也让我意识到软启动的必要性。
第二个瞬间是I2C通信失败时的排查。一开始以为是芯片坏了,换了一颗还是失败。后来用示波器看波形,发现是电源纹波导致的。加了滤波电容和RC滤波后,通信稳定了。这个坑让我明白,实际系统的电源质量比实验室差很多,设计时要留足够的余量。
第三个瞬间是均衡电阻发热导致采集偏差。一开始怎么调参数都不对,后来用手摸了一下均衡电阻,烫得缩手,才意识到是温度问题。把电阻移走、加大铜箔后,问题解决了。这个坑让我明白,热设计在电池管理系统里非常重要,不能忽视。
第四个瞬间是四线制采集的精度提升。改成四线制后,电压采集误差从15mV降到2mV,均衡决策准确多了。这个改进让我明白,有时候多走两根线,就能解决大问题。
这些经验都是踩坑踩出来的,书本上不会写,文档里也不会提。希望这篇文章能帮你少走一些弯路,顺利把两串均衡系统做出来。如果你在调试中遇到其他问题,欢迎一起交流。