1. 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
接口调用时序说明
以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
验证方法
本案例为架构设计类任务,验证方式为静态评审与接口一致性检查:
- 检查各层模块是否满足职责单一原则——驱动层不含算法逻辑,应用层不直接操作寄存器;
- 验证接口方向是否与调用关系一致——数据采集为自下而上,控制指令为自上而下;
- 确认新增电池拓扑(如从12串扩展到16串)时,仅需修改驱动层AFE配置参数,应用层算法无需改动。
判定标准:若上述三项检查全部通过,且SVG图中各层模块与接口定义表一一对应,则架构设计合格。