CAN-шина – як працює електроніка у сучасних автомобілях? Що таке шина CAN? Що таке кан шина в автомобілі

Поява цифрових шин в автомобілях відбулася пізніше, ніж у них почали широко впроваджуватись електронні блоки. На той час цифровий «вихід» їм був потрібен лише для «спілкування» з діагностичним обладнанням– для цього вистачало низькошвидкісних послідовних інтерфейсів на зразок ISO 9141-2 (K-Line). Однак ускладнення бортової електроніки, що здається, з переходом на CAN-архітектуру стало її спрощенням.

Справді, навіщо мати окремий датчик швидкості, якщо блок АБС має інформацію про швидкість обертання кожного колеса? Достатньо передавати цю інформацію на панель приладів і в блок управління двигуном. Для систем безпеки це ще важливіше: так, контролер подушок безпеки вже стає здатний самостійно заглушити мотор при зіткненні, надіславши відповідну команду на ЕБУ двигуна, та знеструмити максимум бортових ланцюгів, передавши команду на блок управління живленням. Раніше ж доводилося для безпеки застосовувати ненадійні заходи на кшталт інерційних вимикачів та піропатронів на клемі акумулятора ( власники BMWз його "глюками" вже добре знайомі).

Однак на старих принципах реалізувати повноцінне спілкування блоків управління було неможливо. На порядок зросли обсяг даних та їх важливість, тобто була потрібна шина, яка не тільки здатна працювати з високою швидкістю та захищена від перешкод, а й забезпечує мінімальні затримки при передачі. Для машини, що рухається на високій швидкості, навіть мілісекунди вже можуть грати критичну роль. Рішення, яке задовольняє такі запити, вже існувало в промисловості – йдеться про CAN BUS (Controller Area Network).

Суть CAN-шини

Цифрова CAN-шина – це конкретний фізичний протокол. Принцип роботи CAN-шини, розроблений Bosch ще у вісімдесятих роках, дозволяє реалізувати її з будь-яким типом передачі - хоч по дротах, хоч по оптоволокну, хоч по радіоканалу. КАН-шина працює з апаратною підтримкою пріоритетів блоків та можливістю «важливішого» перебивати передачу «менш важливого».

Для цього введено поняття домінантного та рецесивного бітів: спрощено кажучи, протокол CAN дозволить будь-якому блоку у потрібний момент вийти на зв'язок, зупинивши передачу даних від менш важливих систем простою передачею домінантного біта під час наявності на рецесивній шині. Це відбувається суто фізично - наприклад, якщо "плюс" на дроті означає "одиницю" (домінантний біт), а відсутність сигналу - "нуль" (рецесивний біт), то передача "одиниці" однозначно придушить "нуль".

Уявіть клас на початку уроку. Учні (контролери низького пріоритету) спокійно розмовляють між собою. Але варто вчителю (контролеру високого пріоритету) голосно дати команду «Тиша в класі!», перекриваючи шум у класі (домінантний біт придушив рецесивний), як передача даних між контролерами-учнями припиняється. На відміну від шкільного класу, у CAN-шині це правило працює на постійній основі.

