Can эмулятор своими руками

Can эмулятор своими руками

Дружим программу CANHacker и модуль 2CAN от Starline

Прочитал замечательную статью на Хабре, 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, для примера укажу пару):

Про контрольные светодиоды думаю вопрос не актуальный.

Как то так, суеты на пол дня :). Конечно есть некоторые шероховатости в работе программы, но это уже не ко мне (я надеюсь). Если есть вопросы, советы, и если кому надо помочь запрограммировать такой модуль — спрашивайте тут. Извиняюсь за огромные фотки 🙂

Читайте также:  Ka3842 схема блока питания

Надеюсь, что никого не обидел написанием этой статьи…

С уважением, Астанин Сергей. ICQ 164487932.

(к сожалению, ветка форума с первоначального сайта с познавательной перепиской вся пропала, что смог восстанавливаю, ссылки на проект если кому надо добавлю)

P.S. Немного еще исправил код в проекте, можно менять скорость обмена, и обмениваться используя стандартные заголовки. Разобрался с программой CANHacker, можно улучшать и модернизировать проект по необходимости, все просто.

Связь вполне устойчивая с другими блоками автомобиля, можно использовать (проверено на Volvo, Renault и Mitsubishi).

Работа с CAN шиной автомобиля, или решение нестандартных задач (Lexus LX570).

Уже несколько месяцев назад сменил место работы, на радость всем тем, кому не нравилась тема Smart-ов.

Сейчас я, по большей части, занимаюсь мультимедиа авто. Но, в последнее время, часто стали появляться нестандартные задачи, которые требуют разработки электроники. Одна из таких задач — Lexus LX570.

На этот автомобиль уже был установлен управляемый выхлоп. Управляемый выхлоп поставили ему в одной из организаций Москвы. Выхлоп сделан на высшем уровне в плане механических работ. Выхлоп классно выглядит и звучит. Из-под порога торчит двустволка, в штатном режиме она не громче стока, а в открытом режиме выдает сочный рев настоящего V8.

Но то, что не нравится владельцу – это управление этим выхлопом. В работе использовалось стандартное решение, которое подходит под все автомобили. Это брелок с двумя кнопками, одна открывает, другая закрывает выхлоп.

Владельца это не устраивает. Зачем нужны какие-то дополнительные брелоки, если в машине уже есть штатный спорт режим. Вот он и просил подключить управляемый выхлоп к спорт-режиму на автомобиле.

Задача предельно ясна. Осталось решить как реализовать. Я решил делать это через CAN шину автомобиля. Для реализации была выбрана платформа Canny 7. На сайте производителя написано, что это «программируемый логический контроллер». Его преимуществом является то, что по сути он является законченным устройством. На борту есть CAN контроллер и 11 программируемых выводов. Питается он от борт сети автомобиля без каких-либо преобразователей. Более подробно о контроллере можно почитать на официальном сайте https://canny.ru/c7/ или на вики, посвящённому этому контроллеру http://wiki.canny.ru/index.php?title=CANNY_7

Вот так выглядит Canny 7 с корпусом и без него.

Для начала нужно проанализировать CAN шину автомобиля, что б узнать, по каким адресам идет информация о режиме работы автомобиля. Анализировать Can шину можно тем же Canny 7, для этого нужно его перевести в режим монитора. Не буду на этом останавливаться, так как на том же вики есть подробная инструкция http://wiki.canny.ru/index.php?title=CANNY_CAN(LIN)_monitor . Так же анализировать Can шину можно и другими устройствами.

После перехода в режим монитора находим данные, которые отвечают за Sport режим. В моем случае за это отвечают данные с ID 0x03BC.

По этому ID идет следующая информация

80 20 00 00 00 00 87 18 – Sport

80 20 00 00 00 00 85 20 – Sport +

80 20 00 00 00 00 04 00 — Normal

80 20 00 00 00 00 04 38 – Customize

80 20 00 00 00 00 06 28 – Comfort

80 20 00 00 00 01 04 30 – Eco

Из этих данных видно, что информация о режиме лежит в байтах D6, D7, то есть в последних двух.

Данные передаются в двоичной форме, переведем последние 2 байта в двоичную систему счисления, получится следующее:

10000111 00011000 Sport

10000101 00100000 Sport+

00000100 00000000 normal

00000100 00111000 Custom

00000110 00101000 Comfort

00000100 00110000 Eco

Отсюда видно, что в спорт режимах старший и младший биты байта D6 стоят в 1, тогда как в остальных режимах там 0. На них и будем ориентироваться при написании алгоритма.

Тут начинается самое сложное, надо будет объяснить Canny 7 что нужно делать. Для программирования Canny 7 используется своя среда разработки Canny lab. Программирование ведется с помощью специальных диаграмм. Надо расставить логические блоки и выставить между ними связи.

