
Seit es Radioempfänger in Autos gibt, stellt deren Anschluss an die Anlage des Autos ein Problem dar – eine einheitliche Methode gab es nicht. Erst in den 1990er Jahren wurde der Steckverbinder-Standard entwickelt, sogenannter ISO-Stecker und die Größe des Radioempfängers, die sogenannte DIN. Zwar haben die Automobilhersteller dies oft ignoriert und eigene Lösungen verwendet, es gab jedoch Adapter, mit denen man anstelle des Werksradios ein anderes Radio anschließen konnte. Das Problem trat ein Jahrzehnt später auf, als der CAN-BUS für die Kommunikation mit dem Radio verwendet wurde und die Radios fest in das Armaturenbrett des Fahrzeugs integriert wurden und in ihren Abmessungen nicht kompatibel waren.

Opel Astra H (Corsa D, Zafira B) wurden ab Werk mit Radios in der Größe 2-DIN ausgestattet (mit einer ungewöhnlichen - trapezförmigen - Front). Die Funktionalität des Radios ist nach heutigen Maßstäben eher dürftig (z. B. fehlen ein Fileplayer oder Bluetooth). Es schreit danach, auf ein moderneres Gerät aufgerüstet zu werden. Leider wird diese Aufgabe durch den bereits erwähnten CAN-BUS erschwert. Man muss also mit der eingeschränkten Funktionalität des neuen Radios rechnen oder ein spezielles Gerät kaufen, die sogenannte CAN-BOX, das Daten aus dem Bus ausliest und auf der ISO-Schnittstelle zur Verfügung stellt. Allerdings kostet CAN-BOX um die hundert € und es ist nicht sicher, ob es vollständig mit dem Radioempfänger kompatibel ist.

