Bussnelheid en -lengte

Bit timing

De bus snelheid is afhankelijk van de bus timing, die in CAN van de kristal gestuurde systeem kloksnelheid wordt afgeleid. Met behulp van een ‘baudrate pre-sclaler’ wordt deze systeem kloksnelheid teruggebracht tot een basis CAN kloksnelheid (=Time Quatum). Dat is nog niet de CAN bus snelheid want in CAN wordt, op deze basis, de timing van een bit opgebouwd:

CAN Bit Timing: opbouw van een CAN-bit en sampling point
CAN Bit Timing
CAN Bit Timing: opbouw van een CAN-bit en sampling point
CAN Bit Timing
  • SYNC_SEG is 1 Time Quantum lang. Wordt gebruik om de verschillende nodes te synchroniseren. CAN-logica synchroniseerd op de bitflanken;
  • PROP_SEG is programmeerbaar 1 - 8 Time Quanta groot. Het wordt gebruik om signaalvertraging over het netwerk op te vangen;
  • PHASE_SEG1 is programmeerbaar 1- 8 Time Quanta groot. Het wordt gebruikt om op- en neergaande flankfouten te compenseren en kan tijdens synchronisatie dynamisch verlengd worden. Deze dynamische synchronisatie kan tussen 1 en 4 Time Quanta ingesteld worden. Dit wordt met Synchronisation Jump Width (SJW) aangeduid;
  • PHASE_SEG2 is ook programmeerbaar 1- 8 Time Quanta groot. Het wordt ook gebruikt om op- en neergaande flankfouten te compenseren en kan tijdens synchronisatie juist dynamisch verkort worden (negatieve SJW).
  • Op het sample punt worden 3 samples genomen (halve Time Quantum afstand), waarvan de meerderheid de waarde bepaald;
  • De totale bit timing mag tussen de 8 tot 25 Time Quanta groot zijn.

Met deze waarden kan het exacte sample punt nauwkeurig bepaald worden: een laat sample punt maakt een maximale bus lengte mogelijk, een vroeg sample punt maakt tragere op- en neergaande bit flanken mogelijk en daardoor minder uitstraling en verstoringen. In het algemeen gesproken is een bus timing die zoveel mogelijk Time Qunata bevat én waarbij het sample punt op circa 80% van de totale bit tijd ligt, het beste. De uiteindelijke gewenste bus timing wordt in de standaard Timing Registers 0 en 1 van de CAN-controller geprogrammeerd.

Bitstuffing

De CAN-bitstroom is gecodeerd volgens de Non-Return-to-Zero (NRZ) methode. Dit komt er op neer dat tijdens een bit tijd een bit constant dominant (‘0’) of recessief (‘1’) is en dus niet wijzigt. De CAN-logica maakt echter gebruik van flanken om de datastroom te synchroniseren, zie de bovenstaande bit opbouw. Hierbij is het wel noodzakelijk dat er voldoende flanken in de stroom voor komen. Om die reden zal de CAN-controller na vijf opeenvolgende dezelfde ‘0’-en of ‘1’-en automatisch een tegengesteld bit aan de datastroom toevoegen. De ontvangende CAN-controllers weten dat en zullen dus na vijf dezelfde bits het volgende bit weer uit de stroom verwijderen. Dit mechanisme wordt bitstuffing genoemd. De gebruiker merkt hier verder niets van, maar bitstuffing heeft wel een (beperkte) invloed op de datasnelheid.

Bus lengte

Bij klassieke seriële verbindingen is de lengte van de bus niet zo van belang: wat aan de ene kant verzonden wordt komt (vroeg of laat) aan de andere kant wel aan. Het principe van arbitrage per bit, dat door CAN wordt gebruikt, vereist echter een vergelijking tussen de locale bitniveaus van alle nodes die binnen een bepaalde tijdsinterval per bit over de bus zijn verdeeld. Zoals de voor de signaaldistributie in de bus vereiste signaalvoortplantingstijd in verhouding is met de lengte van de bus (circa 5 ns/m), zo wordt ook de benodigde duur van een bit-interval verlengd conform de mate waarin de lengte van de bus toeneemt. Een andere node moet immers, tijdens arbitrage en later bij de acknowledge, binnen de bittijd reageren. Hierdoor is de lengte van de bus beperkt.

CAN-bus bus-snelheidn versus maximale bus-lengte
CAN-bus snelheid versus bus-lengte
CAN-bus bus-snelheidn versus maximale bus-lengte
CAN-bus snelheid versus bus-lengte

De maximale buslengte en de maximale bitsnelheid zijn dus omgekeerd evenredig. Houdt er rekening mee dat (afwijkende) fysical layers, repeaters en dergelijke de totale vertagingstijd (soms fors) vergroten en daarmee de maximale buslengte verder beperken.

Standaard bus timing en lengte

Het zal duidelijk zijn dat het bepalen van de juiste bit timing een hele opgave kan zijn. Uitgaande van standaard physical layers en standaard bus lengtes heeft de CiA de volgende standaard bus snelheden, en bijbehorende bus timing, vastgelegd.

CANopen indexBaudrateMaximale bus lengteBTR0BTR1
BTR0/1 = Bus Timing registerwaarden voor NXP 82C200 @16Mhz x-tal
0 1000 kBit/s 25 m 00h 14h
1 800 kBit/s 50 m 00h 16h
2 500 kBit/s 100 m 00h 1Ch
3 250 kBit/s 250 m 01h 1Ch
4 125 kBit/s 500 m 03h 1Ch
5 Gereserveerd
6 50 kBit/s 1000 m 09h 1Ch
7 20 kBit/s 2500 m 18h 1Ch
8 10 kBit/s 5000 m 31h 1Ch

In verreweg de meeste gevallen zullen deze waarden uitstekend functioneren. Bij maximale bus lengte, bussen met grote aftakkingen of toepassing van (meerdere) repeaters kunnen deze waarden wellicht niet toereikend zijn.