Такой вид программирования хорош тем, что ниже порог входа в разработку, отрицательной стороной является то, что сложные диаграммы будет проблематично читать, так же в них можно запутаться и они занимают много места на экране ПК.

Читайте также:  Brima tig 200p ac dc схема

Этот способ программирования мне не привычен и не удобен. В дальнейшем я планирую использовать для подобных прототипов Ардуино совместимые платы с CAN модулем. Но данное решение привлекает тем, что тут все на одной плате. Не нужно ставить дополнительные модули с CANом, не нужно думать с питанием (у Arduino входное напряжение ограничено 12 вольтами, а на современных авто напряжение может повышаться до 15) и не нужно думать о корпусе.

Готовая диаграмма для Canny 7 выглядит следующим образом:

Данная диаграмма и ее тестирование отняло почти 2 дня времени. В конце тестов появляется полностью работоспособное устройство, готовое к установке в авто.

Ну а работу устройства можно посмотреть в видео.

Студия автозвука Электросила

✆ +38 (066) 607-45-19 ✆+38 (068) 359-71-76

CAN-BUS адаптер — незаменим при установке магнитолы!

Практически все современные автомобили имеют электронику, в основе своей архитектуры имеющую CAN-шину. С точки зрения производителя автомобиля шина CAN это очень полезная вещь, позволяющая гибко изменять функционал автомобиля без серьезных переделок электрооборудования. Например, чтобы добавить складывающееся зеркало со встроенным поворотником на машину традиционной архитектуры (без КАН-шины) необходимо протянуть от главного блока предохранителей провода на выключатель складывания зеркал, затем протянуть провода от выключателя в каждую дверь (левую и правую) и плюс провода от поворотников. Имеем в итоге кучу лишней меди и невозможность изменить комплектацию быстро (на конвеере). В случае автомобиля с платформой на CAN-шине просто добавляем новое зеркало, подключаем к дверному блоку, программируем что зеркало есть и должно складываться и мигать поворотником. Выключатель зеркала подключаем к центральному блоку и программируем что он есть. Ну это если очень просто объяснить

Смысл в том что CAN-шина это хорошо, и абсолютно все автомобили в самом ближайшем будущем будут иметь такую архитектуру. На данный момент все лидирующие европейские производители производят автомобили с CAN, к ним подтягиваются корейцы и японцы ну и американцы конечно.

На машинах на которых есть CAN-шина, чаще всего она используется и в магнитоле. Магнитола «узнает» из кан-шины такую информацию как состояние ключа зажигания , включена ли подсветка приборной панели , также из шины можно брать такую информацию как состояние ручного тормоза (на «ручнике» машина или нет), скорость автомобиля , для мультимедийных систем — включение заднего хода. Так как все эти сигналы содержатся в кан-шине то в разъеме магнитолы нет отдельного провода для каждого из сигналов а только провода питания и CAN-шины. Например:

«+UB» — это +12В постоянный плюс

нет ни провода от замка зажигания, ни подсветки.

Подключая нештатную магнитолу на такую машину, вы скорее всего возьмете ISO-переходник и подключите оба питания (постоянное и от ключа) магнитолы на постоянное питание. Подсветку вообще подключать не будете, и с первого взгляда вроде бы как все ОК. Но на самом деле нет, есть несколько проблем.

При подключении магнитолы без КАН-адаптера будут следующие проблемы:

  • Каждый раз когда вы выходите из машины вам необходимо выключать магнитолу кнопкой
  • Магнитола, подключенная на постоянное питание будет разряжать аккумулятор даже в выключенном состоянии!
  • У некоторых магнитол постоянно горит подсветка кнопок
  • Если не подключить сигнал от подсветки приборов то экран магнитолы не будет уменьшать яркость ночью — это отвлекает от вождения
  • Провод для включения входа камеры заднего вида придется тянуть от задних фонарей, это неудобно а на некоторых машинах (с импульсным контролем сгоревшей лампочки) так просто к фонарю и не подключишься
  • Грамотно подключится к «ручнику» не так просто (хотя мало кто это делает ? )

Из всего перечисленного действительно серьезной проблемой является конечно же разрядка аккумулятора вследствие того что магнитола должным образом не «засыпает» если её просто выключить кнопкой. Поэтому существует упрощенный, недорогой по цене CAN-BUS адаптер для магнитолы, который выдает из кан шины только сигнал ACC:

Универсальный CAN-BUS адаптер для магнитолы:

Этот простой кан адаптер подключается к большинству автомобилей с CAN-шиной и выдает сигнал ACC для подключения магнитолы. Его удобно использовать тогда когда вам просто нужно решить проблему разрядки аккумулятора из-за неправильно подключенной магнитолы.

Читайте также:  Gsm модуль для газовых котлов отопления

Версия для использования на грузовых автомобилях с бортовой сетью с напряжением 24В называется Connects2 IGNI-GEN24V

