CAN-Bus

Einleitung

    Der CAN Feldbus (CAN = Controller Area Network) genannte Bus wurde ab 1983 von der Firma Bosch zur Vernetzung im Automobilbereich entwickelt. Er funktioniert nach einem einfachen aber eleganten Prinzip und ist sehr robust gegenüber elektromagnetischen Störungen. Seit seiner Vorstellung im Jahre 1986 wird CAN in vielen industriellen Bereichen eingesetzt, 1996 wurde der Bus von der ISO standardisiert. Die aktuelle Entwicklung findet in dem Industriegremium [CiA] statt.

Nachrichtenübertragung

    Der Data Link Layer definiert das Protokoll. Die Busvergabe geschieht über die Nachrichten, nicht über die Adressen von Sender oder Empfänger. An einem CAN-Bus können prinzipiell beliebig viele gleichberechtigte Teilnehmer angeschlossen werden.
    Jeder von ihnen darf Daten senden, die von allen anderen empfangen werden. Eine Möglichkeit zur direkten Adressierung eines Empfängers gibt es nicht, jede Nachricht enthält neben der Nutzlast eine Identifikationsnummer (ID). Diese legt die Priorität und den Inhalt der Nachricht fest und kann von der Anwendung vorgegeben werden. Innerhalb eines bestimmten Netzes wird man daher verbindliche Regeln für die Nachrichten-ID festlegen.

    Die Busteilnehmer sind selbst dafür zuständig, die Integrität der Daten sicherzustellen, Prioritäten entsprechend umzusetzen und entstandene Kollisionen durch eine spätere Wiederholung zu kompensieren. Die wichtigste Grundlage f¨ur diese Funktionen ist die Codierung der einzelnen Bits. Der Wert 1 wird auf dem Bus rezessiv, 0 hingegen dominant übertragen. Senden zwei Busteilnehmer zur gleichen Zeit unterschiedliche Bits, setzt sich das dominante gegen das rezessive Bit durch.
    Hierzu vergleichen beide Busteilnehmer den Buszustand mit den von ihnen gesendeten Daten. Stimmen sie nicht überein, bricht der unterliegende Sender seine Übertragung ab und wiederholt sie automatisch nach einer gewissen Wartezeit. Auf diese Weise werden die Nachrichten je nach ihrer Priorität durchgesetzt und quittiert. Kollisionen behindern laufende Übertragungen höherer Priorität nicht, dadurch kann eine definierte Latenzzeiten erreicht werden.

    Zusätzlich zu dieser ID enthält eine Nachricht Steuerbits, die Anzahl der enthaltenen Datenbytes, 0-8 Bytes Nutzdaten (payload), eine CRC-Checksumme und ein ACK-Bit.

Quittierung, Verhalten bei Kollision

    Dank der rezessiven und dominanten Bits wird sich diejenige Nachricht durchsetzen, deren ID am kleinsten ist, also in den führenden Bits als erstes eine Null aufweist. Jede gesendete Nachricht muß von mindestens einem Empfänger bestätigt werden. Dazu ist im gesendeten Paket das ACK-Bit rezessiv und wird vom Empfänger dominant überschrieben. Die Quittung kann der Sender erkennen. Erfolgt keine Quittung, gilt die ¨Übertragung als gescheitert und wird später wiederholt. Der CAN-Bus funktioniert somit nur, wenn mindestens zwei Busteilnehmer aktiv sind. Wenn ein Sender sehr viele Fehler feststellt, schaltet er sich nach einer gewissen Zeit passiv, greift also nicht mehr aktiv in den Bus ein. Der Sinn dieser Maßnahme liegt darin, dass eine defekte Station nicht die gesamte Kommunikation blockieren darf. Hilft auch das nicht, trennt sich der Busteilnehmer selbst komplett vom Bus ab.

Netztopologie, Längen, Reflexionen

    Wichtig ist natürlich auch die Frage, wie weit komme ich damit, welche Art von Verdrahtung muß ich bauen. Bei CAN sind neben der Gesamtlänge auch die Art des Netzes (Stern-Topologie, Linientoptologie, Stubs).
    Optimal ist eine Linienstruktur mit je 120 Ohm Abschluß an beiden Enden, nur im Modellbahngbereich hat man das nicht. Regelm findet man z.B. in der Controller Area Network Physical Layer Requirements, slla270.pdf von TI. Das ist aber alles recht mathematisch und wendet sich an den Elektroingenieur.
    Bob Jacobsen hat in der mergcbus folgende einfache Zusammenfassung gegeben:
     - Im Grundsatz lineare Struktur
     - Summenlänge max. 400m
     - Stubs (also Teilstränge ohne Abschluß) zählen doppelt in der Summenberechnung
     - Buchsen (also z.B. für Stecker) werden mit 3m angesetzt.
     - Zwischen zwei Netzteilnehmer oder zwischen Netzteilnehmer und dem nächsten Abzweig muß mind. 0,5m normale Leitung liegen.

CAN 2.0A und CAN 2.0B

    Es gibt zwei Varianten des Protokolls, die sich hauptsächlich in der Länge der Identifikation unterscheiden. Das ältere CAN 2.0A arbeitet mit 11 Bit ID (Standard Frames), CAN 2.0B benutzt hingegen 29 Bit (Extended Frames). Beide Varianten sind kompatibel am Bus.

Physikalische Kodierung

    Auf der untersten Ebene kommt eine NRZ-Codierung und differentielle Signalübertragung zum Einsatz, die Bits werden als konstante Pegel dargestellt. Es erfolgt Bit Stuffing, d.h. falls irgendwann fünf gleiche Bits in einer Sequenz auftreten, fügt der Sender anschließend ein komplementäres Bit ein, um lange konstante Sequenzen zu verhindern. Durch die differentielle Übertragung auf zwei Leitungen ist CAN robust gegen Störungen. Für viele Aufgaben reicht ein Flachbandkabel als Busleitung aus, besser sind verdrillte und geschirmte Kabel. Es verschiedene Belegungen für den Anschlußstecker. Bis zu einer Kabellänge von maximal 40m erreicht der Bus seine Höchstgeschwindigkeit von 1 MBit/s (ISO11898-2 high speed), bei längeren Kabeln sinkt der Durchsatz entsprechend. Stubs (also Verzweigungen) sind zu vermeiden bzw. sollen kurz sein. Auf einem Kilometer sind beispielweise noch 50 kBit/s zu erreichen. Der Bus muß unabhängig von der Datenrate und Kabellänge an beiden Enden terminiert werden, dafür wird ein Widerstand von 120 Ohm zwischen CAN Low und CAN High angeschlossen.

Modellbahnanwendungen

    Der CAN Bus is wegen seiner elektrischen Robustheit und der Nachrichtenpriorisierungen für Modellbahnen interessant. Eingesetzt wird er in folgenden Anwendungen: Zimo, Märklin CS, PC Schitte.
    Leider ist die Kodierung der Nachrichten nicht offen gelegt oder nutzt die Vorteile von CAN nicht aus, so dass sich offene Alternativen etablieren: z.B. CBUS (von MERG) oder openlcb.org