Побеждаем шину CAN. Часть 1. Технология
Сегодня я хочу познакомить вас с интересной микроконтроллерной платформой CANNY. Это обзорная статья в которой вы узнаете о технологии, а в последующих статьях я расскажу вам о работе с сообщениями CAN, интеграции CANNY c Arduino Mega Server и о тех возможностях, которые предоставляет эта связка.
Почему CANNY? От названия шины CAN, которая широко используется на транспорте и, в частности, во всех современных автомобилях в качестве бортовой сети. Итак, что же можно сделать, имея специализированный контроллер, подключённый к CAN шине вашего автомобиля?
Шина CAN
Образно говоря, шина CAN это нервная система вашего автомобиля. По ней передаётся вся информация о состоянии блоков и систем, а также управляющие команды, которые во многом определяют поведение автомобиля. Зажигание фар, открывание и закрывание дверей, управление проигрыванием музыки в салоне машины, срабатывание сигнализации и т. д. — всё это работает и управляется по этой шине.
Физически, шина CAN представляет собой два перевитых провода и очень проста в монтаже и подключении. Несмотря на свою простоту, она, благодаря своей дифференциальной природе, хорошо защищена от различных наводок и помех. Высокая надежность и большая допустимая длина сети, до 1000 метров, помогла CAN завоевать широкую популярность у производителей различного, не только автомобильного оборудования.
Контроллеры CANNY
Это целое семейство специализированных контроллеров, имеющих встроенную «родную» поддержку работы с шиной CAN. Это касается как «железной» части, так и поддержки на уровне «софта».
Флагманом линейки является контроллер CANNY 7, наиболее мощный и имеющий максимум возможностей. Большое количество памяти, мощные выходы, позволяющие напрямую управлять реле автомобиля, интеллектуальная система защиты от коротких замыканий, защита от бросков тока и напряжения в бортовой сети автомобиля — всё это делает этот контроллер отличным решением для воплощения любых ваших идей и проектов.
Кроме CANNY 7 в линейке контроллеров присутствует ещё несколько моделей, мы будем проводить свои эксперименты с более простой встраиваемой моделью CANNY 5 Nano. Она также поддерживает работу с CAN шиной, но при этом похожа на уже знакомую нам Arduino Nano.
Визуальное программирование
Развитая поддержка шины CAN это не единственная особенность этих контроллеров, кроме этого CANNY имеют свою собственную среду программирования, CannyLab, но не «обычную», а визуальную, где весь процесс написания программ сводится к манипулированию готовыми структурными блоками, заданию их параметров и соединению входов и выходов этих блоков в определённой последовательности, в соответствии с алгоритмом решаемой задачи.
Ни одной строчки кода!
Хорошо это или плохо? На мой взгляд, это дело привычки. Мне, как человеку привыкшему к «традиционному» программированию, было непривычно манипулировать блоками, вместо написания строк кода. С другой стороны, существует множество приверженцев именно такого подхода к составлению алгоритмов и считается, что для инженеров и «не программистов» это наиболее простой и доступный метод программирования микроконтроллеров.
Мне, как минимум, было «прикольно» составлять программы таким образом и через некоторое время мне это стало даже нравиться. Возможно, что если продолжить этим заниматься, то через некоторое время уже написание кода покажется неудобным.
CannyLab является бесплатной средой разработки и вы можете свободно скачать её с сайта разработчиков, она также не требует специальной процедуры инсталляции — достаточно распаковать файл с архивом — и вы можете начинать работу.
Подключение
Подключение CANNY 5 Nano к компьютеру мало чем отличается от подключения контроллеров Arduino. При наличии в системе драйвера Silicon Labs CP210x, либо после его установки из скаченного дистрибутива CannyLab, Windows создаёт виртуальный COM порт и CANNY готов к работе. В моём случае понадобилось ещё перезагрузить компьютер, но возможно это особенность моей системы.
Практические примеры
Давайте на простых примерах разберём, как в CannyLab выполнять действия, привычные нам в Arduino IDE. Начнём с традиционного мигания светодиодом.
В контроллере CANNY 5 на выводе С4 (Channel 4) присутствует тестовый светодиод (аналог светодиода, находящегося на 13 выводе в Arduino). И его тоже можно использовать для индикации и экспериментов, чем мы и воспользуемся.
Что же нужно, чтобы помигать светодиодом в контроллере CANNY? Нужно сделать всего две вещи — сконфигурировать пин четвертого канала как выход и подать на этот выход сигнал с ШИМ генератора. Все эти действия мы уже не раз проделывали в Arduino IDE, посмотрим как это выглядит в CannyLab.
Итак, конфигурируем пин четвертого канала как выход
Настраиваем генератор ШИМ. Задаём период 500 миллисекунд, заполнение — 250 миллисекунд (то есть 50 %) и 1 (true) на входе генератора «Старт» и… всё! Больше ничего делать не нужно — программа готова, осталось только залить её в контроллер.
Режим симуляции
Тут нужно сказать пару слов о процессе симуляции на компьютере работы контроллера и заливке разработанной программы в память «железного» контроллера.
Среда разработки CannyLab позволяет запускать и отлаживать программу, не записывая её в память контроллера. В режиме симуляции вы можете видеть результат работы программы прямо в реальном времени и даже вмешиваться в её работу.
Заливка в контроллер
Для работы контроллеров CANNY, перед заливкой программы (в терминологии разработчиков «диаграммы») нужно сначала залить операционную систему «Устройство/Системное ПО/Записать». Это нужно сделать только один раз, для этого нужно выбрать соответствующий вашему контроллеру файл с расширением .ccx.
После того, как программа написана и отлажена, её можно загрузить в ваш контроллер. Это делается просто — в меню выбираете пункт «Устройство/Диаграмма/Записать» и через несколько секунд программа оказывается записанной в контроллер.
Далее нужно отключить контроллер от USB порта компьютера, снять перемычку на плате и можно включать запрограммированный контроллер, который после включения будет работать по вашей программе.
Аналоговые входы
Для того, чтобы лучше понять принцип программирования контроллеров CANNY в среде разработке CannyLab, давайте ещё разберём пример работы с аналоговым входом в этой системе.
Мы будем отслеживать уровень напряжения на 10 пине контроллера и если он находится в диапазоне 2,5 В ± 20%, будем зажигать встроенный в плату светодиод.
Как и в предыдущем примере, конфигурируем 4-й пин как выход для того, чтобы иметь возможность управлять работой светодиода.
Включаем АЦП на 10-м канале.
Далее пользуемся двумя логическими блоками, которые выдают 1 на выход, если напряжение находится в заданном диапазоне. Полный диапазон от 0 до 4095.
Блок «Логическое И» довершает работу и со своего выхода управляет работой светодиода на плате.
Вот и всё. То, что мы привычно делали на Arduino, мы легко сделали в CannyLab. Осталось только освоиться в этой среде программирования и вы сможете легко и непринуждённо создавать свои проекты на этой платформе.
Эти простые примеры составления программ даны для того, чтобы вы могли понять принцип визуального программирования микроконтроллеров CANNY. В дальнейшей работе вам поможет отличная справочная документация и поддержка разработчиков на сайте и форуме системы.
Заключение по вводной статье цикла
Если вам нравится визуальное программирование в стиле CannyLab, то контроллеры CANNY могут стать для вас интересной альтернативой Arduino или работать в связке с контроллерами Arduino. Об этом мы поговорим во второй статье цикла, в которой я расскажу вам об интеграции контроллеров CANNY с системой Arduino Mega Server.
Напомню, что AMS теперь работает не только на платах Arduino, но и на беспроводных Wi-Fi модулях ESP8266 и именно о такой связке пойдёт речь в следующий раз.
И как обычно, оставайтесь с нами, будет интересно!
Хакаем CAN шину авто. Виртуальная панель приборов
В первой статье «Хакаем CAN шину авто для голосового управления» я подключался непосредственно к CAN шине Comfort в двери своего авто и исследовал пролетающий траффик, это позволило определить команды управления стеклоподъемниками, центральным замком и др.
В этой статье я расскажу как собрать свою уникальную виртуальную или цифровую панель приборов и получить данные с любых датчиков в автомобилях группы VAG (Volkswagen, Audi, Seat, Skoda).
Мною был собран новый CAN сниффер и CAN шилд для Raspberry Pi на базе модуля MCP2515 TJA1050 Niren, полученные с их помощью данные я применил в разработке цифровой панели приборов с использованием 7″ дисплея для Raspberry Pi. Помимо простого отображения информации цифровая панель реагирует на кнопки подрулевого переключателя и другие события в машине.
В качестве фреймворка для рисования приборов отлично подошел Kivy для Python. Работает без Иксов и для вывода графики использует GL.
CAN сниффер из Arduino Uno
Чтобы послушать, что отправляет VCDS в CAN шину я собрал сниффер на макетке из Arduino и модуля MCP2515 TJA1050 Niren.
Схема подключения следующая:
Для прослушивания трафика использовал анализатор CanHackerV2 и прошивку arduino-canhacker для Arduino, которая реализует API совместимое с этой программой. Прошивка в гите https://github.com/autowp/arduino-canhacker.
CanHackerV2 позволяет смотреть пролетающий трафик, записывать и проигрывать команды с заданным интервалом, что очень сильно помогает в анализе данных.
Подслушиваем запросы с помощью диагностической системы VAG-COM (VCDS)
Описание VCDS с официального сайта ru.ross-tech.com:
Программно-аппаратный сканер VCDS предназначен для диагностики электронных систем управления, устанавливаемых на автомобилях группы VAG. Доступ ко всем системам: двигатель, ACP, АБС, климат-контроль, кузовая электроника и т.п., считывание и стирание кодов неисправностей, вывод текущих параметров, активация, базовые установки, адаптация, кодирование и т.п.
Подключив сниффер к линиям CAN_L и CAN_H в диагностическом шнурке я смог увидеть какие запросы делает VCDS и что отвечает авто.
Особенность авто группы VAG в том, что OBD2 разъем подключен к CAN шине через шлюз и шлюз не пропускает весь гуляющий по сети трафик, т.е. подключившись в OBD2 разъем сниффером вы ничего не увидите. Чтобы получить данные в OBD2 разъёме нужно отправлять шлюзу специальные запросы. Эти запросы и ответы видно при прослушивании трафика от VCDS. Например вот так можно получить пробег.
В VCDS можно получить информацию почти с любого датчика в машине. Меня в первую очередь интересовала информация, которой вообще нет на моей приборке, это:
Разработка панели приборов на основе Raspberry Pi и 7″ дисплея
В качестве аппаратной части я выбрал Raspberry Pi. Была идея использовать Android планшет, но показалось, что на Raspberry Pi будет проще и быстрее. В итоге докупил официальный 7″ дисплей, и сделал CAN шилд из модуля TJA1050 Niren.
OBD2 штекер использовал от старого ELM327 адаптера.
Используются контакты: CAN_L, CAN_H, +12, GND.
Тесты в машине прошли успешно и теперь нужно было все собрать. Плату дисплея, Raspberry Pi и блок питания разместил на куске черного пластика, очень удачно подобрал пластмассовые втулки, с ними ничего не болтается и надежно закреплено.
Местом установки выбрал бардачок на торпедо, которым я не пользуюсь. По примеркам в него как раз помещается весь бутерброд.
Напильником довел лист черного пластика до размера крышки бардачка, к нему прикрепил бутерброд и дисплей. Для прототипа сойдет, а 3D модель с крышкой для дисплея и всеми нужными крепежами уже в разработке.
Софт панели приборов на Python и Kivy (UI framework)
Параллельно со сборкой самой панели приборов я вел разработку приложения для отображения информации с датчиков. В самом начале я не планировал какой либо дизайн.
Первая версия панели приборов
По мере разработки решил визуализировать данные более наглядно. Хотел гоночный дизайн, а получилось, что-то в стиле 80-х.
Вторая версия панели приборов
Продолжив поиски более современного дизайна я обратил внимание какие цифровые приборки делают автопроизводители и постарался сделать что-то похожее.
Третья версия панели приборов
Ранее, я никогда не разрабатывал графические приложения под Linux поэтому не знал с чего начать. Вариант на вебе простой в разработке, но слишком много лишних компонентов: иксы, браузер, nodejs, хотелось быстрой загрузки. Попробовав Qt PySide2 я понял, что это займет у меня много времени, т.к. мало опыта. Остановился на Kivy — графический фреймворк для Python, простой в понимании с полной библиотекой графических элементов и дающий возможность быстро создать мобильный интерфейс.
Kivy позволяет запускать приложение без Иксов, прямо из консоли, в качестве рендера используется OpenGL. Благодаря этому полная загрузка системы может происходить за 10 секунд.
Алгоритм работы следующий, используется 3 потока:
Проект цифровой панель приборов открытый. Рад буду предложениям и комментариям!
Видео работы цифровой панели приборов на базе Raspberry Pi
Приложение на телефон Виртуальная панель приборов
Для телефона написал приложение — виртуальная панель приборов, данные от машины передаются через ELM327 Wi-Fi адаптер. Адаптер подключается в OBD2 разъем, делает запросы по CAN шине и возвращается ответы в приложение по Wi-Fi.
Приложение VAG Virtual Cockpit уже в AppStore. Пока, что только под iPhone/iPad, но Android версия планируется. Приложение решил сделать платным с минимальной символической стоимостью.
Если есть желание поддержать проект, то вот ссылка на приложение, принимаю любые замечания и предложения!
VAG Virtual Cockpit
CAN-технология BOSCH в диагностике автомобилей
CAN Технологии
Применяемая на автомобилях система CAN (Controller_Area_Network) позволяет установить связь между отдельными электронными блоками управления. При эксплуатации автомобиля и при диагностике его агрегатов эта система предоставляет возможность использования новых функций, которые не могут быть возложены на отдельно действующие блоки управления.
Применяемая на автомобилях система CAN позволяет объединить в локальную сеть электронные блоки управления или сложные датчики, как, например, датчик угла поворота рулевого колеса. Обозначение CAN является сокращением от выражения Controller:Area:Network (локальная сеть, связывающая блоки управления). Применение системы CAN на автомобиле дает следующие преимущества:
Обмен данными между блоками управления производится на унифицированной базе. Эту базу называют протоколом. Шина CAN служит как бы магистралью для передачи данных.
Независимо действующие системы, например, система курсовой стабилизации ESP, могут быть реализованы с меньшими затратами.
Упрощается подключение дополнительного оборудования.
Шина данных CAN является открытой системой, к которой могут быть подключены как медные провода, так и стекловолоконные проводники.
Диагностика электронных блоков управления производится посредством кабеля «К».
Диагностика некоторых компонентов оборудования салона автомобиля уже сегодня производится через шину CAN (например, это подушки безопасности и блоки управления в дверях автомобиля). В данном случае речь идет о так называемом виртуальном кабеле «К». В будущем необходимость в кабеле «К» должна отпасть.
Можно проводить одновременную диагностику нескольких блоков управления, входящих в систему.
CAN
Промышленная сеть CAN (Controller Area Network) была создана в конце 80-х годов фирмой Bosch как решение для распределенных систем, работающих в режиме реального времени. Первая реализация CAN применялась в автомобильной электронике, однако сейчас CAN находит применение практически в любых типах машин и промышленных установок, от простейших бытовых приборов до систем управления ускорителями элементарных частиц. В настоящий момент CAN-протокол стандартизован в международном стандарте ISO 11898.
Основные положения стандарта CAN.
В качестве среды передачи в CAN используется дифференциальная линия связи — витая пара, сигналы по которой передаются в дифференциальном режиме.
Для контроля доступа к среде передачи используется метод недеструктивного арбитража.
Данные передаются короткими (максимальная длина поля данных — 8 байт) пакетами, которые защищены контрольной суммой.
В CAN отсутствует явная адресация сообщений. Вместо этого каждый пакет снабжен полем арбитража (идентификатор+RTR-бит), которое задает приоритет сообщения в сети.
CAN имеет исчерпывающую схему контроля ошибок, которая гарантирует повторную передачу пакета, в случае возникновения ошибок передачи/приема сообщения.
В CAN существует способ автоматического устранения узла, являющегося источником ошибочных пакетов в сети.
CAN контроллеры.
Протокол CAN полностью реализован аппаратно — в виде микросхем- CAN контроллеров или в виде стандартного периферийного устройства в составе микросхемы- микроконтроллера. Все производители современных микроконтроллеров по крайней мере в одном из семейств имеют микроконтроллеры со встроенным периферийным одним или несколькими CAN-контроллерами. Таким образом, сегодня, СAN-контроллер является таким же стандартным периферийным устройством как контроллер SPI, I2C или UART.
Что такое CAN-шина
Для повышения надежности в CAN-шине используется принцип дифференциальной передачи данных, требующий двух проводов, CAN-High (CAN-H) высокий и CAN-Low (CAN-L) низкий уровень напряжения.
Рецессивные и доминантные биты
Для повышения надежности в CAN-шине используется принцип дифференциальной передачи данных, требующий двух проводов, CAN-High (CAN-H) высокий и CAN-Low (CAN-L) низкий уровень напряжения.
Как это исполнено физически
Физически CAN-шина – система из специального кабеля с разветвителями для подключения электронных блоков и конечных устройств-терминаторов (резисторов).
Витая пара
Чаще всего шина CAN – скрученные (витые) пары проводов (по 30 витков на один погонный метр) с разветвителями для подключения ЭБУ (ECU) и конечными резисторами-терминаторами с номинальным сопротивлением 120 Ом на концах шины.
Сколько CAN-шин может быть на ТС
На ТС экологического уровня Евро-3 и выше может быть от 1 до 6 и более шин CAN, которые могут обозначаться как M-CAN, T-CAN, I-CAN, H-CAN, A-CAN, EBS-CAN и т.д.
Как найти CAN-шину
Признаками шины М-CAN и Т-CAN могут быть, например:
• наличие диагностического разъема OBD II;
• цвет и сечение проводов витых пар;
• связь витых пар с контактами в разъемах OBD II и ЭБУ.
Диагностический разъём OBD II и его распиновка
На большинстве ТС после 2003 года используется диагностический разъем OBD II или DLC (Diagnostic Link Connector), который находится под панелью приборов.
Как будем искать CAN-шину
С помощью мультиметра можно проверить любую витую пару проводов, чтобы убедиться в следующем:
1. Является ли проверяемая витая пара вообще CAN-шиной? (Проверка импеданса);
2. Если витая пара является CAN-шиной, то передаются ли в ней какие–либо сообщения? Проверка работоспособности);
3. Находится ли CAN-шина в работоспособном состоянии и какая из линий шины является CAN-L, а какая – CAN-H?
Внимание! Неосторожное обращение с включенной
CAN-шиной может привести к фиксации в ней ошибок!
Проверка импеданса
Проверка импеданса (полного сопротивления)
ВНИМАНИЕ!
Проверка должна производиться при полностью выключенном питании бортовой сети (выключенной массе).
Контрольное значение должно быть в пределах 60 Ом.
Проверка работоспособности CAN-шины
Находится ли CAN-шина в рабочем состоянии?
ВНИМАНИЕ! Проверка производится при включенном замке зажигания, работающем двигателе, нажатии и отпускании педали подачи топлива между проводами витой пары.
Контрольное значение напряжения должно быть в пределах 1,2-3,0 В.
Определение CAN-H и CAN-L
Какой из проводов является CAN-H, а какой CAN-L?
ВНИМАНИЕ! Проверка производится в состоянии рецессии (при включенном главном выключателе АКБ (кнопке массы), замок зажигания выключен!) и в доминантном состоянии (при включенном замке зажигания в положение «Приборы», при работающем и не работающем двигателе).
Проверка с помощью осциллографа
Учитывая возможные отклонения уровня напряжения от номинальных значений, состояние рецессии можно определить только с помощью осциллографа.
Цвет оболочки и цветовая маркировка проводов
CAN-шина. Что можно увидеть?
В зависимости от того, какую информацию заложил в CAN-шину производитель, могут распознавать:
Способы подключения:
Контактный способ:
Достоинства:
• просто и дешево;
• можно работать на считывание и передачу.
Недостатки:
• может оказывать мешающее влияние на CAN-шину; проблемы с возникновением и фиксацией ошибок;
• Проблемы с гарантией на ТС.
Безконтактный способ (CANCrocodile):
Достоинства:
• не оказывает мешающего воздействия на CAN-шину.
Недостатки:
• можно работать только на считывание.
Бесконтактныe считыватели Crocodile
CAN Crocodile – устройство для бесконтактного считывания данных с CAN-шины автомобиля. CAN Crocodile применяется для подключения к шине CAN систем GPS/ГЛОНАСС мониторинга, которые получают информацию о режимах работы двигателя, состоянии датчиков, уровне топлива, наличии неисправностей и т.д. CAN Crocodile не нарушает изоляцию проводов CAN и «слушает» обмен по шине с помощью специального беспроводного приемника. Применение CAN Crocodile абсолютно безопасно для автомобиля (!), незаметно для работы бортового компьютера, диагностического сканера и других электронных систем. Особенно актуально применение CAN Crocodile для гарантийных автомобилей, в которых подключение каких-либо электронных устройств к шине CAN часто служит поводом для снятия с гарантии.
Бесконтактным способом – без нарушения изоляционной оболочки проводов и электрического контакта.
Не нарушает изоляцию;
Не влияет на работу CAN-шины;
Не занимает диагностический разъём






