Da mein Werksradio defekt war, beschloss ich, es durch ein billiges chinesisches Autoradio mit Windows CE zu ersetzen. Ich kaufte daher nur die notwendige Verkabelung und Rahmen, um das Radio in die trapezförmige Öffnung im Opel zu montieren, und beschloss, die CAN-BOX-Adapter selbst zu bauen. Das Ergebnis ist ein Gerät, das dasselbe ermöglicht wie der werkseitige CAN-BOX-Adapter, d. h.:
- liest Informationen vom CAN-Bus über den gedrehten Zündschlüssel und setzt diesen Zustand auf dem ACC-Pin des ISO-Steckers des Radios,
- liest aus dem CAN-Bus Informationen über eingeschaltetes Licht und setzt diesen Status auf dem ILL-Pin des ISO-Steckers des Radios,
- liest vom Lenkrad Informationen über gedrückte Tasten und stellt den entsprechenden Widerstand am KEY-Anschluss des ISO-Steckers des Radios ein.
![[Caraudio] Opel CAN-BOX TV-OUT von swe [Caraudio] Opel CAN-BOX TV-OUT von swe](https://obrazki.elektroda.pl/6601922800_1697282171_thumb.jpg)
Darüber hinaus ermöglicht mein Gerät auch:
- das Einschalten des Radios ohne Schlüssel (mit einer zusätzlichen Taste),
- das Zurücksetzen des Radios (das gelegentlich hängt) und des Adapters (längeres Drücken der oben genannten Taste),
- Aufrufen des Bildschirms für die Computereinstellungen des Fahrzeugs mit einer Taste am Lenkrad (ursprünglich war diese Funktion nur über das Werksradio abrufbar),
- schnelle Rückkehr zum Hauptbildschirm des Computers über die Taste am Lenkrad (ursprünglich war diese Funktion über das Werksradio möglich),
- Auslesen der Batteriespannung und Motortemperatur vom CAN-Bus und Darstellung dieser Informationen über den TV-AUX-Eingang auf dem Radiobildschirm. Dies ist eine Zusatzfunktion – eine solche Nutzung des TV-Eingangs habe ich bei einem Radioempfänger noch nie gesehen! (Ursprünglich gibt es im Auto keine Temperaturanzeige. Über eine Tastenkombination am Originalradio ist es möglich, einen undurchsichtigen Bildschirm aufzurufen – den sogenannten Diagnosemodus, in dem diese Informationen vorliegen.)
Wie funktioniert es?
Im Kabelbaum des Originalradios befinden sich die Signale der vier Autolautsprecher, das Dauerplus der Batterie (B+), GND und die beiden CAN-Busleitungen (L und H). Man kann einen fertigen Adapter vom OPEL auf ISO-Anschluss zusammen mit der erforderlichen Phantomspeisung der Antennenanlage kaufen. Leider ist der Anschluss eines weiteren Radios schwierig, da das ACC-Zündschlüsselsignal (das sogenannte accessory) fehlt, das der Radioempfänger mit dem ISO-Anschluss benötigt. Der Anschluss dieser Leitung an B+ führt zu einem erhöhten Stromverbrauch im Stand und einer schnellen Batterieentladung. Daher sollte ein zusätzlicher Schalter verwendet werden. Am besten schließt man ihn nicht an B+, sondern an... die Handschuhfachleuchte. Die Spannung erscheint dort, sobald die Tür geöffnet wird und verschwindet nach 20 Minuten (bzw. 20 Minuten nach dem Abstellen des Motors). Dadurch schaltet sich das Radio automatisch aus und verbraucht im Stand keinen Strom. Ich habe auch die Spannung der Handschuhfachbeleuchtung zur Stromversorgung meines Geräts verwendet, sodass ich die Modi zur Reduzierung der Stromaufnahme (Schlafmodus) und keinen umständlichen Aufwachmodus implementieren musste.

In der Konstruktion des Geräts habe ich zwei fertige Module verwendet. Das erste ist - allgemein bekannt - Arduino Nano. Normalerweise vermeide ich es, Arduino in meinen Geräten zu verwenden, aber dieses Mal habe ich einen Prototyp auf einer Lochrasterplatine gebaut, und da die Software gut funktionierte, habe ich beschlossen, bei dieser Plattform zu bleiben. Das zweite Modul ist der MCP2515 CANBUS, und das muss gesondert besprochen werden.
Der CAN-Bus ist eine spezielle Schnittstelle, die störsicher ist und sich durch hohe Zuverlässigkeit auszeichnet. Physikalisch gesehen handelt es sich um zweiadriges Twisted-Pair-Kabel mit Leitungen, die mit LOW und HIGH gekennzeichnet sind und mit 120R-Abschlusswiderständen abgeschlossen sind – die Übertragung erfolgt differenziell. CAN ist eine serielle Schnittstelle und hat einen Broadcast-Charakter. Jeder Datenframe beginnt mit einer Sender-ID - es sollten sich keine zwei sendenden Geräte mit derselben ID an einem Bus befinden. Der CAN-Bus wird seit den 1990er Jahren in der Automobilindustrie eingesetzt, um einzelne elektronische Komponenten eines Fahrzeugs zu verbinden.
Opel Astra H (und Zafira B und Corsa D), die zwischen 2004 und 2014 hergestellt wurden, verwenden drei parallele, unabhängige CAN-Busse mit unterschiedlichen Geschwindigkeiten und für verschiedene Anwendungen:
SW-CAN (SingleWire) 33,3 kbps - steuert Licht, Zentralverriegelung, Fenster, Spiegel, usw.
MS-CAN (MidSpeed) 95.0 kbps - Lüftung, Klimaanlage, Bordcomputer, Radio, Display, usw.
HS-CAN (HighSpeed) 500 kbps - Motorsteuerungsmodul, Kombiinstrument, ABS, usw.
Am Stecker des Radioempfängers befindet sich nur der MS-CAN-Bus. Der Zugriff auf alle drei Busse ist über die OBD2-Diagnosebuchse möglich (ich habe sie im Prototyp verwendet).

Die Hauptelemente des MCP2515 CANBUS-Moduls sind zwei integrierte Schaltkreise. Der erste TJA1050 ist ein CAN-Empfänger/Sender, der Signalpegel vom differenziellen CAN-Bus in klassisches TX und RX mit TTL-Pegel umwandelt. Der zweite MCP2515-Chip (genau wie der Modulname) ist ein Hardware-CAN-Bus-Decoder, der vollständige Frames decodiert und falsche Frames verwirft. Die Kommunikation mit dem Mikrocontroller erfolgt über den Hardware-SPI-Bus. Die Schaltung MCP2515 kann auch Identifikatoren filtern – der Prozessor wird über eine separate INT-Interrupt-Leitung über das Auftreten der erwarteten Nachricht informiert. Das Modul war werkseitig mit einem 8-MHz-Quarzoszillator bestückt – leider konnte ich ihn nicht für die ungewöhnliche Geschwindigkeit von 95 kbps konfigurieren, die auf der MS-CAN-Leitung in Opel verwendet wird. Dies wurde erst möglich, nachdem der Quarzoszillator durch 16 MHz ersetzt wurde.

Neben den beiden oben genannten Modulen (Arduino und MCP2515) enthält meine CAN-BOX-Schaltung mehrere weitere Funktionsblöcke:
Stromversorgung
Die Versorgungsspannung kann 14 V erreichen, und der Arduino-Stabilisator hat einen spezifizierten Spannungsbereich von 9-12 V. Daher habe ich meine eigene Stromversorgung verwendet, die auf dem integrierten Wandler MC34063 (US1) basiert, der zusammen mit den zugehörigen Bauteilen R1-R3, C1-C3, L1 und D1 eine Spannung von 5 V erzeugt, um den Arduino und die MCP2515-Module zu versorgen.
IGN- und LIG-Ausgangsschaltungen
Ihre Aufgabe besteht darin, eine Spannung 12 V an die ISO-Anschlussstifte des Radioempfängers zu liefern. Die MOSFET-P-Transistoren (T2, T4) dienen zusammen mit den Steuertransistoren (T1, T3) und den zugehörigen Komponenten R4-R7 diesem Zweck.
KEY-Ausgangsschaltung
Die Schaltung simuliert die Bedienung einer Tastatur, die ähnlich wie eine Widerstandsdekade gebaut ist. Diese Last wird durch eine Kombination aus 3 Widerständen (R13-R15), die mit R16 in Reihe geschaltet sind, und den Steuertransistoren T5-T7 über die Widerstände R10-R12 realisiert.
Schaltung zur Spannungsmessung
Diese Schaltung besteht aus einem Spannungsteiler R17/R18 und einer Schutz-Zenerdiode D2.
Zusätzlicher BTN-Tastenanschluss
Die optionale Taste (4->3) ermöglicht das Einschalten des Radios ohne Zündschlüssel und das Zurücksetzen der Schaltung. Der Widerstand R19 versorgt die Informations-LED der Taste (2->1)

TV-OUT-Anschluss
Dies ist eine zusätzliche Funktion meines CAN-BOX-Moduls. Dank des TV-AUX-Eingangs des Radios ist es möglich, die Batteriespannung und Motortemperatur auf dem Bildschirm des Radios anzuzeigen. Das analoge Videosignal hat hier nur 3 Zustände - weiß (ca. 1V) / schwarz (ca. 0,3V) und Synchronisationsimpuls (0V). Die Signalpegel werden über Teiler erzeugt, die aus den Widerständen R8 und R9 und dem Innenwiderstand des TV-IN-Eingangs des Radios bestehen. Die Auflösung und Stabilität des auf diese Weise erzeugten Bildes wird durch die Leistungsfähigkeit des Prozessors begrenzt, ist aber für diese Anwendung ausreichend.

Die Leiterplatte wurde mit der Direkt-Toner-Methode hergestellt. Nach dem Ätzen wurden die Leiterbahnen nach dem stromlosen Verfahren verzinnt und nach dem Löten mit Klarlack geschützt. Bei der Konstruktion des Geräts wurden SMD-Bauteile verwendet, die sich auf der Unterseite der Leiterplatte befinden (Leiterbahnseite). Auf der Oberseite befinden sich einige wenige Durchsteck-Bauelemente sowie CAN-, ISO- und BTN-Anschlussbuchsen. Diese Platine bildet auch die Basis (Hauptplatine) für die darauf in den Pinhead-Buchsen eingebetteten Module: Arduino und MCP2515.

Die Platine ist so konzipiert, dass sie in das Gehäuse passt KM-82. Damit das MCP2515-Modul hineinpasst, wurde es an den Ecken abgeschliffen (da gab es nur die Befestigungslöcher). Überflüssige Brücken-Stecksockel für Abschlusswiderstände und CAN-Bus-Schraubklemmen wurden ebenfalls entfernt (ein alternativer Pinhead-Anschluss wurde verwendet). Aus dem Arduino-Modul wurde der ISP-Anschluss entfernt, wodurch es niedriger ist. In den Deckel des Gehäuses wurde ein Schwamm gelegt, damit die Module beim Zusammenschrauben gegen die Platine gedrückt werden. Für den Anschluss des Kabelbaums (ISO und CAN) wurden Anschlüsse verwendet, sog. terminal blocks.

Software
Das Programm wurde natürlich in der Arduino-Umgebung unter Verwendung zweier externer Bibliotheken geschrieben:
mcp_can - zur Unterstützung des MCP2515 CANBUS-Moduls,
TVout - um ein analoges VIDEO-Signal zu erzeugen.
Dank der Filtereinstellungen der MCP2515-Schaltung hat der Arduino-Prozessor genügend Leistung, um das Bild kontinuierlich zu erzeugen (nur gelegentliche Ruckler machen den besonderen Reiz aus). Der MCP2515 informiert über das Eintreffen interessanter Nachrichten mit einer gesonderten Interruptleitung. Damit die Schaltung funktioniert, müssen nur 3 Nachrichten vom CAN-Bus gelesen werden:
- 405# - informiert über die Stellung des Zündschlüssels und der Beleuchtungsstärke,
- 206# - informiert, wenn die Lenkradtasten gedrückt werden,
- 4EC# - informiert über die aktuelle Motortemperatur.
Zusätzlich sende ich zwei Nachrichten an den CAN-Bus, die das Originalradio gesendet hat. Zu diesem Zweck verwende ich eine der Lenkradtasten (kurzes bzw. langes Drücken):
- 201#01FF00 - Aufruf des Einstellungsmenüs des Bordcomputers,
- 201#01C000 - Rückkehr zum Hauptbildschirm des Bordcomputers.
Ursprünglich wurde mit dieser Taste das BT-Modul des Fahrzeugs bedient. Wegen des im neuen Radio eingebauten BT habe ich diese Taste abgetrennt.
Die Spezifikation der Nachrichten ist nicht offiziell verfügbar, aber es gibt viele Informationen darüber im Internet (auch im Forum elektroda.pl), die von Bastlern mithilfe der "Reverse Engineering" erhalten wurden.
Einige der Nachrichten werden im Repository beschrieben unter:
Car-CAN-Message-DB

Bei der Inbetriebsetzung der Endversion bin ich auf zwei Probleme gestoßen. Das erste war eine Fehlfunktion des Watchdogs auf dem Arduino NANO-Platine - ich löste es, indem ich den Bootloader der UNO-Version hochgeladen habe. Das zweite, schwerwiegendere Problem erzwang Änderungen an der Platine. In der ursprünglichen Version wollte ich PWM - AnalogWrite() verwenden, um Tasten zu simulieren. Leider hatte das Radio Probleme, die Tasten zu unterscheiden, daher habe ich eine Zusatzplatine mit zusätzlichen 6 Elementen verwendet.
Anstatt das Funktionieren der CAN-BOX-Schaltung zu beschreiben, möchte ich eine kurze Videopräsentation einfügen:
Ich füge den Quellcode und die Eagle-Dateien des Projekts bei.
Cool? DIY-Rangliste