ED BMSdiag – 基于 Arduino 的 CAN 总线与 OBD-II 电池管理诊断套件
项目简介
本项目旨在为电动汽车(以 smart fortwo electric drive 为例)构建一套低成本、开源的电池管理系统(BMS)诊断工具。通过 Arduino UNO 与 CAN 总线扩展板,配合 OBD-II 线缆,可读取牵引电池的 93 个单体电压、SOC(荷电状态)、均衡状态等关键参数,原本仅厂家专用诊断仪才能获取的数据现在可由爱好者自行获取。
核心硬件清单
- Arduino UNO ×1 – 主控板
- SparkFun CAN-BUS Shield ×1 – 基于 MCP2515 控制器与 MCP2551 收发器,提供标准 CAN 接口
- 公排针 36Pin 单排(2.54mm) ×1 – 用于焊接 CAN-BUS Shield
- OBD-II 转 DB9 线缆 ×2 – 分别提供国际标准与欧标(德标)针脚定义,需根据车辆选择
- CANdiy-Shield v2 ×1(可选) – 支持 3.3V/5V 电平切换,适配更多主控板
- Arduino 专用外壳 ×1 – 整理收纳,便于车载使用
软件与工具
- Arduino IDE
- 项目固件:GitHub 仓库
制作步骤
步骤 1:硬件组装与外壳安装
将 CAN-BUS Shield 堆叠在 Arduino UNO 上,焊接排针,接入 OBD-II 线缆,并置入外壳固定。注意:自制线缆时建议使用双绞线(CAN-H/CAN-L 各取一对),长度不超过 1 米以减少反射干扰。
步骤 2:固件烧录
克隆 GitHub 仓库,按说明安装依赖库,编译并上传至 Arduino。
步骤 3:车辆连接与数据采集
将 OBD-II 插头插入车辆诊断接口,上电后打开串口监视器(或配合 SD 卡记录),即可实时查看 BMS 广播的 CAN 报文。项目作者已完成协议逆向,可直接解析单体电压、SOC、温度等数据。
步骤 4:数据分析与可视化
导出 CSV 后,使用 Excel 或 Python 绘制单体电压分布曲线、SOC 对比图,快速发现落后电芯、充电截止不平衡等问题。
步骤 5:功能扩展
- 利用 SparkFun Shield 自带 SD 卡槽制作独立 CAN 记录仪
- 开发手机 App / Web 界面实时显示电池健康度
- 集成 GPS 记录行驶工况下的电池热力图
原理图
提供 SparkFun CAN-BUS Shield 与 CANdiy-Shield v2 两套原理图,便于不同硬件版本复现。
注意事项
- OBD-II 转 DB9 线缆存在两种针脚标准,购买或自制前务必核对车辆针脚定义。
- CAN 总线需正确终端电阻(通常车辆内已内置,外部不再并联)。
- 操作高压电池系统时请遵循高压安全规范,非专业人员建议在专业人员指导下进行。
制造工艺
- ILI9341 2.4 英寸 TFT 触摸屏扩展板位图动画专业指南
- 基于 Web 控制的 DMX 灯光系统 – Arduino 主控制器
- DIY 蓝牙控制 Arduino 间谍小车
- FlickMote:基于手势的智能家居红外遥控器
- DIY Arduino TV-B-Gone:万能关机遥控器
- 自制大尺寸LED主时钟带闹钟功能 — 12米外清晰可见
- HSV 时钟:为 Arduino 爱好者打造的绚丽可定制时钟
- Android 手势遥控车:Raspberry Pi + Arduino 101 + 电机扩展板,I2T 协同控制
- Find Me:基于 Arduino 与蓝牙的智能寻物器制作指南
- Arduino 项目优化供电方案:从按键开关到电池监测与数据记录
- Arduino 井字棋游戏:MAX7219 点阵屏 + 纸板外壳 DIY
- 从零构建智能 Arduino 四足机器人:完整指南