artikel:audio_navigation:pwm_to_can_gateway:start

PWM-to-CAN Interface

:TODO:

Konzipierung eines Interfaces um ein Mondeo/S-Max/Galaxy Radio, welches Lichtsignale auf dem CAN-Bus erwartet in einem Fokus/Kuga zu betreiben, welcher dieses als 12V PWM-Signal liefert.

Beim manchen Ford-Modellen, wie dem Fokus MK2 wird die Signalisierung des Fahrtlichts, sowie die aktuell eingestellte Instrumentenhelligkeit (Tastenbeleuchtung, LCD-Hintergrundbeleuchtung) als PWM-Signal über Pin A-14 des Quadlock-Steckers zum Radio geführt. Dieses hat einen Signalpegel von 0V (GND) wenn die Zündung aus ist, bzw. ein PWM-Signal mit 12V Amplitude wenn die Zündung eingeschaltet ist. Das Puls/Pausenverhältnis (Dutycycle) entspricht dabei der eingestellten Instrumentenhelligkeit.

Beim Mondeo/S-Max/Galaxy erhält das Radio diese Signalisierung über den CAN-Bus (genauer gesagt den MM-CAN Bus). Der entsprechende Pin am Quadlock ist dort nicht belegt (ebensowenig wie der für die Zündung) und hat auch Radioseitig keine Funktion.

Erhält das Radio diese CAN-Signale nicht, entspricht das einem Betrieb im Auto mit ausgeschalteter Zündung. In diesem Zustand werden die Radiotasten mit ca. 50% der Leuchtkraft erhellt, die Tasten der Klimasteuerung bleiben aus. Zusätzlich erscheint im LCD-Display des Radios der Spruch „… wird nach 1 Stunde ausgeschaltet… blabla“. Schaltet man die Zündung ein, erkennt dies das Radio anhand der CAN-Botschaft dafür (welche bei Mondeo und Fokus gleich ist) oder 12V-Signal am Pin A-16 des Quadlock. Die erwarteten Helligkeits-Nachrichten fehlen jedoch und dies wird vom Radio wie ein Helligkeitswert von „0“ betrachtet. Das wiederum führt dazu, das das LCD-Display auf voller Helligkeit strahlt, die Hintergrundbeleuchtung der Tasten jedoch komplett aus ist.

Um dieses Manko zu kompensieren benötigt man ein Interface welches auf der einen Seite die PWM-Logik vom Fokus erkennt und daraus CAN-Bus Signale für das Radio erzeugt.

Die Radioseitigen Pins A-14 (Licht) und A-16 (Zündung) am Quadlock haben beim Mondeo-Radio keinerlei Funktion. Egal was man dort auch für ein Signal auflegt. Diese sind am fahrzeugseitigen Kabelbaum-Stecker beim Mondeo auch nicht belegt.

Also habe ich mir die CAN-Kommunikation mal etwas näher angesehen und herausgefunden das auf dem MM CAN-Bus in ID 287 die Helligkeit der LCD-Hintergrundbeleuchtung und in der ID 289 die der Tastenbeleuchtung über jeweils einen 2 Byte großen Wert vorgegeben wird. Der Wertebereich für das LCD-Display liegt zwischen 0x0002 und 0x03FF, wobei 0x0000 und 0x0001 das Display voll aktiviert und ein Wert von 0x0002 praktisch „Display aus“ bedeutet. Die Werte hoch bis zum Maximum 0x03FF lassen das Display immer heller werden.

Im Bezug auf den Focus ist zu sagen das wenigstens bis zum MK2 FL (Bj. Ende 2010) keinen MM-CAN Bus gegeben hat und das Radio direkt mit dem MS-CAN verbunden ist. Diesen habe ich mal gescannt und dort gibt es weder eine ID 287 noch eine ID 289. Somit ist auch klar warum die Tastenbeleuchtung nicht funktioniert.

Also ist die Lösung um ein Radio aus einem Mondeo/S-Max/Galaxy in einem Focus/Kuga/C-Max/B-Max zu betreiben ganz einfach. Man baut ein Modul welches entweder ein volles Helligkeitssignal für beide Beleuchtungen aussendet oder dieses abhängig vom PWM-Dutycycle am Pin A-14 steuert. Da beide CAN-IDs im Focus nicht vorhanden sind, kann man diese ohne Konflikte auf den MS-CAN Bus senden.

