Die Elektronik in meinem Golf IV besteht heute aus einem Raspberry Pi Zero 2 W und mehreren Modulen an losen Leitungen: USV, ADC-Wandler, ULN-Treiber und ein separates Ladegerät aus 12 V. Es gibt viele Verbindungen, und die Versorgung aus dem Bordnetz hat keinerlei Schutz vor Überspannung. Die aktuelle Schaltung im Auto bleibt vorerst, aber die künftige Leiterplatte auf Basis des Raspberry Pi Pico 2 W habe ich schon jetzt entworfen, damit der Umstieg später ohne Gefrickel klappt. Gleich vorweg: Das ist Revision 0.1, die ich noch nicht bestellt habe. Ich beschreibe das Projekt und die Entscheidungen, die dorthin geführt haben, nicht ein funktionierendes Exemplar.
Warum der Pico 2 W
Der Pico 2 W hat einen RP2350 mit 520 KB SRAM und 4 MB Flash sowie den CYW43439-Funkchip mit WLAN und Bluetooth LE. Ich habe die Variante ohne Stiftleisten gewählt, die flach über die Kanten mit Halbbohrungen (Castellated Holes) auf die Leiterplatte gelötet wird, weil sie Vibrationen besser verträgt. Diese Wahl hat die Modulliste sofort verkürzt. Die USV wurde überflüssig, weil der Pico in weniger als einer Sekunde startet und das Dateisystem LittleFS einen plötzlichen Spannungsausfall übersteht. Auch der separate ADC-Wandler entfiel, denn der RP2350 bringt einen eigenen mit.
Ich weiß noch nicht, ob der Pico Bluetooth in zwei Rollen gleichzeitig und TLS 1.3 über PPP schafft. Ich wollte nicht, dass das ganze Projekt von der Antwort auf diese Frage abhängt, deshalb bleibt auf der Leiterplatte ein unbestückter UART-Anschluss für den Pi Zero 2 W. Wenn der Pico es nicht packt, steht der Pi daneben, und die Leiterplatte bleibt unverändert.
Was der 12-V-Eingang aushalten muss
Das Bordnetz eines Autos ist kein Labornetzteil. Am gefährlichsten ist der Load Dump (Lastabwurf), also die Überspannung, die entsteht, wenn bei laufender Lichtmaschine plötzlich die Batterie abgeklemmt wird. Dazu kommen verpolt angeschlossene Leitungen. Den Schutz habe ich deshalb als vier Stufen ausgelegt, die die Spannung durchläuft, bevor sie die Spannungswandler erreicht. So sieht dieser Abschnitt im Skript aus, das den Schaltplan erzeugt:
place('F1', 'Device:Polyfuse', '3A/33V 1812', X + 20, Y, {'1': '+12V_IN', '2': '+12V_F0'}, FP['PTC'])
place('Q1', 'Transistor_FET:Q_PMOS_GSD', 'SQD50P06-15L (-60V)', X + 50, Y,
{'1': 'Q1_G', '2': '+12V_P', '3': '+12V_F0'}, FP['DPAK'])
place('D1', 'Device:D_Zener', 'BZT52C15 (15V)', X + 45, Y + 20, {'1': '+12V_P', '2': 'Q1_G'}, FP['SOD'])
place('D2', 'Device:D_TVS', 'SMBJ24A', X + 60, Y + 20, {'1': '+12V_P', '2': 'GND'}, FP['SMB'])
place('L1', 'Device:L', '10uH 4A', X + 85, Y, {'1': '+12V_P', '2': '+12V_F'}, FP['L12'])
Am Anfang steht eine Polymer-Sicherung 3 A / 33 V, und davor bleibt im Kabelbaum eine gewöhnliche 5-A-Schmelzsicherung. Hinter der Sicherung folgt der Verpolschutz mit dem P-MOSFET SQD50P06-15L (Drain-Source −60 V) und einer 15-V-Zenerdiode am Gate. Die Überspannung durch den Lastabwurf nimmt die TVS-Diode SMBJ24A auf. Den Abschluss bildet ein LC-Filter: eine 10-µH-Drossel für 4 A sowie Kondensatoren mit 100 µF 50 V und 1 µF.
Wie ich beim TPS54360 gelandet bin
Die TVS-Diode hält beim Lastabwurf etwa 39 V, und genau so viel kann der Eingang des Spannungswandlers sehen. Von dieser Zahl hing die gesamte Auswahl ab. Der erste Entwurf hatte einen LM2596 mit Eingang bis 40 V, was bei 39 V fast keine Reserve lässt. Kurz sah der LMR33630 nach einer Wahl mit größerer Reserve aus, aber nach genauerer Prüfung hält er nur 36 V aus, also fiel auch er weg. Am 25. September bin ich auf den TPS54360 mit Eingang bis 60 V umgestiegen, und zwar gleich in zwei Exemplaren.
Zwei deshalb, weil der LED-Streifen und die Logik nicht an derselben Quelle hängen sollten. Wandler A versorgt den Pico (über die Schottky-Diode SS34 an VSYS), die Stromsensoren und das Modem. Wandler B versorgt nur den Streifen, damit ein Stromsprung des Streifens die Logikspannung nicht herunterzieht. Beide liefern 5 V bei bis zu 3,5 A und arbeiten mit einer Frequenz von etwa 600 kHz. Die Bauteilwerte habe ich nicht von Grund auf berechnet, sondern aus dem Beispiel im TI-Datenblatt übernommen: eine 8,2-µH-Drossel und die Diode B560C.
Der Streifen wird über einen High-Side-Schalter mit dem P-MOSFET AO3401A versorgt, den der Pico ansteuert. Bei längerem Stillstand ist der Streifen komplett abgetrennt und zieht keinen Strom aus der Batterie. Das Modem hat einen eigenen, gleichen Schalter.
Eingänge von den Schlössern
Die Werksschlösser des Golf IV liefern vier Signale: die Riegelstellung und den Türzustand, jeweils für Fahrer und Beifahrer. Der Kontakt im Schloss legt die Leitung auf Fahrzeugmasse, und auf diesen Leitungen liegen keine 12 V an. Jede Leitung hat auf der Leiterplatte einen 2,2-kΩ-Pull-up-Widerstand nach 3,3 V, einen 10-kΩ-Widerstand in Reihe zum Pin und einen 100-nF-Kondensator erhalten. Die Zeitkonstante liegt bei etwa 1 ms, was für die Spannungsspitzen der Schlossmotoren ausreicht. Derselbe 10-kΩ-Widerstand begrenzt den Strom, der bei Überspannung in die Schutzdioden fließt, und den Rest erledigt die softwareseitige Entprellung der Kontakte (50 ms).
Fenster, Spiegel, Zentralverriegelung
Fenster und Spiegel werden von den Darlington-Treibern ULN2803A und ULN2003A angesteuert, die parallel zu den Original-Tastern geschaltet sind, sodass die Leiterplatte sie genauso „drückt“ wie der Fahrer. Der gemeinsame COM-Anschluss liegt auf 12 V hinter den Schutzschaltungen, damit die in diesen Bausteinen integrierten Freilaufdioden funktionieren.
Ein Detail stammt aus dem Errata-Dokument. Beim RP2350 ist der Fehler E9 zu den internen Pull-down-Widerständen beschrieben, deshalb verlasse ich mich nicht auf sie. Die Eingänge der ULNs haben eigene Widerstände nach Masse, und die Transistorbasen, Optokoppler und Relaiseingänge haben externe 100-kΩ-Pull-down-Widerstände erhalten. Dadurch ist nach einem Reset, bevor das Programm die Pins konfiguriert, kein Ausgang „gedrückt“, sodass sich weder ein Fenster noch eine Fernbedienungstaste rührt.
Die Zentralverriegelung habe ich so gelöst, wie sie für den Pi beschrieben ist: Zwei PC817-Optokoppler drücken die Tasten der Ersatzfernbedienung mit einem 400-ms-Impuls, und die Fernbedienung bleibt galvanisch von der Leiterplatte getrennt. Außerdem habe ich Bestückungsplätze für zwei Omron-G5V-2-Relais zum Umpolen der Spiegelmotoren vorgesehen. Vorerst sind sie unbestückt, weil ich im Schaltplan des Autos noch nicht geprüft habe, ob der Spiegelschalter das erfordert.
Schaltplan und Leiterplatte aus Skripten
Hier habe ich nichts von Hand gezeichnet. Die Schaltung beschreibt das Skript gen_sch.py, und es ist die Quelle der Wahrheit: Es erzeugt den KiCad-Schaltplan mit einem Netzlabel an jedem Pin, und die Designentscheidungen halte ich separat in der Spezifikation fest. Aus dem fertigen Schaltplan exportiert kicad-cli die Netzliste. Ein zweites Skript, das in KiCads Python läuft, baut daraus die Leiterplatte: Es platziert die Bauteile anhand eines Positionsverzeichnisses, zeichnet die Platinenkontur, legt Netzklassen fest und setzt die Sperrzone für die Antenne sowie die Masseflächen. Die Leiterbahnen verlegt anschließend Freerouting (20 Durchläufe dauern etwa 10 Minuten), und zum Schluss ergänzt ein weiteres Skript die Durchkontaktierungen, die die Masse vernähen. Jede Änderung der Spezifikation bedeutet, dass die gesamte Kette neu durchläuft. Manuelle Korrekturen in KiCad würden dabei überschrieben, deshalb muss jede Änderung in die Skripte einfließen.
Das Ergebnis ist eine Leiterplatte von 140 × 100 mm mit zwei Lagen, Massefläche auf beiden Seiten, 96 zu bestückenden Bauteilen in 48 BOM-Positionen. Die Leiterbahnen der Versorgung sind 1,2 mm breit, die Signalleitungen 0,3 mm. Der Pico liegt an der Oberkante und ist so gedreht, dass die Antenne über den Platinenrand ragt und kein Kupfer unter sich hat. ERC und DRC melden keine Fehler. Der DRC lässt nur kosmetische Warnungen zum Bestückungsdruck und vier Masse-Pads des Pico stehen, die nicht mit der Massefläche der Leiterplatte verbunden sind. Das akzeptiere ich, weil alle Massen des Pico über die interne Masse des Moduls verbunden sind. Die Fertigungsdaten sind fertig: Gerber, BOM, Bauteilpositionen und ein STEP-Modell für die Gehäusekonstruktion in FreeCAD.
Was ich noch nicht weiß
Bevor ich die Leiterplatten bestelle, muss ein Prototyp allein auf dem Pico das klären, was den Anschluss für den Pi erzwungen hat. Bluetooth soll in zwei Rollen gleichzeitig arbeiten: als Central gegenüber dem Streifencontroller und als Peripheral gegenüber dem Telefon. TLS 1.3 soll über das LTE-Modem per PPP laufen, und der WireLink-Kanal auf mbedTLS soll Byte für Byte dieselben Ergebnisse liefern wie die Testvektoren des aktuellen Gateways. Auf der Leiterplatte selbst muss ich noch in der Waveshare-Dokumentation prüfen, ob sich der PWRKEY des Modems durch Kurzschluss nach Masse einschalten lässt (so ist er gezeichnet), und die Kompensation des TPS54360 für die Ausgangskondensatoren 2 × 47 µF neu berechnen.
Die Projektbeschreibung steht im Portfolio, und die Leiterplatte lässt sich von allen Seiten im interaktiven 3D-Modell ansehen. Das Modell stammt direkt aus dem KiCad-Projekt; ein Klick auf einen Block zeigt, was er tut und woraus er besteht.
