CAN-Bus

in Arbeit


zurück zu Interfaces , Elektronik , Homepage


 
Einleitung

Kabel und Pegel

Prinzip

CAN-Bus im KFZ

CAN-Bus und PIC-Microcontroller




das CAN-Modul im PIC-Microcontroller 

zurück



Einleitung

Controller Area Network: Das ist ein schneller Bus zum Datenaustausch zwischen Schaltkreisen. Dieser Bus wird vor allem in der KFZ-Technik eingesetzt, da er sehr störfest ist. Der CAN-Bus eignet sich vor allem zur Verbindung vieler Geräte, die jeweils nur kleine Datenmengen übertragen wollen.

nach oben

Kabel und Pegel

Der CAN-Bus ist eine 2-Drahtleitung, an die beliebig viele CAN-Geräte (Knoten = Nodes) parallel angeschlossen werden können. Die beiden Leitungen des Busses heißen CANH und CANL. Der Bus ist an beiden Enden mit jeweils 120 Ohm abgeschlossen (terminiert). Can-Bus-Verkabelung

Can-Datenrate Der Bus darf bis zu 40m lang sein, wobei 1 MBit/s (Mbps) übertragen werden kann. Ein längerer Bus ist möglich, wenn die Datenrate verringert wird.

Die Taktrate ist nicht festgelegt, das Produkt aus der Buslänge (in Metern) und der Taktrate (in kbps) darf aber 40000 nicht überschreiten. Der Entwickler legt für "seinen" Bus einen Takt fest, an den sich dann alle am Bus angeschlossenen Geräte halten müssen.

Die Werte "0" und "1" entsprechen auf dem Bus bestimmten Spannungsdifferenzen zwischen den beiden Leitungen. Eine "1" (recessive state) entspricht einer Spannungsdifferenz von <0,5V. Eine "0" (dominant state) entspricht einer Differenz von >0,9V. Etwas genauere Angaben liefert die unten stehende Tabelle.

In einem typischen CAN-Bus liegen beide Leitungen bei "1" auf 2,5V. Im "0"-Zustand steigt CANH auf 3,5V während CANL auf 1,5V fällt.



Warum nennt man die beiden Zustände auch "Dominant" (0) und "Recessive" (1) ? Im Ruhezustand verbinden die Abschlusswiderstände des CAN-Busses die beiden Leitungen mit ihren 120 Ohm, und sorgen so dafür, dass die Pegel in etwa gleich sind. Dieser Ruhezustand entspricht der "1", und erfordert also kein aktives Eingreifen eines CAN-Treibers. Um eine "0" auszugeben, muss der Treiber aber die beiden Leitungen aktiv hoch (CANH) beziehungsweise herunter (CANL) ziehen.  Dieses Prinzip ermöglicht es, dass mehrere CAN-Treiber von mehreren Geräten (Nodes) an den Bus angeschlossen werden können, ohne "gegeneinander" zu treiben. (Insofern erinnert es an eine open-collector-Schaltung.) Falls mehre Treiber gleichzeitig auf den selben Bus treiben, dann wird sich der "1"-Zustand nur ergeben, wenn alle Treiber eine "1" ausgeben wollen (Recessive). Sobald aber auch nur ein einziger Treiber eine "0" ausgibt, dann liegt der Bus sofort auf "0". Dieser Zustand wird sich also immer durchsetzen, er ist Dominant.
Spannungspegel

Parameter

min [V]

max [V]
Gleichspannung an CANH und CANL

-3

+32
Ausgangsspannung bei "Recessive"

+2.0

+3.0
Differenz-Ausgangsspannung bei "Recessive"

-0.5

+0.05
Differenz-Ausgangsspannung bei "Dominant"

+1.5

+3.0
CANH-Ausgangsspannung bei "Dominant"
+2.75
+4.5
CANL-Ausgangsspannung bei "Dominant"
+0.5

+2.25
Differenz-Eingangsspannung bei "Recessive"
-1.0

+0.5
Differenz-Eingangsspannung bei "Dominant"
+0.9

+5.0

Das wird für die "Arbitration" (die Empfangsbestätigung) genutzt. Wenn ein Gerät seine Daten auf dem Bus gibt, dann will es auch wissen, ob ein anderes Gerät diese Daten empfängt. Für diese Empfangsbestätigung sind im zu sendenden Bitmuster des CAN-Protokolls einzelne Bits vorgesehen (ACK). Der Sender sendet solche Bits immer mit 1-Pegel. Ein Empfänger kann nun bestätigen, dass er die Daten empfängt, indem er gleichzeitig den Bus auf "0" treibt. Während das sendende Gerät also eine "1" ausgibt, zieht das eigentlich empfangende Gerät den Bus kurz auf "0". Das registriert das sendende Gerät und arbeitet zufrieden weiter. (Für die Dauer dieses einen Bits ist die Datenflussrichtung also umgekehrt.) Wenn mehrere Geräte die Daten empfangen, dann können sie alle gleichzeitig den Bus zur Bestätigung auf "0" treiben, ohne dass es dabei zu Problemen kommt.

Bei einer Datenrate von 1 MBit/s (Mbps) ist es gar nicht so einfach, innerhalb der Zeit für 1 Bit die Empfangsbestätigung zum Sender zurückzusenden. Hier können Probleme auftreten, wenn Sender und Empfänger an den entgegengesetzten Enden eines sehr langen CAN-Busses sitzen. Das ist die Hauptursache für die Längenbegrenzung des Busses (auf 40 Meter).


nach oben

Prinzip

