Есть множество датчиков, все они собирают информацию о состоянии автомобиля и передают её на своём языке контроллерам, которые понимают их. Каждый контроллер переводит полученные данные на единый, принятый в CAN-шине, язык и «выпускает» информацию дальше в систему.
Все контроллеры связаны между собой теми самыми двумя проводами. Возможен и обратный процесс: из единой системы — к датчикам. В итоге сотни датчиков по всей машине могут обмениваться друг с другом информацией.
По сути CAN — это сеть для передачи данных, но со своими особенностями и топологией. Но для того, чтобы организовать автоматическое распределение имён (идентификаторов) между узлами и датчиками, стандартизировать и привести к единообразию управление устройствами различных типов и производителей на разных автомобилях, на рынке стали разрабатываться протоколы более высокого уровня для CAN. Одним из таких стандартов (протоколов) и является J1939.
Изначально он был придуман для грузовиков, но в настоящее время он широко применяется в легковых автомобилях, в сельскохозяйственной технике, автобусах и так далее.
Главная его идея — это стандартизировать «имена» (идентификаторы/адреса) и «правила общения» (запросов и ответов) между сегментами сети CAN.
The Fleet Management Systems Interface (FMS) представляет собой стандартный протокол для работы с данными коммерческого транспорта разных производителей.
Его разработали (договорились между собой и согласовали) шесть европейских производителей: Daimler AG, MAN AG, Scania, Volvo (включая Renault), DAF Trucks и IVECO в 2002 году. Они преследовали цель — сделать процесс считывания данных и диагностики ошибок более простым и универсальным. Как итог, теперь на разных машинах, например Scania и Volvo, можно одинаково «прочитать» в CAN-шине текущую скорость или обороты двигателя.
Есть несколько поколений данного стандарта, в рамках которых меняется количество доступных стандартных, единых параметров. Сейчас их уже около 30. Наличие этой функции у многих производителей опционально при заказе нового автомобиля и «включение» её в комплектацию является платным.
Это устаревший и предшествующий J1939 протокол с очень схожим смыслом и функционалом. И про него никто бы не вспоминал, не будь нашего желания экономить ?
Дело в том, что некоторые производители, например Volvo, ряд параметров FMS-стандарта открывали для свободного чтения, а самые интересные из них, топливные например, скрывали. Получить их можно было либо приобретая специальный FMS-шлюз, либо «открывая» параметры на сервисе, естественно, не бесплатно.
Тогда наши смекалистые соседи из Литвы вспомнили про устаревший J1708, проверили — и да, здесь ничего не «скрывали», поэтому можно было достать те самые актуальные топливные параметры. По этой причине на рынке было важным и популярным, чтобы GPS трекер «умел читать» J1708.
Это быстро прикрыли, и производители автомобилей окончательно отказались от J1708. Теперь это неактуально.
Здесь, к сожалению, производителям договориться о каком-то стандарте не удалось. Их много, жёсткая конкуренция, общих задач нет, большое количество выпускаемых моделей, высокая скорость изменений и модернизации датчиков и так далее.
В результате в большинстве случаев протокол, по которому происходит обмен данными в CAN-шине легкового автомобиля, неизвестен либо нигде не описан. А потребность видеть и получать данные с бортового компьютера легкового автомобиля ничуть не меньше. Расход топлива, текущий пробег, обороты двигателя и многие другие параметры важны для контроля эффективности эксплуатации машины водителем.
К слову, на рынке есть ряд так называемых переходников. Их создатели либо добились от производителей автомобилей, либо самостоятельно подобрали нужные «правила общения» и «имена» (идентификаторы, ID) датчиков во многих моделях автомобилей. Переходники «переводят» их на язык J1939 или другие, понятные GPS трекерам, протоколы.
В своей работе мы используем такие, а в последнее время учимся подбирать протоколы самостоятельно.
- Хакаем CAN шину авто. Виртуальная панель приборов
- CAN сниффер из Arduino Uno
- Подслушиваем запросы с помощью диагностической системы VAG-COM (VCDS)
- Разработка панели приборов на основе Raspberry Pi и 7″ дисплея
- Софт панели приборов на Python и Kivy (UI framework)
- Видео работы цифровой панели приборов на базе Raspberry Pi
- Приложение на телефон Виртуальная панель приборов
- Использование стандарта CAN в Arduino – полное руководство
- Краткие сведения о протоколе CAN
- Формат CAN сообщений
- Проводники, используемые в CAN
- Сравнение CAN с SPI и I2C
- Применения CAN протокола
- Использование протокола CAN в Arduino
- CAN модуль (контроллер шины CAN) MCP2515
- Необходимые компоненты
- Схема проекта
- Объяснение программы для Arduino
- Инициализация CAN модуля MCP2515
- 📺 Видео
Видео:MCP2515, контроллер CAN шины с интерфейсом SPIСкачать
Хакаем 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
- Подслушиваем запросы с помощью диагностической системы VAG-COM (VCDS)
- Разработка панели приборов на основе Raspberry Pi и 7″ дисплея
- Софт панели приборов на Python и Kivy (UI framework)
- Видео работы цифровой панели приборов на базе Raspberry Pi
Читайте также: Как посмотреть давление в шинах мазда сх 5 2019
Под катом полная реализация проекта, будет интересно!
Водительская дверь открыта
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 потока:
- В главном потоке работаем с графическими элементы (спидометр, тахометр, часы, температуры и др) на экране
- Во втором потоке каждые 5 мс делаем опрос следующего датчика
- В третьем потоке слушаем CAN шину, получив ответ парсим его и обновляем соответствующий графический элемент
Работает стабильно, самый долгий процесс в разработке был связан с рисованием дизайна. На данный момент обкатываю решение и потихоньку пишу мобильное приложение для iOS, чтобы любой мог попробовать цифровую панель приборов.
Проект цифровой панель приборов открытый. Рад буду предложениям и комментариям!
Видео работы цифровой панели приборов на базе Raspberry Pi
Приложение на телефон Виртуальная панель приборов
Для телефона написал приложение — виртуальная панель приборов, данные от машины передаются через ELM327 Wi-Fi адаптер. Адаптер подключается в OBD2 разъем, делает запросы по CAN шине и возвращается ответы в приложение по Wi-Fi.
Читайте также: Хэнкок шины летние р16
Приложение VAG Virtual Cockpit уже в AppStore. Пока, что только под iPhone/iPad, но Android версия планируется. Приложение решил сделать платным с минимальной символической стоимостью.
Если есть желание поддержать проект, то вот ссылка на приложение, принимаю любые замечания и предложения!
VAG Virtual Cockpit
Видео:Бортовой компьютер ШТАТ Unicomp 410 ML K-Line+CAN OBD IIСкачать
Использование стандарта CAN в Arduino – полное руководство
Современные автомобили включают в себя несколько десятков разнообразных датчиков. И все эти датчики регулярно обмениваются информацией с другими датчиками/устройствами автомобиля. Причем автомобили с каждым годом становятся все «умнее» и поэтому количество датчиков в них все больше увеличивается. В автомобилях сегодняшнего дня находят широкое применение системы автономного вождения, системы безопасности с автоматически срабатывающими подушками безопасности, системы контроля давления в шинах, круиз-контроль и т.д. В большинстве случаев информация, поступающая от этих датчиков, является критически важной. Например, если сработает датчик столкновения, которому срочно нужно передать сигнал на раскрытие подушек безопасности, а ему это помешают сделать какие-либо сигналы/процессы в электронной системе автомобиля. В этом случае жизнь людей в автомобиле может оказаться под угрозой. Поэтому в автомобилях не используют такие широко распространенные в обычной электронике протоколы передачи данных как UART, SPI или I2C. Вместо них конструкторы автомобилей отдают предпочтение значительно более надежным протоколам передачи данных, таким как LIN, CAN, FlexRay и т.д.
Наибольшее распространение среди этих «надежных» протоколов получил стандарт (протокол) CAN. Этот стандарт широко применяется не только в электронных системах современных автомобилей, но и во многих других промышленных устройства, в которых критически важна надежная передача данных. Достаточно подробную информацию о стандарте CAN можно прочитать в соответствующей статье Википедии. Мы же в данной статье рассмотрим обмен данными между двумя платами Arduino с помощью протокола CAN.
Видео:CAN шина👏 Как это работаетСкачать
Краткие сведения о протоколе CAN
CAN (Controller Area Network – сеть контролеров) представляет собой протокол (стандарт) последовательной связи, разработанный для промышленных и автомобильных приложений. Это ориентированный на обмен сообщениями протокол, используемый для связи между множеством (несколькими) устройств. Когда различные CAN устройства соединены между собой как показано на следующем рисунке, они формируют сеть, которая работает наподобие центральной нервной системы человека и позволяет любому устройству общаться с любым другим устройством в этой сети.
CAN-сеть состоит из двух проводников (CAN High и CAN Low) и обеспечивает двунаправленную передачу данных. На практике под CAN-сетью обычно подразумевается сеть топологии «шина» с физическим уровнем в виде дифференциальной пары. Передача ведется кадрами, которые могут принимать все узлы сети. Для доступа к такой шине выпускаются специализированные микросхемы (модули) – драйверы CAN-шины.
Обычно скорость передачи по CAN-шине варьируется от 50 Кбит/с до 1 Мбит/с, а дальность связи лежит в диапазоне от 40 метров (на скорости 1 Мбит/с) до 1000 метров (на скорости 50 Кбит/с).
Формат CAN сообщений
В CAN-сети данные передаются в виде сообщений определенного формата. Этот формат состоит из большого числа сегментов, но двумя основными сегментами является идентификатор (identifier) и данные (data), которые и позволяют передавать и принимать сообщения по CAN-шине.
Идентификатор (Identifier) – также известен под именами CAN ID и PGN (Parameter Group Number). Он используется для идентификации CAN устройств в CAN-сети. Длина идентификатора составляет 11 или 29 бит в зависимости от того какой тип протокола CAN используется:
- Standard (стандартный) CAN: 0-2047 (11-bit);
- Extended (расширенный) CAN: 0-2 29 -1 (29-bit).
Data – это данные, которые необходимо передать от одного устройства другому. Длина данных может составлять от 0 до 8 байт.
Data Length Code (DLC) (длина поля данных): может принимать значения от 0 до 8 в зависимости от количества байт для передачи.
Проводники, используемые в CAN
CAN протокол работает по двум проводникам, именуемыми CAN_H и CAN_L, для передачи и приема информации. Оба проводника работают как дифференциальная линия, что означает что CAN сигнал (0 или 1) представляет собой разность потенциалов между CAN_L и CAN_H. Если эта разность положительна и больше определенного минимального уровня напряжения, то это 1, а если эта разность отрицательна – то это 0.
Обычно в протоколе CAN используется кабель с витыми жилами. Как показано на выше приведенном рисунке, на обоих концах CAN-сети включается 120-омный резистор для обеспечения баланса в линии.
Сравнение CAN с SPI и I2C
На нашем сайте мы ранее уже рассматривали использование в платах Arduino протоколов SPI и I2C, поэтому давайте сравним данные протоколы с протоколом CAN.
Параметр | SPI | I2C | CAN |
Скорость | 3-10 Мбит/с | стандарт: 100 Кбит/с; |
По скорости стандарт CAN не в лидерах, но его главным «козырем» является высокая надежность связи.
Применения CAN протокола
- В связи с чрезвычайно высокой надежностью и устойчивостью CAN протокола он широко применяется в автомобилях, промышленных механизмах, сельском хозяйстве, медицинском оборудовании и т.д.
- В связи с небольшим количеством используемых проводников CAN протокол исключительно удобен для применения в автомобилях.
- Устройства на основе CAN протокола отличаются низкой стоимостью.
- В CAN-сеть (шину) легко добавлять и удалять новые устройства.
Использование протокола CAN в Arduino
Поскольку платы Arduino не имеют в своем составе встроенного CAN порта, то для реализации связи между ними по данному протоколу мы будем использовать внешние CAN модули MCP2515. Эти модули подключаются к плате Arduino по интерфейсу SPI.
Видео:Arduino CAN Monitor (простейший монитор шины CAN)Скачать
CAN модуль (контроллер шины CAN) MCP2515
Модуль MCP2515 включает в себя CAN контроллер MCP2515, который представляет собой высокоскоростной CAN приемопередатчик. Соединение модуля MCP2515 с микроконтроллером осуществляется с помощью интерфейса SPI, поэтому его легко подключить ко всем микроконтроллерам с данным интерфейсом.
Начинающим изучение CAN-шины целесообразно начинать именно с этого модуля ввиду его простоты и легкости подключения к большинству современных микроконтроллеров.
Основные технические характеристики модуля MCP2515:
- включает в себя высокоскоростной CAN приемопередатчик TJA1050;
- размеры модуля: 40×28mm;
- управление по интерфейсу SPI с возможностью подключения к CAN-шине нескольких устройств;
- кварцевый генератор на 8 МГц;
- сопротивление на концах 120 Ом;
- включает независимый ключ, светодиодный индикатор, индикатор мощности;
- поддерживает скорости передачи данных до 1 Мбит/с;
- низкий потребляемый ток в режиме ожидания;
- возможность подключения до 112 устройств (узлов).
Назначение контактов (распиновка) CAN модуля MCP2515 представлено в следующей таблице.
Наименование контакта | Назначение контакта |
VCC | контакт питания 5 В |
GND | общий провод (земля) |
CS | SPI SLAVE select pin (Active low) (выбор ведомого) |
SO | SPI master input slave output lead |
SI | SPI master output slave input lead |
SCLK | контакт синхронизации SPI |
INT | контакт прерывания MCP2515 |
В данном проекте мы будем передавать данные, считываемые с датчика температуры и влажности DHT11 платой Arduino Nano, плате Arduino Uno с помощью CAN модуля MCP2515.
Видео:Бортовой компьютер Орион БК-21 CAN - обзор функционала и комплектацииСкачать
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress).
- Плата Arduino Nano (купить на AliExpress).
- Датчик температуры и влажности DHT11 (купить на AliExpress).
- ЖК дисплей 16х2 (купить на AliExpress).
- MCP2515 CAN Module (контроллер шины CAN MCP2515) – 2 шт. (купить на AliExpress).
- Потенциометр 10 кОм (купить на AliExpress).
- Макетная плата.
- Соединительные провода.
Видео:Что такое маршрутный компьютер и как выбрать нужный?Скачать
Схема проекта
Схема проекта для связи между двумя платами Arduino с помощью протокола CAN и модулей MCP2515 представлена на следующем рисунке.
Соединения на передающей стороне:
Компонент — контакт | Arduino Nano |
MPC2515 — VCC | +5V |
MPC2515 — GND | GND |
MPC2515 — CS | D10 (SPI_SS) |
MPC2515 — SO | D12 (SPI_MISO) |
MPC2515 — S I | D11 (SPI_MOSI) |
MPC2515 — SCK | D13 (SPI_SCK) |
MPC2515 — INT | D2 |
DHT11 — VCC | +5V |
DHT11 — GND | GND |
DHT11 — OUT | A0 |
Соединения на приемной стороне:
Компонент — контакт | Arduino Uno |
MPC2515 — VCC | +5V |
MPC2515 — GND | GND |
MPC2515 — CS | 10 (SPI_SS) |
MPC2515 — SO | 12 (SPI_MISO) |
MPC2515 — SI | 11 (SPI_MOSI) |
MPC2515 — SCK | 13 (SPI_SCK) |
MPC2515 — INT | 2 |
LCD (ЖК дисплей) — VSS | GND |
LCD — VDD | +5V |
LCD — V0 | к среднему контакту потенциометра 10 кОм |
LCD — RS | 3 |
LCD — RW | GND |
LCD — E | 4 |
LCD — D4 | 5 |
LCD — D5 | 6 |
LCD — D6 | 7 |
LCD — D7 | 8 |
LCD — A | +5V |
LCD — K | GND |
Соединения между двумя CAN модулями MCP2515:
MCP2515 (Arduino Nano) | MCP2515 (Arduino UNO) |
H | H |
L | L |
После сборки всей схемы на макетных платах у нас получилась следующая конструкция.
Видео:Бортовой компьютер штат с Кан шиной (Can OBD-II)Скачать
Объяснение программы для Arduino
Первым делом нам необходимо установить библиотеку для работы с протоколом CAN в Arduino IDE. Сначала скачайте ZIP файл библиотеки по следующей ссылке — Arduino CAN MCP2515 Library. Затем установите ее в Arduino IDE с помощью пункта меню Sketch -> Include Library -> Add .ZIP Library.
В нашем проекте мы код программы разделим на две части: для передающей части и для приемной части. Полные коды программ приведены к конце статьи, здесь же мы кратко рассмотрим их основные фрагменты.
Инициализация CAN модуля MCP2515
Для установления соединения платы Arduino с модулем MCP2515 выполните следующую последовательность шагов. Но перед этим убедитесь в том, что указанная выше библиотека CAN MCP2515 установлена в вашу Arduino IDE.
Шаг 1. Установите номер контакта, к которому подключена линия CS интерфейса SPI (10 по умолчанию).
- Свежие записи
- Нужно ли менять пружины при замене амортизаторов
- Скрипят амортизаторы на машине что делать
- Из чего состоит стойка амортизатора передняя
- Чем стянуть пружину амортизатора без стяжек
- Для чего нужны амортизаторы в автомобиле
📺 Видео
Подробно про CAN шинуСкачать
Как проверить К-линию.Скачать
Экспресс диагностика CAN шины на автомобиле. №21Скачать
Простая проверка CAN шины. Сканер не видит автомобиль через OBD2. Как правильно выбрать изоленту.Скачать
Как управлять автомобилем через CAN-шину?Скачать
Can Bus - что это такое ? Зачем нужен ? Как настроить ?Скачать
Прошивка can шины на Приоре-2 + установка альтменюСкачать
Настройки Canbus для китайской магнитолыСкачать
Штат БК-3.Мал да удал. Бортовой компьютер. Проще некуда.Скачать
Как настроить Canbus на Android магнитоле . Правильное подключение .Скачать
Кан шина, что это? Поймет школьник! принцип работыСкачать
Логический LIN пробник, цифровой тестер лин, к лайн шины автомобиля. На Ардуино, OLED I2C, TJA 1020Скачать
Настройки CANBUS TeyesСкачать