Немного вводной информации. У меня Volkswagen Tuguan 2008 года. Случилось так, что рулевая рейка на моем автомобиле стала периодически выдавать то желтый руль, то красный (признак проблем с ЭУР).
Красный руль на щитке приборов
Диагностика говорила о том, что на 30 клемме (постоянный плюс после аккумулятора) пропадает питание.
И, казалось ба, в чем проблема проверить жгут проводов и найти причину? Не тут то было. Жгут проводов целый, окислов на соединениях нет. Питание при наличии ошибки есть. Вывод - проблема в блоке управления ЭУР. А стоит он на самой рулевой рейке, до которой без подъемника добраться достаточно проблематично. Решил заказать контрактную б/у рейку и заменить ее. После замены проблема ушла. Но вот незадача - осталась старая рейка. И продать ее в таком состоянии не вариант, так как непонятно что дает ошибку. И как чинить, не имея возможности без машины даже включить ее "на столе"?
Итак, моя задача: подключение рулевой рейки тигуана на столе без подклбчения к машине. Для этого требуется имитация активности в CAN шине. Для этого требуется адаптер, позволяющий работать с программой CanHacker и, собственно, трейс CAN пакетов с автомобиля.
С первой задачей мы сегодня и разбираемся, а именно с адаптером, совместимым с ПО CanHacker.
ПО CanHacker общается с адаптером по протоколу lawicel. Следовательно, нам понадобится микропрограмма для Arduino и CAN трансивер. Будем использовать модуль MCP2515 с трансивером TJA1050 на борту.
Соединение с Adduino простое - нужно соединить питание и SPI, схема типовая. Выглядит следующим образом.
Схема подключения CAN модуля к Arduino
Джампер J1 на модуле MCP2515 подключает резистор 120 Ом на шине. Для подключения к шине автомобиля он обычно не нужен, а вот для подклчения устройства к модулю на столе его лучше установить.
Итак, модуль подключили, осталось дело за малым - найти подходящий софт для прошивки.
Тут у меня было много приключений, потому что везде, где предлагалось сделать аналогичный девайс, использовался проект arduino-canhacker, но он имеет свойство зависать и нестабильно работает на скорость 500Кб/с и выше (у меня он и на 125 зависал спустя минуту).
В итоге нашел для себя нечто прекрасное, а именно проект Seeed_Arduino_CAN. Подключается в проект как библиотека, открывается пример canbus-monitor, прошивается и вуаля - имеем девайс, который умеет работать с CanHacker, не зависает и адекватно работает на 500Кб/с.
Ну что, проверим работу девайса? :) Идем к машине, лезем к блоку парковочного ассистента, подключаемся к CAN шине (да да, на вагах стоит Gateway, который разделяет сети и подключившись к нему вы ничего не увидете. Туда можно слать запросы с ID 7xx и получать ответы, разъем диагностический же...). Запускаем CanHacker, выбираем COM порт и скорость 115200, выбираем скорость шины CAN (в моем случае это кан-привод, там скорость 500Кб/с).
Подключаемся к адаптеру и видим что все ок, коннект есть, версия микропрограммы видна.
CanHacker подключился к адаптеру
Выбираем трейс, нажимаем запись. Включаем зажигание, запускаем двигатель, глушим двигатель, останавливаем трассировку. Все, трейс записан, дальше можно использовать его для имитации автомобиля для включения рулевой рейки. Конечно, весь трейс не понадобится, но он даст понимание какой canid и какое сообщение дают добро на его включение.
трейс, полученный с рабочего автомобиля
Если то что вы прочитали вам понравилось - дайте знать, напишу что нибудь еще по этой теме :)