Podczas projektowania własnego radia samochodowego prędzej czy później pojawia się kwestia jego współpracy z elektroniką pojazdu.
Jak prawidłowo zorganizować włączanie i wyłączanie zasilania? Skąd pobierać informację o włączeniu biegu wstecznego? Jak wykrywać stan oświetlenia lub obsługiwać przyciski na kierownicy?
Aby rozwiązać te problemy, można opracować własny sterownik, podłączyć się do samochodowej magistrali CAN i samodzielnie analizować odpowiednie komunikaty.
Okazuje się jednak, że istnieje znacznie prostsze rozwiązanie — gotowy CAN Box.
Właśnie o tym niewielkim urządzeniu chciałbym opowiedzieć.
Trochę historii
Pierwsza wersja mojego projektu CaRadio, zbudowana na Raspberry Pi, do dziś jest używana w samochodzie.
W trakcie jej eksploatacji i dalszego rozwoju moje wyobrażenie o tym, jak powinno wyglądać samodzielnie zbudowane radio samochodowe, znacznie się zmieniło.
Jednym z ważnych etapów była praca nad projektem CaRaBack — moim własnym rozwiązaniem do obsługi CarPlay.
Seria artykułów o rozwoju CaRaBack jest obecnie w przygotowaniu i regularnie uzupełniana.
Praca nad CaRaBack pozwoliła mi spojrzeć na architekturę CaRadio z innej perspektywy. Stało się jasne, że do zbudowania radia samochodowego nie trzeba koniecznie używać Raspberry Pi. Platformą obliczeniową może być również inne urządzenie, odpowiednie pod względem wydajności, interfejsów i kosztów.
Równolegle nadal szukałem optymalnego sposobu zarządzania zasilaniem przyszłego radia.
Właśnie podczas tych eksperymentów trafiło do mnie chińskie radio z Androidem, przeznaczone do samochodów Volkswagen.
Szczegóły dotyczące samego radia pozostawię na osobną serię artykułów. Teraz interesuje nas inne urządzenie, które znalazło się w zestawie.
Był to CAN Box.
Pierwsze spotkanie z CAN Box
Na pierwszy rzut oka CAN Box to niewielkie plastikowe pudełko ze złączem do podłączenia wiązki przewodów.
Na obudowie mojego egzemplarza widnieje oznaczenie G-VW-RZ-58. Urządzenie jest przeznaczone do samochodów Volkswagen, Skoda i Seat.
Co ciekawe, w otrzymanym zestawie CAN Box nie był połączony z radiem przez UART.
Możliwe, że wiązka przewodów była przeznaczona do innego modelu radia. Nie można też wykluczyć, że CAN Box służył wyłącznie do generowania osobnych sygnałów sterujących, na przykład ACC i sygnału włączenia kamery cofania.
To trzeba jeszcze sprawdzić.
Kiedy urządzenie znalazło się na moim stole, postanowiłem sprawdzić, co kryje się w środku.
Otworzyłem obudowę, przeanalizowałem układ elektroniczny i zacząłem szukać informacji o mikrokontrolerze, oprogramowaniu układowym oraz protokołach komunikacyjnych.
Informacje w internecie udało się znaleźć, ale były dość rozproszone.
Można znaleźć dyskusje dotyczące zgodności CAN Box z chińskimi radiami, pojedyncze schematy wyprowadzeń i opisy protokołów. Jednak szczegółowych materiałów wyjaśniających budowę urządzenia i zasadę jego działania jest stosunkowo niewiele.
Stopniowo stało się jasne, że CAN Box jest znacznie ciekawszym urządzeniem, niż mogłoby się wydawać na pierwszy rzut oka.
Czym jest CAN Box
W nowoczesnych samochodach moduły elektroniczne wymieniają informacje za pośrednictwem magistral cyfrowych.
Jedną z najbardziej rozpowszechnionych jest CAN (Controller Area Network).
Pozwala ona różnym modułom elektronicznym samochodu wymieniać komunikaty bez konieczności prowadzenia osobnego przewodu dla każdego sygnału.
Na przykład informacje o stanie zapłonu, włączeniu oświetlenia lub biegu wstecznego mogą być przesyłane magistralą CAN.
Warto przy tym pamiętać, że CAN jest przede wszystkim protokołem wymiany danych.
Sam w sobie nie określa, który komunikat oznacza włączenie zapłonu lub naciśnięcie konkretnego przycisku.
Znaczenie komunikatów zależy od producenta samochodu, modelu, rocznika i konkretnego systemu elektronicznego.
Dlatego samo podłączenie do magistrali CAN nie wystarczy.
Trzeba wiedzieć, jakie komunikaty są przesyłane w samochodzie i jak prawidłowo je interpretować.
Właśnie tutaj przydaje się CAN Box.
Jak działa CAN Box
CAN Box to moduł elektroniczny, który odbiera komunikaty z samochodowej magistrali CAN, analizuje je i przekształca w sygnały lub polecenia zrozumiałe dla podłączonego urządzenia.
W typowym przypadku wewnątrz znajdują się:
- Mikrokontroler z oprogramowaniem układowym do przetwarzania komunikatów.
- Transceiver CAN umożliwiający fizyczne połączenie z magistralą.
- Układy zasilania i zabezpieczeń.
- Interfejsy komunikacyjne do połączenia z radiem.
- Układy wyjściowe generujące sygnały sterujące.
Zasada działania jest dość prosta.
Samochód przesyła komunikaty magistralą CAN. CAN Box odbiera je, rozpoznaje interesujące zdarzenia i generuje odpowiednie polecenia.
Na przykład po włączeniu biegu wstecznego dekoder może wysłać do radia polecenie przełączenia obrazu na kamerę cofania.
Po włączeniu oświetlenia może poinformować o konieczności zmiany jasności ekranu.
A po zmianie stanu zapłonu — wygenerować sygnał ACC.
Możliwości konkretnego urządzenia zależą jednak od jego konstrukcji, oprogramowania układowego oraz obsługiwanego samochodu.
CAN Box i chińskie radia z Androidem
W chińskich radiach z Androidem CAN Box często pełni funkcję pośrednika między elektroniką samochodu a samym radiem.
Jednym z popularnych sposobów komunikacji jest interfejs szeregowy UART.
CAN Box odbiera komunikaty samochodu, przekształca je na własny protokół i przesyła do radia.
Radio nie musi już samodzielnie analizować specyfiki samochodowej magistrali CAN.
Otrzymuje gotowe polecenia, które może przetwarzać jego oprogramowanie.
Na przykład:
- Zmiana stanu zapłonu.
- Włączenie biegu wstecznego.
- Włączenie oświetlenia samochodu.
- Naciśnięcia przycisków na kierownicy.
- Stan drzwi.
- Informacje z systemów parkowania.
Oczywiście nie każdy CAN Box obsługuje wszystkie wymienione funkcje.
Ponadto protokoły UART różnych producentów mogą się różnić.
Ale pojawia się tutaj ciekawa kwestia.
Skoro chińskie radio z Androidem potrafi odbierać i przetwarzać takie polecenia, dlaczego nie miałoby tego robić urządzenie własnej konstrukcji?
Nie trzeba do tego wcale używać Androida.
Wystarczy podłączyć się do odpowiedniego interfejsu i zaimplementować obsługę protokołu.
Może to być Raspberry Pi, inny komputer jednopłytkowy lub mikrokontroler.
CAN Box jako alternatywa dla własnego sterownika zasilania
Właśnie tutaj odkryłem możliwość, która okazała się dla mnie najbardziej interesująca.
Podczas projektowania radia samochodowego opartego na Raspberry Pi jednym z zadań jest prawidłowe zarządzanie zasilaniem.
W przeciwieństwie do zwykłego radia komputer jednopłytkowy pracuje pod kontrolą systemu operacyjnego.
Aby Linux mógł prawidłowo zakończyć pracę, warto zapewnić odpowiedni czas między otrzymaniem polecenia wyłączenia a faktycznym odcięciem zasilania.
W pierwszej wersji CaRadio problem ten został już rozwiązany: Raspberry Pi wyłącza się automatycznie po wyjęciu kluczyka ze stacyjki.
Jednak podczas projektowania nowej wersji rozważałem różne sposoby zarządzania zasilaniem, w tym zastosowanie osobnego mikrokontrolera.
Po zapoznaniu się z CAN Box stało się jasne, że w wielu przypadkach własny sterownik może w ogóle nie być potrzebny.
Gotowy CAN Box potrafi rozpoznawać stan zapłonu na podstawie komunikatów samochodu i generować sygnał ACC.
Sygnał ten można wykorzystać do sterowania zasilaniem radia.
Jeśli potrzebne jest prawidłowe zamknięcie systemu Linux, wystarczy przekazać komputerowi informację o zmianie stanu ACC i przewidzieć niewielkie opóźnienie wyłączenia tranzystora mocy.
Na przykład o 20–30 sekund.
Takie opóźnienie można zrealizować za pomocą stosunkowo prostego układu elektronicznego, bez konieczności projektowania osobnego programowalnego sterownika.
Warto przy tym zauważyć, że w praktyce urządzenia oparte na Raspberry Pi potrafią działać przez lata nawet przy bezpośrednim odcinaniu zasilania.
Jednak nagłe wyłączenie podczas zapisu danych nadal wiąże się z ryzykiem uszkodzenia systemu plików.
Dlatego lepiej przewidzieć możliwość prawidłowego zamknięcia systemu.
Oczywiście przed zastosowaniem CAN Box należy sprawdzić, w jaki sposób konkretny model generuje ACC i jak zachowuje się po wyłączeniu zapłonu.
Sama koncepcja okazała się jednak znacznie prostsza niż projektowanie własnego sterownika od podstaw.
Czy warto projektować własny kontroler CAN?
Z technicznego punktu widzenia opracowanie własnego urządzenia jest jak najbardziej możliwe.
Potrzebne będą mikrokontroler, transceiver CAN, układ zasilania, elementy zabezpieczające oraz odpowiednie oprogramowanie.
Następnie trzeba przeanalizować komunikaty samochodowej magistrali CAN, określić potrzebne identyfikatory i poznać format przesyłanych danych.
To ciekawe zadanie, zwłaszcza jeśli celem jest poznawanie protokołów samochodowych.
Jeżeli jednak chodzi wyłącznie o uzyskanie kilku sygnałów sterujących, pojawia się pytanie o opłacalność ekonomiczną.
Gotowy CAN Box zawiera już niezbędną elektronikę i oprogramowanie układowe dla obsługiwanych samochodów.
Zamiast samodzielnie projektować sprzęt i dekodować komunikaty CAN, można wykorzystać jego gotowe wyjścia lub przeanalizować znacznie prostszy protokół komunikacji z radiem.
Biorąc pod uwagę koszt podzespołów, wykonania płytki oraz czas potrzebny na opracowanie rozwiązania, zakup gotowego CAN Box może okazać się znacznie bardziej opłacalny.
Oczywiście pod warunkiem, że zakupiony dekoder jest zgodny z samochodem i udostępnia potrzebne funkcje.
Co znajduje się w środku
Wróćmy do mojego CAN Box.
Jak już wspomniałem, urządzenie trafiło do mnie razem z chińskim radiem z Androidem.
Na obudowie widnieje oznaczenie G-VW-RZ-58 oraz informacje o wersjach sprzętu i oprogramowania.
Po otwarciu obudowy mogłem przyjrzeć się płytce elektronicznej i jej głównym elementom.
Pomimo niewielkich rozmiarów urządzenie zawiera wszystko, co potrzebne do komunikacji z samochodową magistralą CAN i przekazywania przetworzonych danych do zewnętrznego sprzętu.
Szczególnie interesujące jest oprogramowanie układowe mikrokontrolera.
To właśnie ono określa, jakie komunikaty CAN urządzenie rozpoznaje i w jaki sposób przekształca je w sygnały sterujące.
Dlatego dwa zewnętrznie podobne moduły CAN Box mogą znacznie różnić się funkcjonalnością.
Nieoczekiwany wniosek
Po przeanalizowaniu urządzenia doszedłem do dość nieoczekiwanego wniosku.
Podobny CAN Box świetnie sprawdziłby się już w pierwszej wersji CaRadio.
Za jego pomocą można byłoby uzyskiwać sygnał ACC bezpośrednio z samochodowej magistrali CAN i wykorzystywać go do automatycznego sterowania zasilaniem.
A po podłączeniu UART — odbierać dodatkowe zdarzenia z samochodu, które zwykle obsługują chińskie radia z Androidem.
I to wszystko bez konieczności samodzielnego projektowania kontrolera CAN.
Być może gdybym wcześniej wiedział, jak działają takie dekodery i jakie oferują możliwości, po prostu kupiłbym CAN Box osobno.
Niewykluczone też, że potrzeba przejścia na chińskie radio z Androidem w ogóle by się nie pojawiła.
Z drugiej strony to właśnie dzięki tym eksperymentom poznałem CAN Box.
A teraz mam ochotę dokładniej zbadać jego działanie.
Co dalej
W kolejnej części spróbujemy przejść od teorii do praktyki.
Podłączymy CAN Box do samochodowej magistrali CAN i sprawdzimy, jak reaguje na różne zdarzenia.
Przetestujemy generowanie ACC oraz reakcję na włączenie biegu wstecznego i oświetlenia.
Spróbujemy również przeanalizować komunikację przez UART i ustalić, jakie polecenia CAN Box potrafi przesyłać do radia.
Głównym celem jest sprawdzenie, jak łatwo można wykorzystać gotowy dekoder samochodowy we własnych projektach elektronicznych, bez uzależniania się od konkretnego modelu radia z Androidem lub platformy obliczeniowej.