乐于分享
好东西不私藏

电池管理系统BMS软件设计——底层驱动(BSP)深度解析

电池管理系统BMS软件设计——底层驱动(BSP)深度解析

BMS底层驱动(BSP,Board Support Package)是软件与硬件的桥梁,直接决定电芯采样精度、保护响应速度、通信稳定性与系统可靠性,是车规级/工业级BMS的核心基石。

本文围绕AFE驱动、ADC/GPIO/CAN/Timer、EEPROM/Flash 读写、看门狗/系统时钟六大核心模块,提供工程化、可直接落地、符合功能安全要求的深度设计方案。

一、BSP总体架构(BMS标准分层)

BMS 软件采用严格分层架构,保证高内聚、低耦合、易维护、易移植:

plaintext

应用层(Application)

├── SOC/SOH 算法 

├── 均衡控制 

├── 保护策略(过压/欠压/过温/过流)

├── 故障诊断 

------------------------------------------------ 

驱动层(BSP) 

 ├── AFE驱动(电芯采集) 

 ├── ADC驱动(总压/电流采样) 

 ├── GPIO驱动(继电器/指示灯) 

 ├── CAN驱动(整车/上位机通信) 

 ├── Timer 驱动(定时采样/定时调度) 

 ├── EEPROM/Flash 驱动(参数存储) 

 ├── WDG看门狗(系统安全) 

 ├── CLOCK系统时钟(时序基准)

 ------------------------------------------------ 

硬件层(MC+AFE+外设)

BSP 设计原则:

  1. 硬件无关化,易移植
  2. 无阻塞、可重入、线程安全
  3. 异常自检+故障上报
  4. 符合车规:ISO26262、MISRA C
  5. 采样精度、实时性优先

二、AFE 驱动(电芯电压 / 温度采集核心)

AFE(Analog Front End)是BMS最重要的外设,负责电芯电压、温度、均衡控制

2.1 AFE通信接口类型

  1. SPI接口
    TI BQ76930/76952、ADI LTC6811
  2. I2C接口
    中低压小串数BMS
  3. 菊花链(Daisy Chain)
    多串BMS主流(LTC6813、BQ79616)

车规多串BMS首选:菊花链

  • 抗干扰强
  • 布线少
  • 支持16串~200串+

2.2 AFE 驱动核心功能

  1. 电芯电压采集
  2. NTC温度采集
  3. 被动均衡控制
  4. 故障检测(过压/欠压/过温)
  5. CRC校验(通信可靠性)

2.3 AFE驱动标准流程

plaintext

1. AFE硬件初始化(GPIO/SPI/菊花链)

2. 配置寄存器(采样速率/均衡使能) 

3. 启动ADC转换 

4. 读取电压数据 

5. 读取温度数据 

6. 读取故障状态 

7. CRC 校验 

8. 数据校准+滤波 

9. 均衡开关控制

2.4 关键工程要点

  • 必须带CRC校验
    防止电磁干扰导致采样错误
  • 采样时序严格控制
    10ms~100ms可调
  • 菊花链通信必须延时、同步、重试机制
  • 均衡采用分时控制,防止过热
  • 异常自动重启AFE

三、MCU片上外设驱动

3.1 ADC 驱动(总压、电流采样)

功能

  • 电池总电压采样
  • 电流采样
    (分流器/霍尔传感器)
  • 辅助电压采样(12V/5V/3.3V)

工作模式

  • DMA模式
    (推荐,不占用CPU)
  • 连续转换
  • 扫描多通道

精度保障

  • 12bit/16bit 高精度
  • 硬件过采样
  • 软件滑动平均滤波
  • 基准电压校准

驱动流程

plaintext

ADC初始化→启动DMA转换→中断完成→数据滤波→应用层读取

3.2 GPIO驱动(继电器、指示灯、FET)

功能

  • 主正/主负继电器控制
  • 预充继电器
  • 风扇/蜂鸣器
  • 状态指示灯
  • 高压接触器反馈检测

驱动要求

  • 输出推挽/开漏可配置
  • 输入上拉/下拉
  • 电平防抖
  • 故障状态实时读取
  • 支持高优先级紧急关断

安全设计

  • 上电
  • 默认关闭所有输出
  • 支持硬件互锁
  • 故障时立即切断输出

3.3 CAN驱动(BMS核心通信)

功能

  • 与整车VCU通信(CAN2.0B)
  • 上报电压、电流、温度、SOC、故障
  • 接收充电指令、预充指令

标准配置

  • 波特率:500kbps/250kbps
  • ID标准:扩展帧(29bit)
  • 中断接收+DMA发送
  • 离线自动恢复
  • 硬件滤波

