搞BMS的兄弟看到288串这个数,应该都懂是什么概念。这不是电动汽车上那种96串108串的小场面,是储能柜、大型船舶、换电站才会遇到的问题。单体电压采集要覆盖288串,这意味着至少要十几颗AFE芯片协同工作,通信拓扑一旦选错,后面全盘崩。我最近刚用国产的MT9805+MT9820组合做完一套完整方案,从原理图到SPI菊花链代码,再到实际调试和量产测试,前前后后踩了不少坑。这篇文章把整套东西拆开讲清楚,如果你也在弄储能BMS、高压PACK或者任何需要高串数电池采集的项目,可以直接参考。
先交代一下方案背景:MT9805是国产多节电池AFE芯片,负责单体电压、温度采集和均衡控制;MT9820是配套的通信桥接芯片,负责把主控MCU和整条菊花链连接起来。两者配合,单链就能带动288串电池的实时采集。这个思路最大的价值在于:国产芯片供应链稳定、成本可控,而且菊花链架构能大幅减少线束和通信轮询开销。文章会比较长,我会从芯片选型原理、完整电路设计、固件实现到问题排查一路写下来,适合硬件工程师、嵌入式工程师以及BMS系统集成相关的朋友收藏着慢慢看。
1. 项目背景与总体方案
1.1 288串电池场景从哪来
先说清楚为什么要做288串。以磷酸铁锂为例,单体标称电压3.2V,充满后约3.65V。288串意味着标称总电压921.6V,满充电压超过1000V,这是一个明显的百伏级以上高压直流系统。这种规格在乘用车里面很少见,但在储能领域非常常见——高压化是储能系统降本增效的核心方向,电压高了之后,相同功率下电流变小,铜排、线缆、连接器的成本都能压下来,整套系统的能量转换效率也会有一定提升。
288串的另一个特征是电池簇电压跨度极大。从最低电位点到最高电位点,整个电池堆的电压差高达1000V,这对采集电路的高压隔离、安全间距、通信拓扑都是硬性考验。很多人一开始想得很简单:多拉几根线,每颗芯片独立用SPI或者I2C和主控通信不就行了?真到工程现场,那种做法根本没法落地。
以我们这套方案为例,18颗MT9805组成一条菊花链,每颗芯片负责16串单体电压和8路温度采集,总覆盖288串。MT9820作为桥接控制器,把主控MCU的普通SPI信号转换成菊花链需要的物理层信号,再发到整条链路上。整条链上所有AFE芯片没有独立仲裁、没有总线竞争,主控发一个广播命令,所有AFE同时采集,然后数据像流水线一样逐级传回主控。这是高串数BMS最主流的架构思路。
1.2 通信方案选型:菊花链 vs CAN vs 独立SPI
做BMS的人都会面临一个经典选择:AFE之间的通信,到底用独立SPI、CAN还是菊花链?我自己在项目初期把三种方案都认真评估过,这里直接说结论。
独立SPI是最先被否掉的。288串需要18颗AFE,每颗都要拉一组时钟、数据、片选信号出来,外壳开孔和线束数量会爆炸。更要命的是,不同位置AFE的地电位差别巨大,普通的SPI电平根本没法跨越这么高的电位差,除非每颗芯片单独加隔离,成本和复杂度都无法接受。
CAN总线是很多BMS工程师第一反应想到的方案。CAN确实自带隔离特性,模块间通过收发器电气隔离,可靠性也不错。但问题出在帧效率上:一个标准CAN帧最多带8字节数据,如果每帧塞8个电压数据,288串至少要36个帧,再加上每颗AFE旁边的MCU都要做中转,整个链路的数据延迟会变得很大。在储能BMS的高实时性要求下,CAN通常只用在主控对外通信这一层,不适合做芯片级采样网络。
菊花链方案的优势体现在三个方面:一是物理连线只有一对差分信号,线束成本极低;二是数据是流水线式的串行移位,一颗命令就能覆盖所有AFE;三是通信速率高,整链轮询一次所有电压和温度,实测能做到10毫秒以内。成本和实时性都优于前两种方案,代价是需要仔细处理链路上的隔离和干扰问题,这部分后文会展开。
1.3 为什么选国产芯片
在选择芯片时,第一个想到的当然是国外那些在BMS领域深耕多年的AFE方案,比如ADI的LTC68系列和TI的BQ系列。这些芯片成熟、文档丰富、市场验证充分,但价格和供货在最近几年确实波动比较大。对于储能这种对BOM成本高度敏感的行业,国产芯片的吸引力越来越大。
MT9805和MT9820的组合打动我的核心原因有几个。首先,MT9805单芯片集成了16通道电压采集、8通道温度采集、被动均衡控制和完整的自诊断功能,典型电压采样精度能做到±3mV以内,满足动力电池和储能电池的基本需求。其次,MT9820把MCU侧接口抽象得很干净,主控跑一个标准的SPI就能控制整条链,软件工作量大幅降低。最后是国产芯片的本地化支持优势,遇到问题可以直接找FAE上门调试,项目周期短了很多。
当然,国产芯片也存在生态不够完善、参考设计相对较少的问题。我写这篇文章的目的之一就是把这些工程细节补上,让后来的人少走弯路。
2. 芯片角色与BMS架构定位
2.1 MT9805到底干了多少活
一颗MT9805芯片在物理上就是一个标准的CSC单元。CSC是电池采样单元(Cell Supervisory Circuit),是BMS系统中直接和电芯打交道的最底层模块。MT9805的16个电压采集通道分别连接到16串电芯的正负极,通过内部高精度ADC测量每串电芯的电压。它并不是传统意义上那种"多路复用+单ADC"的简单位置切换方案,而是针对BMS场景做了大量优化,包括抗混叠滤波、动态量程切换、断线检测等。
温度采集方面,MT9805支持8路外部NTC输入,可以直接接热敏电阻来测量电芯表面温度或者模组环境温度。温度和电压数据采集完之后,芯片内部会做校验和诊断,例如过压、欠压比较器是硬件级的,不依赖主控就能快速触发告警。
被动均衡也是MT9805的重要功能。每一路电压采集通道旁边都集成了一个均衡开关,外接均衡电阻后,可以对电压偏高的电芯进行放电均衡。芯片的均衡控制可以通过寄存器设置,支持连续均衡和定时均衡两种模式。在我调试的这颗芯片上,单通道均衡电流的典型值可以做到100mA左右,对于储能电芯来说基本够用。
MT9805还有一个很关键的点:支持SPI模式的菊花链连接。每颗芯片都有一个信号输入引脚和一个信号输出引脚,多颗芯片像串糖葫芦一样连接起来,主控只需要一根SPI总线就能控制整条链上的所有芯片。
2.2 MT9820在链路里的真实位置
MT9820的角色很多人一开始会搞混。它不是一颗AFE,也不是一颗主控MCU,而是主控MCU和菊花链AFE之间的通信桥接芯片。你可以把它理解成一个"翻译官+信使":MCU通过标准SPI接口把命令发给MT9820,MT9820负责把命令转换成菊花链需要的物理层信号,发送给第一条链路的MT9805;数据从最后一级AFE传回来之后,再由MT9820接收并缓存,通过SPI回传给MCU。
这个桥接芯片的价值在于把MCU从复杂的菊花链时序中解放出来。如果没有MT9820,主控MCU必须自己精确控制链路通信的脉冲时序、唤醒逻辑和诊断协议,对MCU资源的要求会高很多。有了MT9820,哪怕你用一颗很便宜的Cortex-M0内核MCU,也能稳稳控制288串电池的采集。
MT9820还承担了链路物理层的适配工作。高压电池堆里,从链头到链尾的电位差可能超过1000V,菊花链信号在相邻AFE板之间传输时,必须要解决共模电压问题。MT9820内部集成了相应的收发电路,能保证信号在高压环境中稳定传输,同时为主控侧提供一个低电压域的干净接口。
2.3 CSC、BMU、BCU之间的关系
聊到这儿,顺便把BMS的层级概念理清楚。这三个缩写经常一起出现,很多人分不清,但实际做项目的时候分层逻辑非常重要。
CSC是电池采样单元,直接面对电芯,负责采集电压、温度和均衡控制。在这套方案里,每一块MT9805小板就是一个标准的CSC板。若干个CSC组成一个电池簇的采样网络,加上相应的通信管理单元,就构成了BMU(从控模块)。从控模块负责汇总本簇的所有采样数据,做初步的滤波和诊断,然后通过CAN总线把数据上报给主控。主控通常叫BCU,是BMS的大脑,负责SOC估算、SOP计算、绝缘检测、继电器控制和故障保护策略。
回到本方案,MT9805组成了CSC层,MT9820所在的板卡可以理解成位于BMU从控侧,负责把菊花链数据整合后传给主控BCU。这种分层架构在储能和大型车辆BMS里是标准做法,好处是每一层职责单一、便于故障隔离,哪一层出问题都不会导致整个系统失联。
3. 完整电路设计与硬件细节
3.1 288串菊花链系统拓扑
先画出整个系统的信号流拓扑,这是理解后续所有内容的基础。拓扑结构我直接列出来:
主控MCU (SPI) ↓ MT9820(通信桥接) ↓ [菊花链差分双绞线] AFE板 #1(第1~16串,最低电位) ↓ [级联线] AFE板 #2(第17~32串) ↓ ... AFE板 #18(第273~288串,最高电位) ↓ [回读线] MT9820 数据返回在这个拓扑中,主控MCU通过SPI访问MT9820,MT9820把命令发送到第一个AFE的输入端。每一颗AFE收到命令后会执行操作,然后把命令和数据向后传递,最后一级AFE的数据通过回读线回到MT9820,再被主控读取。命令下行和数据上行共用同一对物理线路,这也是菊花链与普通SPI总线最大的区别:不是并行连接,而是串联连接。
这个方案的另一个好处是,只要链路不断,主控就能以极高的效率一次性访问所有芯片。例如,主控发送"启动所有AFE的ADC转换"命令,18颗MT9805会同时开始转换,而不是一颗一颗地被轮询询问。这种并行性大大缩短了整个系统的采样周期,实际轮询时间可以压缩到毫秒级。
3.2 围绕MT9805的关键外围电路
MT9805本身是AFE的完整核心,但外围电路设计不当的话,芯片性能会大打折扣。我总结几个关键模块的做法。
首先是电压采样输入滤波。每一串电芯的采样引脚之间,通常需要串联一个100Ω到1kΩ的电阻,并并联一个100pF到1nF的电容,构成一阶低通滤波。这里需要注意,RC时间常数不能设置得太大,否则电压突变时采样值会滞后,影响动态响应。我常用的参数是510Ω+100nF,截止频率大约3kHz,既能滤除高频噪声,又不会影响电压测量的实时性。还有一点,采样线上的滤波电容必须选择C0G或NP0材质的电容,温度稳定性好,X7R和X5R在这种高精度场景下不够理想。
其次是AFE供电。MT9805可以直接从所在模组的电池电压取电,芯片内部有稳压器。以16串磷酸铁锂为例,模组电压范围约44V到58V,完全在芯片的输入电压范围之内。但从工程可靠性的角度,我建议在AFE板的电源入口加上一个TVS管和串联限流电阻,防止电池反接或浪涌电压打坏芯片。另外,如果项目对低功耗要求高,还要考虑在长时间静置时关闭AFE供电,或者利用芯片的睡眠模式来降低整机功耗。
然后是均衡电路。MT9805每个均衡通道的输出引脚外接均衡电阻到对应的电芯负极。均衡电阻的阻值决定了均衡电流,阻值越小电流越大、均衡时间越短,但发热也越严重。我用的典型值是16Ω电阻配1W封装,均衡电流约100mA,持续工作半小时温度在可接受范围内。PCB上均衡电阻区域要铺铜散热,周围不要放热敏器件。
3.3 高压域布局与线束设计
288串电池组意味着从AFE板#1到AFE板#18,每一级之间都存在着几十伏的电位差,而整条链的绝对电位差接近1000V。这种情况下,PCB和线束的高压防护设计是绝对不能马虎的。
我建议每个电池模组单独放一块AFE板,板上只采集本模组范围内的16串电压。模组与模组之间通过连接器连接,连接器必须选择额定耐压1500V以上的型号,最好带防误插设计,否则产线上插错一根线就可能烧掉一整块采集板。PCB上凡是带电部分到安全区域的爬电距离,按500V工作电压以上等级留足余量,必要时开槽处理。
菊花链通信线是关键中的关键。两颗AFE板之间的级联线应该采用双绞线,推荐带屏蔽层的对绞线,屏蔽层在MT9820那端单点接地即可,不要两端都接,否则容易形成地环路。线束长度超过30cm时,建议在链的末端加上匹配电阻,降低信号反射。通信报文本身有CRC校验,但物理层的信号完整性仍然是整个系统稳定工作的底线。
我自己在调试时吃过一个亏:刚开始图省事,用了普通排线拉菊花链通信,结果只要运行大电流充放电,CRC错误计数就暴增,电压数据频繁重读。后来换成双绞屏蔽线,错误率直接降到几乎为零。这个坑希望大家直接避开。
3.4 PCB Layout要点
Layout的好坏决定了AFE板能不能发挥芯片标称性能。MT9805这部分,我总结几条实战经验。
第一,采样走线要短且粗。16路电芯采样线从连接器进入芯片时,不要绕远路,也不要中间打过孔再绕来绕去。采样是小信号,任何长走线都是天线,容易把干扰引入ADC。两个采样引脚之间的走线尽量等长,减小串联电阻差异导致的通道间偏差。
第二,模拟和数字地要分区处理。AFE芯片的模拟地和数字地通常独立引脚,Layout时建议单点连接,避免数字噪声耦合到模拟采样通道。芯片底部的散热焊盘要连接到模拟地,同时起到散热作用。
第三,MT9820和MT9805菊花链信号走线要远离功率路径。储能系统里大电流充放电会产生强磁场,如果通信线贴着功率母线走,很容易被耦合出干扰。在空间允许的情况下,给菊花链信号留出独立的走线区域,并用地线包裹。
第四,去耦电容要就近放置。每颗芯片的电源引脚旁边放一到两个100nF的小电容加一个10μF的大电容,并且电容要尽量靠近引脚。这个细节直接决定了芯片在低温或高压场景下能不能稳定工作。
4. 固件实现:从初始化到均衡控制
4.1 SPI菊花链初始化流程
硬件搭好之后,接下来是固件。先说初始化流程,这是最容易出问题的阶段。MT9820上电后,主控MCU首先要通过SPI完成对MT9820的复位,然后发送唤醒命令,将整条菊花链上的MT9805从休眠状态唤醒。
唤醒之后,建议先做一次链路扫描,确认链上有多少颗AFE在线。这个步骤很重要,因为如果链上某个AFE供电没接好或者级联线断开,后面的芯片会全部失联,如果不扫描直接配置,后面读回来的数据全是错的。我习惯在初始化开头写一个循环,逐颗读取AFE的状态寄存器,记录哪些芯片在线、哪些离线。
接下来是广播配置。MT9805支持广播写寄存器,也就是说主控发一条命令,所有AFE同时接收并写入相同的配置。这一步可以用来设定ADC滤波深度、过压欠压阈值、温度采样使能等全局参数。广播配置可以大幅节省初始化时间,但要小心,不同位置的AFE如果装配参数不同,要分地址单独配置,不要贪图方便广播覆盖。
初始化参考代码(简化版):
void bms_chain_init(void) { mt9820_spi_reset(); // 复位MT9820 mt9820_wakeup_chain(); // 唤醒整条菊花链 delay_ms(10); // 等待AFE稳定 // 扫描在线AFE数量 for (uint8_t i = 0; i < AFE_NUM_MAX; i++) { uint16_t status = mt9820_read_afe(AFE_REG_STATUS, i); if ((status & AFE_ALIVE_MASK) != 0) { online_afe_count = i + 1; } else { break; // 遇到第一个失联的芯片就停止 } } if (online_afe_count != AFE_NUM_EXPECT) { error_handler(ERROR_CHAIN_INCOMPLETE); } // 广播配置全局参数 uint16_t cfg = AFE_CFG_ADC_FILTER_MED | AFE_CFG_OVP_EN | AFE_CFG_UVP_EN; mt9820_broadcast(AFE_WRITE_CFG, cfg); }4.2 全链电压读取与时间估算
链路初始化完成之后,正常的采样循环就简单了。我用的流程是:先广播启动ADC转换命令,让所有AFE并行采集各自的16路电压和温度;等待一段固定时间,等转换完成;然后一次性从菊花链上把所有数据读回来。
MT9805在采集全部16通道电压时,ADC转换时间通常在1到2毫秒量级,具体取决于配置的滤波深度。数据回传的时间取决于SPI速率和数据量:18颗AFE,每颗16通道电压乘2字节,再加每颗2到4字节的状态和CRC,总共大约600到700字节数据。在1Mbps的SPI速率下,传输耗时大约5毫秒左右,加上ADC转换时间,一轮全量采集大约7到10毫秒。这个性能在BMS场景中完全是够用的,甚至可以说非常充裕。
数据读取的代码思路如下:
void read_all_cell_voltages(uint16_t cell_voltage_mv[288]) { mt9820_send_cmd(AFE_CMD_START_ADC_ALL); // 广播启动ADC delay_us(AFE_ADC_CONV_TIME_US); // 等待所有AFE转换完成 uint8_t raw_data[AFE_NUM_EXPECT * (16 * 2 + 2)]; mt9820_read_chain(raw_data, sizeof(raw_data)); for (uint8_t chip = 0; chip < AFE_NUM_EXPECT; chip++) { uint8_t *p = &raw_data[chip * (16 * 2 + 2)]; for (uint8_t ch = 0; ch < 16; ch++) { uint16_t adc = (p[ch * 2] << 8) | p[ch * 2 + 1]; cell_voltage_mv[chip * 16 + ch] = (uint16_t)(adc * CELL_VOLTAGE_LSB_MV + 0.5f); } // 这里可以做CRC校验,失败则标记该芯片数据无效 } }实际项目中,我建议把返回值做一个结构体,带上一轮扫描的CRC错误计数和掉线标志,方便上层算法做数据融合和故障诊断。不要只返回电压数组,因为忽略错误状态会在后期排查问题时非常痛苦。
4.3 被动均衡控制实现
被动均衡是BMS的基础功能。MT9805的每个电压通道都对应一个均衡开关,通过写均衡控制寄存器,可以独立控制某几路的均衡开启和关闭。我通常采用的策略是"组内均值比较法":每颗AFE板对应一个16串模组,计算该模组内16串电芯的平均电压,然后把那些电压明显高于平均值的电芯打开均衡。
均衡开启之后不能一直开着不管。电芯电压在均衡过程中会缓慢下降,当下降到目标电压附近时就应该关闭均衡。同时还要考虑温度因素,功率电阻的发热会累积,如果整块AFE板温度超过设定值,系统应暂停均衡,等温度降下来再继续。
代码示例:
void balance_task(void) { for (uint8_t chip = 0; chip < AFE_NUM_EXPECT; chip++) { uint16_t sum = 0; uint16_t v[16]; for (uint8_t ch = 0; ch < 16; ch++) { v[ch] = cell_voltage_mv[chip * 16 + ch]; sum += v[ch]; } uint16_t avg = sum / 16; uint16_t balance_mask = 0; for (uint8_t ch = 0; ch < 16; ch++) { if (v[ch] > avg + BALANCE_START_MV) { balance_mask |= (1 << ch); } } mt9820_write_afe(AFE_REG_BALANCE, chip, balance_mask); } }有一个容易忽略的细节:均衡开启的瞬间,对应通道的电压测量值会受到均衡电流的影响,出现一个下降台阶。这是正常的,不要把它当成真正的电压变化。算法层在对电压做滤波处理时,要把处于均衡状态的通道排除掉,否则一会开均衡一会关均衡,SOC估算会被搅乱。
4.4 SOP功率估算怎么和芯片联动
SOP(State of Power,功率状态)是储能BMS里一个重要的对外输出参数,简单说就是告知PCS:当前电池系统还能充多少功率、还能放多少功率。SOP计算不仅要用到当前的电压、电流、温度和SOC,还要结合电池的直流内阻。
在MT9805+MT9820这套方案里,主控MCU通过菊花链拿到实时电压和温度数据,外部的电流采样通常由独立的霍尔传感器或分流器采集,数据汇总之后在MCU里完成SOP计算。一个简化的充电SOP计算思路如下:用当前OCV和查表内阻R估算最大允许充电电流,再和SOC窗口限制的电流取最小值,最后乘以当前电压得到功率上限。
代码片段:
float calc_charge_sop(float ocv_v, float r_ohm, float vmax_v, float soc, float temp_c, float rated_cap_ah) { float r_adjusted = r_ohm; if (temp_c < 10.0f) r_adjusted *= 1.5f; // 低温内阻增大 float imax_by_voltage = (vmax_v - ocv_v) / r_adjusted; float imax_by_soc = (100.0f - soc) * rated_cap_ah / 3600.0f; float imax = fminf(imax_by_voltage, imax_by_soc); if (imax < 0.0f) imax = 0.0f; return imax * vmax_v; // 功率近似值 }这里要特别注意:SOP计算结果的输出必须做平滑处理,不能一帧数据和下一帧数据波动太大,否则PCS会频繁调节功率,造成系统震荡。我一般给SOP加一阶低通滤波或者变化率限制,比如每秒变化量不得超过额定功率的5%。这个细节在联调阶段能省掉很多麻烦。
5. 实测表现与数据分析
5.1 288串电压采样精度
方案跑通之后,我做了比较详细的性能测试。电压精度的测试方法很简单:用一台六位半高精度电压源模拟电芯电压,同时接上AFE板的采样通道,比对芯片读数与标准源读数之间的差值。
实测从18颗MT9805中抽取了36个通道做精度抽样,最大偏差为2.2mV,平均偏差在1mV以内,芯片手册标称的±3mV精度是可以达到的。这个精度水平对于磷酸铁锂储能BMS来说足够用了,因为磷酸铁锂的充放电平台比较平缓,如果测量误差超过10mV,SOC估算和均衡判定都会明显受影响,但2到3mV的误差基本不影响系统工作。
有一点值得提醒:精度测试要在芯片稳定工作、温度平衡之后进行。刚上电的前几分钟,芯片内部参考源还未完全稳定,读数可能偏大,这是正常现象,BMS上电后应该先做一段时间的预热和数据丢弃,再进入正式采样状态。
5.2 通信稳定性与误码统计
通信稳定性是这套方案最需要重点验证的。我的测试方法很简单:让系统在室温下连续运行72小时,每100ms读一轮全量数据,统计CRC错误次数和数据重读次数。
实测结果是:在采用双绞屏蔽线、终端匹配电阻、SPI速率1Mbps的条件下,72小时共约259万轮采样,CRC错误次数总计低于10次,重读一次后基本都能恢复正常。这说明菊花链通信的可靠性是完全可以接受的。对比之前用普通排线的情况,同样的代码和芯片,CRC错误次数是每小时几十次级别,完全没法用。物理层的设计细节,直接影响整个系统能不能稳定工作。
另外,我还测试了上下电瞬间的链路状态。288串电池系统在合闸瞬间会有很大的共模电压跳变,如果MT9820和AFE板之间的隔离处理不到位,整条链可能直接失联。实测在继电器合闸瞬间,有的AFE会出现短暂的状态寄存器读取失败,但芯片不会锁死,1秒内能自动恢复。针对这种情况,我在软件里加了链路自恢复机制:如果连续5轮读不到某颗AFE,就执行一次全链唤醒和重新扫描,而不是让系统直接报致命故障。
5.3 均衡温升和功耗实测
被动均衡最大的副作用就是发热。我用100mA均衡电流连续开启单通道45分钟,实测功率电阻表面温度从25℃上升到约55℃,PCB板面温度在45℃以下。如果同时开启多个通道,温度会叠加得更快,所以均衡策略里一定要有温度保护。
功耗方面,整条链18颗AFE加上1颗MT9820,在正常采集模式下整板功耗约150mA@5V,主要是AFE的ADC转换和通信电路消耗。如果开启全部均衡通道,功耗会明显增加,但这种场景在实际运行中不会持续太久,因为均衡是间歇式的工作。
睡眠模式也做了验证。主控下发睡眠命令后,整条链的电流降到了微安级别,可以满足储能系统长时间静置的低功耗要求。唤醒时间实测在几毫秒以内,不影响系统快速响应合闸命令。
6. 常见问题排查与避坑实录
6.1 链路某级失联怎么办
这是菊花链方案最常遇到的问题,现象就是某个位置的AFE读不到数据,后面的芯片全部失联。排查思路我一般按下面的顺序来:先确认这一级AFE板的供电是否正常。AFE芯片直接取模组电压供电,如果模组内某串电芯的连接排松动,整块板都会掉电,后面自然就全挂了。
供电正常的情况下,检查级联线的连接顺序。MT9805的菊花链信号有输入和输出之分,级联线必须从上一颗的输出接到下一颗的输入。这个看似简单的问题,在线束组装时非常容易接反,接反的结果就是后面所有芯片都读不到。我的排查经验是:把万用表调到通断档,从主控端沿着线束一截一截量过去,通常很快就能找到断点或者反接点。
还有一个容易忽略的坑是线束的金属疲劳。样机阶段反复插拔、折弯,线束内部的铜丝可能已经断裂但外表看不出来。遇到过好几次"今天好好的,明天突然掉线"的情况,最后都是重新压接端子或者换新的双绞线解决。
6.2 采样数据飘、噪声大怎么查
电压数据不稳定的原因通常不在芯片本身,而在外围电路或者Layout。最常见的问题是我前面说的采样滤波电容虚焊或者型号不对。X7R电容在直流偏压下容值会衰减,用来做采样滤波时效果远不如C0G/NP0,如果测试时发现电压噪声偏大,先检查滤波电容材质。
另一个常见原因是采样线太细太长,串联电阻过大。比如用AWG28的线拉30cm采样,线阻已经到了几百毫欧级,在均衡电流流过时,采样通道会看到明显的压降,读出来的电压会偏低。解决方法是加粗采样线,或者把均衡电流调小。
最后一种情况是地线处理不当。AFE板的采样地如果和功率地混在一起,大电流灌入时就会在地线上产生压降,导致各个采样通道的参考电位不一致。Layout阶段应明确区分采样地和功率地,通过单点连接的方式避免干扰。
6.3 均衡电流和温升异常
如果你的均衡电流比设计值偏小,优先检查外部均衡电阻的阻值。电阻焊错、虚焊、或者走线过长都会导致电流不达标。均衡电流偏大的情况相对少见,主要原因通常是均衡电阻阻值选错了或者芯片的均衡开关直接短路失效。遇到底部通道均衡开关异常时,建议用红外热成像看一下是哪颗芯片或者哪颗电阻在发热,能快速定位故障点。
大电流均衡时温度过高的问题,要从硬件和软件两个层面解决。硬件上增加散热铜箔面积、均衡电阻选用大封装;软件上把均衡策略改成"分时均衡",比如每开启5分钟就暂停1分钟,让热量有时间散掉。储能BMS的均衡不像消费电子那样追求快速,稳定可靠永远是第一位的。
6.4 生产测试环节的那些坑
量产阶段最容易踩的坑是EOL测试不充分。每一块AFE板在出厂前都要做通道扫描测试,确认16路电压采集、8路温度采集和16路均衡通道全部正常。建议在测试工装上使用标准电阻网络模拟电芯电压,一次性对比所有通道的读数,任何偏差超过阈值的板子直接返修,不要流到总装环节。
第二个坑是通信地址或者ID的烧录。这套方案里,AFE通过物理位置确定链路顺序,主控是按顺序解析数据的,理论上不需要额外烧录地址。但如果你的系统里有多条菊花链,比如一个集装箱里有4个簇,每条链都有自己的MT9820,那就必须给每条链分配独立的通信通道或者片选信号,防止数据串扰。
还有一个容易被忽视的是老化测试。AFE板在生产完成后建议做一次高温老化,把潜在的虚焊和器件不良提前暴露出来。我们项目里出现过一批采样滤波电容在老化后失效的情况,电容容值漂移严重,导致电压读数偏差加大。后来更换了电容供应商,并在来料环节加了容值抽测,问题才彻底解决。
写到最后,分享两个我个人觉得最有价值的经验。第一个是:做288串这种高压长链路的BMS方案,先把物理层做扎实再谈功能。通信链路的双绞线、屏蔽、终端匹配、隔离这些细节,哪一个偷懒了,后面调试CRC错误的时间和痛苦都会加倍还回来。第二个是:国产芯片的规格书虽然比国外大厂薄很多,但关键参数和时序一定要自己搭环境验证,不要想当然照搬经验。MT9805和MT9820这对组合我用下来的整体感受是足够成熟、性价比高,工程细节需要在项目里慢慢磨合,但方向是对的。希望这篇实战记录能帮你少走几步弯路。