Меню
andipanda.dev

CAN Box: що це таке і навіщо він потрібен саморобній автомагнітолі

Коли займаєшся розробкою власної автомобільної магнітоли, рано чи пізно стикаєшся з питанням її взаємодії з електронікою автомобіля.

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

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

Але, як виявилося, існує набагато простіше рішення — готовий CAN Box.

Саме про цей невеликий пристрій я й хочу розповісти.

Трохи передісторії

Перша версія мого проекту CaRadio, побудована на Raspberry Pi, досі використовується в автомобілі.

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

Одним із важливих етапів стала робота над проектом CaRaBack — власним рішенням для роботи з CarPlay.

Серія статей про розробку CaRaBack перебуває в процесі написання та регулярно доповнюється.

Робота над CaRaBack дозволила по-новому поглянути на архітектуру CaRadio. Зокрема, стало зрозуміло, що для реалізації магнітоли зовсім не обов'язково використовувати Raspberry Pi. Обчислювальною платформою може стати й інший пристрій, який підходить за продуктивністю, інтерфейсами та вартістю.

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

Саме під час цих експериментів у мене з'явилася китайська Android-магнітола, призначена для автомобілів Volkswagen.

Подробиці про саму магнітолу залишимо для окремої серії статей. Зараз нас цікавить інший пристрій, який опинився в комплекті з нею.

Це був CAN Box.

Перше знайомство з CAN Box

На перший погляд CAN Box являє собою невелику пластикову коробочку з роз'ємом для підключення проводки.

На корпусі мого екземпляра вказана модель G-VW-RZ-58. Пристрій призначений для автомобілів Volkswagen, Skoda та Seat.

Цікаво, що в отриманому комплекті CAN Box не був підключений до магнітоли через UART.

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

Це ще належить перевірити.

Коли пристрій опинився в мене на столі, я вирішив розібратися, що ж знаходиться всередині.

Розібрав корпус, вивчив схемотехніку, почав шукати інформацію про мікроконтролер, прошивки та протоколи обміну.

Інформація в інтернеті знайшлася, але виявилася досить розрізненою.

Можна знайти обговорення сумісності CAN Box із китайськими магнітолами, окремі розпіновки та описи протоколів. Однак докладних матеріалів, які пояснюють будову та принципи його роботи, виявилося не так багато.

Поступово стало зрозуміло, що CAN Box становить значно більший інтерес, ніж може здатися на перший погляд.

Що таке CAN Box

У сучасних автомобілях електронні блоки обмінюються інформацією через цифрові шини.

Одна з найпоширеніших — CAN (Controller Area Network).

Вона дозволяє різним електронним блокам автомобіля обмінюватися повідомленнями без необхідності прокладати окремий провід для кожного сигналу.

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

При цьому важливо розуміти, що CAN — це насамперед протокол обміну даними.

Сам по собі він не визначає, яке саме повідомлення означає ввімкнення запалювання або натискання певної кнопки.

Призначення повідомлень залежить від виробника автомобіля, моделі, року випуску та конкретної електронної системи.

Тому простого підключення до CAN-шини недостатньо.

Необхідно знати, які повідомлення передаються в автомобілі та як правильно їх інтерпретувати.

Саме тут на допомогу приходить CAN Box.

Як працює CAN Box

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

У типовому випадку всередині знаходяться:

  • Мікроконтролер із прошивкою для обробки повідомлень.
  • CAN-трансивер для фізичного підключення до шини.
  • Ланцюги живлення та захисту.
  • Інтерфейси зв'язку з магнітолою.
  • Вихідні каскади для формування керуючих сигналів.

Принцип роботи досить простий.

Автомобіль передає повідомлення через CAN-шину. CAN Box приймає їх, визначає потрібні події та формує відповідні команди.

Наприклад, при ввімкненні задньої передачі декодер може передати магнітолі команду перемикання на камеру заднього виду.

При ввімкненні освітлення — повідомити про необхідність змінити яскравість екрана.

А при зміні стану запалювання — сформувати сигнал ACC.

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

CAN Box і китайські Android-магнітоли

У китайських Android-магнітолах CAN Box часто використовується як посередник між електронікою автомобіля та самою магнітолою.

Один із поширених варіантів взаємодії — послідовний інтерфейс UART.

CAN Box отримує повідомлення автомобіля, перетворює їх у власний протокол і передає магнітолі.

Магнітолі вже не потрібно самостійно розбиратися в особливостях автомобільної CAN-шини.

Вона отримує готові команди, які може обробити програмне забезпечення.

Наприклад:

  • Зміна стану запалювання.
  • Увімкнення задньої передачі.
  • Увімкнення автомобільного освітлення.
  • Натискання кнопок на кермі.
  • Стан дверей.
  • Інформація від паркувальних систем.

Зрозуміло, далеко не кожен CAN Box підтримує всі перелічені функції.

