# bms-stm32 **Repository Path**: zzhou7676/bms-stm32 ## Basic Information - **Project Name**: bms-stm32 - **Description**: STM32 BMS 电池管理系统 基于STM32F7系列微控制器的电池管理系统(BMS),支持24节锂电池串联监控,提供完整的保护、均衡和通信功能。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 6 - **Forks**: 1 - **Created**: 2026-01-29 - **Last Updated**: 2026-10-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: stm32, BMS ## README # STM32 BMS 电池管理系统 ## 项目概述 基于STM32F7系列微控制器的电池管理系统(BMS),支持24节锂电池串联监控,提供完整的保护、均衡和通信功能。 ## 主要特性 - **硬件平台**: STM32F746/F767 (ARM Cortex-M7, 216MHz, 2MB Flash) - **BMS AFE**: BQ76PL455 × 2(支持24节电池) - **实时系统**: FreeRTOS任务调度 - **保护功能**: 过压、欠压、过流、过温保护 - **均衡控制**: 被动均衡,基于电压和SOC - **通信接口**: CAN总线 (SAE J1939协议) - **安全特性**: MPU内存保护,看门狗,CRC校验 - **调试接口**: SEGGER RTT, UART命令行 ## 项目结构 ``` bms_stm32/ ├── Drivers/ # 硬件驱动层 ├── Middlewares/ # 中间件 (FreeRTOS等) ├── Application/ # 应用层代码 ├── Utilities/ # 工具和日志 ├── Tests/ # 测试代码 ├── Documentation/ # 项目文档 ├── Tools/ # 构建和配置工具 ├── CMakeLists.txt # CMake构建配置 └── README.md # 本文件 ``` ## 快速开始 ### 1. 环境要求 - STM32CubeIDE v1.10.0 或更高 - STM32CubeMX v6.7.0 或更高 - ARM GCC工具链 (arm-none-eabi-gcc) - SEGGER J-Link调试器(推荐) ### 2. 构建项目 ```bash # 使用CMake构建 mkdir build && cd build cmake -DCMAKE_TOOLCHAIN_FILE=../arm-gcc-toolchain.cmake .. make # 或者使用STM32CubeIDE直接导入项目 ``` ### 3. 刷写固件 ```bash # 使用J-Link Commander JLinkExe -device STM32F767ZI -if SWD -speed 4000 -autoconnect 1 loadfile bms_stm32.hex ``` ### 4. 监控调试 - 串口终端: 115200bps, 8N1 - CAN分析仪: 500kbps, SAE J1939协议 - FreeRTOS任务监控: SEGGER SystemView ## 配置说明 ### 电池配置 - 电池类型: 锂离子/锂聚合物 - 电池节数: 24节串联 - 标称电压: 3.6V/节 (总86.4V) - 最大电压: 4.2V/节 (总100.8V) - 最小电压: 3.0V/节 (总72.0V) ### 保护阈值 | 保护类型 | 阈值 | 恢复值 | 延时 | |----------|------|--------|------| | 过压保护 | 4.25V | 4.20V | 100ms | | 欠压保护 | 3.00V | 3.10V | 100ms | | 过流充电 | 50A | 45A | 10ms | | 过流放电 | 100A | 90A | 10ms | | 过温保护 | 55°C | 50°C | 1s | ### CAN通信配置 - 波特率: 500kbps - 协议: SAE J1939 - 节点地址: 0x40 (BMS默认地址) - 消息周期: 状态100ms, 电压500ms, 温度1s ## 开发指南 ### 代码规范 - 遵循MISRA C:2012编码规范 - 使用Doxygen格式注释 - 函数命名: 模块名_动词_名词 (如 BMS_ReadVoltage) - 变量命名: camelCase (局部), g_camelCase (全局) ### 添加新功能 1. 在对应模块目录创建.h和.c文件 2. 更新CMakeLists.txt添加源文件 3. 编写单元测试 4. 更新API文档 ### 调试技巧 - 使用`bms_log.h`记录调试信息 - 使用CLI命令实时查看系统状态 - 使用FreeRTOS任务监控分析性能 - 使用CAN分析仪验证通信 ## API参考 ### 核心模块接口 #### BMS初始化 ```c // 初始化BMS系统 BMS_Status_t BMS_Init(void); // 启动BMS运行 BMS_Status_t BMS_Start(void); // 停止BMS BMS_Status_t BMS_Stop(void); ``` #### 数据获取 ```c // 获取电池数据 BMS_Status_t BMS_GetCellVoltages(uint16_t voltages[24]); // 获取总电流 BMS_Status_t BMS_GetPackCurrent(int16_t* current); // 获取温度 BMS_Status_t BMS_GetTemperatures(int16_t temperatures[8]); ``` #### 保护控制 ```c // 获取保护状态 Protection_Status_t BMS_GetProtectionStatus(void); // 清除保护 BMS_Status_t BMS_ClearProtection(uint16_t faultMask); ``` #### 均衡控制 ```c // 获取均衡状态 Balance_Status_t BMS_GetBalanceStatus(void); // 手动均衡控制 BMS_Status_t BMS_SetBalance(uint8_t cellMask, bool enable); ``` ## 故障排除 ### 常见问题 #### 1. BMS无法启动 - 检查电源电压 (12V和3.3V) - 检查复位电路 - 检查晶振是否起振 - 查看启动日志 #### 2. AFE通信失败 - 检查SPI接线 (CS, SCK, MOSI, MISO) - 验证SPI时钟极性 (CPOL=0, CPHA=0) - 检查AFE供电 (5V模拟, 3.3V数字) - 使用逻辑分析仪捕获SPI波形 #### 3. CAN通信失败 - 检查终端电阻 (120Ω) - 验证波特率设置 (500kbps) - 检查CAN收发器供电 - 使用CAN分析仪监听总线 #### 4. 保护误触发 - 检查电压校准参数 - 调整保护延时 - 检查传感器连接 - 查看故障日志 ### 调试命令 ```bash # 通过串口CLI > status # 查看系统状态 > cells # 查看电池电压 > temp # 查看温度 > faults # 查看故障 > reset # 复位系统 > help # 显示所有命令 ``` ## 版本历史 | 版本 | 日期 | 说明 | |------|------|------| | v1.0.0 | 2026-01-28 | 初始版本,基础框架 | | v1.1.0 | 计划中 | 完整保护功能 | | v1.2.0 | 计划中 | 均衡控制 | | v1.3.0 | 计划中 | CAN通信 | | v1.4.0 | 计划中 | 完整测试 | ## 许可证 本项目采用MIT许可证。详见LICENSE文件。 ## 贡献指南 1. Fork本仓库 2. 创建功能分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 创建Pull Request ## 联系方式 如有问题或建议,请通过以下方式联系: - 项目Issues: [GitHub Issues](https://github.com/your-repo/issues) - 电子邮件: bms-support@example.com --- *此项目正在积极开发中,API可能会有变化。*