Single-Wire-CAN // Saab 9-3 I-Bus // GMLAN

Ich versuche, ein Kombiinstrument eines Saab 9-3 Baujahr 2008 zu steuern. Es hat 2 Pins, die für I-Bus markiert sind (beide Drähte sind grün, der Durchgangstest zeigt, dass sie wie hier gezeigt miteinander verbunden sind:BUS

Manche Seiten nennen diesen Instrumentenbus auch GMLAN . Ich hatte keine Informationen darüber, wie dieser Bus funktioniert, außer "die Datenübertragungsrate des I-Bus beträgt 33 kbit / s" und:Geben Sie hier die Bildbeschreibung ein

Also habe ich das Gerät zerlegt und nach einigen IC-Markierungen gesucht, ich habe einen AU5790D gefunden, der ein Single-Wire-CAN-Transceiver ist. Es gibt eine Seite mit verschiedenen CAN-IDs und Nachrichten für einen Saab 9-3 von 2001. (Sie haben den Bus geändert, aber hoffentlich die Codes beibehalten.) Reverse-Engineering des Saab 9-3 Instrumentation Bus (I-BUS)

Nach einigen Recherchen zu den Eindrahtbussen hat sich herausgestellt, dass mein Seeedstudios Can Shield hier unbrauchbar ist. Ich habe den gleichen Chip bestellt, damit ich ein 2-Knoten-Netzwerk emulieren kann. Meine Fragen sind:

  • Ist es möglich, den Transciever ohne einen spezifischen CAN-Controller zu verwenden? (Direkt mit einem Arduino verdrahtet)
  • (Falls nicht) Welche Art von CAN-Controller muss ich zwischen der MCU und dem Transceiver verwenden?

Antworten (1)

Die meisten kleinen Mikrocontroller (wie die auf dem Arduino verwendeten) sind nicht schnell genug, um CAN in Software zu implementieren. Aus diesem Grund verwendet das CAN Shield den CAN-Controller-IC MCP2515 .

Ich empfehle eine von zwei Möglichkeiten:

  1. Verbinden Sie einen MCP2515-Chip mit Ihrem Arduino und verwenden Sie den CAN-Transceiver AU5790 . Tun Sie dies entweder auf einem Steckbrett oder entwerfen Sie eine Leiterplatte.

  2. Verwenden Sie die Arduino CAN-Abschirmung, aber löten Sie einige Drahtbrücken von den TXD-, RXD- und GND-Leitungen auf eine andere Platine mit einem AU5790 darauf.

  3. Laden Sie den Schaltplan und die PCB-Designs für das Arduino CAN-Schild herunter und passen Sie das Design so an, dass es den AU5790 anstelle des MCP2551 akzeptiert.

Leider scheint der AU5790 nicht Pin-kompatibel mit dem MCP2551 zu sein. Es ist fast so, was schade ist.

Danke schön. Ich habe auch einen MCP2515 bestellt (+ die für diese Schaltung erforderlichen zusätzlichen Komponenten). Hoffentlich haben sie die IDs und Nachrichten nicht geändert. Wenn der AU5790 zuerst ankommt, werde ich auch die Jumper-Draht-Methode ausprobieren.
Nun, der Aufbau der Schaltung war einfach, aber es funktioniert nicht. Alles wird gemäß dem Schema von Seeedstudios durchgeführt, aber das Arduino sagt "CAN init failed", es kann den MCP2515 nicht initialisieren, ich habe 2 davon ausprobiert, keiner von ihnen scheint zu funktionieren. Also blieb dieses Projekt hängen. Irgendwelche Vorschläge?
Sie können einen Zweidraht-Transceiver verwenden, um Single-Wire-CAN zu decodieren. Schließen Sie die einadrige GMLAN-Leitung an CAN_H des Transceivers an. CAN ist differentiell, sodass Sie CAN_L auf dem Zweidraht-Transceiver einfach floaten lassen können. Ich habe dies getestet. Ohne einen geeigneten GMLAN-Low-Speed-Transceiver können Sie die Hochspannungs-Wake-ups jedoch nicht bewältigen, aber das sollte kein Problem sein. Als Empfänger müssen Sie sie nicht handhaben (gehen Sie nur nicht schlafen). Wenn Sie wirklich ein Hochspannungs-Wake-up senden mussten (das sollten Sie nicht), können Sie den Bus einfach für einen Moment manuell mit der Batterie kurzschließen, und das wird den Bus aufwecken.
Wenn Sie etwas bauen, bei dem Sie die Elektronik kontinuierlich steuern möchten, benötigen Sie einen geeigneten GMLAN-Low-Speed-Transceiver wie den 5790, damit Sie mit Hochspannungs-Wake-ups umgehen können. Wenn Sie nur darauf herumstochern, können Sie wahrscheinlich mit einem Zweidraht-Transceiver davonkommen.