Для чого це потрібно? Щоб важливі дані були передані з мінімумом затримок навіть ціною того, що неважливі дані не будуть передані на шину (це відрізняє CAN шину від знайомого всім комп'ютерам Ethernet). У разі аварії можливість ЕБУ впорскування отримати інформацію про це від контролера SRS незрівнянно важливіше, ніж панелі приладіводержати черговий пакет даних про швидкість руху.

У сучасних автомобілях вже стало нормою фізичне розмежування низького та високого пріоритетів. У них використовуються дві і навіть більш фізичні шини низької та високої швидкості - зазвичай це "моторна" CAN-шина та "кузовна", потоки даних між ними не перетинаються. До всіх одразу підключено лише контролер CAN-шини, який дає можливість «спілкуватися» з усіма блоками через один роз'єм.

Наприклад, технічна документація Volkswagen визначає три типи CAN-шин, що застосовуються:

  • Швидка шина, що працює на швидкості 500 кілобіт в секунду, об'єднує блоки управління двигуном, ABS, SRS і трансмісією.
  • "Повільна" функціонує на швидкості 100 кбіт/с і об'єднує блоки системи "Комфорт" ( центральний замок, склопідйомники і так далі).
  • Третя працює на тій самій швидкості, але передає інформацію лише між навігацією, вбудованим телефоном тощо. На старих машинах (наприклад, Golf IV) інформаційна шина та шина "комфорт" були об'єднані фізично.

Цікавий факт: на Renault Loganдругого покоління та його «соплатформенниках» також фізично дві шини, але друга з'єднує виключно мультимедійну систему з CAN-контролером, на другій одночасно присутні і ЕБУ двигуна, і контролер ABS, і подушки безпеки, і ЦЕКБС.

Фізично ж автомобілі з CAN-шиною використовують її у вигляді кручений диференціальної пари: в ній обидва дроти служать для передачі єдиного сигналу, який визначається як різниця напруги на обох проводах. Це потрібно для простого та надійного завадозахисту. Неекранований провід працює як антена, тобто джерело радіоперешкод здатне навести в ньому електрорушійну силу, достатню для того, щоб перешкода сприйнялася контролерами як реально переданий біт інформації.

Але в кручений парі на обох проводах значення ЕРС перешкоди буде однаковим, так що різниця напруг залишиться незмінною. Тому, щоб знайти CAN-шину в автомобілі, шукайте кручену пару проводів - головне не переплутати її з проводкою датчиків ABS, які також для захисту від перешкод прокладаються всередині машини кручений парою.

Діагностичний роз'єм CAN-шини не стали вигадувати заново: дроти вивели на вільні піни вже стандартизованою в колодки, в ній CAN-шина знаходиться на контактах 6 (CAN-H) та 14 (CAN-L).

Оскільки CAN-шин на автомобілі може бути кілька, часто практикується використання кожної різних фізичних рівнів сигналів. Знову для прикладу звернемося до документації Volkswagen. Так виглядає передача даних у моторній шині:

Коли на шині не передаються дані або передається рецесивний біт, на обох проводах кручений пари вольтметр покаже по 2,5 відносно "маси" (різниця сигналів дорівнює нулю). У момент передачі домінантного біта на дроті CAN-High напруга піднімається до 3,5, тоді як на CAN-Low опускається до півтора. Різниця в 2 вольти і означає «одиницю».

На шині "Комфорт" все виглядає інакше:

Тут "нуль" - це, навпаки, 5 вольт різниці, причому напруга на дроті Low вище, ніж на дроті High. "Одиниця" ж - це зміна різниці напруг до 2,2 В.

Перевірка CAN-шини фізично ведеться за допомогою осцилографа, що дозволяє побачити реальне проходження сигналів по кручений парі: звичайним тестером, природно, «розглянути» чергування імпульсів такої довжини неможливо.

"Розшифрування" CAN-шини автомобіля також ведеться спеціалізованим приладом - аналізатором. Він дозволяє виводити пакети даних із шини у тому вигляді, як вони передаються.

Самі розумієте, що діагностика шини CAN на «аматорському» рівні без відповідного обладнання та знань немає сенсу, та й банально неможлива. Максимум, що можна зробити «підручними» засобами, щоб перевірити каншину – це виміряти напругу та опір на проводах, порівнявши їх з еталонними для конкретного автомобіля та конкретної шини. Це важливо – ми вище навмисно навели приклад того, що навіть на одному автомобілі між шинами може бути серйозна різниця.

Несправності

Хоча інтерфейс CAN і добре захищений від перешкод, електричні несправностістали йому серйозною проблемою. Об'єднання блоків у єдину мережу зробило її вразливою. КАН-інтерфейс на автомобілях став справжнім кошмаром малокваліфікованих автоелектриків вже за однією своєю особливістю: сильні стрибки напруги (наприклад, зимовий) здатні не тільки «повісити» помилку CAN-шини, що виявляється, але й заповнити пам'ять контролерів спорадичними помилками, випадкового характеру.

У результаті на панелі приладів спалахує ціла «гірлянда» індикаторів. І, поки новачок в шоці чухатиме голову: «та що ж це таке?», грамотний діагност насамперед поставить нормальний акумулятор.

Чисто електричні проблеми - це обриви проводів шини, їх замикання на масу або плюс. Принцип диференціальної передачі при обриві будь-якого з дротів або «неправильному» сигналі на ньому стає нереалізованим. Найстрашніше замикання дроту, оскільки воно «паралізує» всю шину.

Уявіть собі просту моторну шину у вигляді дроту, на якому сидять у ряд кілька блоків - контролер двигуна, контролер АБС, приладова панель і діагностичний роз'єм. Обрив у роз'єму автомобілю не страшний - всі блоки продовжать передавати інформацію один одному штатному режимі, неможливою стане лише діагностика Якщо обірвати провід між контролером АБС та панеллю, ми зможемо побачити сканером на шині тільки її, ні швидкість, ні оберти двигуна вона не показуватиме.

А ось при обриві між ЕБУ двигуна та АБС машина, швидше за все, вже не заведеться: блок, не «бачачи» потрібний йому контролер (інформація про швидкість враховується при розрахунку часу упорскування та кута випередження запалення), піде в аварійний режим.

Якщо не різати дроти, а просто постійно подати на один з них плюс або масу, автомобіль піде в нокаут, оскільки жоден з блоків не зможе передавати дані іншому. Тому золоте правилоавтоелектрика в перекладі на російську цензурну звучить як «не лізь кривими руками в шину», а ряд автовиробників забороняє підключати до CAN-шини несертифіковані додаткові пристрої стороннього виробництва (наприклад, сигналізації).

Благо підключення CAN-шини сигналізації не роз'єм у роз'єм, а врізаючись безпосередньо в шину автомобіля, дають «криворукому» установнику можливість переплутати дроти місцями. Автомобіль після цього не те що відмовиться заводитися - за наявності контролера управління бортовими ланцюгами, що розподіляє живлення, навіть запалення не факт, що включиться.

З кожним роком автомобільні електричні схеми збільшувалися у розмірі та ускладнювались у конструкції. На перших випущених автомобілях від магнето працювало запалювання, а акумуляторної батареїта генератора не було зовсім. У фарах використовувалися ацетиленові пальники.

У 1975 році довжина проводів в автомобільній електричної схемидорівнювала кільком сотням метрів і була порівнянна з електрикою легкомоторної авіації.

Бажання спростити електропроводку була такою: необхідний лише один провід, підключити до нього всі споживачі та до кожного підвести пристрій керування. Пропустити по цьому дроту електрострум до споживачів та сигнали керування пристроями.

Відео

До 1991 року завдяки прориву цифрових технологій фірми Bosch і Intel створили мережевий інтерфейс CAN (Controller Area Network) для мультипроцесорних систем бортових комп'ютерів. В електроніці таку систему називають "шиною".

У послідовній шині (serial bus) дані передаються імпульс за імпульсом по кручений парі (двох проводів), а в паралельній шині (parallel bus), дані йдуть по декількох проводах одночасно.

При більшій продуктивності паралельна шина ускладнює електропроводку автомобіля. Послідовна шина передає інформацію до 1 Мбіт/сек.

Різні блоки діляться даними, правило, яким це відбувається, називається протоколом. Протокол може надсилати різним блокам команди, вимагати дані в одного або в усіх. Крім конкретного звернення до пристрою протокол може задати важливість і командам. Наприклад, команда включення вентилятора охолодження двигуна буде пріоритетнішою за команду опускання бічного скла.

Мінімізація сучасної електронікидозволила налагодити випуск дешевих модулів управління та систем зв'язку. В автомобільній мережі вони можуть об'єднуватися в ланцюги, зірки та кільця.

Інформація йде в обидві сторони, наприклад, увімкнувши лампу далекого світла, на панелі приладів загориться сигнал – світить вона чи ні.
Система керування двигуном вибирає найкращий режим, отримуючи дані від усіх пристроїв ланцюга, система освітлення увімкне або відключить фари, система навігації прокладе або змінить маршрут і так далі.

Завдяки такому протоколу діагностика двигуна та інших пристроїв автомобіля спростилася.

Бажання мати лише один провід в автомобілі не здійснилося, але CAN – модуль та протокол передачі даних підвищили надійність системи та спростили електропроводку.

Відео

CAN шина - що це таке?

CAN – шина ("кан шина") є системою управління всіма електричними приладамита цифрового зв'язку в автомобілі, який може отримувати інформацію від пристроїв, між ними обмінюватися даними, а також ними керувати. Дані про технічному станіі керуючі сигнали йдуть у цифровому вигляді по кручений парі завдяки спеціальному протоколу. Від бортової мережі автомобіля до кожного споживача йде харчування, але вони з'єднані паралельно. Такий варіант підвищив надійність усієї електросхеми, знизив кількість проводів та спростив монтаж.

на Наразіпрактично кожен сучасний автомобільукомплектовується бортовими комп'ютерами, EBD, електросклопідйомниками та багатьма іншими електронними приладами. Зараз така техніка може керувати не лише механічними, а й пневматичними, а також гідравлічними системамимашини. І навіть двигун не може обійтися без електроніки. У ньому встановлено спеціальний прилад – CAN-шина. Саме про нього йтиметься сьогодні мова.

Історія виникнення

Вперше поняття CAN-шина з'явилося у 80-х роках минулого століття. Тоді відома німецька компанія «БОШ» спільно з фірмою «Інтел» розробила новий цифровий пристрій для передачі даних, який називався

Що вона може?

Дана шина може з'єднати між собою всі датчики, блоки та контролери, що знаходяться в автомобілі. CAN може з'єднуватися з іммоблайзером, системою SRS, ESP, електронним блоком керування двигуном, коробкою передач та навіть подушками безпеки. Крім цього, шина контактує з датчиками підвіски та клімат-контролю. Поєднуються всі ці механізми в дуплексному режимі з до 1 Мбіт/с.

CAN-шина: опис та особливості приладу

За всієї своєї функціональності даний механізмскладається лише з двох дротів та одного чіпа. Раніше для з'єднання з усіма датчиками CAN-шина постачалася десятками штекерів. І якщо в 80-х роках по кожному дроту передавався лише один сигнал, то зараз це значення досягає сотні.

Сучасна шина CAN також відрізняється тим, що має функцію підключення до мобільного телефону. Електронний брелок, що виконує функцію ключа запалювання, також може підключатися до цього приладу та отримувати інформацію з блоку керування двигуном.

Важливим є те, що цей інструмент може визначати проблеми у функціонуванні обладнання машини і в деяких випадках усувати їх. Він практично не піддається впливам перешкод та має гарну ізоляцію контактів. CAN-шина має дуже складний алгоритм роботи. Дані, що передаються через неї бітами, миттєво перетворюються на кадри. Як провідник інформації служить 2-провідна виткова пара. Також існують вироби з оптоволокна, проте вони менш ефективні в експлуатації, тому не дуже поширені, як перші варіанти. Найрідше зустрічається CAN-шина, яка передає інформацію через радіоканал або

Функціональність та швидкодія

Щоб підвищити швидкодію даного пристрою, виробники часто вкорочують довжину проводів. Якщо сумарна довжина шини становитиме менше ніж 10 метрів, швидкість передачі інформації зросте до 2 мегабіт за секунду. Зазвичай на такій швидкості механізм передає дані з 64 електронних датчиків та контролерів. Якщо до шини підключено більшу кількість пристроїв, створюється кілька ланцюгів для прийому та передачі інформації.

Сучасний автомобіль оснащений електронними блокамиуправління різних систем: двигуна, антиблокувальної системигальм, кузова та інші. По-суті, ці блоки є мікрокомп'ютерами.

Для того, щоб зрозуміти, що таке CAN-шина в автомобілі, уявіть, що в машині організована локальна мережа, до якої підключені ці мікрокомп'ютери — щоб вони працювали в комплексі.

Це подібно до того, як у мережу об'єднуються офісні комп'ютери, щоб співробітники могли без проблем брати інформацію один від одного, а начальник мав можливість оперативно контролювати роботу офісних співробітників.

Як начальник в автомобілі виступає бортовий комп'ютерта система діагностики.

Історія розробки та уніфікації Controller Area Network

Компанія BOSCH, роблячи дослідження в галузі автоматизації в 80-х роках минулого століття, запропонувала стандарт мікроконтролерного зв'язку, який можна було застосовувати і в автомобілебудуванні.

Стандарт CAN застосовується не лише у автомобілях. Нині його використовують у концепції «розумний дім», промислової автоматики тощо.

Стосовно до автомобільної технікистандарт CAN (Controller Area Network) адаптовано до шини з фізичним рівнем. Вона організована за допомогою крученої пари провідників, якими йдуть пакети сигналів різної полярності.

Такий стандарт отримав міжнародну класифікацію ISO 11898. Кадр (пакет) включає 11-бітовий інформаційний сигнал (або 29-бітовий у розширеному режимі).

Загалом, CAN-шина не обов'язково може бути реалізована за допомогою крученої пари провідників. Це може бути і оптоволокно, і радіоканал.

Можна припустити, що із введенням безпілотних транспортних засобів CAN-шина трансформується на мобільний інтерфейс передачі інформації одного, а можливо, і комплексу автомобілів.

CAN-шина автомобіля: що це таке та її принцип роботи

Шина є локальною мережею, за допомогою якої проводиться обмін інформацією між блоками управління різними системами автомобіля. Таким чином, блок управління, наприклад, двигуна автомобіля, крім основного мікроконтролера, обслуговуючого двигун, передбачає наявність CAN-контролера, який формує посилки імпульсів по двох шинах: CAN-високий та CAN-низький (Н та L).

Ці сигнали передаються по провідникам (витій парі) трансівером. Трансівери, або приймально-передавачі, призначені для:

  • посилення сигналів,
  • забезпечення перешкодозахищеності переданих імпульсів;
  • регулювання швидкості передачі цифрового потоку;
  • захисту лінії у разі пошкодження CAN-шини.

Зараз в автомобільній техніці застосовують такі види приймачів - High Speed ​​і Fault Toleran. High Speed ​​трансмітер забезпечує відносно високу швидкість передачі інформації – до 1 мегабіт на секунду. Другий тип трансмітера має меншу швидкість передачі інформації – до 120 кілобіт в секунду. Зате він менш чутливий (толерантний до помилок) до якості CAN-шини, допускає відхилення її параметрів.

Схема організації обміну даними

Структурно схему підключення різних блоків автомобіля до CAN-шини можна зобразити в такому вигляді:

Для узгодження всіх пристроїв, тобто організації оптимальних умов і швидкості прийому передачі, вихідні опори трансмітерів повинні бути приблизно однакові.

У разі відключення або пошкодження будь-яких блоків керування систем автомобіля, опір шини змінюється, порушується узгодження щодо опору, що призводить до значного зменшення швидкості передачі інформації по шині. Такі порушення можуть призвести до повної втрати зв'язку CAN-шини.

На деяких автомобілях для усунення проблем із синхронізацією CAN-інформації застосовується окремий модуль міжмережевого інтерфейсу.

Кожне повідомлення, що передається по CAN-шині, має власний ідентифікатор, наприклад «температура рідини, що охолоджує» і код, що відповідає її значенню, типу «98,7 градусів Цельсія». Не обов'язково це будуть абсолютні значення, в більшості випадків це відносні двійкові одиниці, які перетворюються на сигнали управління і контролю.

Ці ж дані використовують засоби діагностики для контролю та обробки інформації про основні системи автомобіля.

Основні режими роботи CAN-шини:

  • активний (запалювання включено);
  • сплячий (при вимкненому запаленні);
  • пробудження та засинання (при включенні та вимкненні запалювання).

Під час сплячого режиму струм споживання шини мінімальний. Однак при цьому по шині (з меншою частотою) передаються сигнали про стан відкриття дверей та вікон, інших систем, пов'язаних із охоронними функціями автомобіля.

У більшості сучасних діагностичних пристроїв передбачено режим діагностування помилок по CAN-шині. Технічно це організовано безпосереднім підключенням провідників до діагностичного роз'єму.

Переваги та недоліки застосування КАН-шини в автомобілі

Почати слід з того, що, якби в 80-х роках минулого століття не було запропоновано стандарту CAN, його місце обов'язково зайняв інший вид взаємодії систем автомобіля.

Можна, звичайно, розмістити всі блоки керування системами автомобіля в єдиному суперблоці, в якому програмно забезпечити взаємодію різних систем. Такі спроби були у французьких виробників. Однак, зі збільшенням функціональності та продуктивності значно збільшується ймовірність відмов. Збої, наприклад двірників, можуть призвести до відмови запуску двигуна.

Основні переваги застосування CAN-шини:

  • можливість проведення оперативного контролю та ;
  • об'єднання потоків інформації в єдиному перешкодно захищеному каналі;
  • універсальність, що сприяє уніфікації процесів діагностування;
  • можливість підключення охоронних систем по CAN-шині (немає необхідності тягнути проводку до кожного елемента контролю).

Недоліки CAN-шини:

  • невисока надійність;
  • пошкодження одного з блоків керування може призвести до повної непрацездатності з'єднання CAN.

Усунення несправностей

На приладовій панелі автомобіля немає індикаторної лампи несправності CAN. Судити про те, що працездатність CAN-шини порушується, можна за непрямими показниками:

  • на приладовій панелі одночасно спалахнуло кілька індикаторних ламп несправностей;
  • зникли показники температури охолоджувальної рідини, рівні палива;

Насамперед, слід виконати діагностику. Якщо вона покаже на несправність CAN-шини, слід розпочати усунення проблеми.

Послідовність робіт:

  1. Знайти провідники кручений пари шини. Часто вони мають чорний ( високий рівень) та оранжево-коричневий (низький) кольори.
  2. Перевірити при увімкненому запалюванні за допомогою мультиметра напруги на провідниках. Рівні не повинні дорівнювати 0 або більше 11 Вольт (зазвичай близько 4,5 Вольта).
  3. Вимкнути запалення, зняти клему акумулятора. Виміряти опір між провідниками. Якщо воно буде прагнути до нуля, значить, у шині є коротке замикання, якщо до нескінченності – урвище.
  4. Почати пошук обриву або короткого замикання.
  5. Якщо є підозра на те, що замикання шини відбувається через відмову від будь-якого блоку управління, можна послідовно відключати блоки управління і контролювати опір і працездатність шини.

Несправність CAN-шини відноситься до складних несправностей електроустаткування автомобіля. Якщо автовласник не має необхідних навичок ремонту електрики, то краще скористатися послугами спеціаліста.

Сучасний автомобіль це не тільки засіб пересування, а й гаджет з мультимедійними функціями і електронною системоюуправління агрегатами та купою датчиків. Багато автовиробників пропонують функції помічників руху, помічників при паркуванні, моніторингу та керування авто з телефону. Це можливо завдяки використанню в авто CAN шини до якої підключені всі системи: двигун, гальмівна система, кермо, мультимедіа, клімат та ін.

Моє авто Skoda Octavia 2011 р. в. не пропонує можливостей керування з телефону, тому я вирішив виправити цей недолік, а заразом і додати функцію голосового керування. Як шлюз між CAN шиною та телефоном я використовую Raspberry Pi з шилдом CAN BUS та WiFi роутер TP-Link. Протокол спілкування агрегатів авто закритий і на всі мої листи надати документацію протоколу Volkswagen відповідав відмовою. Тому єдиний спосіб дізнатися, як спілкуються пристрої в авто та навчитися ними керувати є реверс-інжиніринг протоколу CAN шини VW.

Я діяв поетапно:

  1. Підключення до CAN шини авто
  2. Голосове керування за допомогою Homekit та Siri
Наприкінці відео голосового керування склопідйомником.

Розробка CAN шилду для Raspberry Pi

Схему шилда взяв тут lnxpps.de/rpie , там же опис висновків, для спілкування з CAN використовуються 2 мікросхеми MCP2515 і MCP2551. До шилда підключаються 2 дроти CAN-High і CAN-Low. У SprintLayout 6 розвів плату, може кому нагоді CANBoardRPi.lay (на основному фото прототип шилду на макетці).

Установка ПЗ для роботи з CAN шиною

На Raspbian 2-x річної давності мені потрібно було пропатчити bcm2708.c, щоб додати підтримку CAN (можливо, зараз це не потрібно). Для роботи з CAN шиною потрібно встановити пакет утиліт can-utils з github.com/linux-can/can-utils, після цього підвантажити модулі та підняти can-інтерфейс:

# initialize insmod spi-bcm2708 insmod can insmod can-dev insmod can-raw insmod can-bcm insmod mcp251x # Maerklin Gleisbox (60112 and 60113) 250000 #
Перевіряємо, що інтерфейс CAN піднявся командою ifconfig:

Перевірити, що все працює, можна відправивши команду і отримавши її.

В одному терміналі слухаємо:

Root@raspberrypi ~ # candump any,0:0,#FFFFFFFF
В іншому терміналі відправляємо:

Root@raspberrypi ~ # cansend can0 123#deadbeef
Більш детальний процес установки описаний тут lnxpps.de/rpie.

Підключення до CAN шини авто

Трохи вивчивши відкриту документацію на CAN шину VW, я з'ясував, що у мене використовується 2 шини.

Шина CAN силового агрегату , що передає дані зі швидкістю 500 кбіт/с, пов'язує всі блоки управління, що обслуговують цей агрегат.

Наприклад, до шини CAN силового агрегату можуть бути підключені такі прилади:

  • блок керування двигуном,
  • блок управління АБС,
  • блок управління системою курсової стабілізації,
  • блок керування коробкою передач,
  • блок управління подушками безпеки,
  • комбінація приборів.
Шина CAN системи «Комфорт» та інформаційно-командної системи, що дозволяє передавати дані зі швидкістю 100 кбіт/с між блоками управління, що обслуговують ці системи.

Наприклад, до шини CAN системи «Комфорт» та інформаційно<командной системы могут быть
підключені такі прилади:

  • блок управління системою Climatronic або кліматичною установкою,
  • блоки керування у дверях автомобіля,
  • блок управління системою «Комфорт»,
  • блок управління з дисплеєм для радіо та навігаційної системи.
Отримавши доступ до першої можна управляти рухом (у моєму варіанті на механіці, як мінімум можна управляти круїз контролем), отримавши доступ до другої можна управляти магнітолою, кліматом, центральним замком, склопідйомниками, фарами та ін.

Обидві шини пов'язані через шлюз, який знаходиться в області під кермом, так само до шлюзу підключений діагностичний OBD2 роз'єм, на жаль через OBD2 роз'єм не можна послухати трафік від обох шин, можна тільки передати команду та запросити стан. Я вирішив, що працюватиму тільки з шиною «Комфорт» і найзручнішим місцем підключення до шини виявився роз'єм у водійських дверях.

Тепер я можу слухати все, що відбувається в CAN шині «Комфорт» і відправляти команди.

Розробка сніфера та вивчення протоколу CAN шини


Після того, як я отримав доступ до прослуховування CAN шини, мені потрібно розшифрувати хто кому і що передає. Формат пакета CAN показаний малюнку.

Усі утиліти з набору can-utils самі вміють розбирати CAN пакети та віддають лише корисну інформацію, а саме:

  • Ідентифікатор
  • Довжина даних
  • Дані
Дані передаються у незашифрованому вигляді, це полегшило вивчення протоколу. На Raspberry Pi я написав маленький сервер, який перенаправляє дані з candump в TCP/IP, щоб на комп'ютері розібрати потік даних і красиво показати їх.

Для macOS я написав простий додаток, який для кожної адреси пристрою додає комірку в табличку і в цьому комірці я вже бачу, які дані змінюються.

Натискаю кнопку склопідйомника я знайшов комірку в якій змінюються дані, потім я і визначив які команди відповідають натисканню вниз, натискання вгору, утримання вгору, утримання вниз.

Перевірити, що команда працює, можна відправивши з терміналу, наприклад, команду підняти ліве скло вгору:

Cansend can0 181#0200
Команди, які передають пристрої по CAN шині в автомобілях VAG (Skoda Octavia 2011), отримані методом реверс-інжиніринг:

// Front Left Glass Up 181#0200 // Front Left Glass Down 181#0800 // Front Right Glass Up 181#2000 // Front Right Glass Down 181#8000 // Back Left Glass Up 181#0002 // Back Left Glass Down 181#0008 // Back Right Glass Up 181#0020 // Back Right Glass Down 181#0080 // Central Lock Open 291#09AA020000 // Central Lock Close 291#0955040000 // Update Lightstat відкрити/закрити замок то на кнопці управління замком світлодіод не змінює стан, щоб він показав реальний стан центрального замку, потрібно відправити команду оновлення) 291#0900000000
Мені було ліньки вивчити всі інші пристрої, тому в цьому списку, тільки те, що мені було цікаво.

Розробка програми для телефону

Використовуючи отримані команди, я написав додаток для iPhone, який відкриває/закриває скло і керує центральним замком.

На Raspberry Pi я запустив 2 маленькі сервери, перший відправляє дані з candump в TCP/IP, другий приймає команди від iPhone і передає їх cansend.


Вихідники програми керування авто для iOS

// // FirstViewController.m // Car Control // // Created by Vitaliy Yurkin on 17.05.15. // Copyright (c) 2015 Vitaliy Yurkin. Всі права захищені. // #import "FirstViewController.h" #import "DataConnection.h" #import "CommandConnection.h" @interface FirstViewController() @property (nonatomic, strong) DataConnection *dataConnection; @property (nonatomic, strong) CommandConnection *commandConnection; @property (weak, nonatomic) IBOutlet UILabel *Door_1; @property (weak, nonatomic) IBOutlet UILabel *Door_2; @property (weak, nonatomic) IBOutlet UILabel *Door_3; @property (weak, nonatomic) IBOutlet UILabel *Door_4; @property (weak, nonatomic) IBOutlet UIButton *CentralLock; - (IBAction)lockUnlock:(UIButton *)sender; @end @implementation FirstViewController - (void)viewDidLoad (self.dataConnection = ; self.dataConnection.delegate = self; ; self.commandConnection = ; ; ) - (void)didReceiveMemoryWarning (; ) - (void)doorStatusChanged:(char)value ( /* 1 - Front Left Door 2 - Front Right Door 4 - Back Left Door 8 - Back Right Door 3 - Front Left&Right Door = 1 + 3 5 - Front& Back left Door = 1 + 4 */ // Front Left Door if (value & 1) ( self.Door_1.backgroundColor = ; self.Door_1.text = @"Відкрито"; NSLog(@"1"); ) else ( self.Door_1. backgroundColor = ; self.Door_1.text = @"Закрито"; ) // Front Right Door if (value & 2) ( self.Door_2.backgroundColor = ; "); ) else ( self.Door_2.backgroundColor = ; self.Door_2.text = @"Закрито"; ) // Back Left Door if (value & 4) ( self.Door_3.backgroundColor = ; self.Door_3.text = @"Відкрито"; NSLog(@"4"); ) else ( self.Door_3.backgroundColor = ; self.Door_3.text = @"Закрито"; ) // Back Right Door if (value & 8) ( self.Door_4.backgroundColor = ; self.Door_4.text = @"Відкрито"; NSLog(@"8"); ) else ( self.Door_4.backgroundColor = ; self .Door_4.text = @"Закрито"; ) ) BOOL firstStatusChange = YES; BOOL lastStatus; -(void) centralLockStatusChanged:(BOOL)status ( // At first Status changes set lastStatus variable if (firstStatusChange) ( firstStatusChange = NO; // Invert status, pass the next test lastStatus = !status; ) // Change тільки if status changed if (!(lastStatus == status)) ( // Check status if (status) ( forState:UIControlStateNormal]; ) else ( forState:UIControlStateNormal]; ) lastStatus = status; ) ) // Front Left Glass - (IBAction)frontLeftUp:(UIButton *)sender ( ; ) - (IBAction)frontLeftDown:(id)sender ( ; ) // Front Right Glass - (IBAction)frontRightUp:(UIButton *)sender ( ; ) - (IBAction)frontRightDown :(id)sender ( ; ) // Back Left Glass - (IBAction)backLeftUp:(UIButton *)sender ( ; ) - (IBAction)backLeftDown:(id)sender ( ; ) // Back Right Glass - (IBAction)backRightUp :(UIButton *)sender ( ; ) - (IBAction)backtRightDown:(id)sender ( ; ) - (IBAction)lockUnlock:(UIButton *)sender ( // If central lock closed if (lastStatus) ( // Open ; int64_t delayInSeconds = 1; // 1 sec dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); dispatch_after(popTime, dispatch_get_main_queue(), ^(void)( ; )); ) else ( // Close ; int64_t delayInSeconds = 1; // 1 sec dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds NSEC_PER_SEC);


Є спосіб не писати свою програму для телефону, а скористатися готовим зі світу розумних будинків, всього лише потрібно встановити на Raspberry Pi систему автоматизації
 

Будь ласка, поділіться цим матеріалом у соціальних мережах, якщо він виявився корисним!