Für ein solches Modul benötigt man einen KFZ-Tauglichen Spannungswandler, einem Mikrocontroller (STM32, ATMEGA, PIC, LPC oder anderem Mikrocontroller seiner Wahl), einen CAN-Controller/Transceiver (z.B. MCP2515, TJA1050) und eine Eingangstufe zum verarbeiten des PWM-Signals.

Das Helligkeitssignal wird vom Helligkeitsregler im Lichtschalterblock erzeugt. Es ist ein sog. PWM-Signal mit 12V-Pegel. Anstelle eines analogen Spannungswertes für die gewünschte Helligkeit wird in schnellem Takt ein binäres 0/1 Signal gesendet. Dabei ist die Umschaltfrequenz zwischen 0 und 1 konstant und liegt im Focus vermutlich irgendwo zwischen 200 Hz und 1.000 Hz. Variiert wird in der Länge der Einschaltzeit. Das Verhältnis zwischen Einschaltzeit und Ausschaltzeit nennt man im PWM-Jargon „Dutycycle“. Je länger die Einschaltzeit, desto heller die Tastenbeleuchtung (Dutycycle bis 100%), je kürzen umso dunkler (Dutycycle runter bis 0%). Um Störsicherheit zu erreichen geht man hier nicht bis auf 100% hoch bzw. 0% runter, sondern bewegt sich in einem Bereich von 10 - 90%. Die Helligkeitsverteilung ist also nicht linear zum Dutycycle. Damit wird erreicht das ein Empfänger des Signals zwischen einem statischen Pegel, welcher z.B. aufgrund einer Störung vorliegt (Kurzschluß nach Masse bzw. Leitungsbruch oder Kurzschluß nach VBatt) und der normalen PWM-Funktion unterscheiden kann.

Der Mikrocontroller hat die Aufgabe das fahrzeugseitige PWM-Signal zu erkennen und den Dutycycle zu bestimmen. Der jeweils aktuelle Wert wird in einer internen Speicherstelle gehalten. Das Radio folgt den eingestellten Helligkeitswerten mit einer gewissen Verzögerung, sodass kleine Schwankungen nicht zum flackern der Beleuchtung führen. Dennoch macht es Sinn nicht immer nur den zuletzt gemessenen Dutycycle für die Zielhelligkeit zu verwenden, sondern die letzten Werte zu speichern und den Mittelwert daraus zu verwenden (Integral).

Die Berechnung findet solange statt wie ein gültiges PWM-Signal am Eingang anliegt. Wechselt dieses dauerhaft nach 0V (GND) ist vermutlich die Zündung aus.

Eine weitere Aufgabe des Mikrocontrollers besteht darin den zuvor ermittelten, fahrzeugseitig eingestellten PWM-Helligkeitswert in Form einer CAN-Botschaft auf den CAN Bus zu senden. Das Schema für diese Meldungen ist hier zu finden: Helligkeit der Tasten- und Hintergrundbeleuchtung des Radios/Navigationssystems

Der Helligkeitswert bietet eine theoretische Auflösung von 1024 Helligkeitsstufen, was in der Praxis natürlich völlig überzogen ist. Wenn man die Helligkeit in 10-20 Stufen einstellen kann ist das völlig ausreichend. Auch das man Hintergrundbeleuchtung und Tastenbeleuchtung getrennt einstellen kann, soll hier nicht berücksichtigt werden.

:!: Der MS-CAN Bus wird fahrzeugseitig nach abschalten der Zündung nach einer Weile automatisch stillgelegt. Hierfür gibt es bestimmte Protokolle (Network-Management) wann und wie das zu geschehen hat. Unser CAN-Sender muss das respektieren, denn würde er einfach weiter senden bliebe der CAN-Bus aktiv und das Fahrzeug könnte nicht in den Tiefschlaf gehen. Das würde zu einem erhöhten Stromverbrauch führen und ggf. die Batterie schwächen.

Eine wichtige Aufgabe des Mikrocontrollers ist es die gesamte Schaltung in einen Energiesparmodus (Tiefschlaf) zu versetzen wenn deren Funktion nicht gebraucht wird. Das ist eine Grundanforderung an alle CAN-Module im Fahrzeug. Diese Aufgabe könnte man entweder über das Vorhandensein des Helligkeits-PWM Signals steuern: „Kein PWM-Signal“ = „Fahrzeug ist aus“ = „Interface in den Tiefschlaf versetzen“. Oder aber durch Aktivität auf dem CAN-Bus: „Keine Aktivität auf dem CAN-Bus“ = „Fahrzeug ist aus“ = „Interface in den Tiefschlaf versetzen“. Und gleiches umgekehrt um aus dem Tiefschlaf wieder in den Betriebsmodus zu wechseln.

