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