1. BMS总体架构设计

BMS总体架构设计 学习卡片

任务定义

设计一个适用于电动汽车电池管理系统(BMS)的分层软件架构,明确各层职责、模块划分及模块间接口关系。本案例交付物为:一份分层架构设计方案、模块接口定义表、以及一张架构拓扑SVG图。该架构需满足可扩展性(支持不同电池拓扑)与可维护性(模块解耦)要求。

分层架构设计

采用四层架构:驱动层(Driver Layer)、中间层(Middleware Layer)、应用层(Application Layer)与服务层(Service Layer)。各层职责如下:

  • 驱动层:直接操作硬件外设,包括AFE(模拟前端)采集芯片驱动、温度传感器驱动、接触器驱动、电流传感器驱动。向上提供统一的数据读取/控制接口,屏蔽寄存器级操作差异。
  • 中间层:提供硬件无关的抽象服务,包括数据校验(CRC/Checksum)、滤波算法(移动平均/卡尔曼)、故障诊断框架(阈值检测/状态机)、通信协议封装(CAN/Modbus)。该层不感知业务逻辑。
  • 应用层:实现BMS核心算法,包括SOC估算(扩展卡尔曼滤波)、SOH评估(容量/内阻辨识)、均衡控制(被动均衡策略)、绝缘检测、热管理控制。该层调用中间层服务,不直接访问硬件。
  • 服务层:面向整车或云端,提供状态上报(SOC/SOH/电压/温度)、告警事件推送、参数标定接口、OTA升级服务。该层通过标准接口与上层交互。

模块接口定义

接口名称方向数据内容调用关系
AFE_ReadVoltage()驱动→中间层电芯电压数组(mV)中间层采集任务调用
AFE_ReadTemp()驱动→中间层温度点数组(0.1℃)中间层采集任务调用
Filter_Process()中间层→应用层滤波后电压/电流值SOC/SOH算法调用
Diag_Check()中间层→应用层故障码+严重等级应用层状态机调用
SOC_Estimate()应用层→服务层SOC值(%)服务层周期上报
Balance_Control()应用层→驱动层均衡开关指令经中间层转发至AFE

架构拓扑SVG

服务层 Service Layer 状态上报 告警推送 参数标定 OTA升级 应用层 Application Layer SOC估算 EKF算法 SOH评估 容量/内阻 均衡控制 被动均衡 热管理 风扇/加热 绝缘 中间层 Middleware Layer 数据校验 CRC 滤波算法 故障诊断框架 通信协议 驱动层 Driver Layer AFE采集驱动 温度传感器 接触器驱动 电流传感器 均衡指令下发

接口调用时序说明

以SOC估算为例说明跨层调用路径:驱动层AFE采集芯片通过SPI读取电芯电压与温度,经中间层CRC校验后送入滤波模块;滤波后的数据由应用层SOC估算任务调用扩展卡尔曼滤波算法,结合上一周期SOC值与当前电流积分,输出最新SOC;该结果经服务层封装为CAN报文周期上报至整车控制器。均衡控制路径为:应用层根据电芯压差判断需均衡的电池编号,通过中间层协议封装下发至驱动层AFE寄存器,AFE接通对应均衡电阻。

// bms_architecture.h
#ifndef BMS_ARCHITECTURE_H
#define BMS_ARCHITECTURE_H

#include <stdint.h>

/* ========== 分层架构定义 ========== */
typedef enum {
    LAYER_DRIVER,      // 驱动层:硬件抽象
    LAYER_ALGORITHM,   // 算法层:核心算法
    LAYER_MANAGEMENT,  // 管理层:状态管理
    LAYER_APPLICATION  // 应用层:用户接口
} BMS_Layer_t;

/* ========== 模块ID定义 ========== */
typedef enum {
    MOD_ADC_DRIVER,        // 驱动层-ADC采集
    MOD_TEMP_SENSOR,       // 驱动层-温度传感器
    MOD_CURRENT_SENSOR,    // 驱动层-电流传感器
    MOD_VOLTAGE_SENSOR,    // 驱动层-电压传感器
    MOD_SOC_ESTIMATION,    // 算法层-SOC估算
    MOD_SOH_ESTIMATION,    // 算法层-SOH估算
    MOD_CELL_BALANCE,      // 算法层-均衡控制
    MOD_FAULT_DETECT,      // 算法层-故障检测
    MOD_STATE_MACHINE,     // 管理层-状态机
    MOD_THERMAL_MGMT,      // 管理层-热管理
    MOD_CHARGE_CTRL,       // 管理层-充电控制
    MOD_DISCHARGE_CTRL,    // 管理层-放电控制
    MOD_CAN_INTERFACE,     // 应用层-CAN通信
    MOD_DISPLAY,           // 应用层-显示
    MOD_ALARM              // 应用层-告警
} BMS_Module_t;

/* ========== 模块接口结构 ========== */
typedef struct {
    BMS_Module_t module_id;
    BMS_Layer_t layer;
    void (*init)(void);
    void (*process)(void);
    void (*deinit)(void);
} BMS_ModuleInterface_t;

/* ========== 层间数据流结构 ========== */
typedef struct {
    float cell_voltages[128];    // 单体电压 (V)
    float pack_voltage;          // 总电压 (V)
    float pack_current;          // 总电流 (A)
    float cell_temps[64];        // 单体温度 (℃)
    float soc;                   // 荷电状态 (%)
    float soh;                   // 健康状态 (%)
    uint16_t fault_flags;        // 故障标志位
    uint8_t state;               // 当前状态
} BMS_DataFlow_t;

/* ========== 架构初始化 ========== */
void BMS_Arch_Init(void);
void BMS_Arch_Run(void);

#endif // BMS_ARCHITECTURE_H

验证方法

本案例为架构设计类任务,验证方式为静态评审与接口一致性检查:

  1. 检查各层模块是否满足职责单一原则——驱动层不含算法逻辑,应用层不直接操作寄存器;
  2. 验证接口方向是否与调用关系一致——数据采集为自下而上,控制指令为自上而下;
  3. 确认新增电池拓扑(如从12串扩展到16串)时,仅需修改驱动层AFE配置参数,应用层算法无需改动。

判定标准:若上述三项检查全部通过,且SVG图中各层模块与接口定义表一一对应,则架构设计合格。