十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

储能BMS三级架构详解:从模组到堆的通信、联调与故障排查

储能BMS三级架构详解:从模组到堆的通信、联调与故障排查 做储能BMS的人几乎每天都要和“三级架构”这四个字打交道。模组、簇、堆这三层管理单元怎么划分、怎么通信、怎么协同直接决定了一个储能电站能不能安全稳定地充放电。先说清楚一件事这里说的“堆”是电池堆Stack指多个电池簇并联组成的整个储能单元跟编程语言里那个内存堆完全是两码事别搞混了。这篇文章我想把BMS三级架构这件事从里到外讲透从为什么要分三级、每一级具体管什么、通信链路怎么设计到实际联调中怎么一步步从模组调到堆级最后再把我在现场踩过的坑一并说出来。适合正在做储能BMS开发、测试的工程师想入行储能行业的硬件、软件同学以及需要和BMS打交道的系统集成、运维人员。下面直接进入正题。1. 为什么储能BMS非要搞三级架构1.1 储能规模直接把单级BMS逼到了墙角先看一组真实的数据。拿一个常见的5MWh储能集装箱来说如果采用目前主流的280Ah磷酸铁锂电芯52串组成一个模组1P52S标称电压166.4V8个模组串联组成一个电池簇电芯数量就是416串标称电压1331.2V正好落在1500V直流平台的范围内而一个集装箱里往往要并联4到6个簇加起来就是1600到2500多串电芯。这个规模意味着什么如果只有一个中央控制器去管理这么多电芯首先采集线束的长度和数量就是灾难级的——每串电芯都要拉一对电压采样线到控制器整个柜子里全是线既难布线又难维护其次通信压力极大靠一个控制器的MCU去轮询上千串电芯的电压和温度哪怕每串只花10毫秒一轮下来也要几十秒实时性根本谈不上。更关键的是故障隔离电芯侧的高压、大电流一旦出问题不能让整个系统都失控必须分层分区去处置。所以在储能系统里单级直管的结构在物理上就不成立。物理结构天然是“电芯-模组-簇-堆”四级BMS与之对应的管理架构就浓缩成三级模组级、簇级、堆级。每一级只跟相邻层级打交道把复杂问题切成三块分别处理这是工程上最务实的做法。1.2 三级架构的整体划分逻辑三级架构的三个角色业内叫法不完全统一但职责边界都很明确模组级管理单元常叫BMUBattery Management Unit或CSCCell Supervisory Circuit负责模组内部电芯电压、温度的采集以及均衡执行簇级管理单元常叫BCUBattery Cluster Unit或MMUModule Management Unit负责整簇的总压、总流采集绝缘检测继电器控制以及SOC/SOH估算和热管理堆级管理单元常叫BAMSBattery Array Management System是整个BMS的大脑负责和PCS、EMS、消防等外部系统通信制定充放电策略协调各簇之间的功率分配。你可以把它理解成公司管理的三个层级BMU是基层员工只对接自己负责的那一小片区域把数据如实上报BCU是部门经理管着几十上百号人的部门对部门业绩SOC、SOH负责BAMS是总经理不管具体某个人干了什么只关心整个公司怎么运转怎么和其他公司PCS、EMS合作。这种“级级负责、逐级上报”的模式保证了系统再大也能保持清晰的管控边界。2. 三级架构的分工与核心职责2.1 模组级BMU电压温度采集的“神经末梢”BMU是整个BMS系统里数量最多、离电芯最近的设备。它上面主要有两类芯片AFE模拟前端芯片负责采集电芯电压和温度MCU负责数据打包和通信。常见方案是AFE芯片之间用菊花链方式串联一个BMU板上可以管理12串、16串、24串甚至更多的电芯。模组级最核心的指标是采集精度和同步性。电压采集精度一般要求在±5mV以内温度采集精度在±2℃以内而且同一时刻采集到的所有电芯电压必须保证时间上的一致性——否则你拿到的“同一时刻”的压差数据是错的后续均衡和SOC估算都会被带偏。高端一点的AFE芯片支持片上同步采样也就是所有通道同时打开采样保持器再去逐个读取可以很好地保证时间一致。均衡功能也部署在这一级。被动均衡通过并联在电芯两端的放电电阻把高电压电芯的能量以热量形式放掉均衡电流根据电阻阻值通常在100mA到2A之间主动均衡则通过电感或电容把能量从高压电芯转移到低压电芯效率高但成本也高。判断是否需要均衡一般不是看绝对压差而是看“最高电压-最低电压”超过了设定阈值比如50mV并且在充电状态下才动作因为充电时能量补充最方便均衡效果也最好。2.2 簇级BCU承上启下的“区域指挥”BCU管理的是整个电池簇。以我们前面提到的416串电池簇为例这一簇就有8个BMUBCU要把它们的数据汇总起来做总压总流的采集和计算执行绝缘检测控制正负极继电器和预充继电器还要完成最核心的SOC剩余电量和SOH健康状态估算。这里有个容易被忽视的关键点SOC到底在哪一级算我的答案是必须在簇级算而且最好不要放到堆级。原因很简单每一簇的实际可用容量、内阻、温度分布都可能不一样并联在一起之后簇与簇之间天然存在差异。如果堆级统一算一个SOC下发那等于把所有簇当成同一个电池在管问题很大。簇级BCU基于自己这簇的电流、电压、温度数据独立估算SOC再上报给BAMSBAMS根据各簇的SOC去协调功率分配才是合理的分工。SOC估算常用的是安时积分加开路电压校正。安时积分的公式很简单SOC(t) SOC(t0) - (1/Qn)∫I(t)dt其中Qn是额定容量。但积分误差会随时间累积所以需要定期用开路电压OCV来校正。磷酸铁锂的OCV-SOC曲线中段非常平缓电压差很小单纯靠电压查表校正精度有限所以现在很多方案采用扩展卡尔曼滤波EKF或者更复杂的算法把电压、电流、温度融合起来估算。簇级BCU还是保护动作的关键执行点。过压、欠压、过流、过温、绝缘故障这些保护逻辑通常在BCU这一级就做了判断一旦触发就立即断开继电器不需要等堆级下命令。从故障发生到继电器动作时间必须控制在100毫秒以内甚至更短否则大电流冲击可能直接损坏电芯或母排。这里建议保护判断放在BCU的底层代码里不依赖通信链路这也是三级架构里最核心的一条安全底线。2.3 堆级BAMS全局调度与策略大脑BAMS是整个BMS系统里最上层的控制器。它不直接采集电芯数据但会从各个BCU收集汇总后的簇级数据包括每簇的总压、总流、SOC、SOH、最高最低温度、报警状态等形成整个电池堆的全貌。BAMS最重要的职责是和PCS储能变流器、EMS能量管理系统打交道。PCS问BAMS“现在能充多少电、能放多少电”BAMS要根据当前堆里最弱的那簇的SOC和温度来回答而不是按平均值算。比如一个堆里4簇并联其中一簇因为温度偏高被限制了充电电流那BAMS给PCS下发的允许充电功率就要以这一簇的限值为准否则就会导致压差扩大甚至触发过充保护。堆级的另一个重要职责是充放电策略管理。比如在充电末端要执行恒压限流需要BAMS实时计算允许充电电流并下发给PCS放电末端同样要限制功率防止电芯过放。当某簇的SOC和其他簇差距过大时BAMS要能识别出簇间不均衡触发簇级均衡策略或者限制该簇的充放电功率。这些策略不是简单写死在代码里就完事参数需要根据实际电芯特性、系统拓扑和运行场景反复标定。BAMS还要负责和上位机监控、EMS调度、消防系统联动。消防系统触发报警时BAMS要能快速执行断电指令EMS下发计划充放电功率时BAMS要做一次“可行性判断”如果请求的功率超过了电池堆当前能承受的范围就应该降额执行而不是盲目照做。这一级如果设计得不好系统级的安全和效率都会出问题。3. 三级架构的通信链路与关键参数设计3.1 通信拓扑从菊花链到以太网三级架构里的通信链路从上到下是不同速度、不同成本的组合。模组内部的AFE菊花链典型方案用LTC6811、ADBMS6830这类芯片走的是隔离SPI或者专有的菊花链协议传输速率可以从几百kbps到几Mbps。菊花链的好处是线束少一串下来只需要两根差分线但缺点是一旦中间某个节点出问题整条链可能中断。所以建议在链路两端都留通信接口形成环形或者至少能在断链时快速定位是哪一个节点出了问题。簇内BCU连接多个BMU一般用CAN总线波特率常用500kbps或1Mbps。CAN总线是储能BMS的主干通信原因很简单抗干扰能力强、实时性好、协议成熟。但要注意的是CAN总线负载率不能设计得太满工程上建议峰值负载率不要超过30%到40%否则遇到突发报文增多就会丢帧。如果BMU数量多、数据量大可以考虑分多路CANBCU上多放几个CAN口按模组分组挂载。堆级BAMS连接各簇BCU现在主流方案有CAN和以太网两种。大型储能系统推荐以太网一是带宽充足二是方便和EMS、云平台对接小型分布式储能用CAN也能满足需求而且成本低、开发周期短。还有不少厂家给BAMS配了4G/5G模块把数据上传到云端做远程监控和OTA升级。如果现场环境电磁干扰严重建议关键通信链路用光纤隔离我在现场见过不少CAN总线在高压大电流切换瞬间被干扰导致误报的例子光纤一上问题就消失了。3.2 数据流与指令流一次完整的请求如何穿越三级三级架构最直观的理解方式是追踪一条指令和数据在系统里是怎么流动的。先说数据上行。BMU从AFE芯片拿到电芯电压和温度以一定的周期比如250ms打包上报给BCU。BCU收到所有BMU的数据后做一次总压计算和一致性分析再把汇总后的簇级数据总压、总流、SOC、SOH、最高最低电压、最高最低温度、故障标志位以更长的周期比如1s上报给BAMS。BAMS拿到所有簇的数据后形成整个堆的状态机更新给PCS和EMS的实时运行数据。再说指令下行。EMS下发“以1000kW功率充电”的计划给BAMS后BAMS先要根据电池堆当前状态做功率可行性校验。假设可用功率仅800kW则BAMS会给EMS回一个降额信号同时向下给各簇BCU下发允许充电电流。BCU接收到指令后结合本簇的SOC和温度再细化成更具体的控制动作——需要的时候闭合继电器把允许充电电流的值放到CAN报文里给PCS执行。这个过程中每一级都只处理自己这一层的信息不越级、不冗余整个系统才能保持清晰。实际设计时要特别注意上送周期和下发周期之间的匹配。比如BCU保护判断需要越快越好那采集周期就要短比如50ms而BAMS给EMS的调度数据不需要那么快1s到3s都行。把不同数据的实时性分级设计可以大幅降低总线的负载压力和CPU的算力消耗。3.3 关键参数计算与选型参考这里分享几个我在实际项目中反复用到的基础计算掌握了它们对三级架构里很多“拍脑袋”的参数就能有自己的判断。第一个是CAN总线负载率估算。假设一个BCU下面挂了8个BMU每个BMU每250ms上报一帧包含32字节数据的CAN报文。按CAN 2.0B最长8字节数据帧计算一帧报文大约130位含填充位8个BMU一周期就是8帧一秒钟4个周期就是32帧总线总位数为4160bit。在以500kbps波特率的CAN总线上负载率还不到1%。但实际情况中还会有心跳报文、报警报文、均衡控制指令等数据量可能翻几倍再加上偶发的重发和错误帧设计时留够余量是必须的。第二个是均衡电阻的功率计算。被动均衡最怕的就是发热。如果用2A均衡电流取均衡电阻两端典型电压3.2V那么单颗电阻的功耗就是6.4W这已经是非常大的热量了。实际上大多数被动均衡为了控制发热均衡电流控制在100mA到500mA功耗在0.32W到1.6W再用PCB铺铜和散热孔辅助散热。选择均衡电阻时除了功率等级还要算好PCB的温度温升否则长时间均衡会把板子烤糊。第三个是簇级绝缘检测的判断阈值。绝缘电阻的国标要求一般是大于100Ω/V对于1500V系统就是绝缘电阻要大于150kΩ。实际检测方案常用电桥法通过切换正负极对地的分压电阻测量对地电压再联立方程解出绝缘电阻。要注意的是在并联簇数多的情况下一个簇的绝缘故障会被其余簇拉低导致误判为多个簇都有绝缘问题所以排查时要先断开簇间联络再复测才能定位到具体哪一簇。第四个是总压采集的量程设计。1500V系统BCU的总压采样板通常用电阻分压加隔离运放采样量程一般做到0~1800V留出20%的余量。分压电阻的精度和温漂直接影响总压精度所以一般用0.1%精度、低温漂的电阻并且要做软件校准。总压数据是过压保护、绝缘检测、SOC估算的基础精度不够后面全白搭。4. 实操过程从模组到堆的联调全流程4.1 模组级调试与验证模组级调试第一步是硬件检查。上电前先把AFE芯片电源、通信接口、均衡控制引脚都用万用表量一遍确认没有短路。上电后用软件读取每个通道的电压原始值和一个高精度电压源做对比一般要做10个点以上的校准覆盖电芯工作电压范围的上下限。校准后记录每个通道的偏置和增益系数写进EEPROM里下次上电直接读取。接下来要重点验证的是通信链路的鲁棒性。如果AFE是菊花链结构建议做一个“逐节点断链测试”依次断开链路上某个节点的通信线确认BCU能报出是哪一节点失效。很多模组调试时的通信问题其实是上电时序导致的注意菊花链两端设备的偏置电阻配置以及隔离电源的开启顺序很多玄学问题都是由电源时序引起的。均衡功能验证时我通常会在模组电池组里人为制造一个“高电压电芯”——用一个可调电源单独给某一串补电让它比其他串高100mV左右然后启动均衡观察电芯电压变化。要特别留意均衡的结束条件是压差回到设定值就结束还是均衡时间到了就结束。现场常见的问题是均衡一启动就停不下来或者压差已经很小了还在持续均衡白白发热这个逻辑在软件里一定要写严谨。4.2 簇级联调与SOC校准把多个模组串成一个簇之后调试重点就转移到BCU。第一步是验证总压采样。用直流源给整个簇加一个已知电压对比BCU上报的总压值误差一般要求在±5V以内但对于1500V平台这个精度其實不难做到真正容易出问题的是量程切换瞬间的跳变——如果采样回路里电容太大切换瞬间会出现幅值很大的毛刺需要软件做滤波处理。BCU的继电器控制逻辑也要重点验证。储能系统的预充电路一般由预充继电器和预充电阻组成闭合主继电器的顺序必须是“先预充后主路”否则直流母线空载电容瞬间充电会产生巨大冲击电流。调试时用示波器同时抓主继电器两端电压和电流波形确认电压差小于设定值比如20V时才允许主继电器闭合。SOC校准是整个簇级调试的重头戏。上电后的首个SOC一般通过开路电压查表获取但磷酸铁锂的OCV曲线平缓初始SOC误差可能达到10%以上。所以储能系统一般在首次上电后要用小电流0.1C以下把电池充满一次让SOC校准到100%然后再开始日常的安时积分。这一步不能省我见过不少项目因为跳过了满充校准后面SOC一路飘直到系统报警才发现。簇级还需要做绝缘检测的回路自检。标准电桥法有正极对地、负极对地两个检测回路要分别模拟正极接地和负极接地故障确认BCU能正确报出是正极侧还是负极侧的绝缘电阻低。很多BCU的设计中这个自检需要在同一簇独立运行时做簇间并联后绝缘回路会互相影响所以并联前后的绝缘检测策略要分开设置。4.3 堆级系统联调与保护定值验证堆级联调的重点是BAMS和PCS、EMS的交互这个过程非常考验代码逻辑的严谨性因为涉及逻辑几乎都是跨系统的。先做通信测试。BAMS和PCS之间的接口协议比如Modbus TCP或IEC 61850要先联调通重点看以下几个信号允许充电电流、允许放电电流、充电请求、放电请求、故障跳闸信号。每一路信号都要做“0/1翻转测试”——置1时确认PCS能正确响应置0时确认能正确解除防止逻辑写反。我在现场就遇到过BAMS因为字节序和PCS对不上导致允许充电电流在PCS侧被解析成负数结果PCS直接报故障停机的情况这种问题靠经验很难猜必须靠逐字节核对协议文档。然后做功率联调。PCS按额定功率的10%、50%、100%逐级加载观察BAMS上报的总压、SOC、温度等数据是否稳定簇间电流分配是否合理。如果发现某一簇电流明显大于其他簇先检查该簇的直流内阻——可能是连接排螺丝没拧紧、接触电阻偏大。并联在同一个直流母线上面的多个簇其SOC差异会直接导致簇间环流这是堆级联调中最常见的问题之一后面我会在故障章节细说。最后是保护定值验证这也是全流程里我最看重的一块。每一级保护都要做一次真实的“故障注入”不能只靠软件模拟。比如在模组级要真正把一个电芯电压抬高到过压阈值以上确认BMU上报、BCU判断、继电器断开整个链路的反应时间在堆级要模拟PCS异常过流确认BAMS能正确下发降额或跳闸信号。整个故障注入测试要形成一张表格逐一打勾记录每个动作的触发时间、报文内容和执行结果这些数据后面做安全评估和问题溯源时都是最直接的证据。5. 常见问题与排查技巧实录5.1 通信不稳、丢帧先查物理层BMS调试和运行中最常见的故障就是通信丢帧。很多人一上来就查协议、改软件但其实大部分丢帧问题的根源都在物理层端子氧化、接口接触不良、线缆屏蔽层接地不规范、通信线离动力线太近。排查时先用示波器看通信波形的幅值和边沿陡峭程度明显衰减或畸变的优先处理线缆和接口不要先动软件。菊花链通信还有一个特有现象一旦某一节点AFE芯片异常整条链都会瘫掉。排查时要从链路中间断开逐段定位是哪个节点的问题所以建议在软件里做一个“邻居节点扫描”功能每次上电后自动扫描整条链路生成节点拓扑图哪个节点掉线一目了然。这个功能我几乎在每个项目里都会加排查效率提升非常明显。5.2 SOC跳变别急着骂算法SOC跳变是储能BMS最让人头疼的问题之一。跳变原因很多但有一个非常隐蔽的原因是电流采样漂移。安时积分对电流的精度非常敏感如果电流传感器零点漂移了0.5%一天下来积分误差就会累积到几度电。排查时先看静止状态下的电流采样值是否为零不为零就先做零点校准。另一个常见原因是OCV校正在错误的时间点触发。磷酸铁锂电池的OCV曲线在中间平台太平缓电压小偏差就会导致SOC大跳变。所以校正必须加条件只有长时间静置比如2小时以上、电流小于某个阈值比如0.02C、温度在指定范围内才允许用OCV查表更新SOC。条件写得越严跳变越少。5.3 簇间SOC不一致与环流问题堆级最典型的故障是簇间环流。多簇并联之后如果两簇SOC不同就会因为电压差产生环流SOC高的那簇在放电时出电流大SOC低的在充电时进电流大形成一个恶性循环。解决这个问题首先要靠BCU层面的SOC估算尽量准确其次要靠BAMS的功率分配策略来“削峰填谷”在充电阶段对SOC偏高的簇适当降低充电电流在放电阶段对SOC偏低的簇限制放电电流。这里的关键技术叫做“簇间均衡”是在堆级实现的手段不是硬件均衡电路而是通过功率分配策略来实现。调试时要注意功率分配的周期不能太短否则会被PCS执行延迟放大成振荡一般建议在秒级以上。5.4 绝缘检测误报绝缘检测误报在雨天、潮湿环境特别常见。不是真的发生了接地故障而是凝露导致绝缘电阻下降触发了报警阈值。为了减少误报一方面要加强电池簇内部的绝缘设计和除湿措施另一方面检测算法上可以增加“时间确认”逻辑——绝缘电阻连续低于阈值一段时间比如5秒才真正报故障避免瞬时波动触发。另外并联簇增多之后簇间绝缘检测会互相“拉低”。因为电桥法检测的是整个直流系统的绝缘电阻一簇的绝缘值偏低会把所有簇的对地绝缘显示都拉低。排查时要断开簇间联络逐簇复测绝缘电阻才能确定故障簇。5.5 现场问题速查表现象可能原因排查步骤解决措施通信丢帧频繁屏蔽接地不良、端子氧化、CAN负载过高示波器看波形查负载率重新接地、换端子、分CAN通道菊花链整段掉线中间节点AFE异常、隔离电源时序不对逐段断链定位、查上电时序更换AFE板、调整电源启动顺序SOC缓慢偏移电流传感器零点漂移校准电流零点软件做零点补偿、定时自校SOC瞬时跳变OCV校正条件不严检查校正触发条件增加静置时间、电流阈值约束簇间环流大SOC不一致、连接排接触电阻大对比各簇SOC、测内阻簇级功率分配均衡、重新紧固连接件绝缘检测误报凝露、并联簇互相影响断开并联复测、增加时间确认绝缘设计优化、软件延时确认6. 从三级架构实际项目里的一点体会三级架构这个概念说起来简单真正做扎实需要大量细节。我自己做过几个储能项目之后最大的体会是架构的每一级都必须有明确的“能力边界”。BMU不越级上报给BAMSBCU不越级去执行EMS的策略BAMS也不跨级去管具体某个模组的均衡。边界清晰系统才能稳定。另一个体会是保护逻辑和通信逻辑一定要分开。通信链路可以设计成商用的、可降级的但保护链路必须独立、可靠、快。所以我在项目里一直坚持过压、欠压、过流、过温这些硬保护必须在BCU这一级做“本地直判”不依赖BAMS下指令。记住通信断了系统还可以降功率运行但保护判断迟了可能就会烧东西这个优先级不能乱。最后分享一个小技巧三级架构联调的时候建议先做“数据体检”把所有BMU上报的电压温度一致性、BCU总压总流精度、BAMS汇总数据的完整性都过了关再去做充放电策略联调。很多人一上来就急着调功率结果数据底子不准策略怎么调都是空中楼阁回头再排查浪费的时间比前面所有联调加起来还多。按级联调、逐级闭环这才是三级架构真正落地项目的正确打开方式。
返回列表