Штатный CAN-BUS адаптер для магнитолы:

Штатный кан-адаптер предназначен для конкретной модели автомобиля, комплектуется с одной стороны штатным разъемом для подключения к проводке автомобиля, с другой стороны стандартным ISO-разъемом для подключения магнитолы. Бывает два варианта таких can-bus адаптеров для магнитолы, первый (серия Essentials) дешевле, выдает только сигнал ACC и в принципе по функционалу не отличается от IGNI-GEN12V.

Серия CAN-BUS адаптеров Professional может больше:

Помимо сигнала ACC для подключения магнитолы такой адаптер выдает сигналы (в зависимости от модели авто): Подсветка (+12В), Задний ход (+12В), Ручник (земля), Импульс скорости (отрицательный импульс, зависящий от скорости автомобиля)

Конечно же, с таким адаптером подключение будет еще более простым и надежным, однако он и стоит дороже.

Преобразователь шины интерфейса CAN на USB

Данный проект предназначен для изготовления простого устройства для мониторинга шины CAN. Я выбрал микропроцессор NUC140LC1CN 32K Cortex-M0 по одной главной причине – он имеет периферийные блоки USB и CAN.

Характеристики проекта

  • Простота разработки
  • Совместимость с протоколом LAWICEL CANUSB
  • Мониторинговое устройство отображается как USB FTDI устройство
  • Поддержка 11-битных CAN 2.0A и 29-битных CAN 2.0B кадров
  • Наличие внутреннего буфера сообщений FIFO CAN
  • Питание от USB порта
  • Загрузчик, хранимый в памяти USB запоминающего устройства, для обновлений микропрограммы
  • Микропрограмма, которая доступна для загрузки

Схемное решение

Для разрешения периферийному блоку NUC140 CAN соединяться с шиной CAN необходимо наличие приемопередатчика CAN. Для этой цели наиболее пригодна микросхема TJA1051T от компании NXP. Блок NUC140 может работать от источника питания напряжением 5В. Поэтому нет необходимости для применения дополнительного стабилизатора напряжение на 3.3В. Это позволяет значительно упростить задачу реализации интерфейса шины CAN. В схеме предусмотрено три светодиодных индикатора состояния:

  • D1 – индикатор состояния USB соединения с хостом
  • D2 отображает активность шины CAN
  • D3 отображает ошибки интерфейса CAN

NUC140 не имеет встроенного загрузчика и единственным способом его запрограммировать — использовать интерфейс ARM Serial Wire Debug (SWD) (J2 коннектор) и программатор Nuvoton ICP. Ну и естественно, если загрузчик уже заранее запрограммирован, то его можно активировать. Для этой цели необходимо использовать джампер JP1. Использование джампера JP1 перед подачей питания на интерфейс приведет к запуску загрузчика.

Загрузчик

Флэш-память NUC140LC1 разделена на две секции. Одна из них предназначена для выполнения кода пользовательской программы (APROM) размером 32K, а другая для загрузчика (LDROM). Размер LDROM только 4K, что делает проблематичным создание полностью функционального USB загрузчика. Я использовал загрузчик, размещенный на запоминающемся устройстве (MSD), предоставленный Nuvoton. Установка джампера JP1 запускает выполнение загрузчика. В результате съемный диск будет отображаться в файловой системе хоста размером 32 кБ. Просто скопируйте и вставьте или перетащите и опустите обновление микропрограммы CAN-USB на диск загрузчика. Отсоедините USB кабель, снимите джампер и подсоедините кабель снова. Теперь должна выполняться обновленная микропрограмма.

Программирование интерфейса CAN-USB и NuTiny-SDK-140

Для программирования процессора NUC140 потребуется программатор Nu-Link от Nuvoton и программное приложение Nuvoton ICP. Но вместо него я решил использовать демонстрационную плату NUC140 (NuTiny-SDK-140), доступную от Digi-Key. Она имеет две части, часть с микросхемой NUC140 и собственно программатор Nu-Link. Плата равномерно перфорирована, что позволяет отсоединить часть Nu-Link. На самом деле вы может изготовить данное устройство исключительно на демонстрационной плате NuTiny-SDK-140, добавив только дополнительную микросхему приемопередатчика CAN.

При подсоединении Nu-Link процесс программирования NUC140 становится несложным. Ключевым вопросом является выбор загрузки из LDROM вместо APROM (в Config настройках) для обеспечения функционирования USB загрузчика.

Программное обеспечение

Интерфейс CAN-USB совместим с протоколом LAWICEL CANUSB и будет работать с приложениями, предназначенными для данного протокола. Я протестировал два приложения с интерфейсом CAN-USB:

CANHacker V2.00.02

Это бесплатное приложение CANHacker. Я не смог найти руководство пользователя для этого приложения. Однако оно достаточно простое и интуитивное при использовании.

IC-Stroy.ru