电池管理系统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 设计原则:
-
硬件无关化,易移植 -
无阻塞、可重入、线程安全 -
异常自检+故障上报 -
符合车规:ISO26262、MISRA C -
采样精度、实时性优先
二、AFE 驱动(电芯电压 / 温度采集核心)
AFE(Analog Front End)是BMS最重要的外设,负责电芯电压、温度、均衡控制。
2.1 AFE通信接口类型
- SPI接口
TI BQ76930/76952、ADI LTC6811 - I2C接口
中低压小串数BMS - 菊花链(Daisy Chain)
多串BMS主流(LTC6813、BQ79616)
车规多串BMS首选:菊花链
-
抗干扰强 -
布线少 -
支持16串~200串+
2.2 AFE 驱动核心功能
- 电芯电压采集
- NTC温度采集
- 被动均衡控制
- 故障检测(过压/欠压/过温)
- 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滴答)
-
采样定时 -
触发 -
均衡定时控制 -
任务调度 -
延时函数
关键定时器
- Systick Timer
系统心跳1ms - 通用定时器
采样周期10ms - 高级定时器
PWM(风扇/均衡)
设计规范
-
所有任务基于时间片 -
不使用软件死等延时 -
高精度、无漂移
四、EEPROM/Flash 读写驱动(参数存储)
4.1 功能
-
存储SOC校准值 -
存储电芯健康参数SOH -
存储故障日志 -
存储配置参数(过压/欠压阈值) -
存储序列号、生产信息
4.2 存储介质
- 片内Flash
程序存储+参数区 - 外置 EEPROM(I2C)
AT24C02/04/08/64 - 外置 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)
-
所有驱动必须带错误返回值 -
所有通信必须带CRC校验 -
所有采样必须滤波+校准 -
所有输出必须安全默认态(关闭) -
须监测电源、时钟、ADC、CAN、AFE 状态 -
代码遵循MISRAC2012 -
禁止使用全局变量随意修改 -
关键数据双备份、三校验
总结
BMS底层驱动(BSP)是整个系统的硬件抽象层与安全基石,包含:
- AFE驱动
电芯采集精度 - ADC/CAN/Timer/GPIO
系统实时控制 - EEPROM/Flash
数据持久化 - WDG/Clock
系统稳定性与安全性
高质量BSP必须满足:高精度、高实时、高可靠、强抗干扰、易维护、符合车规功能安全。



服务在线 扫码沟通↑
更多精彩 欢迎关注↓
夜雨聆风