Моделирование шины CAN (автомобильное назначение) - попробовал Arduino и SparkFun

Я ремонтирую системы рулевого управления с электроусилителем для автомобилей, особенно Fiat, Alfa и Lancya (производители Delphi), и мне нужно сделать какой-нибудь инструмент для проверки этих ремонтных работ. Я имею в виду просто включить его, например.

Я исследовал в течение некоторого времени, и я понял, что мне нужно, чтобы сигналы шины CAN имитировались, поскольку ЭБУ eps получает пакеты зажигания от CAN. Здесь я иду...

Мне нужно знать, каким образом я могу читать и отправлять пакеты CAN из/в шину. Я имею в виду, какой инструмент или что-нибудь еще. Я пробовал с Arduino Uno + SparkFun CAN BUS Shield , но не получил никаких результатов. Когда все подключено, моя последовательная консоль не перехватывает пакеты. Я думаю, что все подключил правильно, и пробовал разные скорости передачи данных, менял платы Arduino и шилд, пробовал много разных примеров. Я потратил много часов без какой-либо прибыли ... Я использовал SEAT Ibiza 2010 для I + D, подключил CAN-H и CAN-L к порту OBD , к линиям CAN от радио и т. Д. ...

Любая идея о том, что может быть не так, приветствуется, как и новый метод сделать мой проект...

Информация:

ARDUINO, SPARKFUN SHIELD И ПОСЛЕДОВАТЕЛЬНАЯ КОНСОЛЬ

Используемые библиотеки

ОБНОВЛЕНИЕ 2 (28.12.2014): я использовал мультиметр, потому что у меня нет осциллографа. Чтение напряжения всегда дает мне 2,5 В на CAN-H и CAN-L, я получаю эти показания на Arduino CAN-H CAN-L и в порту OBD2 (контакты 6 и 14)

ОБНОВЛЕНИЕ 3 (29.12.2014): планирую перейти на какой-нибудь язык программирования с CAN-интерфейсом, приветствуются любые предложения, спасибо!

ОБНОВЛЕНИЕ 3.1 (30.12.2014): Определенно, я использую другой способ сделать это, я жду, что Kvaser и ECOM ответят мне в их письмах поддержки. Таким образом, мы можем узнать, подходят ли их инструменты для моего проекта. Буду держать вас в курсе, спасибо всем за помощь, ребята! :)