Крім того, UART-протоколи різних виробників можуть відрізнятися.

Але тут є цікавий момент.

Якщо китайська Android-магнітола здатна отримувати й обробляти такі команди, то чому цього не може робити власний пристрій?

Для цього зовсім не обов'язково використовувати Android.

Достатньо підключитися до відповідного інтерфейсу та реалізувати обробку протоколу.

Це може бути Raspberry Pi, інший одноплатний комп'ютер або мікроконтролер.

CAN Box як альтернатива власному контролеру живлення

Саме тут я виявив найбільш цікаву для себе можливість.

При розробці автомобільної магнітоли на Raspberry Pi одним із завдань стає правильна організація живлення.

На відміну від звичайної магнітоли, одноплатний комп'ютер працює під керуванням операційної системи.

Для коректного завершення роботи Linux бажано передбачити час між отриманням команди вимкнення та фактичним відключенням живлення.

У першій версії CaRadio це завдання вже вирішено: Raspberry Pi автоматично вимикається при вийманні ключа із замка запалювання.

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

Після знайомства з CAN Box стало зрозуміло, що в багатьох випадках власний контролер може взагалі не знадобитися.

Готовий CAN Box здатний визначати стан запалювання за повідомленнями автомобіля та формувати сигнал ACC.

Цей сигнал можна використовувати для керування живленням магнітоли.

Якщо потрібне коректне завершення роботи Linux, достатньо передати зміну стану ACC комп'ютеру та передбачити невелику затримку вимкнення силового транзистора.

Наприклад, на 20–30 секунд.

Реалізувати таку затримку можна порівняно простою електронною схемою, без розробки окремого програмованого контролера.

При цьому варто зазначити, що на практиці пристрої на Raspberry Pi здатні роками працювати навіть при безпосередньому відключенні живлення.

Однак жорстке вимкнення під час запису даних усе ж створює ризик пошкодження файлової системи.

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

Звичайно, перед використанням CAN Box необхідно перевірити, як саме конкретна модель формує ACC і як поводиться при вимкненні запалювання.

Але сама ідея виявилася значно простішою, ніж розробка власного контролера з нуля.

А чи варто розробляти власний CAN-контролер?

З технічної точки зору розробка власного пристрою цілком можлива.

Знадобляться мікроконтролер, CAN-трансивер, схема живлення, захисні елементи та відповідне програмне забезпечення.

Потім необхідно дослідити повідомлення автомобільної CAN-шини, визначити потрібні ідентифікатори та розібратися у форматі переданих даних.

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

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

Готовий CAN Box уже містить необхідну електроніку та прошивку для підтримуваних автомобілів.

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

З урахуванням вартості компонентів, виготовлення плати та часу на розробку придбання готового CAN Box може виявитися суттєво вигіднішим.

Зрозуміло, це справедливо за умови, що придбаний декодер сумісний з автомобілем і надає необхідні функції.

Що знаходиться всередині

Повернімося до мого CAN Box.

Як я вже згадував, пристрій дістався мені разом із китайською Android-магнітолою.

На корпусі вказана модель G-VW-RZ-58, а також інформація про версії апаратного та програмного забезпечення.

Після відкриття корпусу вдалося роздивитися електронну плату та основні компоненти.

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

Окремий інтерес становить прошивка мікроконтролера.

Саме вона визначає, які CAN-повідомлення пристрій розпізнає та яким чином перетворює їх на керуючі сигнали.

Тому два зовні схожі CAN Box можуть суттєво відрізнятися за функціональністю.

Неочікуваний висновок

Після вивчення пристрою я дійшов досить неочікуваного висновку.

Подібний CAN Box чудово підійшов би ще для першої версії CaRadio.

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

А при підключенні UART — отримувати додаткові події автомобіля, які зазвичай обробляються китайськими Android-магнітолами.

І все це без необхідності самостійно розробляти CAN-контролер.

Можливо, якби я раніше знав, як влаштовані подібні декодери та які можливості вони надають, я просто придбав би CAN Box окремо.

І не виключено, що необхідність переходу на китайську Android-магнітолу взагалі не виникла б.

Втім, саме завдяки цим експериментам я й познайомився з CAN Box.

А тепер з'явилося бажання розібратися в його роботі докладніше.

Що далі

У наступній частині спробуємо перейти від теорії до практики.

Підключимо CAN Box до автомобільної CAN-шини та подивимося, як він реагує на різні події.

Перевіримо формування ACC, реакцію на ввімкнення задньої передачі та освітлення.

Також спробуємо дослідити обмін даними через UART і з'ясувати, які команди CAN Box здатний передавати магнітолі.

Головна мета — зрозуміти, наскільки просто можна використовувати готовий автомобільний декодер у власних електронних проектах, не прив'язуючись до конкретної моделі Android-магнітоли чи обчислювальної платформи.