![[Caraudio] Opel CAN-BOX TV-OUT by swe [Caraudio] Opel CAN-BOX TV-OUT by swe](https://obrazki.elektroda.pl/9299255200_1693861020_thumb.jpg)
Odkąd radioodbiorniki zagościły w samochodach pewien problem stanowiło podłączenie ich do instalacji samochodowej - nie było bowiem jednolitego sposobu. Dopiero w latach 90-tych opracowano standard złącz tzw. kostki ISO oraz rozmiar radioodbiornika tzw. DIN. Co prawda producenci aut często go ignorowali stosując własne rozwiązania, ale dostępne były przejściówki umożliwiające podłączenie innego radia w miejsce firmowego. Problem pojawił się dekadę później, kiedy do łączności z radiem użyto magistrali CAN-BUS a radioodbiorniki zaczęły być silnie zintegrowane z deską pojazdu i niekompatybilne wymiarowo.
![[Caraudio] Opel CAN-BOX TV-OUT by swe [Caraudio] Opel CAN-BOX TV-OUT by swe](https://obrazki.elektroda.pl/7721177000_1693861021_thumb.jpg)
W samochodach Opel Astra H (Corsa D, Zafira B) fabrycznie montowano radioodbiorniki o rozmiarze 2-DIN (z nietypowym - trapezowym frontem). Funkcjonalność firmowego radioodbiornika jest dość uboga jak na obecne czasy (chociażby brak w nim odtwarzacza plików czy Bluetooth). Aż prosi się aby zmienić go na coś nowocześniejszego. Niestety zadanie jest utrudnione z uwagi na wspomnianą magistralę CAN. Trzeba się zatem liczyć z ograniczeniem funkcjonalności nowego radia albo dokupić specjalne urządzenie odczytujące dane z w/w magistrali i udostępniające je na złączu ISO czyli tzw. CAN-BOX. Jednak CAN-BOX to wydatek kilkuset PLN i nie ma pewności czy będzie do końca kompatybilny z radioodbiornikiem.
![[Caraudio] Opel CAN-BOX TV-OUT by swe [Caraudio] Opel CAN-BOX TV-OUT by swe](https://obrazki.elektroda.pl/7367149300_1693861022_thumb.jpg)
Z uwagi na to, iż mój fabryczny radioodbiornik niedomagał, postanowiłem go wymienić na tanie, chińskie radyjko samochodowe z Windows CE. Zakupiłem zatem tylko niezbędne okablowanie oraz ramki dopasowujące radio do trapezowatego otworu w Oplu, a adapter CAN-BOX postanowiłem zbudować samodzielnie. Powstało urządzenie, które umożliwia to samo co fabryczny adapter CAN-BOX czyli:
- odczytuje z magistrali CAN informacje o przekręconym kluczyku stacyjki i ustawia ten stan na pinie ACC kostki ISO radia,
- odczytuje z magistrali CAN informacje o włączonych światłach i ustawia ten stan na pinie ILL kostki ISO radia,
- odczytuje z kierownicy informacje o naciśniętych przyciskach i ustawia odpowiednią rezystancję na złączu KEY kostki ISO radia.
![[Caraudio] Opel CAN-BOX TV-OUT by swe [Caraudio] Opel CAN-BOX TV-OUT by swe](https://obrazki.elektroda.pl/3542851200_1693861022_thumb.jpg)
Ponadto moje urządzenie umożliwia też:
- włączenie radia bez kluczyka (dodatkowym przyciskiem),
- reset radia (które sporadycznie potrafi się zawiesić) oraz adaptera (dłuższe przytrzymania w/w przycisku),
- wywołanie ekranu ustawień komputera samochodu przyciskiem na kierownicy (oryginalnie wywołanie tej funkcji odbywało się tylko z poziomu fabrycznego radioodbiornika),
- szybki powrót do głównego ekranu komputera przyciskiem na kierownicy (oryginalnie wywołanie tej funkcji było możliwe z poziomu fabrycznego radioodbiornika),
- odczyt napięcia akumulatora oraz temperatury silnika z magistrali CAN i prezentacja tych informacji na planszy wyświetlanej na ekranie radioodbiornika z pomocą wejścia TV-AUX. To extra funkcja - nie spotykałem się z takim wykorzystaniem wejścia TV w radioodbiorniku!
(Oryginalnie w samochodzie nie ma wskaźnika temperatury. Za pomocą kombinacji klawiszy oryginalnego radia jest możliwe wywołanie nieprzejrzystej planszy - tzw. trybu diagnostycznego, gdzie informacje te są obecne).
Jak to działa?
W wiązce kablowej oryginalnego radioodbiornika występują sygnały czterech głośników auta, permanentny plus akumulatora (B+), masa oraz dwie linie magistrali CAN (L i H). Można zakupić gotową przejściówkę ze złącza OPEL do ISO wraz z niezbędnym separatorem instalacji antenowej. Niestety podłączenie innego radia utrudnia brak sygnału kluczyka stacyjki ACC (tzw. accessory), który jest wymagany przez radioodbiornik z kostką ISO. Podłączenie tej linii do B+ skutkuje zwiększonym poborem prądu na postoju i szybkim rozładowaniem akumulatora. Należy zatem użyć dodatkowego wyłącznika. Najkorzystniej podłączyć go jednak nie do B+ a do... lampki podświetlenia schowka. Napięcie tam pojawia się tuż po otwarciu drzwi i zanika po 20 minutach (lub 20 minutach po zgaszeniu silnika). Dzięki temu radio samo wyłączy się i nie będzie pobierać prądu na postoju. Do zasilania mojego urządzenia również użyłem napięcia z lampki schowka, dzięki czemu nie musiałem implementować trybów zmniejszonego poboru prądu (usypianie) oraz kłopotliwego wybudzania.
![[Caraudio] Opel CAN-BOX TV-OUT by swe [Caraudio] Opel CAN-BOX TV-OUT by swe](https://obrazki.elektroda.pl/3209472900_1693861022_thumb.jpg)
W konstrukcji urządzenia wykorzystałem dwa gotowe moduły. Pierwszym jest - znany wszystkim - Arduino Nano. Zwykle w swoich urządzeniach unikałem stosowania Arduino, tym razem zbudowałem w pająku prototyp, a że oprogramowanie działało sprawnie, postanowiłem pozostać z tą platformą. Drugim modułem jest MCP2515 CANBUS i wymaga on osobnego omówienia.
Magistrala CAN jest specjalnym rodzajem interfejsu odpornego na zakłócenia i cechującego się dużą niezawodnością. Od strony fizycznej jest to dwuprzewodowa skrętka z liniami oznaczanymi LOW i HIGH zakończona terminatorami 120R - transmisja jest różnicowa. CAN jest interfejsem szeregowym i ma charakter rozgłoszeniowy. Każda ramka danych rozpoczyna się identyfikatorem nadawcy - w jednej magistrali nie powinny się znajdować dwa urządzenia nadające z tym samym identyfikatorem. Magistrala CAN od lat 90-tych jest stosowana w motoryzacji do łączenia poszczególnych podzespołów elektronicznych auta.
W samochodach Opel Astra H (oraz Zafira B i Corsa D) produkowanych w latach 2004-2014 zastosowano 3 równoległe, niezależne magistrale CAN pracujące z różnymi prędkościami i mające różne zastosowania:
SW-CAN (SingleWire) 33.3 kbps - steruje światłami, centralnym zamkiem, szybami, lusterkami itp.
MS-CAN (MidSpeed) 95.0 kbps - nawiewy, klimatyzacja, komputer pokładowy, radioodbiornik, wyświetlacz itd.
HS-CAN (HighSpeed) 500 kbps - moduł sterowania silnikiem, zespół wskaźników, ABS itp.
Na złączu radioodbiornika występuje tylko magistrala MS-CAN. Dostęp do wszystkich trzech magistral jest możliwy poprzez gniazdo diagnostyczne OBD2 (wykorzystywałem je w wersji prototypowej).
![[Caraudio] Opel CAN-BOX TV-OUT by swe [Caraudio] Opel CAN-BOX TV-OUT by swe](https://obrazki.elektroda.pl/7226683100_1693861024_thumb.jpg)
Głównymi elementami modułu MCP2515 CANBUS są dwa układy scalone. Pierwszy TJA1050 jest odbiornikiem/nadajnikiem CAN zamieniającym poziomy sygnałów z różnicowego panującego w magistrali CAN na klasyczne TX i RX z poziomem TTL. Drugi z chipów MCP2515 (tak jak nazwa modułu) to sprzętowy dekoder magistrali CAN, który dekoduje pełne ramki i odrzuca te niewłaściwe. Z mikrokontrolerem porozumiewa się on za pomocą sprzętowej magistrali SPI. Układ MCP2515 potrafi także filtrować identyfikatory - o wystąpieniu oczekiwanego komunikatu procesor jest informowany za pomocą osobnej linii przerwania INT. Moduł fabrycznie miał wlutowany kwarc 8 MHz - niestety nie udało mi się go skonfigurować do pracy z nietypową prędkością 95 kbps jaka obowiązuje na linii MS-CAN w Oplu. Stało się to możliwe dopiero po wymianie kwarcu na 16 MHz.
![[Caraudio] Opel CAN-BOX TV-OUT by swe [Caraudio] Opel CAN-BOX TV-OUT by swe](https://obrazki.elektroda.pl/2653740100_1693861023_thumb.jpg)
Oprócz obu wymienionych modułów (Arduino i MCP2515) mój układ CAN-BOX zawiera jeszcze kilka bloków funkcjonalnych:
Zasilacz
Napięcie zasilania może dochodzić do 14V a stabilizator Arduino ma podany zakres napięć 9-12V. Dlatego zastosowałem własny zasilacz oparty o scaloną przetwornicę MC34063 (US1), która wraz z elementami towarzyszącymi R1-R3, C1-C3, L1 i D1 wytwarza napięcie 5V do zasilania modułów Arduino i MCP2515.
Układy wyjściowe IGN i LIG
Ich zadaniem jest wystawianie napięcia 12V na piny złącza ISO radioodbiornika. Służą do tego tranzystory MOSFET-P (T2, T4) wraz z driverami (T1, T3) i elementami towarzyszącymi R4-R7.
Układ wyjściowy KEY
Układ symuluje działanie klawiatury rezystancyjnej. Obciążenie to realizowane jest przez kombinację 3 rezystorów (R13-R15) połączonych szeregowo z R16 oraz tranzystory sterujące T5-T7 za pośrednictwem rezystorów R10-R12.
Układ pomiaru napięcia
Układ ten stanowi dzielnik napięcia R17/R18 oraz zabezpieczająca dioda Zenera D2.
Złącze przycisku dodatkowego BTN
Opcjonalny przycisk (4->3) umożliwia załączenie radioodbiornika bez kluczyka w stacyjce oraz reset układu. Rezystor R19 zasila informacyjną diodę LED przycisku (2->1)
![[Caraudio] Opel CAN-BOX TV-OUT by swe [Caraudio] Opel CAN-BOX TV-OUT by swe](https://obrazki.elektroda.pl/2198091300_1693861023_thumb.jpg)
Złącze TV-OUT
Jest to dodatkowa funkcjonalność mojego modułu CAN-BOX. Dzięki wejściu TV-AUX radioodbiornika możliwe jest wyświetlenie na jego ekranie planszy prezentującej napięcie akumulatora oraz temperaturę silnika. Analogowy sygnał wideo ma tutaj tylko 3 stany - biały (ok. 1V) / czarny (ok. 0,3V) oraz impuls synchronizacji (0V). Poziomy sygnału są generowane przy pomocy dzielników jakie stanowią rezystory R8 i R9 z wewnętrzną rezystancją wejścia TV-IN radioodbiornika. Rozdzielczość i stabilność tak generowanego obrazu jest ograniczona osiągami procesora, ale w tym zastosowaniu jest wystarczająca.
![[Caraudio] Opel CAN-BOX TV-OUT by swe [Caraudio] Opel CAN-BOX TV-OUT by swe](https://obrazki.elektroda.pl/5542574000_1693861024_thumb.jpg)
Płytkę drukowaną wykonano metodą termotransferu. Po wytrawieniu ścieżki zostały pocynowane metodą bezprądową a po zlutowaniu zabezpieczone lakierem bezbarwnym. W konstrukcji urządzenia zastosowano elementy SMD, które znajdują się na spodniej stronie płytki drukowanej (druku). Na wierzchniej stronie znajdują się nieliczne elementy przewlekane oraz gniazda przyłączeniowe: CAN, ISO oraz BTN. Płytka ta stanowi również bazę (płytę główną) dla osadzonych na niej w gniazdach pinhead modułów: Arduino oraz MCP2515.
![[Caraudio] Opel CAN-BOX TV-OUT by swe [Caraudio] Opel CAN-BOX TV-OUT by swe](https://obrazki.elektroda.pl/4642508700_1693861025_thumb.jpg)
Płytka została zaprojektowana tak, aby się zmieścić w obudowie KM-82. Aby się w niej zmieścić moduł MCP2515 został w narożach przyszlifowany (znajdowały się tam tylko otwory montażowe. Wymontowano z niego również zbędne gniazda jumpera terminatora oraz śrubowe zaciski magistrali CAN (wykorzystano alternatywne złącze pinhead). Moduł Arduino został pozbawiony złącza ISP dzięki czemu jest niższy. W wieczku obudowy umieszczono gąbkę, dzięki czemu po skręceniu moduły są dociskane do płytki. Do podłączenia wiązki kablowej (ISO i CAN) wykorzystano złącza tzw. terminal blocks.
![[Caraudio] Opel CAN-BOX TV-OUT by swe [Caraudio] Opel CAN-BOX TV-OUT by swe](https://obrazki.elektroda.pl/1499250500_1693861025_thumb.jpg)
Oprogramowanie
Program napisano oczywiście w środowisku Arduino wykorzystując dwie zewnętrzne biblioteki:
mcp_can - do obsługi modułu MCP2515 CANBUS,
TVout - do generowania analogowego sygnału VIDEO.
Dzięki ustawieniu filtrów układu MCP2515 procesor Arduino ma wystarczającą wydajność do ciągłego generowania obrazu (zdarzają jedynie sporadyczne szarpnięcia, które dodają specyficznego uroku). O nadejściu interesujących komunikatów moduł MCP2515 informuje osobną linią przerwania. Dla funkcjonowania układu niezbędny jest odczyt jedynie 3 komunikatów z magistrali CAN:
- 405# - informujący o pozycji kluczyka stacyjki oraz poziomie oświetlenia,
- 206# - informujący o naciśnięciu przycisków na kierownicy,
- 4EC# - informujący o bieżącej temperaturze silnika.
Ponadto do magistrali CAN wysyłam dwa komunikaty, które wysyłało oryginalne radio. Przechwytuję w tym celu jeden z przycisków kierownicy (odpowiednio krótkie i długie naciśnięcie):
- 201#01FF00 - wywołanie menu ustawień komputera pokładowego,
- 201#01C000 - powrót do ekranu głównego komputera pokładowego.
Specyfikacja komunikatów nie jest oficjalnie dostępna, ale w sieci (również na forum elektroda.pl) jest sporo informacji na ich temat zdobytych przez hobbystów metodą "reverse engineering".
Część komunikatów jest opisana w repozytorium na stronie:
Car-CAN-Message-DB
![[Caraudio] Opel CAN-BOX TV-OUT by swe [Caraudio] Opel CAN-BOX TV-OUT by swe](https://obrazki.elektroda.pl/5105131100_1693861026_thumb.jpg)
Podczas uruchamiania finalnej wersji napotkałem dwa problemy. Pierwszy to niewłaściwie działający watchdog na płytce Arduino NANO - rozwiązałem go wgrywając bootloader od wersji UNO. Drugi poważniejszy problem wymusił zmiany na płytce. W pierwotnej wersji bowiem do symulacji klawiszy chciałem użyć PWM - AnalogWrite(). Niestety radioodbiornik miał problemy z rozróżnieniem przycisków, dlatego zastosowałem płytkę pomocniczą z dodatkowymi 6 elementami.
Zamiast opisywać działanie układu CAN-BOX pozwolę sobie wkleić krótką prezentację filmową:
Załączam kod źródłowy oraz pliki Eagle projektu.
Cool? Ranking DIY