Arduino Mikrocontroller Tutorials - Schnittstellen

CAN Bus

CAN Bus Modul MCP2515

Der CAN ist ein Bussystem welcher hauptsächlich in der Automobilindustrie eingesetzt wird. Inzwischen gibt es mehrere Unterarten die entweder eine geringere Datenrate haben und damit günstiger sind (Low Speed CAN) oder aber auch mehr Nutzdaten pro Botschaft übertragen können (CAN FD Frame) oder eine vergrößere Anzahl von Botschaften enthalten (Extended Identifier). Auf die Unterarten wird hier nicht eingegangen.

Der typische CAN ist ein

Hardware Schnittstelle (Bsp. MCP2515 CAN Bus Modul)

Transceiver (TJA1050)

CAn Bus Modul MCP2515 CAn Bus Modul MCP2515

Ein CAN Transceiver konvertiert die auf dem Tx (Transmit) Pin anliegenden logischen Pegel auf die entsprechenden Pegel des CAN Busses. Tx HIGH mit 5V/3,3V wird zu je 2,5V auf der CAN High und CAN Low Leitung. Tx LOW mit 0V wird zu CAN High 4V und auf der CAN Low Leitung zu rund 1V.

Über den seriellen Rx (Receive) Pin gibt der Transceiver alle auf dem CAN Bus anliegenden konvertierten Pegel zur Weiterverarbeitung aus. Auch die über Tx gleichzeitig selbst übertragenen Pegel werden über Tx rückgelesen.

Can Controller (MCP2515)

Um den Mikrocontroller zu entlasten verwendet man zum Senden und Empfangen von CAN Botschaften einen CAN Controller. Dieser übernimmt die komplette Kommunikation in dem er selbstständig die Tx und Rx Pegel des Transceivers nach dem CAN Protokoll steuert bzw. auswertet. Auch die Arbitrierung, also der Auswahl des Zeitslots abhängig von der Wichtigkeit der Botschaft übernimmt der Controller, sowie die Berechnung und den Vergleich der CRC Checksumme.

Der Mikrocontroller muss nur die Sendebotschaft in die vorgesehenen Register des CAN Controllers schreiben. Auch die empfangenen CAN Botschaften können aus Speicherregister des Controllers jederzeit abgeholt und weiterverarbeitet werden. Die Kommunikation des Mikrocontrollers zum CAn Controller erfolgt über eine SPI Schnittstelle.

Aufbau eines CAN Frames:

CAN Data Frame

Frame Priorisierung

Frame Priorisierung

Der CAN Bus hat kein Master-Steuergerät welches den Datenverkehr regeln kann. Es gibt auch keine gemeinsame zeitliche Folge der gesendeten Frames. Jeder Knoten sendet seine Botschaften allein nach seinem eigenem Programmablauf. Damit es nicht zur Kollision auf dem CAN Bus kommt gibt es eine Frame Priorisierung anhand des Botschafts-Identifiers. Beginnen zwei oder mehr Knoten nach dem IFS (Inter Frame Space) zu senden vergleicht jeder Sendeknoten gleichzeitig den Buspegel. Sender der Knoten ein rezessives Bit (=1) und ein anderer Knoten hat den Bus dominant auf 0 gezogen beendet der erste Knoten seine Sendeversuch und holt diesen später nach. Je niedriger der Identifier desto priorisierter ist seine Botschaft.

Arten von CAN Frames

Data Frame

Data Frame ist der Standard CAN Frame mit dem die Botschaften regelmäßig übertragen werden (siehe Abbildung im vorigen Abschnitt)

Remote Frame

Der Remote Frame dient zum Anfordern einer benötigten Botschaft von einem anderen Knoten. Im Gegensatz zum kompletten Data Frame ist das RTR Bit auf 1 und der Payload nicht vorhanden.

Error Frame

Ein Error Frame wird von einem Knoten gesendet wenn eine Botschaft als fehlerhaft erkannt wird. Schon während des Sendevorgangs gleich nach dem erkannten fehlerhaften Bit wird der Bus für 6-12 Bits auf LOW gezogen. Nach 11 Bit Busruhe kann eine neue Botschaft gesendet werden.

Overload Frame

Ein Overload Frame sendet ein Knoten wenn er mehr Zeit für die Verarbeitung der Botschaft benötigt. Genau nach dem EOF zieht der Knoten den Bus für 6-12 Bit auf LOW. Anschließend gibt es eine Busruhe von 8 Bit bevor der IFS beginnt.

Auswerten eines CAN Verlaufs mit dem Oszilloskop

Damit sich der Empfänger eines Frames auf die Busgeschwindigkeit des Senders einstellen kann werden Taktflanken benötigt. Damit die Zeitdauer zwischen zwei Taktflanken nicht zu lange dauert wird spätestens nach 5 gleichen Bit ein Gegenbit (=Stuff-Bit) gesendet. Diese Stuff-Bit bleiben bei der Auswertung unberücksichtigt.
Wichtig! Ein Stuff-Bit wird immer nach 5 gleichen Bit gesendet, auch wenn danach sowieso ein entgegengesetztes Bit gesendet wird.

CAN Bus Verlauf auf dem Oszilloskop