| www.kfztech.de | Technik |
CAN Grundlagen 3 - Bits und Byte |
Signale
Ein analoges Signal kann jeden Wert zwischen 0% und 100% annehmen. Das Signal ist also stufenlos. Der Verlauf eines digitalen Signals ist stufenförmig, es wurde aus dem analogen Signal aufbereitet. Ein binäres Signal kennt nur die Zustände 0 und 1 bzw. High und Low.
In der Computertechnik gibt es drei wichtige Zahlensysteme: das dezimale, das binäre und das hexadezimale Zahlensystem.
Ein Bit (binary digit) ist die kleinste Informationseinheit (ein Schaltzustand pro Zeiteinheit) in einem Datenverarbeitungssystem. In der Elektronik kann diese Information nur den Wert 0 oder 1 bzw. „ja“ oder „nein“ haben.
Zum Datenaustausch über CAN werden Informationen in einer festgelegten Weise strukturiert: Die grundlegende Informationseinheit ist das "Signal". Es kann unterschiedliche Wertebereiche umfassen: Wenigstens ein Bit, z. B. "Signal=1" bedeutet "Bremse betätigt" bzw. "Signal=0" bedeutet "Bremse nicht betätigt", aber auch 16 oder mehr Bit, z. B. für "Motordrehmoment" oder "Fahrzeuggeschwindigkeit". Für jedes Signal muss eine Übersetzung im "Data Dictionary" dem Wörterbuch des Herstellers, eindeutig festgelegt sein.
Bei zwei Bits gibt es vier verschiedene
Varianten. Jeder Variante kann eine Information zugeordnet werden, die für alle
Steuergeräte verbindlich ist. Als Beispiel dient der Fensterheber im Türmodul.
Kommt das Signal erstes Bit 0 V und zweites Bit ebenfalls 0V vom Türmodul, so
lautet die Information „Fensterheber befindet sich gerade in Bewegung“.
| Mögliche Variante | 2. bit | 1. bit | Information Fensterheber |
| eins | 0 Volt | 0 Volt | in Bewegung |
| zwei | 0 Volt | 5 Volt | in Ruhe |
| drei | 5 Volt | 0 Volt | im Fangbereich |
| vier | 5 Volt | 5 Volt | in Blockierneigung |
Formel: Anzahl der Varianten = 2n (n = Anzahl der Bits)
Beispiele von Signal Strukturierungen
1) Ein Motordrehmoment wird auf CAN mit 12 Bit ($120)
dargestellt, d. h. es sind ganze Zahlen von 0 bis 4095 möglich. Die Umrechnung
in das reale Drehmoment erfolgt nach der Vorschrift: Drehmoment = ((CAN-Wert
x 0,25) 200) Nm
Damit sind Drehmomente von 200 Nm bis 823,75 Nm bei einer Auflösung von 0,25 Nm
darstellbar.
2) Signal "Aktueller Gang" des AT-Getriebes ($ 320-4
Bit):
"0" bedeutet Gang wird gerade gewechselt 0 0 0 0 0 0 0 0 0 0 0 0
"1" bedeutet 1. Gang 0 0 0 0 0 0 0 0 0 0 0 1
"2" bedeutet 2. Gang 0 0 0 0 0 0 0 0 0 0 1 0
"3" bedeutet 3. Gang 0 0 0 0 0 0 0 0 0 0 1 1
"4" bedeutet 4. Gang 0 0 0 0 0 0 0 0 0 1 0 0
"8" bedeutet Rückwärtsgang 0 0 0 0 0 0 0 0 1 0 0 0
"9" bedeutet Neutral
Alle anderen darstellbaren Zahlen von "0" bis "2047" dürfen nicht verwendet
werden.
Achtung! Alle Beispiele sind mehr oder weniger frei erfunden, die Umrechnung ist
nicht für alle Fzg-Projekte gleich!
Mehrere Signale werden zu einem "Datenrahmen" (engl. Frame) zusammengefasst. Ein solcher Frame ist die kleinste Datenpackung, die über CAN verschickt werden kann. Ein Frame hat mindestens kein, maximal acht Datenbytes. Im Data Dictionary wird festgelegt, welche Signale der Frame enthält und wo sie angeordnet sind.
Umwandeln des Binären Codes in eine Dezimalzahl
|
Codestelle |
|||||||
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
2er Potenz |
|||||||
|
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
|
ergibt |
|||||||
|
128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
|
Beispielcode: 01001110 |
|||||||
|
0 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
|
Für jede Stelle kann eine 1 (gesetzt) oder 0 (nicht gesetzt) vergeben werden |
|||||||
|
0 |
64 |
0 |
0 |
8 |
4 |
2 |
0 |
|
Es werden nur die mit 1 gesetzten Stellen mit dem oben eingetragenen Wert „gefüllt“ |
|||||||
|
Der Dezimalwert ist die Summe aller Positionen Hier ist das: 64 + 8 + 4 + 2 = 78 |
|||||||
Binär codierte Dezimalzahl
Für die Umwandlung von größeren Zahlen in Zahlen eines anderen Zahlensystems
ist ein größerer Rechenaufwand erforderlich. Durch eine codierte Darstellung von
Teilen der Zahl lässt sich der Aufwand für die Umwandlung verringern. Die für
die codierte Darstellung benötigte Stellenzahl ist jedoch größer als bei einer
direkten Umwandlung, dafür aber übersichtlicher. Die Dezimalzahlen können in
jeder Stelle 10 verschiedene Ziffern aufweisen. Für die binäre Darstellung von
10 Elementen sind 4 Stellen erforderlich. Eine binär codierte Dezimalzahl hat
daher je Stelle der Dezimalzahl eine binäre Vierergruppe.
Beispiel Umwandlung der Dezimalzahl 316 in eine binär codierte Dezimalzahl
| 3 | 1 | 6 |
| 0011 | 0001 | 0110 |
Die binär
codierte Dezimalzahl 316 besteht in diesem Fall aus drei Zahlengruppen zu je
vier Stellen.
Es werden im binär codierten Zahlensystem nicht alle Bitkombinationen
ausgenutzt, da das dezimale Zahlensystem ja nur 10 Ziffernzeichen hat.
Damit alle Vierergruppen ausgenutzt werden können, wurden für die, im binär
codiertem Dezimalsystem verbotenen Codes, weitere Zeichen aus dem Alphabet
eingeführt.
Die Basis für das Hexadezimalsystem ist 16. In einem Byte kann eine zweistellige Hexadezimalzahl codiert werden.
| Beispiel: Z (16) = C4 | Der dezimale Wert ist |
| Hexadezimalzahl C 4 | C * 16 = 192 |
| Binär codiert 1100 0001 | + 4 * 1 = 4 |
| A = 10, B=11, C=12, D=13, E=14, F=15 | 192 + 4 =196 |
Wenn sich in einer Hexadezimalzahl ein Buchstabe befindet,
ist es einfach diese Zahl als Hex-Zahl zu erkennen. Bei einer Zahl mit Ziffern
ist das Erkennen einer Hex-Zahl nicht möglich. Für eine eindeutige Zuordnung ist
die Schreibweise einer Hex-Zahl mit einem h als Postfix oder $ als Prefix
versehen.
Beispiele: $FE = 254 (15*16+14*1); $12 = 18 (1*16+2+1);
22h = 34 (2*16+2*1); ABh = 171(10*16+11*1)
Ein Byte ist aus acht Bits zusammengesetzt. Es lassen sich mit einem Byte 256 unterschiedliche Zeichen darstellen.
1 Kilobyte (KB) = 210 Bytes = 1024 Byte
1 Megabyte (MB) = 220 Bytes, also 1024 KB (1.048.576 Bytes)
1 Gigabyte (GB) = 230 Bytes, also 1024 MB (1.073.741.824 Bytes)
Die
Umrechnung entspricht nicht genau dem Faktor 1000, sondern dem Faktor 1024! CAN nutzt eine
Non-return-to-zero-Codierung (NRZ). Dabei wird einem Bit genau
ein Zustand des Logikpegels zugeordnet, low = 0 und high = 1. Mehrere gleiche
Bits hintereinander erscheinen auf dem Bus also als ein entsprechend längerer
gleichbleibender Pegel.
Da bei CAN kein Takt übertragen wird, wird grundsätzlich nach fünf
gleichen Bits ein sogenanntes Stopfbit (Stuffbit) eingefügt.
Der Low-Pegel ist auf den CAN-Bus dominant. Wenn auf den Bus gleichzeitig
rezessive High-Pegel und dominante Low-Pegel gesendet werden, erscheint auf dem
Bus der Low- Pegel.
Identifier und Arbitrierung
Im CAN-Bus sind alle Teilnehmer gleichberechtigt, das bedeutet, dass bei einen zufälligen Zugriff auf den Bus jeder Teilnehmer, sobald der Bus frei ist, senden kann. Es wird ein nachrichtenorientiertes Protokoll gesendet. Ein Teilnehmer am CAN-Bus hat nicht, wie sonst üblich, eine Adresse. Zur Identifizierung von Nachrichten wird ihre Kennung, der Identifier gesendet. Das heißt, jede Nachricht kann von jedem Teilnehmer empfangen werden.
Da der Zugriff auf den Bus zufällig erfolgt, kann es vorkommen, dass mehrere Teilnehmer gleichzeitig den Sendevorgang beginnen.
Es muss entschieden werden, wer zuerst an der Reihe ist. Das Datenprotokoll mit der höchsten Priorität wird zuerst gesendet. So ist das Datenprotokoll vom Steuergerät ABS aus Sicherheitsgründen wichtiger als das vom Steuergerät Getriebesteuerung. Jedem Datenprotokoll ist entsprechend seiner Priorität im Statusfeld ein Code (Identifier), bestehend aus 11 Bits zugeordnet. Dabei hat jedes Bit einen Wert, dem eine Wertigkeit zugeordnet ist Der Identfier arbeitet auf der Grundlage der Dominanz des Low-Pegels. Die Teilnehmer senden den Identfier ihrer Nachricht, bis diese sich in einem Bit unterscheiden. Der Teilnehmer, der in diesem Augenblick einen rezessiven High-Pegel sendet, bemerkt, dass das von ihm gesendete Signal nicht dem entspricht, was nun auf dem Bus anliegt. Er beendet den Sendevorgang, bis der andere Teilnehmer das Übertragen seiner Nachricht abgeschlossen hat. Derjenige Teilnehmer mit dem kleineren Identifier hat die höhere Priorität und setzt sich durch und wird übertragen. Teilnehmer mit Nachrichten niederer Priorität, müssen ihre Botschaften anschließend erneut senden. Man dient diesen Vorgang Arbitrierung.Der Vorteil der sich daraus ergibt ist, dass Empfangsstationen hinzugefügt werden können, ohne Veränderungen an der Soft- und Hardware vornehmen zu müssen. Der 11 bits lange Identfier beim CAN ermöglicht 2048 verschiedene Nachrichten. Jeder Identfier darf nur einfach verwendet, das heißt von nur einem Teilnehmer gesendet, werden.
Signalpegel im CAN - Bus
am Beispiel von BMW
|
Spannungspegel K - CAN (BMW) Wenn der Spannungspegel des CAN - Low von High (4,0 V) auf Low (1,0 V) wechselt, so ist das eine logische 0. Wechselt der Spannungspegel wieder auf High (4,0 V), so ist das eine logische 1. Der Spannungspegel des CAN - High ist immer spiegelbildlich zum CAN - Low. |
|
|
Spannungspegel PT - CAN (BMW) Im nicht aktiven Zustand des Busses befindet sich der Buspegel von Low und High auf 2,5 V (logische 1). Wird nun der Bus aktiv, so wechselt der Spannungspegel des CAN - Low auf Low (1,0 V). Der CAN-High hingegen wechselt auf High (4,0 V). Dies bedeutet eine logische 0. |
Bitzeit und Übertragungsrate
Die Übertragungsgeschwindigkeit wird in Form der Übertragungsrate angegeben. Diese gibt die maximale Anzahl der übertragbaren Bits in einer Sekunde an. Somit ist die Einheit der Übertragungsrate "Bits pro Sekunde", also "bits/s".
Für die Berechnung der Übertragungsrate spielt die Zeit, die ein einzelnes Bit für die Übertragung benötigt (die so genannte "Bitzeit") eine wesentliche Rolle. Da solche Bitzeiten nur Sekundenbruchteile betragen, wird die Bitzeit in "Mikrosekunden" (µs) angegeben. Eine Mikrosekunde ist bekanntlich der millionste Teil einer Sekunde. Wenn man die Bitzeit kennt, lässt sich die Übertragungsrate einfach berechnen.
Übertragungsrate = 1 Bit / Bitzeit
für Ausbildung
und Schule:
Schulungsstand CAN-LIN-BUS
Quellen: VW, BMW, Multiplikator Lehrgang, BTZ Ingolstadt
J. Wiesinger
26.08.2010