Kampis Elektroecke

CAN-Bus Bit Timing

canknotenkomplett_klein
Auf dieser Seite möchte ich etwas genauer auf die Berechnungen der Werte für den CAN-Bus eingehen.
Das Timing und die Synchronisation der verschiedenen Knoten in einem CAN-Netzwerk ist sehr wichtig für die korrekte Funktion des Buses.
Die Knoten werden bei der fallenden Flanke des Start-of-Frame (SOF) Bit synchronisiert. Aber dies ist nur eine sehr begrenzte Möglichkeit um eine sichere Synchronisation zu ermögliche.

Signale auf dem CAN-Bus basieren auf dem NRZ (Non-Return-to-Zero) Prinzip d.h. die Signale behalten ihren Pegel für eine längere Zeit und dementsprechend haben sie auch keine Flanken. Die Flanken treten erst auf, wenn das Signal den Zustand wechselt (also von 0 nach 1 oder andersrum).
Hier ist Bild welches das Prinzip sehr gut beschreibt:

Wie man sieht, besteht eine „0“ beim RZ Prinzip (oberer Teil des Biildes) aus einer steigenden Flanke und eine „1“ besteht aus einer fallenden Flanke. Die High- und die Low-Zeit betragen dabei immer 50% der Bitzeit.
Beim NRZ Prinzip besteht eine „0“ aus einem Low-Pegel und eine „1“ aus einem High-Pegel. Diese Pegel werden für die komplette Zeit eines Bits gehalten.

Dies macht es besonders schwierig den Bus zu synchronisieren. Laut CAN-Standard dürfen nicht mehr als 5 Bits mit dem selben Pegel gesendet werden. Da dies aber in manchen Fällen unerwünscht ist (z.B. bei der Übertragung der eigentlichen Daten) wurde das „Bit Stuffing“ entwickelt. Wenn mehr als 5 Bits mit der selben Polarität gesendet werden invertiert der CAN Controller vom Sender das 6. Bit und der CAN Controller vom Empfänger entfernt dieses dann. Dadurch wird diese „Sperre“ von 5 oder mehr Bits mit dem selben Level umgangen.
Das CAN-Bus Timing basiert auf den Takt von den CAN-Controllern. Jeder CAN-Controller besitzt ein Quarz, welches einen Takt bereitstellt. Dieser Takt vom Quarz wird im Controller durch programmierbare Vorteiler runtergeteilt und dieser Takt bestimmt dann das Timing des CAN-Controllers.
Die CAN Bit Rate wird als „Anzahl der übertragenen Bits pro Sekunde ohne Synchronisation“ definiert und alle CAN-Controller die an einen CAN-Bus angeschlossen sind, müssen die selbe Bit Rate besitzen (obwohl jeder Knoten eine eigenen Takt haben kann).

Jedes Bit beim CAN-Bus besteht aus vier sich nicht überlappenden Zeit Segmenten:

  • Synchronisations Segment Synch_Seg
    Dieses Bit ist das erste Segment und dient zur Synchronisation der Knoten im Bus
  • Propagation Segment Prop_Seg
    Dieses Segment hat die Aufgabe die physischen Verzögerungen zwischen den Knoten auszugleichen.
  • Phase Buffer Segment 1 Phase_Seg1
    Dieses Segment dient, zusammen mit Phase_Seg2, dazu um Fehler zwischen den Flanken zu kompensieren und die Länge des Bits anzupassen.
  • Phase Buffer Segment 2 Phase_Seg2
  • Sample Point
    Der Sample Point ist der Punkt in einem Bit wo der Pegel gelesen und interpretiert wird. Der Sample Point befindet sich am Ende von PS1.
    Zusätzlich kann der Controller so eingestellt werden, dass er drei Samples nimmt. Diese werden dann jeweils ein TQ Intervall vor Ende von PS1 genommen.

Jedes Segment wird in kleine Einheiten zerlegt, die Time Quantum (Tq) genannt werden. 1 Tq ist dabei genau eine Periode vom CAN Clock.
Die Time Quanten jedes Segments können von 1-8 geändert werden. Dadurch kann die Zeit eines jeden Segments und damit auch die Bitzeit, angepasst werden .
Die Länge der verschiedenen Segmente sieht wie folgt aus:

  • Synch_Seg = 1 Tq (immer!)
  • Prop_Seg = 1 – 8 Tq
  • Phase_Seg1 = 1 – 8 Tq
  • Phase_Seg2 = Ist programmierbar und ist gleich der Länge von Phase_Seg1

Dadurch kann die Zeit für ein Bit von 8 x Tq bis hin zu 25 x Tq variieren (je nach Segmenteinstellung).
Die Bit-Zeit errechnet dementsprechend sich wie folgt:

TBit = Tq\cdot \left ( SynchSeg + PropSeg + PhaseSeg1 + PhaseSeg2\right )

und so wird dann die „Nominal Bit Rate“, oder auch NBR genannt, berechnet:

NBR=\frac{1}{TBit}

Das Time Quantum Tq ist dabei abhängig vom Oszillatortakt und vom programmierbaren Baudratenvorteiler (BRP). Der BRP kann von 1-64 variieren. Das Time Quantum errechnet sich wie folgt:

Tq=2\cdot\frac{BRP}{FOSC}

Ein Beispiel:
Ein CAN-Controller hat einen Takt von 20MHz und der BRP ist auf 2 eingestellt und die Länge eines Bits soll 8x Tq sein. Nun wollen wir die Bitrate ausrechnen. Dabei rechnen wir folgendes:

Tq=2\cdot\frac{BRP}{FOSC} TBit = 8\cdot Tq NBR=\frac{1}{TBit}
Tq=2\cdot\frac{2}{20} TBit = 8\cdot 0,2 \mu s NBR=\frac{1}{1,6 \mu s}
Tq=0,2 \mu s TBit = 1,6 \mu s NBR=625\frac{kb}{s}

Die Beispiele stammen aus Controller Area Network Projekts

Mit diesen Werten kann nun weitergerechnet werden. Da der Wert von Tq nun bekannt ist, kann damit die Länge eines Bits angepasst werden. Bei einer privaten Nutzung des CAN-Bus (so wie ich es tue) ist es recht uninteressant bzw. nicht notwendig Parameter wie das Delay auf der Übertragungsstrecke und dem Controller usw. mit in die Berechnung einzubeziehen (mal davon abgesehen, dass mit diesem Thema ein komplettes Kapitel im Buch gefüllt wurde und es sehr viel Mathe ist ;) ).
Falls aber dennoch was unklar sein sollte, könnt ihr mir ruhig eine Nachricht hinterlassen oder mir eine E-Mail schreiben. Dann können wir nochmal genauer über das Problem/Unklarheiten reden.
Es sollte nur darauf geachtet werden, dass bei allen CAN-Controllern im Bus der selbe Wert für Tq genommen wird (idealerweise nimmt man den selben Quarztakt so wie ich es tun werde) und das die Einstellungen für die Länge der Segmente bei allen gleich ist.
Sonst kann es passieren das der Bus nicht richtig arbeitet.

→ Zurück zum CAN-Bus

Ein Kommentar

  1. Hallo,

    kann mir jemand sagen, wo ich den BRP herbekomme? Ich habe bisher nur „aus dem Datenblatt“ gelesen, doch da konnte ich nichts passendes finden…

    danke für die hilfe

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert