Как подключить Arduino к разъёму OBD-II по CAN?
Обновлено Редакция GAW
В разъёме OBD-II (распиновка J1962) шина CAN выведена на контакты 6 (CAN-H) и 14 (CAN-L), общий провод — контакт 5, плюс аккумулятора — 16. Диагностика по CAN описана стандартом ISO 15765-4, и, по американским правилам, с 2008 модельного года лёгкие машины используют только его.
Схема и параметры
| Что | Значение |
|---|---|
| Контакты | 6 — CAN-H, 14 — CAN-L, 5 — сигнальная земля |
| Скорость | 500 или 250 кбит/с |
| Идентификаторы | 11 или 29 бит |
| Запрос и ответ (11 бит) | запрос всем блокам — 7DF, ответ блока — например, 7E8 |
Arduino подключают через модуль с контроллером MCP2515 и трансивером CAN: контроллер — по SPI, трансивер — к линиям CAN-H и CAN-L. Регистры битового тайминга для 500 кбит/с и кварца модуля считает калькулятор битового тайминга CAN. Наш расчёт длительности бита: при 500 кбит/с — 2 мкс, при 250 кбит/с — 4 мкс.
Сначала — только слушать
У MCP2515 есть режим Listen-Only: контроллер принимает все кадры, но не передаёт ничего — ни сообщений, ни флагов ошибок, ни подтверждений (Microchip, разд. 10.3). В нём удобно подобрать скорость и посмотреть трафик, не вмешиваясь в работу блоков машины. Наш вывод: передавать в шину стоит только стандартные диагностические запросы, а не произвольные кадры — блоки управления машины на них не рассчитаны, и последствия непредсказуемы.
Готовые адаптеры на ELM327 делают то же самое и отвечают текстовыми сообщениями; их значения разобраны в ответе «Что означают сообщения ELM327 NO DATA и UNABLE TO CONNECT».
Похожие вопросы
Нужен ли терминатор 120 Ом на модуле?
Нет: шина машины уже терминирована на своих концах, а модуль у разъёма диагностики — это отвод. Перемычку терминатора на модуле MCP2515 снимают, иначе на шине окажется третий резистор (наш вывод из устройства шины CAN).
Можно ли питать Arduino от контакта 16?
Только через стабилизатор, рассчитанный на бортовую сеть: на контакте 16 напряжение аккумулятора, а Elm Electronics напоминает про машины с сетью 24 В. Плату, питаемую от разъёма, не оставляют включённой на стоянке — она разряжает аккумулятор.
Почему модуль не видит ни одного кадра?
Скорее всего, не совпадает скорость: проверьте 500 и 250 кбит/с и частоту кварца модуля (8 или 16 МГц), от которой считаются регистры битового тайминга. Ещё одна причина — машина без CAN на контактах 6 и 14: тогда в разъёме K-line или J1850.
Источники
- Elm Electronics. ELM327 OBD to RS232 Interpreter (ELM327DSJ) — рис. 9: 6 — CAN-H, 14 — CAN-L, 16 — плюс аккумулятора, 5 — сигнальная земля, 4 — земля шасси; протоколы 6–9 — ISO 15765-4 CAN с 11- и 29-битными идентификаторами на 500 и 250 кбит/с; функциональный запрос с идентификатором 7DF, ответ блока 7E8; с. 78 — учитывать машины с бортовой сетью 24 В
- Microchip. MCP2515 Stand-Alone CAN Controller with SPI Interface (DS20001801K) — разд. 10.3, Listen-Only mode: приём всех сообщений, режим тихий — не передаются ни сообщения, ни флаги ошибок, ни подтверждения (ACK); годится для мониторинга шины и определения скорости
- U.S. GPO. 40 CFR § 86.1806-05 On-board diagnostics (ред. 2012) — (h): разъём по SAE J1962; с 2008 модельного года для машин до 8500 фунтов — только ISO 15765-4 (CAN)
Нашли ошибку?
Смотрите также
- OBD-II (J1962)CAN 6/14, K 7, L 15, J1850 2/10, земли 4/5, батарея 16
- MCP2515CAN по SPI: выводы, кварц и скорость, маски и фильтры, режимы
- CANCAN_H и CAN_L, терминаторы, кадр, арбитраж, ошибки, тайминг, MCP2515
- Битовый тайминг CANCAN_BTR для STM32, CNF1–CNF3 для MCP2515, точка выборки
- Что означают сообщения ELM327 NO DATA и UNABLE TO CONNECT?Протокол не найден или блок промолчал: таблица сообщений ELM327 и что проверить