Alle an einen CAN-Bus angeschlossenen Geräte senden periodisch die Daten in den Bus, die andere Geräte von ihnen benötigen. Dafür übernimmt das Gerät den Bus, sendet einen Data-Frame und gibt den Bus wieder frei. Ein Dataframe beinhaltet (neben dem nötigen Protokolloverhaed):
Der Identifier ist ein Bezeichner (z.B. "Außentemperatur") für diese Daten und ist 11 Bit (Standard-Data-Frame) oder 29 Bit (Extendet-Data-Frame) lang. Der Datensatz enthält den Wert der Daten (z.B. "25 Grad-Celsius") und ist maximal 64 Bit lang. Die Prüfsumme dient der sicheren Datenübertragung und ist 15 Bit lang.

Je niedriger der Identifier eines Datenframe (also sein numerischer Wert), um so wichtiger ist er. Wenn zwei Geräte gleichzeitig senden wollen, dann erhält das Gerät den Bus, welches den Dataframe mit dem kleineren Identifier senden will. Das andere Gerät wartet dann noch ein wenig und versucht sein Glück später noch einmal.

Jedes am Bus angeschlossene Gerät kann die Daten mitlesen. Erkennt es am Identifier, dass die Daten von Interesse sind, kann es den Datensatz lesen (, den Empfang bestätigen) und benutzen.


Polling
Normalerweise sendet ein Gerät also selbständig in regelmäßigen Abständen seine Daten. Es besteht aber auch die Möglichkeit, ein Gerät abzufragen. Das ist dann sinnvoll, wenn die Daten dieses Gerätes nur selten benötigt werden. Regelmäßig von ihm gesendete Daten würden dann nur den Bus belasten, und niemand würde zuhören. So ein Gerät sendet seine Daten dann besser nur auf Abfrage.


nach oben

CAN-Bus im Kfz

Eines der Haupteinsatzgebiete des CAN-Busses sind Fahrzeuge. In den meisten modernen PKW befinden  sich zwei CAN-Busse. Einer (der Powertrain-Bus) dient der Verbindung aller wichtiger Steuergeräte im Bereich des Antriebs, der andere (der Comfortbus) verbindet all die kleinen Helferlein, die zum Wohlbefinden von Fahrer und Passagieren beitragen.
Beide Busse sind über einen Gateway (also nicht direkt elektrisch) verbunden. Welche Taktraten der jeweilige Bus verwendet, ist dem Hersteller überlassen. Der Powertrain-Bus hat üblicherweise einen hohen Takt von  500 kbps oder 1 Mbs, während der Comfort-Bus mit ca. 100 kbps bis 150 kbps läuft.

Manipulationssicherheit
CAN ist ein Multi-Master-Bus. Jeder Teilnehmer kann beliebige Daten in den Bus senden. Sollte ein KFZ-Dieb von außen Zugang zum CAN-Bus erlangen, könnte er dort ein zusätzliches Gerät anklemmen, das Befehle in den Bus sendet, die zum Öffnen der Türen oder zur Deaktivierung der Wegfahrsperre führen könnten. Aus diesem Grunde wird in den von außen leicht zugänglichen Bereichen (z.B. den Außenspiegeln) der CAN-Bus nicht verwendet. Hier setzt man den LIN-Bus ein, der genau einen Master und viele Slaves kennt. Ein hier zusätzlich angeklemmtes Gerät wird vom LIN-Bus-Master ignoriert, und kann keinen Schaden anrichten. Der LIN-Bus-Master ist wiederum am CAN-Bus angeschlossen.


Für den Bastler eröffnet der CAN-Bus im KFZ natürlich große Möglichkeiten. Es lassen sich alle möglichen Parameter am Bus einfach abgreifen und aufzeichnen. Denkbar ist z.B. auch der Bau eines Gerätes, das mit den Tasten am Lenkrad gesteuert wird und als Display das Display des Bordcomputers benutzt.
Voraussetzung sind lediglich Kenntnisse über die fahrzeugtypischen CAN-Bus-Daten sowie der physische Zugang zum CAN-Bus. Dafür eignen sich z.B. der OBD-Steckverbinder und manchmal auch der Radioanschluss.

Wer am CAN-Bus eines Autos herumspielt, der kann natürlich auch Fehler machen, und die Kommunikation der Steuergeräte des Autos behindern. Betrifft das nur den Comfort-Bus, kann man das sicherlich verschmerzen, aber ein Eingriff in den Powertrain-Bus kann gefährlich werden.


nach oben

CAN-Bus und PIC-Microcontroller

Um einen Mikrocontroller mit dem CAN-Bus zu verbinden, benötigt man einen CAN-Bus-Controller (z.B. MCP2510) und einen CAN-Bus-Treiber (Transceiver, z.B. MCP2551). Während der Treiber nur die Leitungspegel erzeugt, kümmert sich der Controller um den Buszugriff sowie die parallel-seriell- und seriell-parallel-Wandlung u.ä.
Sowohl Treiber als auch
Controller gibt es als separate Chips, aber es gibt auch PIC-Microcontroller mit integriertem CAN-Controller. Solch eine PIC-Microcontroller benötigt nur noch einen externen CAN-Bus-Treiber-Schaltkreis.


 
Die Programmierung solch eines PIC wird durch die verfügbaren C-Bibliotheken stark vereinfacht. Aus diesem Grunde empfehle ich prinzipiell die Nutzung von PIC-Microcontrollern mit integriertem CAN-Controller (oder ECAN-Controller).

nach oben



weiter zum CAN-Modul im PIC-Microcontroller

nach oben

zurück zu Interfaces , Elektronik , Homepage

Autor: sprut
erstellt: 15.01.2008
letzte Änderung: 20.01.2008