CAN-bus
CAN (Controller Area Network) er en robust seriel bus, hvor flere styreenheder deler det samme netværk. Den bruges blandt andet i køretøjer, maskiner og industriel styring, hvor enheder skal kunne udveksle korte beskeder pålideligt.
Controller og transceiver
En CAN-forbindelse består af to forskellige dele:
- CAN-controller danner og fortolker CAN-rammer og håndterer blandt andet adressering, arbitration og fejlkontrol.
- CAN-transceiver omsætter controllerens logiske TX/RX-signaler til de elektriske differentielle signaler på CANH og CANL og tilbage igen.
En mikrocontroller med indbygget CAN-controller kan derfor stadig kræve en ekstern transceiver. Tilslut ikke CANH eller CANL direkte til almindelige GPIO-pins.
Ledninger og terminering
- CAN-bussen bruger et snoet par: CANH og CANL. Informationen ligger i spændingsforskellen mellem de to ledninger, hvilket giver god modstandsdygtighed over for elektrisk støj.
- Alle noder forbindes parallelt til samme CANH- og CANL-bus. Hold afgreninger korte, især ved høj bus-hastighed.
- Montér normalt en 120 Ω termineringsmodstand mellem CANH og CANL i hver af bussens to fysiske ender. Der skal være to termineringer i alt, ikke én ved hver node.
- Forbind typisk nodernes GND/reference sammen, medmindre transceiver- og systemdesignet bruger galvanisk isolation.
Beskeder og arbitration
- CAN sender beskeder på bussen; en besked er ikke en direkte pakke til én bestemt node. CAN-ID'et beskriver beskedens identitet og prioritet, ikke en modtagers adresse.
- Hvis flere noder begynder at sende samtidig, afgør bitvis arbitration, hvilken besked der fortsætter. Beskeden med højere prioritet vinder, og de øvrige noder forsøger igen uden at ødelægge den igangværende besked.
- Modtagere kontrollerer rammen og kvitterer på bussen. CAN indeholder også fejldetektion og mekanismer til at begrænse deltagere, der gentagne gange sender fejl.
- Klassisk CAN kan indeholde op til 8 databytes i én ramme. CAN FD er en nyere udvidelse med større datarammer; controller og alle relevante noder skal understøtte samme CAN-variant.
Hastighed i byte
Klassisk CAN kan sende op til 8 data-byte i en ramme. Ved fuld bus og rammer med alle 8 databytes giver almindelige hastighedsindstillinger omtrent disse nyttedata-rater:
- Langsom: ca. 7 kB/s
- Mellem: ca. 15–30 kB/s
- Hurtig klassisk CAN: ca. 60 kB/s
Det er grove overslag for klassiske CAN-rammer med standard-ID. ID, kontrolfelter, bit stuffing, korte datafelter, arbitration, fejl og pauser bruger også buskapacitet, så applikationen får typisk mindre. Højere bus-hastighed begrænser også den mulige kabellængde; følg transceiverens og netværkets specifikationer.
Tilslutning i praksis
- Find controllerens CAN_TX og CAN_RX, og forbind dem til transceiverens TXD og RXD efter modulproducentens pinout.
- Forsyn transceiveren med dens specificerede spænding. Transceiverforsyning og logikniveau er modelafhængige; kontrollér dem før tilslutning.
- Forbind transceiverens CANH til CANH og CANL til CANL på den fælles bus.
- Kontrollér at der kun er én 120 Ω terminering i hver fysisk ende af bussen.
- Indstil samme bus-hastighed på alle noder, og sørg for at besked-ID'er ikke kolliderer efter systemets plan.
Eksempel: Uno R4 WiFi
RA4M1-mikrocontrolleren i Arduino Uno R4 WiFi har en CAN-controller, men kortet kræver en ekstern CAN-transceiver for at kommunikere på CANH/CANL. Brug kortets dokumenterede CAN_TX/CAN_RX-pins; pinmapping kan afhænge af kortversionen. Se Arduino Uno R4 WiFi: CAN Bus for et officielt tilslutningseksempel.
Kilder
- CAN in Automation (CiA): CAN knowledge – introduktion til CAN-teknologi og netværk.
- Arduino: Uno R4 WiFi CAN Bus – eksempel med CAN-controller, ekstern transceiver og Arduino CAN-bibliotek.