Я думаю, что ваш приемник CAN получает широковещательные пакеты. Но поскольку ваш идентификатор не совпадает с адресом получателя, ваш CAN-приемник просто отбрасывает пакет. Возможно, вы ищете что-то вроде этого ebay.com/itm/…
@Nick Alexeev, но поскольку я думаю, что используемый код предназначен для прослушивания всех данных, перемещающихся в этих строках, разве он не должен что-то показывать? X_X В любом случае, я уже заказал ELM, но я не знаю, смогу ли я отправлять пользовательские HEX-пакеты на шину CAN для моделирования сигналов. Спасибо за внимание! :)
Что такое «Я+Д»?​
С помощью осциллографа можно определить битрейт и наличие сигналов CAN-шины на экране CAN-шины.
Можете ли вы опубликовать код, который вы используете?
Можете ли вы предоставить ссылку на экран шины CAN SparkFun (обновив свой вопрос)?
Вопрос : Чтение с CAN-шины Chevrolet Cruze с помощью Arduino Uno очень похоже на ваше (Arduino Uno с CAN-шинным шилдом от SparkFun). Возможно, вы захотите изучить содержащуюся в нем информацию, поэкспериментировать и вернуться сюда (обновите свой вопрос с помощью найденной новой информации). Вы можете связаться со мной по электронной почте или в Twitter, когда закончите, чтобы мы могли получить правильный ответ на ваш вопрос (вместо того, чтобы просто предложить купить новое дорогое оборудование - я не вижу причин, по которым это не должно работать, по крайней мере частично).
@Peter Mortensen I + D - это «Исследование и разработка», я обновлю пост, указав URL-адрес того, что я использовал, код находится в rar, который я загрузил в Dropbox, я попробовал все из них, но безуспешно. Что касается вопроса о chevrolet cruze, я читал его, но ничто из этого не решает мои проблемы... я не могу тратить столько на новое оборудование, и мой главный интерес после работы - узнать о шине can, с arduino и sparkfun. должен прочитать хотя бы сообщения .. какой-нибудь совет? если вам нужна какая-либо информация, просто скажите мне, и я могу предоставить что-нибудь, видео или что-нибудь еще.
Совет: используйте осциллограф для считывания битрейта и некоторых COBID (я не думаю, что на COBID влияет вставка битов ). И CAN-H, и CAN-L должны иметь сигналы относительно земли. Сделайте измерение как можно ближе к приемопередатчику CAN на Arduino. Если у вас нет доступа к осциллографу, используйте вольтметр, чтобы проследить сигналы от шины CAN автомобиля до платы Arduino — и CAN-H, и CAN-L будут иметь характерное (среднее) напряжение. Опубликуйте результаты, обновив вопрос.
Если вы найдете COBID, его можно использовать в программном обеспечении — в зависимости от программного обеспечения может потребоваться использование определенного COBID. Даже если вы хотите просмотреть все COBID, это важный шаг для определения того, может ли быть получено какое-либо сообщение.
2,5 В на CAN-H и CAN-L могут указывать на отсутствие трафика (или на очень небольшой трафик).
Каково (точное) напряжение, если вы измеряете между CAN-H и CAN-L? (Опубликуйте результат, обновив вопрос.)
@ Питер Мортенсен, и как это могло быть? Разве автомобиль не должен отправлять пакеты в этих строках? в примерах, которым я следовал, люди получали много сообщений с CAN ID и шестнадцатеричными байтами. Кстати, что вы имеете в виду под COBID?
Мы пока не знаем — сейчас мы находимся в режиме устранения неполадок. Мы ожидаем , что на шине будет трафик, и поэтому (средняя) разница напряжения между CAN-H и CAN-L должна несколько отличаться от 0 вольт. Сколько зависит от трафика. Мы также почти слепы без осциллографа. (COBID — это первая часть сообщения шины CAN. Часто оно имеет длину 11 или 29 бит ( J1939 ).)
Я мог бы спросить друга, у которого может быть осциллограф, что мне нужно проверить с его помощью? @Питер Мортенсен
Во-первых, определите битовое время. Это просто наименьшее время между переходами (от низкого к высокому/от высокого к низкому) — время перехода кратно битовому времени. Например, если битовое время равно 1,5 мкс, время между переходами будет составлять 1,5 мкс, 3,0 мкс, 4,5 мкс, 6,0 мкс, 7,5 мкс и т. д. Измерьте между CAN-L и CAN-H (требуется плавающая земля) и запустите тот же канал (например, CH1) с уровнем запуска 0,5 В, запуск в режиме постоянного тока (режим переменного тока также подойдет, если осциллограф неисправен ). Постарайтесь определить битовое время как можно точнее.
Во-вторых, прочитайте биты для всего сообщения и попытайтесь понять его смысл ( вставка битов усложняет его) - например, используются ли 11-битные или 29-битные COBID. Вероятно, это проще всего сделать для самых коротких сообщений.
Я не мог получить осциллограф от моего друга, есть ли другие советы @PeterMortensen? Спасибо за вашу помощь
Я получаю 3,7 В и 1,3 В в CAN-High и CAN-Low в линиях CAN к радио, может ли порт OBD2 быть защищен? Если да, то как я могу обойти это?
(По-прежнему не получает никакой информации о линиях радиоканала)
Я думаю, что вы должны сначала передать сигналы по CAN-шине на радио. Вам нужно найти битрейт. Вы можете использовать стандартный триггер Шмитта с порогами напряжения 2,5 В и 2,9 В. Подайте выход триггера Шмитта на цифровой вход Arduino. Напишите программу для определения битовой синхронизации. Например, установите таймер/счетчик с достаточно высоким временным разрешением и ожиданием переходов. Когда есть переход, выведите значение таймера/счетчика на стандартный вывод, чтобы оно появилось в терминале в Arduino IDE.
- продолжение Должна быть характерная минимальная разница во времени, соответствующая битовому времени (повторяется много раз). (На выходе заставьте программу выводить только значения для первых, скажем, 20 переходов).

Ответы (3)

Шилд Arduino CAN довольно крут, если вы хотите построить встроенный компьютер для работы с CAN. Однако, если я правильно понимаю, вы создаете одноразовый инструмент для личного использования (или просто будете использовать готовый инструмент, если он существует по подходящей цене). По этой причине я призываю вас подумать о написании программного обеспечения для ПК, а не встроенного программного обеспечения для взаимодействия с существующими недорогими аппаратными интерфейсами CAN.

