Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Caraudio] Opel CAN-BOX TV-OUT by swe

bsw 04 Sep 2023 23:09 2376 10
Suntrack
  • [Caraudio] Opel CAN-BOX TV-OUT by swe

    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

    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

    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

    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

    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

    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

    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

    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

    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

    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

    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

    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
    About Author
    bsw
    Level 20  
    Offline 
  • Suntrack
  • #2
    szym86
    Level 12  
    Bardzo wartościowy temat, na pewno przetrze szlaki wielu osobom.
    Ale żeby taka rzeźba była potrzebna bo radio nie ma plusa poprzez stacyjkę? :-)
    Mam jedno 4-letnie auto, ale mam też jedno "normalne" z 2007, które akurat odnawiam no i które gdzieś w głębi cenię bardziej za prostotę.
  • #3
    bsw
    Level 20  
    szym86 wrote:
    Ale żeby taka rzeźba była potrzebna bo radio nie ma plusa poprzez stacyjkę? :-)

    No niestety. Na dodatek tu chodzi o ten pierwszy plus - po pierwszym przekręceniu kluczyka czyli ACCESORY a nie IGNITION - który w sumie można odnaleźć. Akurat zasilanie można obejść dodatkowym pstryczkiem - co zrobiłem montując wstępnie radio.
    Ale bardziej mi doskwierało:
    - brak możliwości wejścia do ustawień komputera pokładowego (w tym zmiany czasu letni/zimowy),
    - brak sygnału o włączonych światłach - czyli przyciemniania /rozjaśniania wyświetlacza w nowym radiu.
    A teraz jest wszystko tak jak trzeba a nawet lepiej :-)
  • Suntrack
  • #4
    gulson
    System Administrator
    Świetny artykuł, rozwiązanie, bardzo edukacyjne podejście, nawet z plikami źródłowymi!
    Napisz do mnie paczkomat, a wyślę mały upominek.
  • #5
    urkotrebor
    Level 19  
    Kolego bsw, gratuluje zamkniętego projektu, ja od dłuższego czasu próbuję zrobić coś podobnego, jednak zatrzymałem się na odczycie danych z CAN.
    Głównym plusem wykorzystania MS-CAN jest brak odpytywania i bogata lista informacji w tej sieci, ale piszesz że miałeś kłopoty z konfiguracją dla modułu 8 MHz.
    Ja testy robiłem na 8 i 16 i problemów nie było, ale pamiętam że modyfikowałem wpisy w bibliotece. Jakiej biblioteki użyłeś, bo w źródłach jest „df_can.h” a w wątku „mcp_can”?
    Piszesz że zmieniłeś kwarc, a co z kondensatorami?
  • #6
    bsw
    Level 20  
    Dziękuję za komentarz.
    Piszesz, że zatrzymałeś się na odczycie danych z CAN - a z czym masz problem?
    Co budujesz - jeśli można wiedzieć?

    Ja od odczytu CAN zacząłem - bez tego reszta nie miałaby sensu. Przetestowałem kilka bibliotek uruchamiając programy przykładowe. Użyłem biblioteki mcp_can - includuje się df_can.h (MIT License - Copyright (c) 2013 Seeed Technology Inc.). Nie modyfikowałem biblioteki, bo bałem się, że już nic nie zadziała, w jej presetach skonfigurowanie dla 95 kbps było możliwe tylko z kwarcem 16 MHz. Kondensatorów nie ruszałem - wszystko działa stabilnie.
  • #7
    urkotrebor
    Level 19  
    Mój problem polega na braku czasu i nadmiaru pomysłów no i PESEL daje o sobie znać .
    Jakiś czas temu znalazłem czeską firmę, która sprzedawała moduły komfortu, polskiego dystrybutora nie znalazłem a kupno od pepika jakoś mi nie pasowało.
    Gdy znalazłem przypadkiem jakiś projekt OBD na Arduino, przypomniałem sobie o pepikach i tak zaczęło się zbieranie informacji.
    Próbowałem oprzeć wszystko o fabryczny wyświetlacz, ale na stole z BID działało a w aucie na GID już nie.
    Trafiłem na OLED, niestety biblioteka na UNO zjadała prawie całą pamięć, więc przesiadłem się na ESP32 i tu zonk, nie doczytałem, esp32 nie pracuje na 95 kbps.
    Wróciłem do UNO z LCD, ale znalazłem wyświetlacz LCD 5" 800x480 FT810 z dotykiem za rozsądne pieniądze i koncepcja znowu się zmieniła.
    Niestety wyskoczył kolejny problem, FT810 jest bardzo humorzasty i nie chce pracować na jednym SPI z MCP2515.
    Ponieważ ESP32 daje dwie magistrale SPI, pomyślałem to jest to, ale tu się zatrzymałem, bo nie wiem jak zmusić MCP2515 by chodził na jednej a FT810 na drugiej.
    Pewnie jak nie znajdę rozwiązania, to koncepcja się zmieni a właściwie to już mam za sprawą znajomego pewne przemyślenia, dwa układy połączone WI-FI.
    A tak wyglądają moje wcześniejsze przemyślenia .





  • #8
    bsw
    Level 20  
    Czyli nie masz problemu z CAN tylko resztą hardware / software?
    Życzę cierpliwości i dokończenia projektu.

    Sam mam często podobnie: zaczynam coś -> zmienia mi się koncepcja albo napotykam trudności -> muszę zająć się czymś innym.
    Wtedy projekt trafia do poczekalni... Czasem na wieczne niedokończenie.

    A pomysłów też mam mnóstwo - do tego także inne, nie mniej absorbujące zajęcia.
  • #9
    urkotrebor
    Level 19  
    Z CAN-em jako tako nie, szkoda że nie ma, a przynajmniej ja nie spotkałem dokumentacji opisującej PID-y, jedynie można posiłkować się pracą innych zapaleńców albo samemu rozwikłać co i jak .
    Myślałem nawet kiedyś aby na ELEKTRODZIE stworzyć takie kompendium z pomocą kolegów, ale nie wiem czy było by zainteresowanie, bo niewielu tu się ujawniło.
    W swoim projekcie stosujesz symulacje działania klawiatury rezystancyjnej. Jak to Ci działa, bo ja używałem manetkę od starego radia i zauważyłem, że w ekstremalnych warunkach pogodowych działanie staje się przypadkowe a raczej niedokładne, więc przestałem drążyć temat na rzecz emulacji pilota IR. To na razie pieśń przyszłości, teraz skupiam się na pogodzeniu MCP i FT810.
  • #10
    bsw
    Level 20  
    To prawda - informacji o CAN jak na lekarstwo.
    Jest próba podsumowania: https://github.com/JJToB/Car-CAN-Message-DB/tree/master/Opel/Astra/H/MS-CAN
    ale też niekompletna.
    Niemniej udało mi się odnaleźć w sieci prawie wszystko, czego potrzebowałem na pierwszym etapie prac. Jedynie komunikat powrotu do głównego menu komputera pokładowego (201 # 01 E0 00) rozgryzłem samodzielnie metodą chybił trafił.

    Potem wymyśliłem sobie jeszcze ten TV-OUT z temperaturą silnika i napięciem. O ile temperatura jest cyklicznie nadawana (0x4EC), o tyle napięcia nie udało mi się odnaleźć. Można o nie poprosić wysyłając sekwencję (248 # 06 AA 01 01 07 10 11), a następnie nasłuchiwać (548 # 07 ...) - opisano to tutaj: https://jb0.de/?cat=33
    To działa, ale zarzuciłem ten sposób. Nie chciałem bowiem wprowadzać dodatkowego szumu na magistrali. Postanowiłem mierzyć napięcie samodzielnie - co nie jest najlepszym rozwiązaniem, bo de facto mierzę napięcie na... żarówce schowka.

    Co do obsługi klawiatury. Na początku użyłem emulacji z pomocą PWM. Działało tylko na stole, ale w aucie już niezbyt stabilnie. Dlatego szybko to przeprojektowałem. Póki co funkcjonuje ok, ale trzeba dobrze oszacować rezystory, aby ich wartości były daleko od siebie. Projektując to drugi raz, przyjąłbym jeszcze bardziej odległe wartości rezystancji.
  • #11
    urkotrebor
    Level 19  
    Przejrzałem swoje zasoby i znalazłem kilka rzeczy wartych uwagi.
    https://insignia-club.pl/viewtopic.php?f=21&t=3497&start=20 człowiek w sposób jasny i przejrzysty przedstawił działanie CAN, prawie biblia.
    http://www.emvn.pl/siec-can-opel-odczyt-jasnosci/ to projekt, który pomógł mi wybrać pierwszy sprzęt do zabawy z CAN.
    https://pl.abcdef.wiki/wiki/OBD-II_PIDs opis standardu OBD.
    Na ELEKTRODZIE też można coś wartościowego znaleźć https://www.elektroda.pl/rtvforum/topic3554422.html .
    I taka opowieść bardziej techniczna https://www.instructables.com/CAN-Protocol-Yes-We-Can/.