← 返回项目列表

移动式动力电池控制单元(BMS)

基于 STM32F103C8T6 标准库结合 BQ76920 前端芯片,采用 RT-Thread 实时操作系统,实现高精度状态估算、毫秒级硬件保护、被动均衡及集成 CAN/UDS 诊断通信,满足标准 ECU 节点的网络化管理与维护需求。

一、项目概述

以 STM32F103C8T6 为主控,搭配 BQ76920 电池前端芯片,基于 RT-Thread 实时操作系统开发。搭建 CMake + GCC + OpenOCD 交叉编译调试链,采用简易 AUTOSAR 三层架构(ASW/RTE/BSW)实现软硬件解耦。基于 RT-Thread 拆分采集、保护、分析、均衡、通信 5 个独立任务,通过多线程调度保障实时性。SOC 估算以开路电压法标定初始值,结合安时积分与温度补偿算法提升运行精度。依托 BQ76920 与外部中断实现短路、过流、欠压等硬件级毫秒断电保护;采用被动均衡策略,通过软件定时器精准控制电压回升静置时长。基于 CAN 总线实现 BMS 状态上报、电芯数据交互,并集成 UDS 统一诊断服务,支持标准诊断会话切换、数据读取与故障码查询,适配 ECU 标准化运维需求。

二、硬件与技术栈

核心硬件

核心技术

三、系统架构与核心机制

ASW-RTE-BSW 三层架构实现完全解耦。系统拆解为采集、保护、分析、均衡、信息交互 5 个独立线程,通过优先级调度并行运行;互斥锁解决 I2C 总线竞态,信号量实现线程同步与中断唤醒;BQ76920 硬件特性 + 外部中断实现毫秒级断电保护;软件定时器精准控制被动均衡时序,提升均衡效率。

四、核心功能

五、关键难点与解决方案

Keil 工程依赖与调试流程不开放 — 搭建 CMake + ARM GCC 构建体系,配合 OpenOCD、ST-Link 与 Cortex-Debug 实现命令行编译、烧录与在线调试,替代 Keil 完成开发闭环。

外设并发与 CPU 开销优化 — 针对串口 FinSH 命令行高频读取占用 CPU 的问题,设计了"硬件中断 + 环形缓冲区 + 信号量"机制。线程阻塞等待中断信号量唤醒,彻底消除 CPU 轮询开销,实现数据无丢失。

多线程数据竞态保护 — 针对不同任务频繁共享 I2C 总线和底层采集数据,采用互斥锁同步机制,确保并发访问下数据安全性与业务逻辑的时序稳定。

六、应用场景

电动工具电池包、便携式储能电源、工业锂电模组、小型新能源设备、锂电池教学实训平台。

查看源码 ▶ 演示视频