Beide Möglichkeiten sind gleich gut. Ohne eingeschaltete Zündung lässt sich das Radio einschalten. Dieses merkt das keine CAN-Bus Signale anliegen und aktiviert automatisch die Tasten- und LCD-Beleuchtung auf volle Stufe. Dazu ist keine Interfacefunktion notwendig.

Nachdem wir nun wissen welche Signale wir verarbeiten und welche wir senden müssen geht es an die Dimensionierung der Hardware.

Auswahl des Mikrocontrollers/Boards

Ich werde das Interface mit einem sehr günstigen „Blue Pill“ Board aufbauen. Dieses beinhaltet einen STM32F103C8 Mikrocontroller, welcher für die Aufgabe hoffnungslos überdimensioniert ist, aber so günstig das es kaum lohnt etwas noch kleineres zu wählen. Zudem ist er leicht zu beschaffen. Ein solches Board ist ab 2€ zu haben.

Der STM32F103 bietet von hause aus einen integrierten CAN-Controller, was in unserem Fall sehr hilfreich ist. Es wird lediglich ein Transceiver-Chip benötigt.

Das Board werde ich etwas modifizieren um den Stromverbrauch zu senken. Besonders die Onboard LEDs kommen runter, die sieht eingebaut ohnehin niemand. Auch der Spannungsregler kann weg, den ersetze ich durch einen besseren. Ebenso wähle ich eine Konfiguration für den Controller welcher nur die Peripheriebausteine aktiviert, welche für die Funktion benötigt werden.

Spannungsversorgung

Die Systembetriebsspannung beträgt 3,3 Volt. Diese realisiere ich mit einem LP2950. Dies ist ein günstiger Festspannungsregler, welcher neben Automotive-Eignung auch noch eine Reihe weiterer guter Eigenschaften bietet:

  1. Er arbeitet in einem Spannungsbereich von 3 bis 30 Volt
  2. Liefert dauerhaft bis zu 100 mA ohne gekühlt zu werden oder zu überhitzen
  3. Besitzt einen extrem kleinen Ruhestrom
  4. Ist intern temperaturkompensiert und arbeitet in einem Temperaturbereich von -40 bis +125 Grad
  5. Ist Kurzschlußfest und Temperaturgesichert

Wichtig bei jeder im Fahrzeug betriebenen Schaltung ist ihre Festigkeit gegenüber Spannungsspitzen, Verpolung und Defekte in der Fahrzeugelektrik.

Eingangsstufe zur PWM-Messung

Hier kommt ein Lieblingsklassiker von mir zum Einsatz. Diese Beschaltung kann auch „spannungsverseuchten“ Signalen stand halten, wie sie im KFZ-Bereich vorkommen können. Das PWM-Signal ist jedoch bereits relativ sauber.

CAN-Sender

Hierfür nehme ich einen TJA1050. Seine Eingänge sind sowohl für 5V als auch für 3,3V TTL-Signale geeignet. Er ist CAN-Seitig kurzschlußfest und Transientensicher und ohnehin für den Automotive-Einsatz konzipiert. Für seine Funktion benötigt man nur wenige externe Bauteile.

  • STM.PA12 (CAN_TX) ⇒ TJA1050.1
  • STM.PA11 (CAN_RX) ⇒ TJA1050.4
  • TJA1050.7 (CAN_HIGH)
  • TJA1050.6 (CAN_LOW)

Anschluß am Fahrzeug

Wer einen Lötkolben richtig herum halten kann, erledigt das durch Eingriff in den Kabelbaum zum Quadlock-Stecker. Eine Plug-n-Play Variante ist mittels eines Zwischensteckers möglich.

Benötigt werden diese 5 Signale:

  • +12V (Pin A-15 vom Quadlock)
  • GND (Pin A-11 vom Quadlock)
  • PWM-Lichtsignal (Pin A-14 vom Quadlock)
  • MS-CAN_HIGH (Pin A-9 vom Quadlock)
  • MS-CAN_LOW (Pin A-10 vom Quadlock)
  • artikel/audio_navigation/pwm_to_can_gateway/start.txt
  • von go4it