CAN Bus (Mega128 CAN und AVR32)

 

Der CAN-Bus (engl. Controller Area Network) ist ein asynchrones, serielles Bussystem und gehört zu den Feldbussen. Er ist nach ISO 11898 international standardisiert und definiert die Layer 1 (physikalische Schicht) und 2 (Datensicherheitsschicht).

 

Der CAN-Bus wurde 1983 bei der Fa. Bosch entwickelt. Ursprünglich wurde der CAN-Bus für den Automobilsektor entwickelt, da mit zunehmender Elektronik im Fahrzeug die Kabelbäume immer größer wurde und eine Lösung zur Gewichts-/ und Kostenreduzierung gefunden werden musste. Mittlerweile wird dieses Erfolgreiche und sehr sichere Konzept nicht nur in der Automobilindustrie eingesetzt, sonder auch in den Bereichen: Automatisierung, Flugzeugbau, Raumfahrt und auch in der Medizintechnik.

 

 Das C-Control Handbuch kann aufgrund der Komplexität keine Einführung in den CAN Standard bieten. Vorwissen über den CAN Standard und die Full CAN Message Objects werden an dieser Stelle vorausgesetzt. Deshalb ist die Arbeit mit dem CAN-Bus nicht direkt für Anfänger im Bereich der Embedded Controller zu empfehlen. Eine gute Zusammenfassung über CAN und Message Objects bietet das "Atmel AT90CAN" Reference Manual Kapitel 19, "Controller Area Network - CAN".

 

MEGA128CAN

 

Die CAN-Signale der C-Control Pro MEGA128CAN stehen an den Pins X4_13 (CANL) und X4_14 (CANH) zur Verfügung.

 

AVR32Bit

 

Im C-Control Pro AVR32 arbeitet ein CAN Controller mit zwei Kanälen. Aber nur am ersten Kanal ist ein Transceiver angeschlossen, der auch auf dem Applicationboard herausgeführt ist. Auf dem Mainboard ist CAN1 über eine Buchsenleiste herausgeführt (ohne Transceiver). Die Leitungen CANH und CANL sind beim Modul am Connector X1 herausgeführt. Um den zweiten Kanal nutzen zu können, muss der Anwender selber einen Transceiver anschließen. Als Beispiel kann das Datenblatt des AVR32 Moduls dienen. Der 2. Controller liegt auf Port 1 (CAN_TX, PA00) und Port 2 (CAN_RX, PA01).

 

Netzwerk

 

Sie können mehrere CAN-Bus Teilnehmer über die Pins CAN-H und CAN-L vernetzen. Der erste und der letzte Teilnehmer muss mit einen 120Ohm Widerstand abgeschlossen werden. Als Datenkabel sollte ein verdrilltes Kabel (engl. Twist and pair) zur Verwendung kommen. Für kürzere Strecken von wenigen Zentimetern bis max. 2 Meter, kann auch ein einfaches Parallelkabel (engl. Twin lead) verwendet werden.

 

 

Die UNIT unterstützt den Low-/ sowie Highspeed Bus (MEGA128CAN 10 kbit/s bis 1 Mbit/s, AVR32Bit 50 kbit/s bis 1 Mbit/s). Die Theoretischen Leitungslängen je nach Busgeschwindigkeit entnehmen Sie der unten aufgeführten Tabelle.

 

Geschwindigkeit

Leitungslänge

1 Mbit/s

40 m

Bis 500 kbit/s

100 m

Bis 125 kbit/s

500 m

Kleiner 125 kbit/s

Bis zu 1000 m

 

Die Leitungslängen sind stark abhängig von den verwendeten Leitungen und Anzahl der Teilnehmer. Es ist möglich ein „Twist-Pair-Kabel“ mit einem Wellenwiderstand von 108 bis 132 Ohm zu verwenden. Es können maximal 32 UNITs an einem Bus betrieben werden. Bei der Inbetriebnahme des Busses beginnt man am besten bei der, passend zur Kabellänge, theoretischen maximal zulässigen Geschwindigkeit und senkt diese ab, wenn keine Übertragung stattfindet oder zu viele Fehler (Paketfehler) auftreten.

 

Der Controller unterstützt das “Base frame format” CAN 2.0A (11 Bit-Identifier) und das Extended frame format” CAN 2.0B (29 Bit-Identifier).

 

Um den CAN Bus in eigenen Projekten einsetzen zu können, ist es unabdingbar das CAN Datenformat und die technischen Details des CAN Bus zu verstehen. Hintergrundinformationen sind in Büchern und in der Wikipedia zu finden: http://de.wikipedia.org/wiki/Controller_Area_Network

 

Message Objects

 

Der aktive CAN Bus arbeitet mit 15 (MEGA128CAN) oder 16 (AVR32Bit) unabhängigen Message Objects (MOb) mit denen man Nachrichten mit bestimmten Identifiern senden und empfangen kann. Hierzu werden mit CAN_SetMOb () die Message Objects auf die entsprechende Operation parametrisiert.

 

 Message Objects mit einer niedrigen MOb Nummer haben immer Vorrang vor einer höheren MOb Nummer. Wenn man zwei MObs hat, die eine bestimmtes Paket empfangen würden, wird es immer von dem Message Object empfangen was die niedrigere MOb Nummer hat.

 

CAN Protokoll

 

Der CAN Bus Controller kann gleichzeitig normale Pakete (CAN 2.0A) und erweiterte Pakete (CAN 2.0B) verarbeiten. CAN Bus Identifier werden als 32-Bit dword (ULong) übergeben. Je nach Typ der Pakete ist ein Identifier 11-Bit (V2.0 part A) oder 29-Bit lang (V2.0 part B). Die ungenutzten Bits werden dabei ignoriert. Die maskID bestimmt, welche Pakete bei einem bestimmten Identifier (ID) empfangen werden. Nur die Bits in der maskID die eins sind, werden bei einem Bitvergleich zwischen eingestelltem Identifier und der ID des eingehenden Paketes überprüft.

 

automatic reply

 

Ist ein Message Object auf automatic reply gestellt, so übernimmt der MOb den Data Length Code (DLC) von dem eingehenden Remote Trigger Paket. D.h. der Sender des Trigger Paketes bestimmt über den mitgesendeten DLC die Anzahl der Daten Bytes die in dem Reply Paket gesendet werden.

 

Message FIFO

 

Bei der Initialisierung der CAN Bibliothek stellt der Benutzer RAM für einen Message FIFO zur Verfügung, in dem alle eingehenden CAN Pakete gespeichert werden. Damit kann man dann die empfangenen Nachrichten asynchron entgegen nehmen.