Прочитал замечательную статью на Хабре, habrahabr.ru/post/256493/:
и решил на её основе, использовать уже готовый имеющийся модуль 2CAN (описанный мной в предыдущей статье) совместно с написанной и довольно распространенной уже программой CANHacker. Удивительным образом, в статье автора, и имеющимся у меня модулем 2CAN совпадают по назначению все выводы микроконтроллера, разница только в частоте кварцевого генератора. Получается, вносить изменения в плату модуля мне не придётся. Установил программный продукт STM32Cube MX с необходимыми компонентами, и немного изменил настройки и код в проекте, любезно предоставленные автором статьи:
1. Меняем параметры системы тактирования:
2. Добавляем дополнительный вывод для контроля системы тактирования RCC_MCO -> PA8:
3. Далее генерируем код и затем автоматически запускаем компиляцию в KEIL, при этом возникает ошибка компиляции, имеющийся у меня KEIL не понимает две строчки на ассемблере, но так как мы не собираемся спать во время работы, закоментируем их:
4. Далее добавим команду, которая задает режим микросхемы трансивера CAN (PB7 -> «1»):
5. Припаиваем к модулю 2CAN выводы для подключения к шине CAN, и выводы для программирования по SWD, питание же платы осуществляется через разъем USB:
6. Припаиваем резистор ( 560 Ом, но не критично ) для правильной работы USB:
7. Программируем:
Соответствие выводов платы и модуля такое:
8. Проверяем как наш модуль определяется компьютером, и зададим более удобный для работы номер COM порта для модуля:
9. Запускаем программу, настраиваем на заданный COM порт, и подключаемся к работающей CAN шине какого либо устройства (драйвера от STM были уже установлены), результат есть:
Подключаться к шине автомобиля решил с помощью имеющегося диагностического адаптера ELM327 (удобный корпус, легко устанавливать и вынимать), просто припаяв провода к его разъему от 2CAN модуля:
Три провода, CANH (pin 6), CANL (pin 14) и «земля» (pin 4 & 5):
Вот к примеру показания с «Дастера» 1.6, там CAN шиной объединены только блок управления двигателем, блок ABS и блок 4WD, подключаемся:
И видим такие данные:
Записываем их в лог-файл. Импортируем в excel, проводим переупорядочивание и фильтрацию. И в результате можно увидеть следующие данные с can шины автомобиля: обороты двигателя, положение педалей газа, тормоза и сцепления, скорость каждого колеса в отдельности, работу кондиционера и т.д (некоторые значения пока для меня тайна). Полученные данные свел в таблицу, если что то надо исправить или дополнить, подсказывайте.
Некоторые данные нуждаются в простой обработке, где-то поделить, где-то рассчитать по формуле. Но все просто и без заморочек.
Или к примеру, Outlander III, подключаемся к CAN шине салона автомобиля, за приборным щитком.
Смотрим данные на экране компьютера, и что меняется при нажатии на кнопку открыть и закрыть автомобиль. И пары нажатий на соответствующие кнопки, хватает узнать какие команды надо подать, чтобы открыть или закрыть автомобиль. Эти коды кратковременно появляются в строчке, обведенные красным овалом. Повторяем эти команды в окне для передачи и:
Открыть автомобиль:
Закрыть автомобиль:
Что было добавлено в исходный код (в файле usb_cdc_if.c), выбор скорости:
и несколько подобных процедур для задания скорости (в файле main.c, для примера укажу пару):
Про контрольные светодиоды думаю вопрос не актуальный.
Как то так, суеты на пол дня :). Конечно есть некоторые шероховатости в работе программы, но это уже не ко мне (я надеюсь). Если есть вопросы, советы, и если кому надо помочь запрограммировать такой модуль — спрашивайте тут. Извиняюсь за огромные фотки :)
Надеюсь, что никого не обидел написанием этой статьи…
С уважением, Астанин Сергей. ICQ 164487932.
(к сожалению, ветка форума с первоначального сайта с познавательной перепиской вся пропала, что смог восстанавливаю, ссылки на проект если кому надо добавлю)
P.S. Немного еще исправил код в проекте, можно менять скорость обмена, и обмениваться используя стандартные заголовки. Разобрался с программой CANHacker, можно улучшать и модернизировать проект по необходимости, все просто.
Связь вполне устойчивая с другими блоками автомобиля, можно использовать (проверено на Volvo, Renault и Mitsubishi).
Продублирую тут.Некоторое время назад занялся CAN шиной. Наконец созрела статья, как сделать простейший кан сниффер для Астры (легко адаптировать к любой другой марке, конечно).
Начнём сразу со схемы!
Добавлено:
По многочисленным вопросам.
Цели следующие.
ЛС кан:
оповещение о выключенных фарах во время движения,
отображение температуры мотора и напряжения на одометре или на стрелках приборов,
функция "спасибо" — моргнуть только задними аварийками,
отображение реальной скорости на одометре
отображение, какая дверь открыта (на одометре?)
другие плюшки – см "кан адаптер" и "мини кан адаптер"
МС кан:
включение и отключение компрессора одним нажатием (климат контроль)
ввод команд цифровыми кнопками магнитолы д команд цифровыми кнопками магнитолы
Добавлено: пример лога
Hello World!
Starting sniffer v0 program
Time (ms) ; ID ; Length ; B0 ; B1 ; B2 ; B3 ; B4 ; B5 ; B6 ; B7
8; 110; 5; 0; 48; 16; 4A; E; 0; 0; 0
29; 108; 8; 13; C; 34; 0; 0; 0; 0; 0
79; 625; 8; 0; 48; 50; 0; 0; 0; 0; 0
83; 108; 8; 13; C; 38; 0; 0; 0; 0; 0
108; 110; 5; 0; 48; 16; 4A; E; 0; 0; 0
112; 130; 7; 0; DB; 28; 0; 0; 0; 0; 0
129; 108; 8; 13; C; 38; 0; 0; 0; 0; 0
179; 625; 8; 0; 48; 50; 0; 0; 0; 0; 0
183; 108; 8; 13; C; 38; 0; 0; 0; 0; 0
208; 110; 5; 0; 48; 16; 4A; E; 0; 0; 0
И после импорта данных в эксель:
Добавлено. Важно!
С указанным преобразователем напряженияиногда наблюдается падение шины LS, уже при подключении устройства. Не знаю, с чем связано. Возможно, решится добавлением конденсатора.
==> Barm76 подсказал, что питание нужно обвесить конденсаторами: вход 220 мкФ 25В, выход 470 мкФ 16В
Заранее извиняюсь, если создал тему не там.
Всем привет. Установил себе на Passat B3 ABS+EDS от G4, но тут возникла непредвиденная проблема. Эта ABS имеет связь по CAN-шине, которой у меня в машине естественно нет. Опытным путём было установлено, что несмотря на отсутствие шины всё функционирует и прекрасно работает. Таким же опытным путём было установлено, что на G4 АБС начинает бить тревогу при отключении приборной панели от CAN-шины. При этом всё функционирует, но АБС не нравится отсутствие связи. Изучая форумы узнал только то, что в приборке бортовой комп online тестирует блок на ошибки. Больше ничего такого связанного с АБС и приборкой не нашёл.
Так вот вопрос можно ли как-то эмулировать сигналы CAN-шины?
Если кто не понял в чём вообще проблема и почему вопрос интересует, раз всё функционирует, то отвечаю: при полной функциональности блока горит лампа неисправности. Это раздражает и хотелось бы, чтобы она работала и сигнализировала обо всём должным образом.
И ещё такой небольшой вопрос: не могу разобраться как фунционирует схема (слева), в ней 2 транзистора и один диод. Уважаемый товарищ сказал, что это мультиплексор, который при ошибке подушек или АБС зажжёт на приборной панели контрольную лампу (!) неисправности. Так ли это?
Смотрите также
Комментарии 46
Ну что же тогда удачи
Будем искать эту же АБС версии без кан
Есть очень простенький шилд для Ардуино (CAN-BUS Shield). Он может как передавать, так и получать CAN-сообщения, при чем программно делается это очень просто. Остается только разобраться что передавать и что получать, но здесь уже нужно читать конкретную документацию по CAN устройству.
Вот некоторые ссылки:
— www.seeedstudio.com/wiki/CAN-BUS_Shield
— devicter.ru/goods/CAN-BUS-Shield
Да к сожалению сошлись уже на том, что без приборки никак
не могу что-то у себя в эльзе найти варианты кодировок на эту АБС. странно, что она не ругается в диагностике на отвал CAN-шины. А вот лампу зажигть должна, если нет связи с приборкой
Тут ещё видишь какая фишка, в этих машинах приборка является так называемым гейтвеем CAN-шины. короче коммутатор и основа коммуникаций между блоками, в т.ч. сидящими на разных шинах: Шина-привод (Мотор, КПП, АБС), Шина-комфорт, аналоговые датчики всякие и т.д. Без этого гейтвея у АБС естественно не будет
информации от моторного блока о нагрузке, и информации от датчика скорости в КПП. ну и т.д.
Вообще желательно-бы подключиться диагностикой и пройтись по измеряемым группам
Ты почти всё верно сказал, кодировка моего блока 13504 если верно помню.
Но насчёт информации от датчика скорости, нагрузке блока и т.д. переборщил. Всё это применяется, если блок ещё поддерживает ASR (антибукс), тогда да, а мой блок в этом отношении стационарен, ему не требуются подобные сигналы
Короче тебе только CANhacker может помочь или копаться по заграничным ресурсам. В любом случае если хочешь, чтобы все работало, придется делать эмуль гейтвея приборки.
P.S. у меня, кстати, на Б4 тож стоит марк20, только более старая версия без CAN-шины конечно-же
Да знал бы я про эту CAN на "рестайловом" марк 20, то искал бы "дорестайл" от В4, а теперь уже на машине всё стоит, не хочется переделывать. Вот и ищу как заткнуть CAN
А какая именно АБС-ка? марк 20 или марк 60
Марк 20. От Марк 60 CAN-модуль отстыковывается вроде
а ошибки только по кан-шине?
По K-line вообще чисто, не даёт никаких ошибок. Про тревогу мы узнали только экспериментальным путём, когда на G4 отсоединили приборку
Вообще, CAN-шины две: высокоскоростная и низкоскоростная. По высокоскоростной CAN-шине связаны блок управления двигателем (ECM), блок ABS, блок управления автоматической трансмиссией (TCM) и центральный блок управления. По низкоскоростной шине связаны центральный блок управления блок климат контроля, блок управления доступом, компьютер, блок навигации, и приборная панель.
Основной же обмен происходит между блоками ABS и ECM. При этом, каждый из них имеет отдельный провод к приборке, по которму зажигается лампа неисправности (ABS и Check Engine, соответственно).
Если блок ABS ещё и выполняет функцию системы стабилизации ESP, то по высокоскоростной CAN-шине к нему подключаются ещё и датчик динамических сил, и датчик положения рулевого колеса (у вас нет, как понимаю, только блокировка дифференициала EDS). Прошивки блоков ECU в машинах с ABS и с ABS+ESP сильно отличаются.
У вас формируется ошибка "Сбой по CAN-шине" С0140. Она и приводит к зажиганию контрольной лампы ABS.
Кстати, а вы пробовали повесить между проводами CAN-шины стандартное нагрузочное сопротивление — обычный резистор номиналом 120 Ом. Что бы ваш блок ABS "почувствовал" внешнюю нагрузку реальной шины. Может быть, этого, на физическом уровне будет достаточно? И не важно, что на канальном уровне нет синхронизации от других CAN-устройств? Попробуйте! Самое простое.