1. 项目核心思路:为什么一套2S均衡方案值得认真搭
先说结论:这个项目解决的,是储能系统和备用电源系统里最基础也最麻烦的一个痛点。两节锂电池串联成一个电池组,标称电压7.4V或者8.4V,听起来很简单,但真正跑起来以后,你很快就会发现两个电池的电压不可能永远一样。电芯内阻有差异、温度分布不均匀、充放电循环次数不同,甚至出厂时的容量一致性再高,经过几十个循环之后也会慢慢拉开差距。这个差距一旦超过某个限度,就会出现充电时一节先到4.2V、另一节才4.1V的情况,保护板一检测到过压就切断整个充电回路,系统的可用容量直接打折。放电时同理,电压低的那一节先触发欠压保护,剩下的电量就白白浪费了。所以在这个项目里,我们的目标非常明确:用一个可靠的均衡电路,把两节串联电池的电压拉回同一个水平线,让整个电池组能多充进去、多放出来,延长实际使用寿命。
也许有人会问,只有两节电池,干嘛还要专门做均衡?买一个现成的2S保护板不是更省事?这个问题我在项目立项阶段也纠结过。市面上的2S保护板大部分只做保护,不做均衡,或者只做了极其简单的过压分流。而在真实的应用场景里,比如户外储能电源、UPS备用电池、太阳能控制器里的蓄电池组,两节电池的电量差会直接决定备用系统能不能撑到最后一刻。备用电源最重要的是什么?是关键时刻能把电放出来。如果因为一节电池拖后腿,整个系统在真正需要输出的时候提前掉电,这种问题一旦发生,代价远远超过多花几十块钱做一套正经的均衡方案。
我们选用的方案组合,主控端是Microchip的8位单片机PIC18F97J94,采样端是电池管理模拟前端MP2642GR-Z。MP2642GR-Z负责两节电池的电压采样和均衡通道控制,PIC18F97J94负责读取数据、跑均衡算法、做状态判断和系统通信。有人会疑惑,都做储能/备用电源了,为什么不用Arm Cortex-M系列,反而用一颗看起来很"老"的8位MCU?答案其实很实在:项目要做的是均衡控制,不是跑复杂操作系统,PIC18F97J94自带多路I2C、多路ADC、大量GPIO和足够的Flash/RAM,8位机跑起来功耗低、稳定、启动快,在电池系统这种对实时性和低功耗有要求的场景里反而比32位机更合适。而且这颗芯片在几块钱的成本区间里,资源和可靠性都够用,后续扩展也方便。MP2642GR-Z则可以把精确模拟采样这种脏活累活全包了,主控不需要直接面对高电压,安全和抗干扰都能上一个台阶。
这套方案适合谁来参考?如果你是做电池BMS的硬件工程师、做便携储能产品的嵌入式开发、或者正在搭UPS备用电源的电池管理部分,这篇文章里从芯片选型、硬件电路到均衡算法、调试排查的全流程,应该都能帮上忙。哪怕你只是对电池均衡感兴趣、想自己动手做个2S实验板,也可以照着这套思路做一版简化电路,然后把均衡逻辑移植到任意单片机上。
2. 核心器件拆解:MP2642GR-Z与PIC18F97J94如何分工与配合
2.1 MP2642GR-Z模拟前端:把脏活累活承包下来
MP2642GR-Z这颗芯片,按照系统里的角色来划分,属于典型的模拟前端AFE。它的核心任务有两件:一是把电池的模拟电压信号精确数字化,二是提供可控的均衡放电通路。
先说电压采样。两节串联电池的电压是相对的,上面那一节的负极接在下面那一节的正极上,如果用一个普通ADC去量,中间那一点的共模电压很高,不到位的硬件设计很容易把单片机的ADC引脚烧掉。MP2642GR-Z内部做的是差分采样加电平转换,它能直接把每一节电芯的正负极都引进去,然后依次把每一节电池的电压转换成一个对地的数字值,通过I2C总线输出。这样就避免了主控直接面对电池组中点的共模电压问题,安全性和精度都有了保障。
芯片的采样精度对这个项目来说非常关键。被动均衡的启动条件通常建立在电压判断上,如果两节电池之间只有20mV的差距,而采样误差都有±15mV,那均衡逻辑根本没法判断该不该启动。MP2642GR-Z的片上ADC分辨率可以做到12位以上,再加上内部基准源,对2S系统的单节电压分辨率能到1~2mV级别,这个精度对于均衡控制来讲是足够的。我个人习惯是在软件里再做一次滑动平均滤波,把连续8次采样的结果求平均,能用一点算力换来稳定度,很值得。
再说均衡通道。MP2642GR-Z的每一路电池通道都对应一个内部均衡开关MOS,当需要均衡时,主控通过I2C写寄存器打开对应通道的开关,把电池的正负极通过一个外部分流电阻接通,让电压高的一节电池以一个小电流放电,直到电压降到和另一节接近。这就是典型的被动均衡方案。有人可能会问,为什么不用主动均衡?主动均衡是拿电容或者电感把高能量转移到低电压电池里,效率高不浪费,但成本结构复杂、控制逻辑复杂,在2S这个规模下,被动均衡的性价比是碾压级的——电能本身是"浪费"在一些热量上,但换来的电路可靠性和成本优势非常明显,对于备用电源这种对效率没那么敏感、但要求长期稳定的场景非常合适。
2.2 PIC18F97J94主控:一颗8位机如何扛起整套系统
PIC18F97J94是Microchip的8位高性能系列,TQFP封装,引脚丰富。这颗芯片最吸引我的地方在于:它的外设资源非常全面,但功耗和上手难度又很友好,特别是对电池系统这种"常年待机、偶尔干活"的场景,优势很明显。
它自带多个I2C模块,其中一个专门用来跟MP2642GR-Z通信,互不干扰。有多个定时器,用来做均衡超时计时和采样周期调度。ADC模块在需要扩展温度采集或者系统电压监测时也非常好用。更难得的是,它有大量的EEPROM和Flash空间,方便存放电池校准参数和均衡历史记录。项目做到后面你会发现,能在掉电之后记住"上一次均衡到哪一步"是很有用的功能,这个需求在8位机上实现起来本来就很顺手。
选型时还考虑过另一个备选方案:把采样和均衡交给一颗带多路ADC的普通单片机,省掉MP2642GR-Z。但对比之后还是坚持了现在的方案。原因很简单,电池电压采样有共模干扰问题,普通ADC直接采会有精度和稳定性的隐患,而且如果后续项目要把2S扩展成3S、4S,模拟前端方案的扩展性远好于裸ADC方案。用一颗模拟前端芯片把整个前端的模拟世界隔离掉,主控代码写起来也干净很多。
2.3 两芯片的通信协议:I2C总线上的主从配合
MP2642GR-Z作为I2C从机,默认地址由芯片的地址引脚决定。我用的是7位地址0x18加上写/读位组合,如果需要改动,可以通过改变地址引脚的电平来切换,方便在同一条总线上挂多个AFE做扩展。
PIC18F97J94作为I2C主机,负责按照固定的调度周期去读取两节电池的电压数据。我设计的调度流程大致是这样的:系统上电后主控先延时500ms等AFE内部稳定,然后初始化I2C,读取AFE的Device ID确认通信正常,再进入常规循环。每个循环周期为200ms,读取一次电压数据、做一次均衡状态判断。整个数据交互流程分为两个阶段:阶段一写配置寄存器(比如均衡目标、使能位、采样通道选择),阶段二读回转换结果寄存器。读回来的原始码值需要乘以对应的增益系数转换成毫伏,这个系数在芯片数据手册里给得很清楚,我就直接沿用并把结果存入16位整型变量。
这里有一个我踩过的坑:I2C读数据的时候,MP2642GR-Z要求主机必须先对它的某个寄存器做一次"伪写",然后再切换为读模式才能拿到最新转换数据。第一次调试时我漏掉了这个步骤,结果读回来的一直是旧值,电池电压都明显变了读数还一动不动。后来查了手册里关于寄存器地址自动递增和转换触发的关系才明白是怎么回事,这种细节如果没提前注意,很容易在调试台上浪费一整天。
3. 硬件电路实操:2S均衡板的最小系统搭建要点
3.1 供电与电源域设计
首先明确系统的供电来源。我这个方案里的MP2642GR-Z逻辑部分和PIC18F97J94都跑3.3V,由一个低功耗LDO把电池组的总电压(6.4V~8.4V区间)降压提供。之所以不用电池直接给单片机供电,一方面是因为电平不匹配,另一方面是电池电压会随着放电波动,直接供电会导致参考电压漂移,影响采样精度。
LDO选型上注意两个参数:静态电流和压差。静态电流要尽量低,最好小于10µA,因为备用电源系统经常处于待机状态,光电芯自耗电本身就敏感,控制电路的自耗电必须压到很低。压差方面,因为电池组最低电压可能会掉到6.0V左右,这颗LDO要保证在压差150mV以内的条件下还能稳定输出3.3V,宁可选压差小的型号,也不要在电池快没电的时候先一步掉电。
供电顺序也有讲究。我用了电源管理芯片的使能引脚,让LDO在电池电压高于某个阈值后才启动,避免刚接上电池、电压还没建立稳定的时候单片机就开始跑程序导致逻辑异常。整个过程只需要一颗使能控制引脚接到PIC18F97J94的一个GPIO上,通过软件延时确保上电稳定后再初始化外设。
3.2 均衡通路设计:分流电阻怎么选、电流算多少
被动均衡的核心通路,是电池正极经过一个分流电阻、再经过MP2642GR-Z内部的MOS开关、再回到电池负极。在两节电池的均衡场景里,我们通常只均衡电压偏高的那节,所以均衡电流的设计需要兼顾两个因素:均衡速度和发热。
我的做法是:目标均衡电流设定在50mA左右。以此为例,假设被均衡电池电压为4.0V,那么外部分流电阻的阻值大概为4.0V ÷ 50mA = 80Ω。但这里要减去AFE内部开关MOS的导通电阻,不同AFE的RON会有差别,通常在1Ω到5Ω之间。保守起见我把外部电阻选成82Ω(标准系列阻值),总通路电阻约85Ω左右,实际均衡电流约47mA。这个电流打到一节略微偏高的电芯上,一小时能放掉约47mAh的电量。对于常规的2000mAh级电芯来说,电压差可以从40mV左右的范围内逐步压缩,多数情况下几十分钟就能完成一次均衡,速度完全够用。
分流电阻的功率也是个关键参数。在4.0V和47mA条件下,电阻上的功耗约为0.19W。我直接选了1210封装的功率电阻,额定功率0.5W以上,这样电阻表面温度控制得住,不会有烫手的问题。有人为了省体积用0402封装的贴片电阻来做均衡,我见过那种板子,均衡一开启电阻直接冒烟,这种教训不值得再犯。
关于均衡MOS开关的发热:内部MOS管也会有一点导通损耗,但它的RON很小,功耗通常也就几毫瓦,芯片本身可以承受,不需要额外做散热。需要注意的反而是AFE芯片的PCB散热焊盘——如果PCB设计得不够好,热量累计也可能导致精度漂移,所以芯片底部的散热焊盘一定要正常连接到地平面。
3.3 采样线连接与PCB布局的关键注意点
采样线是这套系统最容易出问题的地方。你拿万用表量到的电压和AFE读回来的电压不一致,很多时候不是芯片精度不行,而是PCB布线引入了压降和干扰。
我有三条经验,直接分享:
第一,每一节电池的采样线都必须独立走线,而且要采用开尔文连接,也就是电压采样线必须直接连接到电池的正负极柱,不能接在均衡电流通路的中间。为什么?因为均衡电流流过导线时会产生压降,如果你把采样点放在靠近电阻的那一端,采样读到的电压会比电池实际电压偏高或者偏低,均衡就会误判。开尔文连接的本质是把电压采样回路和电流流经回路在物理上分开,使得采样线上基本没有电流,也就不产生额外压降。
第二,采样线尽量短,且远离开关电源和电感区域。项目板子不大,布局时我把MP2642GR-Z尽量靠近电池连接器,这样采样线走线长度能控制在10mm以内。板上如果有DC-DC转换器,采样线要避开它的下方,否则耦合的开关噪声很容易让ADC读数跳来跳去。
第三,每一节电池的正负极之间要就近放一个100nF的滤波电容,放在采样线的入口处。这个电容的作用是滤掉高频噪声,配合软件上的滑动平均滤波,双管齐下,读回来的电压数据会非常干净。不要把电容省了,也别省软件滤波,我实测过只靠硬件滤波、软件不加处理的方案,电压读数偶尔会跳动好几个毫伏,均衡逻辑会频繁误触发。
4. 软件实现:从I2C初始化到均衡策略的完整落地
4.1 I2C初始化和底层读写驱动
PIC18F97J94和MP2642GR-Z之间走的是标准I2C协议,速率我配置为400kHz快速模式。400kHz对这颗AFE完全够用,而且抗干扰性比1MHz更好,在这个应用场景里没必要追求更高速率。
初始化代码的核心步骤是:配置I2C引脚为开漏输出并使能弱上拉,设置主模式时钟,使能I2C模块,等待总线空闲。PIC18的MSSP模块使用起来很直观,配置好控制寄存器和时钟寄存器就可以了。读写函数我封装成两个基础函数,一个写寄存器,一个读寄存器。
代码示例大致如下:
void I2C_Init(void) { // 配置I2C引脚为开漏,使能弱上拉 TRISDbits.TRISD1 = 1; TRISDbits.TRISD0 = 1; ODCONDbits.ODD1 = 1; ODCONDbits.ODD0 = 1; // 主模式,400kHz SSP1CON1 = 0x28; // I2C主模式使能 SSP1ADD = 0x09; // 根据时钟配置分频值 SSP1CON2 = 0x01; // 使能ACK SSP1STAT = 0x80; // 禁用SMBus } void MP2642_WriteReg(uint8_t reg, uint8_t data) { I2C_Start(); I2C_WriteByte(MP2642_ADDR_W); // 器件地址+写位 I2C_WriteByte(reg); I2C_WriteByte(data); I2C_Stop(); }读电压数据时,需要先写一次要读取的起始寄存器地址,然后重新发送起始条件并切换为读模式,连续读取多个字节。注意每个字节之后根据是否最后一个字节决定是否发送ACK。
void MP2642_ReadVoltages(uint16_t *vcell1, uint16_t *vcell2) { uint8_t raw[4]; I2C_Start(); I2C_WriteByte(MP2642_ADDR_W); I2C_WriteByte(MP2642_REG_VCELL1_BASE); // 起始寄存器 I2C_RepeatedStart(); I2C_WriteByte(MP2642_ADDR_R); raw[0] = I2C_ReadByte(1); // 每字节后回ACK raw[1] = I2C_ReadByte(1); raw[2] = I2C_ReadByte(1); raw[3] = I2C_ReadByte(0); // 最后一字节回NACK I2C_Stop(); *vcell1 = ((uint16_t)raw[0] << 8) | raw[1]; *vcell2 = ((uint16_t)raw[2] << 8) | raw[3]; }4.2 均衡启动条件:滞回比较与超时保护
均衡策略是整个软件部分的核心。很多人第一次写均衡逻辑时容易犯一个错:只要两节电池电压差超过某个阈值就开启均衡,低于这个阈值就关闭,结果系统在阈值附近反复横跳,均衡开关频繁动作,MOS管和电阻都受不了。这个问题的标准解法是加滞回比较。
我把均衡启动条件设计为:两个电芯电压差的绝对值大于30mV且持续5个采样周期(约1秒),才启动均衡。均衡启动后,只有当电压差低于8mV(滞回下限)才停止均衡。这样30mV启动、8mV停止的区间设计,让均衡过程有足够的"舒服区",不会在边界附近反复开关。为什么上下限差距要这么大?因为如果均衡停止阈值也设成30mV,均衡刚把电压差压到29mV就停了,电池又会慢慢反弹,导致无休止的均衡循环。
除了滞回比较,还必须加超时保护。均衡每次最长持续时间我设置为2小时,不管电压差是否已经达到停止条件,到时间强制关闭。这个保护一方面防止软件逻辑异常导致一直放电,另一方面也避免了电芯在均衡过程中因为温度升高而出现安全隐患。超时状态记录在EEPROM里,下次上电可以读取,提供故障溯源信息。
还有一个细节:均衡不应该在充电过程中频繁启用。充电时电池电压虚高,此时做均衡判断容易误判。我在设计里增加了充电状态检测,只有当系统处于静置或放电状态时才允许开启均衡。充电状态下即使电压差超标,也只是记录标志,不执行均衡动作。这个逻辑在备用电源场景里特别重要,因为市电正常时备用电池可能一直处于浮充状态,如果此时不停均衡,电量和寿命都会受损。
4.3 完整均衡主循环代码示例
主循环的伪代码逻辑如下:
void Battery_Balance_Task(void) { uint16_t vcell1, vcell2; int16_t diff; MP2642_ReadVoltages(&vcell1, &vcell2); vcell1 = Filter_Voltage(vcell1); // 滑动平均滤波 vcell2 = Filter_Voltage(vcell2); diff = (int16_t)(vcell1 - vcell2); // 单位: mV // 充电状态下不启动均衡 if (Charge_State_Detect()) { MP2642_BalanceDisable(); balance_timeout = 0; return; } // 均衡超时保护 if (balance_active) { if (++balance_timeout > BALANCE_TIMEOUT_2H) { MP2642_BalanceDisable(); balance_active = 0; balance_timeout = 0; EEPROM_Write(ADDR_FAULT, FAULT_TIMEOUT); return; } } // 滞回比较控制 if (!balance_active) { if (abs(diff) > BALANCE_START_THRESHOLD_30MV) { if (diff > 0) { MP2642_BalanceEnable(CELL1); // 均衡第一节 } else { MP2642_BalanceEnable(CELL2); // 均衡第二节 } balance_active = 1; balance_timeout = 0; } } else { if (abs(diff) < BALANCE_STOP_THRESHOLD_8MV) { MP2642_BalanceDisable(); balance_active = 0; balance_timeout = 0; } } }这套逻辑跑起来之后,我在实验板上实测过:两节电池初始电压差45mV,均衡开启后约40分钟电压差被压到6mV左右,均衡自动关闭,之后静置半小时电压差反弹到15mV内,没有再触发启动,效果符合预期。
5. 试产调试中的常见问题与故障排查实录
5.1 电压读数跳变、不稳,从哪里开始查
这是整个调试过程中最常遇到的一类问题。我遇到过一次MP2642GR-Z读回来的电压值在几个固定值之间跳变,大概差4到5个码值,用万用表量电池是很稳定的电压,说明问题出在采集链路而不是电池本身。
排查顺序我建议这样走:先量AFE的供电电压和参考电压是否正常,供电纹波大的话很容易影响ADC精度;再看I2C通信时序有没有异常,用示波器抓SCL和SDA波形,确认没有毛刺或者电平不达标;最后检查采样线布线,如果采样线过长或者靠近了DC-DC电感,读数的跳变幅度会非常明显。
最常见的根因还是滤波电容缺失或者采样线过长。你要是发现读数跳变不是随机噪声,而是有规律的周期性跳变,那就重点查跟开关频率相关的干扰源,比如板上DC-DC的开关频率是否耦合到了采样线上。
5.2 均衡电阻发热严重、甚至烧毁
均衡电阻发热严重的原因不外乎三个:阻值选小了导致电流过大、功率选小了扛不住功耗、或者均衡持续开启时间过长。用热像仪看发热位置最直观,能快速确认是哪个器件在发热。
对于2S系统的被动均衡,我一般控制单节均衡电流不超过80mA。如果确实需要更大的均衡电流来缩短均衡时间,那就不能指望一颗电阻解决了,要么把电阻换成更大封装的功率电阻,要么直接考虑主动均衡方案。在成本允许的前提下,宁可多花一点钱选功率余量大一级的电阻,也不要压着额定值用。工程上有一句话我一直记得:凡是在极限参数上运行的器件,最终都会在你最不希望的时候失效。
5.3 均衡逻辑频繁启停,像抽风一样
这个问题的根源一般是两个:电压采样滤波不够,或者滞回阈值设置太窄。如果采样有毛刺,电差一会儿显示32mV一会儿显示28mV,逻辑就会在启动和停止之间反复横跳。如果滞回区间只有5mV,均衡开启把电压差压到4mV就停了,等到电压反弹到5mV又启动,这样反复折腾,MOS管的开关损耗和电阻的疲劳都不可忽视。
我的建议是滤波器至少做8次滑动平均,采样周期200ms,这样等效滤波时间约1.6秒,毛刺基本滤干净了。滞回区间至少留20mV,比如启动阈值30mV,停止阈值10mV或者8mV。这个参数组合我试过多组,综合均衡速度和开关频率,表现最稳定。
下面整理一个排查速查表:
| 故障表现 | 可能原因 | 排查方法 | 解决措施 |
|---|---|---|---|
| 电压读数跳变 | 采样线受干扰 | 示波器抓采样线波形 | 加100nF滤波电容,优化布线 |
| I2C通信失败 | 上拉电阻缺失或过小 | 量SCL/SDA电平 | 接4.7kΩ上拉,检查地址选择脚 |
| 均衡电流偏大 | 分流电阻阻值算错 | 万用表串电流表实测 | 重新计算并按标准阻值选取 |
| 均衡无法停止 | 滞回逻辑写错 | 检查代码状态切换 | 加入滞回和超时保护 |
| 系统待机功耗高 | LDO静态电流大 | 万用表微安档串测 | 换低静态电流LDO |
5.4 上电时序导致的第一轮采样异常
还有一个经验值得单独提一下。系统刚上电的时候,如果主控复位比AFE晚,或者AFE还没完成初始化就收到了I2C命令,读数往往会异常甚至通信卡死。我在初始化流程里加入了一个状态位判断:主控上电后先延时500ms,然后读取AFE的Device ID,连续三次读取失败就直接进入等待状态并点亮故障指示灯,不急着往下跑。这个机制在调试阶段帮我筛掉了好几块焊接有虚焊的板子,量产时也提高了不良品检出效率。
5.5 备用电源场景特有的一个小改进
后面我把这套方案用到一个备用电源项目上时,发现了一个有意思的需求:备用电源平时处在待机状态,电池浮充着,均衡逻辑可能一直觉得不需要动作,但电池长期浮充也会导致电压偏离。我加了一个周期唤醒的机制:每24小时,系统自动唤醒一次,读取两节电池的静态电压,如果压差超过10mV就做一次短时均衡,最多持续30分钟。这个机制跑下来效果不错,电池组的月度压差统计数据明显比之前稳定。不管你是做储能还是备用电源,这个思路都可以直接用上。
6. 从2S扩展到更多串数的弹性设计
虽然项目标题写的是两节串联电池均衡,但实际产品设计时我强烈建议你在硬件和软件上留好扩展余地。MP2642GR-Z本身的能力可以覆盖更多串数,PCB布局时把采样线连接器预留出更多路,主控代码里把均衡通道做成一个数组而不是写死为CELL1/CELL2两个变量,这样后续升级到4S甚至更大规模时,软件改动会非常小。
我在软件上做了一层抽象:定义了一个电芯电压数组vcell[N]和一个均衡通道数组balance_channel[N],所有均衡逻辑都基于数组下标来操作。这样即使换一颗支持更多串数的AFE芯片,只需要改底层驱动和数组长度,均衡策略层完全不用动。这个设计模式在嵌入式项目里属于很基础但很实用的分层思想,强烈推荐沿用。
对于更大规模的系统,比如6S、8S电池组,被动均衡依然可以用,但你要计算一下总发热量。多节同时均衡时,每节50mA的电流,8节同时开就是400mW到500mW的总功耗,板子局部温度会明显升高。这个时候需要评估有没有必要改成主动均衡方案,或者至少把均衡电流降下来、把工作周期拉长。但那是另一个项目的话题了,2S场景下这套方案闭环已经非常扎实。
7. 写在最后:这套方案沉淀下来的几点经验
均衡控制这个事,表面上看是"电压比较加开关控制",逻辑简单得很,真正落地的时候才会发现细节全在采样精度、滞回设计和保护机制里。我在实际项目里收获最大的一条经验是:千万不要在采样精度上抠成本,无论是AFE芯片的选择,还是PCB布线的规范程度,采样链路做好了,均衡算法的调试会轻松一半以上,否则你会在滤波器参数和阈值上反复折腾,最后还是回到硬件上找原因。
第二点经验是:均衡参数不要拍脑袋定,一定要结合电池规格书和实际工况来定。不同电芯的电压平台、内阻特性、自放电率都不一样,同样的30mV启动阈值,在一款磷酸铁锂电池上可能毫无意义,因为它的放电平台本来就非常平。如果你不确定阈值怎么设,就用一个可配置参数,长按按键或者通过上位机修改,然后在不同电芯温度下做几组实测,用数据说话。我在这个项目上就曾经因为照搬之前锂离子电池的均衡策略,导致磷酸铁锂方案完全失效,后来改成读取电池类型再做参数切换才解决问题。
最后再分享一个小技巧:量产的时候,在EEPROM里存一个均衡累计时间计数器。每一颗板子在出货前跑一遍均衡自检,把均衡功能打开10分钟再关闭,记录实际均衡电流和累计时间,同时和基准值比对。这个测试能筛出很大一部分MOS开关失效和电阻焊接不良的问题,成本不高,但效果非常直接。储能和备用电源系统对可靠性的要求永远排在功能前面,这套方案你拿去用的时候,建议也在测试环节多投入一点时间。