Чарли Миллер и Крис Валасек использовали этот так называемый инструмент ECOM и написали программное обеспечение, которое взаимодействует с ним. Инструмент ECOM имеет API и пример драйвера. Их документация по взлому автомобилей и программное обеспечение послужат хорошей отправной точкой для сопряжения ПК с автомобилем. Softing также производит аппаратное обеспечение интерфейса CAN для ПК, но у меня сейчас проблемы с доступом к их веб-сайту, поэтому я не буду ссылаться на него.

Существует также несколько полноценных коммерческих программных инструментов для анализа и моделирования CAN на ПК. CANoe компании Vector — хорошо известный (и дорогой) инструмент для этой цели.

Здравствуйте @downbeat, прежде всего извините, что не ответил, я не видел вашего ответа. Какой конкретный интерфейс (если он дешевый, то лучше :P, если нет, то он мне все равно нужен) я могу использовать для интерфейса с автомобилем с моей IDE? Какой язык использовать? Я знаю java, немного C++, буду очень благодарен за любую информацию или примеры.
У меня нет репутации, чтобы комментировать обмен стеками EE. Скорее всего, есть какой-то драйвер, поставляемый с каким-то недорогим инструментом. Инструмент ECOM, о котором я упоминал, стоит 180 долларов. Этот ELM327 стоит 7-21 доллар. Любой из них потребует некоторого количества программирования. Похоже, что это устройство ELM использует набор AT-команд через RS232. Я бы связался с этим, используя Python, но это должно быть очень просто, как только вы освоите устройство.
Недавно я нашел инструмент USB2CAN ( 8devices.com/usb2can ), который еще дешевле и продается по цене 65 долларов на момент написания этой статьи [ shop.8devices.com/index.php?route=product/… . Я использовал его в Linux, но не в Windows. Я не знаю, насколько богато включенное программное обеспечение, но вы, безусловно, можете написать свои собственные сценарии для прямого взаимодействия с драйвером. В Linux есть некоторые уже существующие инструменты CAN, такие как cansend, candump, cangen и canplayer.

Если вы готовы купить что-то готовое за несколько сотен долларов, продукты Kvaser's Leaf довольно просты в использовании. Они позволяют отправлять предварительно записанные последовательности пакетов и контролировать шину. Вы можете получить один с разъемом OBD-2, если это то, что вам нужно.

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

спасибо за советы Адам! не могли бы вы оставить мне ссылку? Я бы предпочел сделать свой собственный, так как это не должно быть очень сложно, чтобы позже я мог улучшить свой инструмент для своих новых нужд, с уважением!
Вот ссылка на младшую модель: kvaser.com/products/kvaser-leaf-light-v2

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

Усилия популярных щитов CAN сдерживаются использованием кристалла 16 МГц SparkFun и Seeeed. Тогда низкоскоростная Arduino не очень подходит для передачи последовательных данных. Ни один из примеров кода в Интернете не работает, потому что все они являются готовыми примерами для скорости 1 Мбит/с...

Некоторые микроконтроллеры имеют встроенные CAN-контроллеры (к сожалению, почти ни у кого нет трансиверов). Я использовал ChipKIT Max32 и микросхему MCP2551 через макетную плату в схеме ниже. Кроме того, я подключился к трансиверам SparkFun и CAN-шилдов Seeed для получения данных Tx/Rx. Max32 от ChipKIT имеет два контроллера CAN и тактовую частоту процессора 80 МГц, поэтому он хорошо подходит для экспериментов с CAN. Используя онлайн-калькулятор, я смог настроить контроллер PIC32 с первой попытки.

Я приостановил разработку CAN для других проектов, но партнер уговорил Arduino Uno с CAN-шилдами считывать данные с шины 500 кбит/с. Я просмотрел код, которым он недавно поделился со мной, но я не смог найти, как была установлена ​​синхронизация контроллера MCP2515 или чем она отличалась от примера кода.

Следующей платой для разработки, которую я пробую, является Ti Connected LaunchPad TM4C123GXL. Он имеет контроллеры CAN, USB OTG, множество входов/выходов и стоит 13 долларов США.

Введите описание изображения здесь