BMS必实现机制

  • 总线错误监测
  • 离线重连机制
  • 通信超时检测
  • 重要数据双备份
  • 周期发送(10ms/50ms/100ms/500ms)

3.4 Timer定时器驱动(系统心跳)

功能

  • 系统时基(1ms滴答)
  • 采样定时
  • 触发
  • 均衡定时控制
  • 任务调度
  • 延时函数

关键定时器

  1. Systick Timer
    系统心跳1ms
  2. 通用定时器
    采样周期10ms
  3. 高级定时器
    PWM(风扇/均衡)

设计规范

  • 所有任务基于时间片
  • 不使用软件死等延时
  • 高精度、无漂移

四、EEPROM/Flash 读写驱动(参数存储)

4.1 功能

  • 存储SOC校准值
  • 存储电芯健康参数SOH
  • 存储故障日志
  • 存储配置参数(过压/欠压阈值)
  • 存储序列号、生产信息

4.2 存储介质

  1. 片内Flash
    程序存储+参数区
  2. 外置 EEPROM(I2C)
    AT24C02/04/08/64
  3. 外置 SPI Flash
    W25Q系列

4.3 驱动核心机制

  • 磨损均衡
    (延长寿命)
  • 双区备份
    (防止掉电损坏)
  • CRC校验
  • 掉电保护
  • 自动修复

4.4 标准读写流程

plaintext

读→校验CRC→正确则使用

写→擦除→写入→校验→回读确认

4.5 车规要求

  • 至少保存10年数据
  • 支持10万次擦写
  • 异常掉电不丢失、不损坏

五、看门狗驱动(系统安全底线)

5.1 功能

防止程序跑飞、死循环、死机,保证系统故障后自动重启。

5.2 类型

  • 独立看门狗IWDG
    (推荐,时钟独立)
  • 窗口看门狗WWDG

5.3 BMS喂狗策略

  • 周期:500ms~1s
  • 必须在主循环正常流程中喂狗
  • 中断异常、采样异常禁止喂狗
  • 故障保护后强制重启

5.4 安全机制

  • 启动后无法关闭
  • 一旦启动,必须定时喂狗
  • 重启后记录复位原因

六、系统时钟配置(MCU心脏)

6.1 功能

为所有外设提供稳定时钟源,决定系统运行速度与精度。

6.2 BMS标准配置

  • 外部晶振
  •  8MHz/16MHz
  • 系统时钟 48MHz/80MHz/100MHz
  • CAN时钟精准同步
  • ADC时钟确保采样精度

6.3 时钟树结构

plaintext

晶振→PLL倍频→AHB总线→APB1/APB2

    →CAN时钟

    →ADC时钟

    →Timer时钟

6.4 异常处理

  • 时钟失效自动切换内部时钟
  • 监测时钟故障并上报

七、BSP驱动标准化API设计(可直接用于项目)

为了便于维护与移植,BMS必须提供统一API接口:

AFE

plaintext

void AFE_Init(void);

uint8_t AFE_GetVoltage(uint16_t *voltBuf); 

uint8_t AFE_GetTemp(uint16_t *tempBuf); 

void AFE_SetBalance(uint8_t ch, uint8_t enable);

ADC

plaintext

void ADC_Init(void);

float ADC_GetTotalVoltage(void); 

float ADC_GetCurrent(void);

CAN

plaintext

void CAN_Init(void);

void CAN_SendMsg(uint32_t id, uint8_t *data, uint8_t len); 

uint8_t CAN_ReceiveMsg(CAN_MsgTypeDef *msg);

EEPROM

plaintext

void EEPROM_Init(void);

uint8_t EEPROM_Write(uint16_t addr, uint8_t *data, uint16_t len); 

uint8_t EEPROM_Read(uint16_t addr, uint8_t *data, uint16_t len);

WDG

plaintext

void WDG_Init(void);

void WDG_Feed(void);

八、车规级BSP设计强制规范(ISO 26262)

  1. 所有驱动必须带错误返回值
  2. 所有通信必须带CRC校验
  3. 所有采样必须滤波+校准
  4. 所有输出必须安全默认态(关闭)
  5. 须监测电源、时钟、ADC、CAN、AFE 状态
  6. 代码遵循MISRAC2012
  7. 禁止使用全局变量随意修改
  8. 关键数据双备份、三校验

总结

BMS底层驱动(BSP)是整个系统的硬件抽象层与安全基石,包含:

  • AFE驱动
    电芯采集精度
  • ADC/CAN/Timer/GPIO
    系统实时控制
  • EEPROM/Flash
    数据持久化
  • WDG/Clock
    系统稳定性与安全性

高质量BSP必须满足:高精度、高实时、高可靠、强抗干扰、易维护、符合车规功能安全

END

服务在线 扫码沟通↑

更多精彩 欢迎关注↓