ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

储能BMS架构与通信组网:从模组到集装箱的完整设计指南

储能BMS架构与通信组网:从模组到集装箱的完整设计指南 年初在调试一个 5MWh 的储能集装箱项目电芯模组刚压装完柜子里密密麻麻的采样线束铺开做现场集成的小伙子看着整柜电芯问我这么多电芯到底是怎么保证它们不打架的这个问题听着基础但恰好戳中了储能 BMS 为什么要做分层设计、通信为什么要分级组网的核心。如果你正在做储能系统集成、想转行做 BMS 软硬件开发或者已经入了门但一直对模组到集装箱这一整条链路没有完整概念这篇文章基本就是给你准备的。我会把一套典型的储能 BMS 从硬件架构、软件架构到通信组网按实际项目里的拆解顺序一条条说清楚包括一些平时文档里不写的取舍逻辑和踩坑过程。1. 先看清BMS的分层逻辑为什么非要模组到集装箱逐级拆1.1 一级集中管到底为什么走不通很多刚接触储能的人第一反应是既然要监测每一颗电芯那直接找一颗大算力的主控把整柜上千颗电芯的采样线全部拉过来不就行了这个方案在实验室里可以到工程现场根本站不住脚。一个 5MWh 储能集装箱按常见 280Ah 电芯来算大概是 1P52S × 8 簇的组法也就是一簇 52 颗电芯串联整柜 8 簇总共 416 颗电芯。如果再算上温度点电芯温度传感器数量一般要覆盖正负极极柱和模组表面数量轻松超过 800 个。我见过一些早期项目试图用集中式方案结果就是每簇需要一根几十芯的采样线束往集装箱控制柜里走线束又粗又长连接器端子密密麻麻。这带来两个致命问题一是线束成本和装配工时爆炸二是每一个连接器端子都是潜在的故障点现场只要有一颗端子接触不良整簇采集数据就会出问题排查起来极其痛苦。还容易忽略的是信号衰减和共模电压问题。一串 52 颗电芯串联母线电压就是 166.4V 左右3.2V × 52集中式方案里采样芯片和主控之间的隔离设计难度会翻倍。所以规模化储能系统里BMS 从物理结构和职责上必须拆开。1.2 三级架构各自管什么当前成熟的储能 BMS 架构基本是三级的对应物理上的模组—电池簇—集装箱/系统层级物理对应常见名称主要职责一级电池模组/高压箱内部BMU电池管理单元电芯电压、温度采集被动均衡热敏电阻检测二级电池簇BCU簇控制单元簇级电流采集、绝缘检测、接触器控制、故障保护三级整个集装箱BAU系统管理单元与 PCS、EMS、消防、温控联动策略调度数据存储三级之间是逐级汇总的关系BMU 把电芯数据通过隔离通信汇总到 BCUBCU 做簇级判断和保护再把簇的状态传给 BAUBAU 在箱级做整体协同。这个分层最直接的收益是故障隔离。某个模组挂了维护人员可以只把那一个模组所在簇隔离出来其他簇继续运行如果是集中式方案整柜或者整堆都得停。另一个收益是通信压力均摊。BMU 和 BCU 之间的数据量很大但距离短可以用高速隔离通信BCU 到 BAU 的数据是已经压缩过的状态量和参数量小用稳定可靠的现场总线就够。后续做容量扩展时往集装箱里加簇只需要在 BCU 层并联接入BAU 不需要改动硬件这也是业主和集成商特别看重的。2. 硬件架构BMU、BCU、BAU各自的责任边界与关键选型2.1 模组级BMU不是一块简单的采样板BMU 的核心是 AFE模拟前端采样芯片市面上主流的方案有 12 通道、16 通道、甚至 18 通道的 AFE 芯片。选择多少通道取决于你用的电芯串数比如 1P52S 的一个模组通常拆成两个采集子板每块子板负责 26 串那就选 32 通道左右是合理的。这里有个很容易踩坑的点AFE 的采样通道数不是越多越好通道多的芯片封装大、布板走线困难而且单颗芯片挂了影响面更大我一般更倾向于模组内多颗小通道芯片 菊花链级联而不是一颗超大通道芯片全包。BMU 板上最容易被忽视的是采样线束入口的滤波和保护。电芯电压采样线是从模组端子直接引过来的现场环境里动力线、接触器动作都会产生强烈的电磁干扰采样线上如果不做 RC 滤波和 TVS 管防护AFE 的采样值会出现周期性跳变。这类问题在实验室联调时根本发现不了因为实验台干净一上集装箱整车柜就原形毕露。均衡电路通常也是放在 BMU 上的。被动均衡就是每串电芯并联一个放电电阻和一个 MOS 开关电芯电压偏高时通过电阻把多余能量放掉。硬件上关键参数是均衡电阻的功率和热设计常见的是 330 欧姆或 100 欧姆级别的电阻对应几十毫安的均衡电流。散热要提前算好因为 BMU 往往被安装在模组侧面空间狭小长期均衡时的热量如果不能及时散掉会影响 AFE 的采样精度。2.2 簇级BCU控制与保护的前沿阵地BCU 是整个 BMS 里责任最重的板卡它直接控制着簇内接触器的吸合和断开。硬件上我通常会把它分成几个功能模块来看一个是主控 MCU 及其最小系统一个是接触器驱动电路一个是绝缘检测电路还有一个是电流采样通路。主控 MCU 的选型主要看两点需要跑多少路 ADC、需要多少个 CAN/UART 外设。以常见设计为例BCU 要同时接收多颗 BMU 的数据、采集霍尔/分流器的电流、控制预充接触器和主接触器、维护绝缘检测、通过 CAN 与 PCS 和 BAU 通信一个 144MHz 以上主频的 ARM Cortex-M4/M7 级别 MCU 是底线如果软件里还要做比较复杂的 SOC 算法比如扩展卡尔曼那就要考虑带 FPU 的型号。接触器驱动是 BCU 硬件设计里最需要慎重的地方。驱动电路要能提供足够的吸合电流和维持电流同时必须做故障回读——通过辅助触点判断接触器是否真实吸合或断开。这个回读逻辑非常重要因为如果接触器触点粘死了软件还认为已经断开那整个保护策略就是空中楼阁。简单说BCU 就是大脑手指令出去必须确认动作真实发生。电流采样一般用霍尔传感器或分流器。分流器精度高、温漂可控但需要隔离放大霍尔安装简单、天然隔离但在小电流下线性度差。储能项目里充放电电流范围很大从几安到几百安我倾向于用分流器加隔离放大器的方案量程覆盖更可靠。注意分流器的采样信号是毫伏级布线要采用开尔文四线制接法避免功率电流在采样回路产生压降误差。2.3 集装箱级BAU调度中枢和对外接口BAU 在硬件上是一块功能更复杂的核心板常见的有两种路线一种是基于高性能 MCU另一种是直接上应用处理器跑 Linux。我最近做的一个项目就是典型的前者路线主控用工业级 MCU外扩一路以太网口、两路 CAN、一路 485、若干 DI/DO对外通过 Modbus TCP 与 EMS 通信。BAU 硬件设计里最麻烦的是接口种类多。它要接消防主机信号干接点、温控系统485 或干接点、PCSCAN 或以太网、EMS以太网、人机交互屏幕HDMI/LVDS还有 GPS/北斗对时模块如果做电网侧储能还需要对时功能来保证数据时间戳一致。这么多接口挤在一块板子上必须做充分的电气隔离和防雷设计尤其干接点输入输出要光耦隔离否则外场雷击浪涌很容易顺着线损掉整块主板。BAU 的存储也很关键。储能系统的运行数据、报警记录需要本地保留至少几个月所以 BAU 上一般会放一片 eMMC 或大容量 NOR Flash软件里做环形覆盖写入。我实际遇到过存储芯片寿命提前耗尽的情况解决方法是把写入频率从每次采集都写降为关键事件定时快照策略既满足数据追溯需求又大幅延长 Flash 寿命。3. 软件架构状态机、SOC估算与均衡策略怎么落地3.1 状态机设计别小看状态迁移的边界条件BMS 软件的核心骨架是一个状态机一般包含初始化、待机、预充电、运行、故障、恢复这几个基本状态。逻辑上不复杂真正的复杂度全在状态迁移条件上。举个例子从待机进入预充必须同时满足没有一级故障、接触器辅助触点状态正确、绝缘检测通过、PCS 无放电命令。任何一条不满足就应该停在待机并上报对应原因。这里有一个很多人容易忽略的点状态机里必须有一个预充超时分支。预充回路的目的是通过预充电阻限制接触器吸合瞬间的冲击电流但如果预充电阻开路、主接触器提前吸合或者 PCS 侧电容短路母线电压就充不上去控制器会一直停在预充流程里。所以我通常在预充流程里加一个 5 秒超时判断如果在规定时间内母线电压没有达到母线电压的 90% 以上果断跳出置故障而不是傻等。实际项目里还经常遇到低压上电 vs 高压上电的两套时序。修辅助电源要先给 BMS 控制电路供电这时候 BMU 可能还没被唤醒BCU 和 BAU 已经起来了。所以状态机初始化时要注意设置等待窗口不能因为 BMU 没有及时上报就误判通信故障否则现场一上电就报一堆通讯异常观感极差。3.2 SOC/SOH估算工程上是组合拳不是单靠算法SOC荷电状态估算在学术圈有一堆高大上的算法但在储能项目里落地我用的还是安时积分 OCV 修正 温度补偿 末端校准的组合策略。安时积分的原理很简单电流对时间积分就是电量变化初始 SOC 加上或减去积分量就是当前 SOC。但问题在于电流传感器有零漂误差积分误差会随时间累积所以必须定期用开路电压做修正。OCV开路电压修正的原理是电池静置足够长时间后端电压和 SOC 有一一对应的关系查表就能得到比较准确的 SOC。问题在于储能电芯工作电流大静置时间很难保证而且磷酸铁锂的 OCV-SOC 曲线在中间区间非常平缓电压差只有几毫伏对应 SOC 变化却是百分之几十。所以单纯的 OCV 查表在磷酸铁锂上不可靠更实用的是把 OCV 修正放在充电末端和长时间静置后触发。我分享一个实际项目里的做法用小电流充电过程中的 dV/dSOC 变化来做充电末端修正。磷酸铁锂电池在接近满充时电压抬升变陡软件通过检测这个拐点把 SOC 校准到 95%~100% 区间再结合安时积分回推当前 SOC。这个方法不需要额外硬件实测稳定性也不错。SOH健康度则更简单多数项目用当前可用容量与初始额定容量的比值来表征需要注意的是这个值会随温度浮动不建议直接用瞬时计算值做保护判断。3.3 均衡策略被动均衡是主流但触发条件有讲究储能 BMS 的均衡策略绝大多数是电芯级被动均衡因为主动均衡电路复杂、成本高在储能这种单簇电芯数量大的场景里性价比不高。被动均衡的硬件很简单就是给每颗电芯并联放电电阻但软件触发条件如果拍脑袋定效果往往很一般。我建议的均衡策略是分层触发首先是压差阈值比如一簇内任意两串电芯压差大于 50mV 时开启均衡其次是 SOC 差阈值因为不同电芯在相同电压下 SOC 可能差异很大尤其磷酸铁锂平台期。均衡时机也要挑最好放在充电后期浮充阶段或者电池静置阶段尽量避免在深度放电过程中开启均衡因为那时候电芯本就在往外送电均衡电流的意义不大还可能影响整簇功率输出。均衡停止条件同样重要。不要等到压差完全归零才停因为采样本身有误差最后一两 mV 的压差通常是纹波和采样噪声继续均衡反而会引入过放风险。一般压差小于 15mV 且维持一段时间比如 5 分钟就停止均衡。再一个细节是均衡时长累计保护单片电芯持续均衡时间超过一定值例如 48 小时要强制停一下防止长时间发热。4. 通信组网从板内菊花链到箱级以太网的完整链路4.1 模组内部AFE菊花链通信的选型与权衡BMU 内部 AFE 和主控之间通常采用菊花链通信最常见的是 SPI/UART 隔离传输。为什么不是每颗 AFE 都独立接一根 SPI 线到 MCU因为模组里电芯串数多并行 SPI 需要大量信号线隔离器件成本成倍上升而菊花链只需两根差分线就能把所有 AFE 串起来线束数量锐减这对装配和可靠性都是好事。菊花链有两种拓扑线型和环形。线型比较简单从主控出发一根链串到底环形则是在末端把信号绕回主控。我做过的项目用的是线型因为环形需要在模组里多走一根回线空间上不划算。线型的弱点是一颗 AFE 挂了后面所有的 AFE 都会通信中断所以实际使用中要开启 AFE 的看门狗和断链检测一旦异常上报 BCU由 BCU 把对应模组隔离出来。菊花链通信距离一般几十厘米到一两米双绞线排布要注意信号线不要跟模组内的电压采样线走同一个线束槽如果没法避免至少保证双绞且两端做好共模滤波。我见过一个项目因为 AFE 通信线和功率线穿同一根波纹管充电大电流时 AFE 频繁复位排查了将近两周才锁定位最后靠改变走线路径解决。4.2 簇级组网CAN总线是绝对主力BCU 和 BMU、BCU 和 PCS/BAU 之间的通信目前主流还是 CAN 总线。储能项目里 BMU 数量多一簇可能挂 4~6 个 BMU再加上 BCU 本身总线节点 10 个以内CAN2.0 的 250kbps 或 500kbps 波特率完全够用没必要为了追求速率盲目上位 CAN FD因为 CAN FD 对线束和收发器的要求更高工程收益不高。CAN 组网最要紧的是帧 ID 规划和数据周期规范。我习惯把帧 ID 分为几个功能区电芯电压数据帧、温度数据帧、状态帧、报警帧、均衡控制帧、参数读写帧。每个 BMU 用基地址加偏移量的方式分配 ID例如 BMU 地址 1 的电压数据帧是 0x101地址 2 的是 0x111这样在 BCU 软件里解析逻辑可以复用。周期上电压和温度这类量用 500ms 周期上报报警帧用事件触发加重传参数读写帧用请求-应答。CAN 组网容易翻车的地方在物理层尤其是终端电阻和分支长度。某簇最末端 BMU 如果漏接了 120 欧姆终端电阻总线上会出现明显反射表现为零星错误帧和偶发通信超时。现场检查时用万用表量一下 CANH-CANL 之间的电阻值正常应该约 60 欧姆如果测到 120 或者接近 0基本就是终端电阻配置错了。4.3 集装箱级组网以太网、Modbus TCP与时钟同步集装箱级 BAU 和 EMS 之间基本是工业以太网 Modbus TCP 协议。为什么不用 CAN因为 EMS 通常部署在上位机或者后台系统需要同时管理多个储能集装箱、PCS、变压器等设备以太网不管是带宽、路由能力还是软件生态都远比 CAN 合适。Modbus TCP 的组网套路是先规划寄存器地址表。一套储能 BMS 对外要暴露的数据包括总电压、总电流、SOC、SOH、最高/最低单体电压、最高/最低温度、绝缘电阻、报警/故障状态字、各类计数器、控制命令字如允许充电、允许放电、紧急停机等等。寄存器地址表在项目启动阶段就要定下来不然后期 EMS 同事天天找你改协议非常消耗感情。时钟同步是集装箱级通信里容易被轻视的点。储能系统需要做电网调度响应也涉及事故追溯如果 BAU 和 PCS 的时间不一致事后分析告警先后就会非常困难。当前工业项目里常用 SNTP简单网络时间协议从 EMS 侧同步时间条件允许也可以用 PTP 做高精度对时。我在项目里至少保证 BAU 本地有一个带电池备份的 RTC即使外部对时通道断了本地时间也不至于飞到离谱的程度。4.4 BMS调试上位机与常用工具开发调试阶段要有一套好用的上位机。BMS 通用上位机这类工具在行业里很流行原理就是通过 CAN 转 USB 或者其他网关设备把 BMS 的内部数据读上来显示、标定参数。我最常用的组合是 PCAN 或广成 CAN 卡加开源的 BUS Master以及 Wireshark 抓 Modbus TCP 报文。调试时有一件事建议早点做给自己的报文协议做一个总线记录器功能。在 BCU 或 BAU 里周期性地把最近一段时间的原始帧、事件帧滚存到 Flash实际联调出问题的时候靠现场事故时间戳去抓存储区里的历史帧往往比让现场同事挂分析仪慢慢复现要快得多。很多看似偶发的通信问题就是这么在事后回放中一帧一帧查出来原因的。5. 实测中的通信故障排查链路三个典型问题5.1 菊花链偶发采集异常先怀疑线束再怀疑芯片有一次集装箱整柜测试发现某个模组的 BMU 每隔一段时间会报一次电压数据无效持续几百毫秒又自己恢复。一开始我怀疑 AFE 芯片有问题换了子板仍然偶发。后来用示波器同时抓 AFE 通信线上的波形和现场动力线上的电流波形发现每一次通信异常都发生在充电模块功率往上调的瞬间波形毛刺明显。问题根源是 AFE 菊花链的差分信号线有一段和模组加热片电源线平行走了 30 厘米动力线上的 di/dt 通过耦合干扰了通信。解决思路不是换芯片而是把加热片电源线和通信线拉开通信线改为屏蔽双绞线、屏蔽层单端接地同时在 AFE 通信接口入口加共模电感问题彻底消失。这个案例给我的经验是菊花链通信抗干扰设计线束路径优先级最高滤波电路只是兜底。5.2 CAN总线错误帧终端电阻和分支是重灾区某个项目现场一到中午高温时段簇内就会出现PCS 通信断开告警之后又自动恢复。这个故障特别像热噪声引起的位错误但排查下来发现跟高温关系不大。我们用 CAN 分析仪挂到总线上抓统计计数发现错误帧集中在簇内两个特定 BMU 之间而且复位计数在每分钟几十次。最后的根因非常朴素这两个 BMU 之间的一段 CAN 线绕得特别长形成了一段接近 2 米的分支线而现场接线时把终端电阻并接在分支末端而没有并接在总线主干末端。CAN 总线规则要求终端电阻必须放在总线最远端分支越短越好。我们把两个 BMU 的位置调整终端电阻移回主干末端错误帧瞬间清零。排查这种问题最有效的工具就是支持错误帧计数和 CAN 总线波形的分析仪单纯用逻辑分析仪看数据很难定位物理层问题。5.3 Modbus TCP偶发超时不要一上来就改软件有一次联调时 EMS 频繁上报与 BAU 的 Modbus TCP 读超时最开始大家默认是 BAU 软件处理不过来差点开始重构协议栈。我让 EMS 同事先抓包抓了几分钟发现超时前总有 ARP 请求发出但没有响应。进一步查交换机端口 MAC 表发现现场有人把一个调试电脑网线接到了同一个交换机而这个调试电脑的 IP 地址和 BAU 的网关重复导致 ARP 冲突。这个问题跟 BMS 软件本身没有半毛钱关系纯粹是现场网络规划混乱。后来把所有设备的 IP 和网线接线整理成一张表给调试设备单独划分 VLANModbus 超时问题再没出现。经验是以太网类故障第一反应永远是抓包看底层不要急于怀疑应用层逻辑。6. 设计阶段就绕不开的几个致命细节6.1 接地、屏蔽与隔离储能 BMS 的硬件设计里接地和屏蔽是最容易被先跑起来再说心态忽略的。高压侧采样、低压侧控制、通信接口、动力回路彼此之间如果没有清晰的接地策略EMC 测试时会被各种高低温、±4kV 脉冲群骚扰打得措手不及。我的建议是采用单点接地的思想BMS 板卡内部数字地、模拟地分开布局在合适的一点汇接对外通信接口一律使用带隔离的收发器CAN 隔离、485 隔离、以太网用网络变压器隔离采样线束屏蔽层只在现场控制柜侧单端接地避免形成地环路。这些原则在原理图阶段就要定死等 PCB 出来再改就非常痛苦了。6.2 分级供电与上下电时序BMS 的供电链路是分级的BAU 由辅助电源 24V 直流供电BCU 也从辅助电源取电BMU 通常需要由高压电池或者模组内部的辅助电源供电。这就导致系统上电时BCU/BAU 可能先于 BMU 就绪。软件里要专门处理这种部件就绪顺序不一致的情况一是延长初始化等待窗口二是给所有上报数据打上有效/无效标志三是在 PCS 控制逻辑里增加整簇数据有效这个前置条件。否则很容易出现上电瞬间 BCU 因为没收到 BMU 数据就误判断链、报故障需要人工复位的尴尬情况。6.3 通信诊断看门狗和状态上报通信链路是 BMS 的生命线但很多项目只在断了以后报警这个层面做了处理。更好的做法是分级诊断对每路通信维护一个通信健康度计数器连续丢失 N 帧报警告连续丢失 M 帧报故障这样现场的运气成分会少很多。我一般把通信故障也分级通信完全中断达到 3 秒就触发簇级保护5 秒触发系统级停机宁可保守不要抱有侥幸。看门狗也值得单独说。不只是 MCU 内部的 IWDG独立看门狗BCU 和 BAU 之间最好还有心跳包机制每隔 500ms 互相发一个生命体征帧任何一方在 2 秒内没收到心跳就要主动把接触器断掉。这个机制成本极低但它是防止通信假死的最后一道防线。做储能 BMS 这几年我最大的体会是这个领域很少有什么炫技的黑科技真正决定项目成败的往往是最基本的架构分层、线束布局、状态机边界、通信诊断这些土办法。不少问题在原理图评审、线束设计阶段多花一小时能省下现场一周的排查时间。如果你现在正准备从零搭一套储能 BMS 的软硬件我劝你先把自己的系统分层画清楚、通信拓扑画清楚、上下电时序表写清楚再开始画原理图和写代码。这几点想明白后面路会顺很多。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进