ED BMSdiag – Набор для диагностики CAN‑BUS и OBD‑II на базе Arduino
Компоненты и расходные материалы
| Arduino UNO | ×1 |
| SparkFun CAN-BUS Shield | ×1 |
| Мужской заголовок 36 позиций 1 ряд (0.1") — для SparkFun CAN-Bus Shield | ×1 |
| Кабель SparkFun OBD-II — DSUB-9 — для международных стандартов | ×1 |
| Кабель OBD-II — DSUB-9 — для европейских/немецких стандартов | ×1 |
| CANdiy-Shield v2 CAN-Bus Shield — напряжение I/O переключаемо 3.3V/5V, совместим с 3.3V платами | ×1 |
| Корпус для Arduino (в магазине Arduino отсутствует, но можно найти у дистрибьюторов) | ×1 |
Приложения и онлайн-сервисы
- Arduino IDE
О проекте
Я езжу на электромобиле — Smart ForTwo Electric Drive. Здоровье тягового аккумулятора критично и поддерживается системой управления батареей (BMS). Она контролирует все 93 элемента во время заряда/разряда и следит за балансом напряжения. Обычно доступ к этому блоку управления имеют только сервисные инструменты.
Автомобиль оснащен GSM-модемом для получения данных о состоянии заряда (SOC), пробеге и прочей базовой информации. Некоторое время модем работал в расширенном режиме, собирая диагностические данные. Чтобы узнать, что именно передается, я решил прослушать CAN-шину.
Вдохновившись похожими проектами для других электромобилей (например, Nissan Leaf), я записал весь трафик CAN-шины во время езды и зарядки. Первые перехваченные потоки действительно содержали диагностические данные — но как их декодировать?
Подробности о прослушивании CAN-шины и реверс-инжиниринге описаны в отдельной статье.
Что необходимо
Приобретите нужное оборудование. В современных автомобилях физический уровень реализован через CAN-шину. Доступно как минимум два CAN-шилда — см. список компонентов. Необходимо подключиться к диагностическому разъему автомобиля — OBD-разъему, поэтому купите кабель или сделайте его сами. ВАЖНО: существуют два стандарта кабелей OBD — DSUB-9 — выберите правильный! См. фото ниже:




При изготовлении собственного кабеля рекомендуется использовать старый витую пару. Одну из пар используйте для CAN-H и CAN-L — это улучшит целостность сигнала. Также не превышайте длину 1 метра, чтобы минимизировать отражения сигнала.
Начало работы
Шаг 1
Подготовьте оборудование и найдите подходящий корпус для плат.
Шаг 2
Скачайте проект с моего GitHub-репозитория. Там же приведены инструкции по установке. Скомпилируйте код и загрузите его в Arduino.
Шаг 3
Подключитесь к автомобилю и включите питание. Запустите диагностическую сессию и получите полезную информацию о батарейном пакете...


Шаг 4
Используйте табличный процессор для поиска коррелирующих данных. Например, сравните SOC (состояние заряда, с приборной панели) с реальным SOC от BMS. Или постройте график напряжений элементов и увидьте, что некоторые ячейки ограничивают пакет при зарядке, достигая порога отключения первыми...


Шаг 5
Улучшайте код по желанию — занимайтесь своим хакерством. У SparkFun Shield есть слот для SD-карты, поэтому можно сделать свой CAN-логгер. Или создайте красивый фронтенд/приложение для отображения данных...
Надеюсь, этот инструмент будет полезен — удачи!
Код
ED_BMSdiag — ПО для Arduino
https://github.com/MyLab-odyssey/ED_BMSdiag.git
Схемы
Для SparkFun CAN-Bus Shield:

Для CANdiy-Shield:

Производственный процесс
- Профессиональное руководство по анимации битмапов на TFT-экране ILI9341 2.4" с Visuino
- Веб-управляемая DMX-система освещения: Arduino Mega как мастер-контроллер
- Сборка Bluetooth-робота-шпиона на Arduino с управлением с телефона
- FlickMote: жестовое IR-пульт для умного дома на Arduino 101 и ультразвуковом датчике
- DIY Arduino TV-B-Gone: универсальный пульт для выключения любого телевизора
- Создание пользовательских LED-часов с будильником — видно с 12 метров
- HSV Clock: Яркие, настраиваемые часы для энтузиастов Arduino
- Android-управляемая робот-платформа на Raspberry Pi и Motor Shield
- Find Me: Умный поисковик вещей на Arduino и Bluetooth
- Оптимизированные решения питания для проектов на Arduino