
CanHacker из 2CAN модуля своими руками КанХакер подробно в деталях
CanHacker arduino Flprog
CanHacker arduino Flprog
CAN Hacker своими руками пример чтения кан шины с помощью ARDUINO MCP2515
CAN Hacker своими руками пример чтения кан шины с помощью ARDUINO MCP2515
CanHacker из модуля starline 2CAN делаем своими руками.
Всё очень просто и доступно каждому.
Вот ссылка на статью
http://we.easyelectronics.ru/STM32/druzhim-programmu-canhacker-i-modul-2can-ot-starline.html
Видео CanHacker из 2CAN модуля своими руками КанХакер подробно в деталях канала Gusev.S АвтоЭлектрик
Показать
Дружим программу 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), выбор скорости:
case ‘S’: //изменить скорость CAN, добавим что нибуть свое, заполняя буфер и указывая количество данных //Эта команда установит контроллер CAN для заданного стандартного битрейтом. //Она работает только после включения питания или если контроллер находится в режиме сброса после команды «C». switch(Buf) { case ‘3’: //CAN = 100Kbls MX_CAN1_100(); LedR(1);LedG(1);LedB(0); break ; case ‘4’: //CAN = 125Kbls MX_CAN1_125(); LedR(1);LedG(0);LedB(0); break ; case ‘5’: //CAN = 250Kbls MX_CAN1_250(); LedR(0);LedG(1);LedB(0); break ; case ‘6’: //CAN = 500Kbls MX_CAN1_500(); LedR(0);LedG(0);LedB(1); break ; case ‘7’: //CAN = 800Kbls MX_CAN1_800(); LedR(0);LedG(1);LedB(1); break ; case ‘8’: //CAN = 1000Kbls MX_CAN1_1000(); LedR(1);LedG(0);LedB(1); break ; case ‘9’: //CAN = 95.238Kbls MX_CAN1_95(); LedR(1);LedG(0);LedB(1); break ; case ‘a’: //CAN = 83.338Kbls MX_CAN1_83(); LedR(1);LedG(1);LedB(1); break ; default : MX_CAN1_500(); LedR(1);LedG(1);LedB(0); break ; break ; } num_bytes = sprintf((char*)UserTxBufferFS,»r»); break ; default : num_bytes = sprintf((char*)UserTxBufferFS,»r»); break ; }
и несколько подобных процедур для задания скорости (в файле main.c, для примера укажу пару):
//——————————————————————————————————- /* CAN1 init function (500Kbps) */ void MX_CAN1_500(void) { hcan1.Instance = CAN1; hcan1.Init.Prescaler = 6; hcan1.Init.Mode = CAN_MODE_NORMAL; hcan1.Init.SJW = CAN_SJW_1TQ; hcan1.Init.BS1 = CAN_BS1_6TQ; hcan1.Init.BS2 = CAN_BS2_5TQ; hcan1.Init.TTCM = DISABLE; hcan1.Init.ABOM = DISABLE; hcan1.Init.AWUM = DISABLE; hcan1.Init.NART = DISABLE; hcan1.Init.RFLM = DISABLE; hcan1.Init.TXFP = DISABLE; HAL_CAN_Init(&hcan1); } //——————————————————————————————————- /* CAN1 init function (250Kbps) */ void MX_CAN1_250(void) { hcan1.Instance = CAN1; hcan1.Init.Prescaler = 12; hcan1.Init.Mode = CAN_MODE_NORMAL; hcan1.Init.SJW = CAN_SJW_1TQ; hcan1.Init.BS1 = CAN_BS1_6TQ; hcan1.Init.BS2 = CAN_BS2_5TQ; hcan1.Init.TTCM = DISABLE; hcan1.Init.ABOM = DISABLE; hcan1.Init.AWUM = DISABLE; hcan1.Init.NART = DISABLE; hcan1.Init.RFLM = DISABLE; hcan1.Init.TXFP = DISABLE; HAL_CAN_Init(&hcan1); }
И т.д. и т.п.
Про контрольные светодиоды думаю вопрос не актуальный.
Как то так, суеты на пол дня :). Конечно есть некоторые шероховатости в работе программы, но это уже не ко мне (я надеюсь). Если есть вопросы, советы, и если кому надо помочь запрограммировать такой модуль — спрашивайте тут. Извиняюсь за огромные фотки ?
Надеюсь, что никого не обидел написанием этой статьи…
С уважением, Астанин Сергей. ICQ 164487932.
Добавлю ссылку на проект: yadi.sk/d/l_b4Rox0kdxph
и просто прошивка: yadi.sk/d/xibJD2v8imUQ4
(к сожалению, ветка форума с первоначального сайта с познавательной перепиской вся пропала, что смог восстанавливаю, ссылки на проект если кому надо добавлю)
P.S. Немного еще исправил код в проекте, можно менять скорость обмена, и обмениваться используя стандартные заголовки. Разобрался с программой CANHacker, можно улучшать и модернизировать проект по необходимости, все просто.
Связь вполне устойчивая с другими блоками автомобиля, можно использовать (проверено на Volvo, Renault и Mitsubishi).
Это, вероятно, случалось с каждым из нас: вы едете в своем автомобиле и вдруг желтая лампочка «Check Engine» загорается на приборной панели как тревожное предупреждение о том, что возникли какие-то проблемы с двигателем. К сожалению, это оно само по себе не дает каких-либо намеков на то, что именно является причиной неполадки и может означать все что угодно, начиная от неплотно закрытой крышки топливного бака до проблем с каталитическим конвертером. Я помню, как Honda Integra 94-го года имела ЭБУ под креслом водителя и красный светодиод начинал мигать, если возникали какие-то проблемы с двигателем.
Подсчитав количество «блинков», можно было определить код ошибки. По мере того, как ЭБУ автомобилей становятся все более и более сложными, количество кодов ошибок возрастает экспоненциально. Использование бортовой диагностики автомобиля On-Board Diagnostic (OBD-II) позволяет решить эту проблему. Данный адаптер позволяет использовать персональный компьютер для OBD диагностики. Адаптер AllPro функционально совместим с ELM327 и поддерживает все существующие OBD-II протоколы обмена данными:
VPW, PWM и CAN
Первых два протокола ISO описаны в указанной выше предыдущей публикации. Детальное описание OBD протоколов выходит за рамки данной статьи, я лишь их кратко перечислю.J1850 VPW (Variable Pulse Width) — протокол автомобилей General Motors и некоторых моделей Chrysler со скоростью передачи 10.4 кбит/с по одному проводу.
Напряжение на шине VPW изменяется от 0 до 8 В, данные по шине передаются чередованием коротких (64 мкс) и длинных (128 мкс) импульсов. Реальная же скорость передачи данных по шине изменяется в зависимости от битовой маски данных и находится в пределах от 976 до 1953 байт/с. Это самый медленный из OBD протоколов.
J1850 PWM (Pulse With Modulation) используется в автомобилях корпорации Ford. Скорость передачи здесь 41.6 кбит/ с с использованием дифференциального сигнала по двум проводам. Напряжение на шине изменяется от 0 до 5 В, a длительность импульса составляет 24 мкс. Работа с этим протоколом требует аккуратности в программировании микропроцессора, так как скорость выполнения инструкций языка «C» на PIC микропроцессоре даже с улучшенной PIC18 архитектурой становится сопоставимой с длиной короткой посылки PWM протокола (7 мкс).
CAN (Controlled Area Network) протокол разработан Robert Bosch в 1983 году и окончательно стандартизирован в ISO 11898. Использование CAN шины данных в автомобиле позволяет различным устройствам общаться друг с другом, минуя центральный процессор, так называемый multi-master режим.
Плюсами является также повышенная скорость передачи, до 1 Мбит/с и лучшая помехоустойчивость. Изначально протокол предназначался для использования в автомобилях, но теперь применяется и в других областях. Чтобы повысить надежность передачи данных, в шинах CAN применяется способ дифференциальной передачи сигналов по двум проводам. Образующие эту пару провода называются CAN_High и CAN_Low.
В исходном состоянии шины на обоих проводах поддерживается постоянное напряжение на определенном базовом уровне, приблизительно 2.5 В, называемым рецессивным состоянием. При переходе в активное (доминантное) состояние напряжение на проводе CAN_High повышается, а на проводе CAN_Low снижается, рис.1.
Существует также два формата сообщений или фреймов — стандартный с 11 битным адресным полем (CAN 2.0A) и расширенный с 29 битным полем (CAN 2.0B). Стандартом ISO 15765-4 определяется использование для целей OBD как CAN 2.0A, так и CAN 2.0B. Вместе со скоростями передачи по шине 250 и 500 кбит/с это создает 4 различных CAN протокола.
Поддерживает ли ваш автомобиль OBD-II?
OBD является обязательным только в Северной Америке и Европе. Если в Америке это правило действует с 1996 года, то Евросоюз принял EOBD вариант автодиагностики, основанный на OBD-II, сравнительно недавно. В Европе OBD стал обязательным, начиная с 2001 года, а для дизельных двигателей даже с 2004. Если ваш автомобиль выпущен до 2001 года, то он может вообще не поддерживать OBD даже при наличии соответствующего разъема.
Например, Renault Kangoo 99 года не поддерживает EOBD (хотя редакционная Kangoo dcI60 2004 года с CAN протоколом прошла успешную стыковку с описанным адаптером, а Renault Twingo поддерживает! Те же самые автомобили, сделанные для других рынков, например Турции, могут тоже не быть совместимыми с OBD протоколом. Как определить, какой протокол поддерживается электронным блоком управления автомобиля?
Первое — можно поискать информацию в интернете, хотя там много неточной и непроверенной информации. К тому же, многие автомобили выпускаются для разных рынков с различными протоколами диагностики. Второй более надежный способ — найти разъем и посмотреть, какие контакты в нем присутствуют. Разъем обычно находится под приборной панелью со стороны водителя. Протокол ISO 914-2 или ISO 14230-4 определяется наличием контакта 7, как показано в таблице 1.
Большинство автомобилей последних лет выпуска поддерживает только CAN протокол с контактами 6 и 14 соответственно. В Европе и Северной Америке все новые автомобили, начиная с 2007/ 2008 года, должны использовать OBD только на основе CAN. Замечу, однако, что, как правильно отмечено в комментарии, «Если марка присутствует в таблице, то это не дает гарантии поддержки OBD-II».
Использование L-line в ISO 9141/14230…Отдельно хочется сказать по поводу L-линии в ISO 9141-2/ 14230-4 протоколах. Сейчас она практически нигде не используется, так как для процедуры инициализации связи вполне достаточно только K-линии. В стандарте же, однако, сказано, что сигнал инициализации должен передаваться по двум линиям одновременно, K и L. Владимир Гурский из www.wgsoft.de, автор программы «ScanMaster ELM», собрал большую коллекцию различных ЭБУ.
В качестве примера необходимости L-линии он приводит Renault Twingo 1.2л 2005 года выпуска. Использование здесь при иницилиазации только K-линии приводит к неверному адресу двигателя в ответах ЭБУ. Если же инициализация производится по K и L одновременно, то тогда все работает правильно.
рис 2
AllPro адаптер на PIC18F2455
Схема моего всепротокольного OBD-II адаптера показана на рис.2. Основой является микроконтроллер Microchip PIC18F2455, имеющий модуль USB интерфейса. Устройство использует напряжение питания 5 В от шины USB. Конденсатор C6 служит фильтром внутреннего стабилизатора 3.3 В для обеспечения работы USB шины. Светодиоды D2 и D3 являются индикаторами приема/передачи, а светодиод D1 использован для контроля статуса USB шины.
Выход ISO 9141/14230 интерфейса управляется половинкой драйвера IC2-2, а входной сигнал подается через делитель R12/R13 на вход RX (вывод 18), который является триггером Шмидта, как и большинство входов PIC18F2455, что обеспечивает достаточно надежное срабатывание. Для контроля L-линии используется IC3-1 и R10.
Шина J1850 VPW требует напряжения питания 8 В, получаемого от стабилизатора L78L08 IC4. Сигнал на выход VPW подается через инвертор IC3-2 и буферный полевой транзистор Q1. Делитель R7/R8 и внутренний триггер Шмидта на входе RA1 составляют входной интерфейс J1850 PWM протокола. Внутренний компаратор (входы RA0 и RA3) PIC18F2455 вместе с резисторами R4, R5 выделяет дифференциальный сигнал PWM. Для контроля выхода PWM шины используются IC2-1 и полевой транзистор Q2.
Отдельно хочется сказать по поводу поддержки CAN. Microchip не выпускает контроллеры, содержащие и CAN, и USB. Можно использовать контроллер с CAN модулем и внешний USB чип типа FT232R. Или наоборот, подключить внешний CAN контроллер, как сделано в этом адаптере. CAN интерфейс здесь образуют контроллер MCP2515 (IC5) и трансивер MPC2551 (IC6). MCP2515 подключен через SPI шину к PIC18F2455 и программируется каждый раз при подаче питания адаптера.
Согласующие (bus termination) RC цепочки R14/ C10 и R15/C11 предназначены для уменьшения отражений на CAN шине согласно стандарту ISO 15765-4. Использование их не обязательно, при относительно коротком кабеле отражениями можно пренебречь. Вместо PIC18F2455 можно использовать PIC18F2550 с той же самой прошивкой, см. варианты замены в таблице 2.
таблица 2
Внешний вид устройства показан на рис.3 и обложке, а печатная плата на рис.4.
Программирование PIC18F2455
Для программирования PIC18 можно использовать несложный JDM программатор , схема показана на рис.5.
рис 5
Он очень прост и может бы собран за час на макетной плате. Недостатком является то, что программатор требует наличия последовательного (Com) интерфейса в компьютере и не работает с виртуальными USB/Com адаптерами. Использование ноутбуков также не рекомендуется, так как они не обеспечивают необходимого напряжения на выходе Com порта.
рис 6
Разводка программатора показана на рис.6 и сделана с использованием так называемой «stripboard» технологии, достаточно популярного подхода к макетированию. Типичная stripboard имеет матрицу отверстий с шагом 2.54 мм для монтажа электронных компонентов, соединенных полосками меди на обратной стороне, отсюда и название — stripboard.
Разрезав полоски на обратной стороне и установив сверху проволочные перемычки, можно быстро собрать относительно несложные конструкции. Полоски легко перерезаются зенковкой отверстий обычным сверлом. Существует даже специальная программа — «LochMaster» для проектирования конструкций таким способом. При использовании программатора следует обратить внимание, что корпус персонального компьютера (контакт 5 DB9 разъема) не соответствует корпусу программатора.
Другим условием является использование «полноценного» последовательно кабеля со всеми проводами, необходимыми для работы схемы. Программатор надежно работает с WinPic , единственная проблема заключается в том, что требуется отдельно загрузить файл-дескриптор PIC18F2455.dev (или PIC18F2550.dev) из дистрибуции Microchip IDE после того, как установлен собственно WinPic.
Другой программой, работающей с JDM программатором, является PICPgm , никаких дополнительных файлов здесь не требуется, хотя автору следует поработать над английской грамматикой, рис.7. Прошивка адаптера доступна .
OBD-II кабель
Для подключения к бортовому компьютеру адаптер использует «стандартный» DB-9/OBD-II кабель. Разводка кабеля показана в таблице 3.
Подключение и тестирование устройства. Правильно собранный адаптер в налаживании не нуждается и распознается Windows как USB устройство. Микропроцессор PIC18F2455 не имеет собственного драйвера и использует Windows 2000/XP/Vista CDC (Communication Device Class ) драйвер usbser.sys виртуального Com порта.
По поводу использования драйвера хочется, однако, добавить, что согласно информации www.usb.org исправил баги в usbser.sys только начиная с Windows XP SP2 и использование адаптера с Windows 2000 может быть проблематично. После того, как адаптер распознался как USB устройство и драйвер установлен, можно приступать к тестированию.
Для этого требуется подключить источник стабилизованного напряжения 12 вольт на выводы 1 и 9 разъема J2 и подключить адаптер к персональному компьютеру через USB кабель. Проверяется наличие напряжения 8 В на выходе стабилизатора IC4. Следующим шагом является запуск Windows приложения HyperTerm и подсоединения к Com порту адаптера.
Устройство имеет процедуру самодиагностики с проверкой прохождения сигнала со выхода на вход по всем протоколам. Для этого используется команда «AT@3», рис.8.
Прохождение проверяется по следующим цепям:
• IC2-1, R4 для отрицательной шины PWM
• Q2, D6, R5 для положительной шины PWM
• IC3-2, IC4, R11, Q1, D5, R7, R8 для VPW
• IC2-2, R9, R12, R13 для ISO 9141/14230
• Ответ контроллера MCP2515 по шине SPI
Например, отсутствие IC2 приведет сразу к двум ошибкам, рис.9.
Процедура самодиагностики не включает проверку CAN трансивера MCP2551, здесь можно просто замерить напряжение на выводах 6 и 7. Оно должно быть в пределах 2.5 В.
Работа с Адаптером
Адаптер совместим по системе команд с ELM327 и может использоваться с приложениями, работающими с ELM327. Я предпочитаю использовать «ScanMaster ELM» Владимира Гурского , рис.10.
рис 10
Адаптер работает также со следующими приложениями:
• ScanTool.net for Windows v1.13
• Digimoto
•PCMSCAN
• EasyObdII Pro
В качестве примера приведу ситуацию, которая случилась с VW Passat моего знакомого. В автомобиле загорелась лампочка «Check Engine», подключение ANPro адаптера определило ошибку Р0118 -«engine coolant temperature circuit high input», т.е. высокий уровень сигнала с датчика температуры охлаждающей жидкости, рис. 11. Дальнейшее расследование выявило неисправный датчик. После замены датчика ошибка была стерта с помощью «Clear Trouble codes» кнопки, см. рис.12. Ошибка исчезла и больше не появлялась, рис.13.
ВСЁ ДЛЯ СТАТЬИ В АРХИВЕ…СКАЧАТЬ…
Сообщества ›
Arduino для автомобиля ›
Блог ›
Доступный КАН сниффер (CAN sniffer) своими руками.
Продублирую тут.Некоторое время назад занялся CAN шиной. Наконец созрела статья, как сделать простейший кан сниффер для Астры (легко адаптировать к любой другой марке, конечно).
Начнём сразу со схемы!
Схема соединения
Все компоненты подписаны и легко находятся на Али. Могу потом добавить конкретные ссылки, где брал я.
Соответственно, понадобится плата с контроллером STM32F103C8T6, плата стабилизированного регулятора напряжения, плата CAN трансивера MCP2551. По желанию можно добавить блютус модуль — очень удобно для записи логов на смартфон.
Программируется и прошивается с помощью АрдуиноIDE. Для прошивки придется купить USB-TTL преобразователь (пригодится для отладки) или, что проще, ST-Link V2.
Предварительная подготовка платы — см. известный источник на гиктайме.
Сама библиотека для работы с кан-шиной появилась недавно, и в основном репозитории её нет, поэтому выкладываю архив Arduino IDE, гарантированно работающий (сохранял для себя).
Ну и, конечно, файл программы: cloud.mail.ru/public/GX5y/9g61ucVCY
Работает следующим образом: после подачи питания сниффер пытается по очереди подключиться к MS CAN, в случае неудачи — к LS CAN, и далее по кругу. Как только подключение успешно, все пойманные пакеты печатаются в UART (или, проще говоря, в ком-порт).
В случае подключения к компу Вы ловите данные через терминал. А в случае с блютусом — через замечательную программу для андроида BlueTerm2.
Затем полученный файл дербаним любимым эксэлем.
На этом всё! Не очень литературно, но суть, надеюсь, изложил понятно.
П.С. Позже добавлю скриншот из блютерма, соберу тестовый образец в более менее приличном виде.
Добавлено:
По многочисленным вопросам.
Цели следующие.
ЛС кан:
оповещение о выключенных фарах во время движения,
отображение температуры мотора и напряжения на одометре или на стрелках приборов,
функция «спасибо» — моргнуть только задними аварийками,
отображение реальной скорости на одометре
отображение, какая дверь открыта (на одометре?)
другие плюшки – см «кан адаптер» и «мини кан адаптер»
МС кан:
включение и отключение компрессора одним нажатием (климат контроль)
ввод команд цифровыми кнопками магнитолы д команд цифровыми кнопками магнитолы
Реализация — неспешная.
Добавлено: пример лога
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В
Все эксперименты на ваш риск. ?
ÐÑоÑиÑал замеÑаÑелÑнÑÑ ÑÑаÑÑÑ Ð½Ð° ХабÑе, 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), вÑÐ±Ð¾Ñ ÑкоÑоÑÑи:
case 'S': //измениÑÑ ÑкоÑоÑÑÑ CAN, добавим ÑÑо нибÑÑÑ Ñвое, заполнÑÑ Ð±ÑÑÐµÑ Ð¸ ÑказÑÐ²Ð°Ñ ÐºÐ¾Ð»Ð¸ÑеÑÑво даннÑÑ
//ÐÑа команда ÑÑÑÐ°Ð½Ð¾Ð²Ð¸Ñ ÐºÐ¾Ð½ÑÑÐ¾Ð»Ð»ÐµÑ CAN Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ ÑÑандаÑÑного биÑÑейÑом.
//Ðна ÑабоÑÐ°ÐµÑ ÑолÑко поÑле вклÑÑÐµÐ½Ð¸Ñ Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ Ð¸Ð»Ð¸ еÑли конÑÑÐ¾Ð»Ð»ÐµÑ Ð½Ð°Ñ
одиÑÑÑ Ð² Ñежиме ÑбÑоÑа поÑле ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ "C".
switch(Buf[1])
{
case '3': //CAN = 100Kbls
MX_CAN1_100();
LedR(1);LedG(1);LedB(0);
break ;
case '4': //CAN = 125Kbls
MX_CAN1_125();
LedR(1);LedG(0);LedB(0);
break ;
case '5': //CAN = 250Kbls
MX_CAN1_250();
LedR(0);LedG(1);LedB(0);
break ;
case '6': //CAN = 500Kbls
MX_CAN1_500();
LedR(0);LedG(0);LedB(1);
break ;
case '7': //CAN = 800Kbls
MX_CAN1_800();
LedR(0);LedG(1);LedB(1);
break ;
case '8': //CAN = 1000Kbls
MX_CAN1_1000();
LedR(1);LedG(0);LedB(1);
break ;
case '9': //CAN = 95.238Kbls
MX_CAN1_95();
LedR(1);LedG(0);LedB(1);
break ;
case 'a': //CAN = 83.338Kbls
MX_CAN1_83();
LedR(1);LedG(1);LedB(1);
break ;
default :
MX_CAN1_500();
LedR(1);LedG(1);LedB(0);
break ;
break ;
}
num_bytes = sprintf((char*)UserTxBufferFS,"r");
break ;
default :
num_bytes = sprintf((char*)UserTxBufferFS,"r");
break ;
}
и неÑколÑко подобнÑÑ Ð¿ÑоÑедÑÑ Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð¸Ñ ÑкоÑоÑÑи (в Ñайле main.c, Ð´Ð»Ñ Ð¿ÑимеÑа ÑÐºÐ°Ð¶Ñ Ð¿Ð°ÑÑ):
//-------------------------------------------------------------------------------------------------------
/* CAN1 init function (500Kbps) */
void MX_CAN1_500(void)
{
hcan1.Instance = CAN1;
hcan1.Init.Prescaler = 6;
hcan1.Init.Mode = CAN_MODE_NORMAL;
hcan1.Init.SJW = CAN_SJW_1TQ;
hcan1.Init.BS1 = CAN_BS1_6TQ;
hcan1.Init.BS2 = CAN_BS2_5TQ;
hcan1.Init.TTCM = DISABLE;
hcan1.Init.ABOM = DISABLE;
hcan1.Init.AWUM = DISABLE;
hcan1.Init.NART = DISABLE;
hcan1.Init.RFLM = DISABLE;
hcan1.Init.TXFP = DISABLE;
HAL_CAN_Init(&hcan1);
}
//-------------------------------------------------------------------------------------------------------
/* CAN1 init function (250Kbps) */
void MX_CAN1_250(void)
{
hcan1.Instance = CAN1;
hcan1.Init.Prescaler = 12;
hcan1.Init.Mode = CAN_MODE_NORMAL;
hcan1.Init.SJW = CAN_SJW_1TQ;
hcan1.Init.BS1 = CAN_BS1_6TQ;
hcan1.Init.BS2 = CAN_BS2_5TQ;
hcan1.Init.TTCM = DISABLE;
hcan1.Init.ABOM = DISABLE;
hcan1.Init.AWUM = DISABLE;
hcan1.Init.NART = DISABLE;
hcan1.Init.RFLM = DISABLE;
hcan1.Init.TXFP = DISABLE;
HAL_CAN_Init(&hcan1);
}
Ð Ñ.д. и Ñ.п.
ÐÑо конÑÑолÑнÑе ÑвеÑÐ¾Ð´Ð¸Ð¾Ð´Ñ Ð´ÑÐ¼Ð°Ñ Ð²Ð¾Ð¿ÑÐ¾Ñ Ð½Ðµ акÑÑалÑнÑй.
Ðак Ñо Ñак, ÑÑеÑÑ Ð½Ð° пол Ð´Ð½Ñ :). ÐонеÑно еÑÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе ÑеÑÐ¾Ñ Ð¾Ð²Ð°ÑоÑÑи в ÑабоÑе пÑогÑаммÑ, но ÑÑо Ñже не ко мне (Ñ Ð½Ð°Ð´ÐµÑÑÑ). ÐÑли еÑÑÑ Ð²Ð¾Ð¿ÑоÑÑ, ÑовеÑÑ, и еÑли ÐºÐ¾Ð¼Ñ Ð½Ð°Ð´Ð¾ помоÑÑ Ð·Ð°Ð¿ÑогÑаммиÑоваÑÑ Ñакой модÑÐ»Ñ â ÑпÑаÑивайÑе ÑÑÑ. ÐзвинÑÑÑÑ Ð·Ð° огÑомнÑе ÑоÑки 🙂
ÐадеÑÑÑ, ÑÑо никого не обидел напиÑанием ÑÑой ÑÑаÑÑиâ¦
С Ñважением, ÐÑÑанин СеÑгей. ICQ 164487932.
ÐÐ¾Ð±Ð°Ð²Ð»Ñ ÑÑÑÐ»ÐºÑ Ð½Ð° пÑоекÑ: yadi.sk/d/l_b4Rox0kdxph
и пÑоÑÑо пÑоÑивка: yadi.sk/d/xibJD2v8imUQ4
(к ÑожалениÑ, веÑка ÑоÑÑма Ñ Ð¿ÐµÑвонаÑалÑного ÑайÑа Ñ Ð¿Ð¾Ð·Ð½Ð°Ð²Ð°ÑелÑной пеÑепиÑкой вÑÑ Ð¿Ñопала, ÑÑо Ñмог воÑÑÑанавливаÑ, ÑÑÑлки на пÑÐ¾ÐµÐºÑ ÐµÑли ÐºÐ¾Ð¼Ñ Ð½Ð°Ð´Ð¾ добавлÑ)
P.S. Ðемного еÑе иÑпÑавил код в пÑоекÑе, можно менÑÑÑ ÑкоÑоÑÑÑ Ð¾Ð±Ð¼ÐµÐ½Ð°, и обмениваÑÑÑÑ Ð¸ÑполÑзÑÑ ÑÑандаÑÑнÑе заголовки. РазобÑалÑÑ Ñ Ð¿ÑогÑаммой CANHacker, можно ÑлÑÑÑаÑÑ Ð¸ модеÑнизиÑоваÑÑ Ð¿ÑÐ¾ÐµÐºÑ Ð¿Ð¾ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи, вÑе пÑоÑÑо.
СвÑÐ·Ñ Ð²Ð¿Ð¾Ð»Ð½Ðµ ÑÑÑойÑÐ¸Ð²Ð°Ñ Ñ Ð´ÑÑгими блоками авÑомобилÑ, можно иÑполÑзоваÑÑ (пÑовеÑено на Volvo, Renault и Mitsubishi).
Дружим программу 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, для примера укажу пару):
Про контрольные светодиоды думаю вопрос не актуальный.
Как то так, суеты на пол дня :). Конечно есть некоторые шероховатости в работе программы, но это уже не ко мне (я надеюсь). Если есть вопросы, советы, и если кому надо помочь запрограммировать такой модуль — спрашивайте тут. Извиняюсь за огромные фотки ?
Надеюсь, что никого не обидел написанием этой статьи…
С уважением, Астанин Сергей. 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. Программирование ведется с помощью специальных диаграмм. Надо расставить логические блоки и выставить между ними связи.
Такой вид программирования хорош тем, что ниже порог входа в разработку, отрицательной стороной является то, что сложные диаграммы будет проблематично читать, так же в них можно запутаться и они занимают много места на экране ПК.
Этот способ программирования мне не привычен и не удобен. В дальнейшем я планирую использовать для подобных прототипов Ардуино совместимые платы с 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 для подключения магнитолы. Его удобно использовать тогда когда вам просто нужно решить проблему разрядки аккумулятора из-за неправильно подключенной магнитолы.
Версия для использования на грузовых автомобилях с бортовой сетью с напряжением 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. Я не смог найти руководство пользователя для этого приложения. Однако оно достаточно простое и интуитивное при использовании.























