Onderwerpen:
- Inleiding
- Meerdere netwerken in een auto
- CAN-netwerk met de regelapparaten
- CAN-bus signalen
- Snelheden en spanningsniveaus
- Opbouw van het CAN-busbericht van een (standaard) 11 bits identifier
- Opbouw van het CAN-busbericht van een (extended) 28 bits identifier
- Rekenkanaal en seriele decodering
- Foutherkenning d.m.v. Bitstuffing en CRC & ACK delimiters
- Twisted Pair bedrading
- Afsluitweerstanden
- Gateway
- CAN-bus diagnose
Inleiding:
Moderne voertuigen zitten vol met elektronica. De regeleenheden verzamelen en verwerken gegevens van sensoren en sturen actuatoren aan. Vaak gebruiken verschillende ECU’s dezelfde data: de gaspedaalpositiesensor registreert de stand van het gaspedaal. Dit signaal wordt via de bedrading direct naar de motor-ECU verzonden. De motor-ECU is niet de enige ECU die dit signaal gebruikt:
- De motor-ECU gebruikt het signaal van de gaspedaalpositiesensor om de gasklep aan te sturen, bij het gasgeven voor acceleratieverrijking door de injectoren langer aan te sturen, het ontstekingstijdstip aan te passen en evt. de wastegate of VGT-verstelling van de turbo aan te sturen;
- De ECU van de automatische transmissie gebruikt de gaspedaalpositie om de schakeltijden van de koppelingen in de automaatbak te bepalen. Als het gaspedaal een klein beetje is ingedrukt zal de automaatbak bij een lager toerental opschakelen dan als het gaspedaal voor de helft is ingetrapt. Door het plotseling snel intrappen van het gaspedaal zal de “kick down” in werking treden door naar een lagere versnelling te schakelen en de motor meer toeren te laten maken;
- De mate van gasgeven in een bocht kan voor de ESP-ECU een reden zijn om de ESP in te laten grijpen door het motorvermogen terug te nemen en evt. een rem van een doorslippend wiel aan te knijpen.
Tijdens een ingreep van de ESP neemt het motorvermogen af door de gasklep (deels) te sluiten en minder brandstof in te spuiten. Tevens zal in het instrumentenpaneel een indicatielampje gaan branden of knipperen, om de bestuurder erop te attenderen dat de ESP in werking treedt.
Het bovenstaande laat al goed de samenwerking tussen verschillende ECU’s zien. CAN-bus zorgt ervoor dat ECU’s met elkaar communiceren en daarmee data met elkaar kunnen uitwisselen. CAN is een afkorting van: Controller Area Netwerk.
In de jaren ’80 kregen auto’s steeds meer accessoires en begonnen fabrikanten regelapparaten in te bouwen. Iedere functie kreeg een aparte draad. Daarmee nam de draaddikte-en het aantal stekkerverbindingen sterk toe.
Dikke kabelbomen hebben als nadeel dat het wegwerken achter interieurbekleding lastig is, en de kans op storingen behoorlijk toeneemt.
Met CAN-bus communiceren ECU’s met slechts twee draden: de CAN-high en de CAN-low. Alle communicatie tussen de ECU’s wordt via deze twee draden voorzien. In de volgende twee afbeeldingen is duidelijk te zien dat het aantal draden bij één portier al aanzienlijk afneemt bij het gebruik van CAN-bus.
Op de CAN-bus kunnen tientallen regelapparaten op de twee CAN-busdraden worden aangesloten. Al de aangesloten regelapparaten kunnen data met elkaar uitwisselen.

In de onderstaande afbeelding is een voertuig te zien met elf regelapparaten (aangegeven met de rode blokjes). Deze regelapparaten zitten allemaal met twee draden aan elkaar verbonden; een oranje en een groene draad. Deze draden stellen de CAN-high en CAN-low voor. Elk regelapparaat heeft zijn eigen functie en kan door middel van CAN-bus met elk ander regelapparaat in het netwerk communiceren. Meer inhoudelijke informatie over de regelapparaten is te vinden op de pagina regelapparaten.

1. Regelapparaat trekhaakinstallatie
2. Portierregelapparaat R.A.
3. Portierregelapparaat R.V.
4. Gateway
5. Comfortregelapparaat
6. Regelapparaat alarmsysteem
7. Instrumentenpaneel
8. Regelapparaat stuurkolomelektronica
9. Portierregelapparaat L.V.
10. Portierregelapparaat L.A.
11. Regelapparaat Park Distance Control
Met de komst van CAN-bus is ook het EOBD meer uitgebreid. EOBD staat voor European On Board Diagnosis. EOBD heeft te maken met de emissies. Diverse sensoren van de motor en de uitlaat geven informatie door aan de ECU. Als er foutieve waarden zijn (doordat er bijv. een slechte verbranding plaatsvindt), gaat er een MIL (Motor Indication Light) branden. Dat is een teken dat de auto moet worden uitgelezen. Er moet dan een diagnosetester aan de OBD stekker verbonden worden die de fouten uitleest. De ECU heeft aan de hand van de storing een hexadecimale foutcode opgeslagen, die door de diagnosetester weergeven wordt als een P-code of een storing met tekst (dat laatste is meer merkspecifiek). Klik hier voor meer informatie over OBD1, OBD II en EOBD.
Meerdere netwerken in een auto:
In een auto kunnen zich meerdere netwerken bevinden. De onderstaande afbeelding toont een overzicht met legenda van regeleenheden in meerdere netwerken van een BMW 3-serie E90.

De K-CAN, PT-CAN en F-CAN netwerken in de bovenstaande afbeelding vallen onder CAN-bus. Het verschillen zijn de snelheden met daarbij de spanningsniveaus en de toepassingen. De PowerTrain-CAN en de F-CAN hebben weliswaar dezelfde high-speed snelheid en spanningsniveaus, maar het verschil is dat de PT-CAN wordt gebruikt voor de motor- en transmissieregeling, en de F-CAN de regeleenheden van het onderstel bevat.
CAN-netwerk met de regelapparaten
Het CAN-bus netwerk bestaat uit regelapparaten die zijn voorzien van hardware en software voor om berichten te ontvangen, verwerken en te verzenden. Voor de data-overdracht worden een CAN-high draad en een CAN-low draad gebruikt. In de onderstaande afbeelding is de CAN-High rood, en CAN-Low blauw gekleurd.
De regelapparaten (ook wel regeleenheden of nodes genoemd) zijn op deze draden aangesloten. Alle regelapparaten kunnen zowel informatie versturen als ontvangen. Een voorbeeld van een netwerk is het CAN-bus systeem in het interieur van de auto; hier kunnen diverse regelapparaten aan één bussysteem aangesloten worden.

Als voorbeeld nemen we een achteruitrijcamera (node 5) die achteraf wordt ingebouwd. Deze camera wordt bij de kentekenplaathouder of handgreep aangebracht. De CAN-bedrading wordt in het interieur op een willekeurige plek aangesloten. De voorwaarde is wel dat de node van de camera de juiste identifier bevat (vooraf geprogrammeerd door de fabrikant) omdat de andere regelapparaten deze wel moeten herkennen. Als de camera op de ondersteunde radio wordt aangemeld is het beeld direct zichtbaar.
Na het programmeren van de software krijgt de radio een signaal van de versnellingsbak dat de achteruitversnelling is geselecteerd. Op dat moment schakelt de radio om naar het beeld van de achteruitrijcamera. Op het moment dat de eerste versnelling (vooruit) wordt geselecteerd schakelt het beeld weer uit. Dit alles dankzij de dataoverdracht van het CAN-bussysteem.
Niet ondersteunde apparatuur (met bijv. een onjuiste identifier) kunnen problemen geven. Als deze berichten verzendt die door andere regelapparaten niet worden herkend, zal er een foutmelding worden gegenereerd. Ook kan dit soort apparatuur ervoor zorgen dat de CAN-bus actief blijft na het uitschakelen van het contact. De auto gaat dan niet in “sleep mode” waardoor de accu snel leeg zou lopen. Er is dan sprake van een clandestiene verbruiker.
CAN-bus signalen:
Het CAN-bussysteem maakt gebruik van het broadcast-principe; een zender zet een bericht op de CAN-bus. Elke node op de zelfde bus ontvangt het bericht. Echter, de zender geeft in het bericht aan voor welke nodes het bericht bestemd is. Alle nodes ontvangen het bericht en geven daarop hun terugkoppeling (later meer daarover). De nodes waarvoor het bericht niet bestemd is herkennen dat en negeren het.
Een CAN-bussignaal bestaat uit een CAN-high en CAN-low spanning. In de onderstaande afbeelding is CAN-high rood en CAN-low blauw afgebeeld. De high en low signalen zijn identiek, maar van elkaar gespiegeld. Wanneer de bus dominant wordt, stijgt de spanning van de CAN-high van 2,5 naar 3,5 volt en daalt CAN-low van 2,5 naar 1,5 volt. In recessieve toestand (in rust) bedragen beide spanningen 2,5 volt.

In de bovenstaande afbeelding is een voorbeeld van een meting met een oscilloscoop te zien. Er is duidelijk te zien dat beide spanningen identiek zijn aan elkaar, alleen in spiegelbeeld. Uiteindelijk is het spanningsverschil in het actieve (dominante) gebied 2 volt. Hiermee wordt het verschil tussen 1,5 en 3,5 volt bedoeld. Het verschil van 2 volt wordt gezien als een 0 (dominant) en het verschil van 0 volt als een 1 (recessief).

Als een (zendende) node de binaire code “0 0 1 0 1 1 0 1” wil verzenden zal deze de genoemde spanningen op de CAN-High en CAN-Low zetten (zie het bovenstaande voorbeeld). De ontvangende node zal deze spanningen weer zien als een binaire code, en zet ze vervolgens om in een hexadecimale code. De genoemde binaire code zal van hexadecimaal worden omgezet naar 2D.

Om binair naar hexadecimaal om te zetten is het gemakkelijk om een tabel van 8 vakjes te tekenen met een dikke streep in het midden. Noem de vakjes aan de rechterkant 1, 2, 4 en 8 (zie de rode cijfers in de afbeelding). Doe dit vervolgens ook aan de linkerkant. Noteer de cijfers waar een 1 van de binaire code boven staat. Links is dat alleen de 2, rechts zijn dat 8, 4 en 1. Tel alles rechts bij elkaar op (13) en doe het zelfde bij links (2). Hexadecimaal gaat vanaf 10 over in A, 11 = B, 12 = C, 13 = D. Dat maakt dus uiteindelijk 2D.
Meer informatie over het omrekenen van binair naar (hexa-)decimaal en andersom is te vinden op de pagina Binair, Decimaal en Hexadecimaal. Hier staan duidelijke voorbeelden uitgebreid omschreven.
Snelheden en spanningsniveaus:
In voertuigen kunnen we CAN-busnetwerken met verschillende snelheden tegenkomen:
- High speed: ECU’s die met de aandrijving te maken hebben, waaronder de motorelektronica, transmissie, ABS/ESP, EBS (bedrijfswagens);
- Medium of low speed: interieurelektronica zoals het instrumentenpaneel, radio, klimaatregeling, parkeerrem, trekhaak.
In de onderstaande twee afbeeldingen zijn de CAN-high en CAN-low signalen van de high speed CAN-bus te zien. In rust bedraagt de spanning van beide signalen 2,5 volt. Om een bericht te sturen stijgt de CAN-high van 2,5 naar 3,5 volt en daalt de CAN-low van 2,5 naar 1,5 volt.
Hieronder is nogmaals het signaal van de CAN high speed te zien, waarbij er nu is ingezoomd (50 microseconde per divisie), daar waar de scope bij het bovenstaande signaal was ingesteld op 200 microseconde per divisie.
In de comfortelektronica is de hoge snelheid van de communicatie minder van belang. Kenmerkend voor de medium of low speed CAN-bus zijn de spanningsniveaus in rust en bij het vormen van een bericht als volgt:
- CAN-high is in rust 5 volt en daalt naar 1 volt;
- CAN-low is in rust 0 volt en stijgt naar 4 volt.
Bij de meting waarbij de nullijnen van de kanalen A en B op dezelfde hoogte zijn ingesteld, is te zien dat de spanningen “in elkaar” zijn geschoven. Dat maakt het aflezen van de zuiverheid van de CAN-high en low signalen lastig.
Om de zuiverheid van de berichten te kunnen beoordelen, is het aan te bevelen om de nullijnen te verschuiven. In de onderstaande afbeelding is de nullijn van kanaal A omlaag en van kanaal B omhoog geschoven. Hiermee zijn de afgebeelde signalen uit elkaar getrokken en is een duidelijker verloop van de spanningen te zien.
Opbouw van het CAN-busbericht van een (standaard) 11 bits identifier:
De opbouw van een CAN-busbericht is altijd gebaseerd op de onderstaande afbeelding. In de opbouw zitten wel verschillen; zo zijn de ARB en het CTRL field van een 11 bits identifier en een 29 bits identifier verschillend. De onderstaande informatie heeft betrekking op de 11bits identifier. Ter informatie: een 29 bits identifier heeft ruimte voor meer data dan de 11 bits. Later meer hierover.

De opbouw van het bericht wordt nu eenvoudig samengevat, en later uitgebreid beschreven:
SOF:
Elk CAN-bericht begint met een SOF (start of frame). Wanneer een node een bericht wil gaan verzenden, zal er een dominante bit op de bus gezet worden. De CAN-bus is in rust altijd recessief (een 1, dus zowel de CAN-High als de CAN-Low zijn 2 Volt). De dominante bit (een 0) geeft aan dat andere nodes moeten wachten met een bericht te zenden totdat het hele bericht geplaatst is. Pas na de IFS (Interframe Space) mag de volgende node zijn bericht gaan verzenden. Ook als het een belangrijk bericht is, kan het er niet tussen komen.
Wanneer er 2 nodes tegelijkertijd een bericht willen gaan zenden (wat ze niet van elkaar weten) en dus samen de bus dominant maken door een 0 te plaatsen, bepaalt de ARB (arbitrage) welk bericht voor gaat.
Vanaf hier zal bij elk gedeelte van het CAN-busbericht dat besproken wordt steeds dat stuk aan deze grijze afbeelding worden toegevoegd. Op die manier probeer ik een beetje het overzicht te houden. Het bericht is begonnen met het SOF.

ARB:
Het arbitration field van een 11-bits identifier bestaat uit twee delen: de identifier en het RTR-bit.
Stel dat twee nodes gelijktijdig de CAN-bus dominant maken. De node met het minst belangrijke bericht wacht dan totdat het belangrijkere bericht volledig is geplaatst (tot na het IFS). In de identifier van het bericht staat een reeks enen en nullen. Deze waarden worden door de programmeur bewust toegewezen aan een bericht. Een identifier met een 0 in het bericht (dominant) heeft een hogere prioriteit dan een identifier met een 1 in het bericht (recessief).
De bitwaarde 0 (dominant) overrulet altijd een bitwaarde 1 (recessief). Als twee nodes tegelijk zenden en de één stuurt een 0 en de ander een 1, dan wordt het uiteindelijke busniveau 0. De node die de 1 stuurde merkt dit verschil op, stopt met zenden, en wordt ontvanger. Hierdoor ontstaat de prioriteit op de bus.
De onderstaande animatie met drie ECU’s toont hoe de berichten met een 1 uitvallen en hoe het bericht met de meeste nullen van het meest rechtse regelapparaat uiteindelijk verzonden mag worden.
De drie ECU’s beginnen in de identifier met het plaatsen van een bericht van 11 bits. Bij de SOF wordt de dominante bit geplaatst. Daarna zijn de eerste twee bits van de drie identifiers gelijk (0 0). De derde bit is bij de tweede ECU een 1 en bij de derde ECU een 0. Dominant overheerst, dus ECU 3 plaatst het CAN-bericht. De twee ECU’s waarvan de bits recessief waren, luisteren vervolgens het volledige bericht af en bepalen of er iets mee moet worden gedaan.
De onderstaande grijze afbeelding van het SOF wordt nu uitgebreid met het ARB, dat uit twee delen bestaat: de identifier en het RTR-bit.
RTR bit:
De laatste bit van de 11-bits identifier is het Remote Transmit Request-bit (RTR-bit). Deze bit bepaalt of een CAN-frame gegevens bevat of dat er juist om gegevens wordt gevraagd.
0 = data frame (dominant): het bericht bevat data in het data field
1 = remote frame (recessief): het bericht vraagt om data van een andere ECU, die vervolgens een data frame met dezelfde identifier zal versturen

CTRL:
Het Control Field bestaat uit de IDE (Identifier Extension), een R-bit en de DLC. De IDE-bit geeft aan of het gaat om een standaard (11 bits) of een extended (29 bits) identifier.
0 = standaard identifier (11 bits)
1 = extended identifier (29 bits)
De R-bit is gereserveerd voor toekomstig gebruik en is in standaardframes altijd recessief.
Daarna volgt de DLC. Een CAN-netwerk kan maximaal 8 databytes verzenden. In één byte zitten 8 bits, dus in totaal kunnen er maximaal 64 bits aan data worden verstuurd volgens het standaardprotocol. In het Control Field wordt aangegeven hoeveel data er wordt verzonden. Het is niet zinvol om voor een eenvoudige bevestiging (bijvoorbeeld 1 voor aan of 0 voor uit) een groot bericht met lege datavelden te versturen. In de DLC (Data Length Code) wordt daarom vermeld hoeveel bytes data worden meegestuurd. De DLC is een functie in de programmeersoftware en wordt vooraf toegewezen door de programmeur.
Als in de DLC één byte wordt vermeld, dan worden er 8 bits data verzonden. Voor korte bevestigingsberichten is dit voldoende. Voor uitgebreide berichten zal in de DLC een waarde van maximaal 8 databytes staan.
Het voorbeeld is weer uitgebreid. De IDE, R en DLC zijn toegevoegd.

DATA:
In het data field wordt de uiteindelijke data geplaatst die verzonden moet worden. De grootte is afhankelijk van de waarde van de DLC (Data Length Code). Eerder is al aangegeven dat de DLC maximaal 8 bytes groot is. Elke byte bestaat uit 8 bits, dus in totaal kan het dataveld uit 64 bits bestaan.

CRC:
De Cyclic Redundancy Check bestaat uit een wiskundige berekening die samen met het CAN-bericht wordt meegestuurd. De zendende node berekent een controlewaarde over het bericht tot dan toe: SOF, ARB, CTRL en DATA. Deze berekening vormt de CRC.
Wanneer de ontvangende node het bericht inclusief de CRC heeft ontvangen, voert deze dezelfde berekening uit over het ontvangen deel van het bericht (tot en met het DATA-veld) en vergelijkt het resultaat met de meegestuurde CRC-waarde. Als de waarden niet overeenkomen (bijvoorbeeld door een foutief bit of een storing), wordt het bericht niet geaccepteerd en wordt verzocht om het opnieuw te verzenden, met een maximaal aantal herhalingspogingen.
Het voorbeeld is uitgebreid met het CRC-veld.

ACK:
Het Acknowledge Field dient voor de ontvangstbevestiging. Wanneer de zender het bericht tot en met de CRC heeft verstuurd, volgt het ACK-slot. De zender plaatst hierin een recessief bit (1) op de bus. Als één of meerdere ontvangende nodes het bericht correct hebben ontvangen, zullen zij dit recessieve bit overschrijven met een dominant bit (0). Het maakt daarbij niet uit hoeveel nodes de bevestiging geven: één dominante bevestiging is voldoende.
Daarna volgt de ACK-delimiter, die altijd recessief is. Vervolgens wordt het verzenden van het bericht voortgezet.

EOF:
Het End Of Frame bestaat uit 7 recessieve bits (1 1 1 1 1 1 1). Dit is voor alle regeleenheden een teken dat het bericht is beëindigd.

IFS:
Om storingen te voorkomen wordt er altijd een Inter Frame Space na het EOF toegepast. De IFS bestaat uit 11 recessieve bits. Alle nodes wachten tot deze 11 recessieve bits voorbij zijn voordat zij een bericht gaan verzenden. Na deze 11 recessieve bits kunnen er bijv. weer 2 nodes tegelijk een bericht gaan verzenden. Er wordt dan weer gekeken naar de ARB (Arbitrage) om vast te stellen welk bericht de hoogste prioriteit heeft. De hele cyclus begint dan weer opnieuw.
Opbouw van het CAN-busbericht met een (extended) 29-bits identifier:
De 11-bits identifier is ontworpen in een periode waarin voertuigen nog relatief weinig regelapparaten (nodes) bevatten. Al snel bleek dat er behoefte was aan meer identifiercapaciteit. Een 11-bits identifier biedt namelijk 2^11 = 2048 mogelijkheden, waarvan 2032 unieke combinaties beschikbaar zijn voor berichten. Moderne voertuigen gebruiken daarom de uitgebreide 29-bits identifier, de extended identifier genoemd. Hiermee zijn 2^29 = 536870912 combinaties mogelijk. Dit biedt ruim voldoende capaciteit, ook voor toekomstige toepassingen.
In een CAN-busbericht veranderen een aantal zaken wanneer een extended identifier wordt gebruikt. Beide types identifiers (standaard en extended) kunnen naast elkaar bestaan. In het bericht wordt daarom aangegeven om welk type identifier het gaat, waarna de rest van de berichtstructuur volgt.
De basis van de 11-bits identifier blijft bestaan en vormt de uitgangssituatie. Hieronder worden alleen de onderdelen beschreven die afwijken wanneer een 29-bits identifier wordt toegepast. Het SOF (Start Of Frame) blijft daarbij onveranderd: de zendende node plaatst een dominante bit wanneer het bericht wordt gestart. Daarna volgen de ARB- en CTRL-velden, waar de verschillen zichtbaar worden.
ARB:
Tijdens de arbitrage wordt eerst de standaard 11-bits identifier geplaatst (het eerste deel van de 29-bits identifier). De RTR-bit (die bij de 11-bits identifier op deze positie staat) wordt bij de extended identifier verplaatst naar het einde van het ARB-veld. Op de oorspronkelijke plaats van de RTR-bit komt nu de SRR-bit (Substitute Remote Request). Deze SRR-bit is bij een extended identifier altijd recessief (1).
Na de SRR-bit volgt de IDE-bit. In een standaard 11-bits bericht bevindt deze bit zich in het CTRL-veld. Bij een extended identifier wordt de IDE-bit uit het control field gehaald en direct achter de SRR-bit in het arbitrageveld geplaatst.
Ter verduidelijking tonen de onderstaande afbeeldingen de standaardidentifer (11 bits) en de extended identifier (29 bits).
De IDE bit staat voor Identifier Extension. Aan de IDE bit wordt gezien of het een standaard of extended identifier is.
IDE 0 = Standaard (11 bit ID)
IDE 1 = Extended (29 bit ID)
Na de IDE bit komt de rest van de extended identifier. De 11 en 18 bits maken samen 29. Deze kunnen niet als één geheel in het bericht geplaatst worden, omdat het CAN protocol dan niet meer klopt. In principe geeft de IDE bit nu aan dat het bericht in tweeën gedeeld is.
CTRL:
Het Control Field is bij de extended identifier dus gewijzigd. De IDE bit is verplaatst naar de ARB.
De IDE bit wordt vervangen door een R bit (reserve). Deze is standaard recessief. Daarna volgen nog een R bit en de DLC (Data Length Code), welke aangeeft uit hoeveel bytes het bericht zal bestaan.
Ook nu zijn de control fields van zowel de 11-bits als de 29-bits identifiers getoond.
Rekenkanaal en seriële decodering:
Tijdens het meten van CAN-bus kunnen de volgende functies helpen in het analyseren van de signalen: het rekenkanaal en de seriële decodering. Hieronder volgt de uitleg over het rekenkanaal. Onder de screenshot van de PicoScope volgt de uitleg van de seriële decodering.
Rekenkanaal:
Het rekenkanaal maakt een rekenkundige vergelijking tussen twee meetkanalen. Wanneer CAN-low op kanaal A en CAN-high op kanaal B wordt gemeten, kiezen we voor “B-A”. In het scherm verschijnt een extra Y-as met een voltage. Onder het spanningsverloop van de kanalen A en B zien we een spanning van 0 tot 2 volt:
- Recessief: B-A = 2,5 – 2,5 = 0 volt
- Dominant: B-A = 3,5 – 1,5 = 2 volt
Het rekenkanaal helpt bij het analyseren van het signaalverloop, ook als de gemeten spanningen enige ruis vertonen. Meer informatie daarover vindt je in de paragraaf Twisted Pair.
Onder de screenshot volgt de uitleg over de seriële decodering.

Seriële decodering:
In de linker kolom in de PicoScope software vinden we de knop “Seriële decodering”. Na het selecteren van deze functie verschijnt een scherm met opties, waarin het gewenste meetkanaal moet worden geselecteerd (in dit voorbeeld is voor kanaal A gekozen), en worden de instellingen voor de baud rate en high or low getoond. De baud rate staat gelijk aan de CAN-snelheid en is meestal al automatisch goed gezet. Bij “High or Low” kiezen we of we een CAN-high of CAN-low gaan meten. Omdat kanaal A is gekozen en dit CAN-low is, kiezen we voor “Low”. In het volgende scherm kunnen instellingen eventueel worden veranderd voor de weergave (decimaal, hexadecimaal), maar deze kunnen blijven staan.
Na het bevestigen verschijnt een extra balk met kleurtjes onder het spanningsverloop, met onderin het scherm de uitgelezen data en de hexadecimale data. De blokken met kleurtjes geven de opbouw van het CAN-bericht weer. In het scoopbeeld zijn de kleurtjes weergegeven zonder rode meldingen met kruizen, en in het onderste dataveld zijn alle teksten blauw met een V bij valid. Dit betekent dat de CAN-data door de PicoScope-software goed kan worden uitgelezen. Daarmee kunnen we er in de meeste gevallen vanuit gaan dat de ECU’s in de auto deze data ook kunnen lezen. Zodra de data fouten bevat, zien we dit met rode teksten en kruizen terug in de seriële decodering.
Foutherkenning d.m.v. Bitstuffing en CRC & ACK delimiters:
Bitstuffing:
Om de synchronisatie tussen zendende en ontvangende nodes te behouden, wordt bitstuffing toegepast. Dit betekent dat na vijf identieke bits automatisch een tegengestelde bit wordt toegevoegd door de zender. Hierdoor verandert de inhoud van de oorspronkelijke data niet, maar wordt er wel een extra bit ingevoegd.
De ontvanger herkent bitstuffing. Zodra er vijf opeenvolgende identieke bits zijn ontvangen, zal de volgende (tegengestelde) bit worden verwijderd. Daardoor blijft het oorspronkelijke bitpatroon behouden.
Wanneer een bericht bestaat uit bijvoorbeeld alleen enen, zal de zender na elke reeks van vijf enen een nul invoegen. De berichtlengte neemt hierdoor toe, maar deze extra bits tellen niet mee voor de DLC (Data Length Code). De ontvanger verwijdert de ingevoegde bits weer en houdt zo het oorspronkelijke bitpatroon over.
CRC & ACK delimiters:
CRC- en ACK-delimiters zijn vaste recessieve bits die direct volgen op respectievelijk het CRC- en ACK-veld. Deze bits hebben een vaste waarde, waardoor zowel zender als ontvangers exact weten welke busstatus hier moet voorkomen. Als een node een afwijkende waarde detecteert, wordt dit geïnterpreteerd als een bitfout. De node markeert het bericht dan als ongeldig en genereert een error frame. Het bericht wordt later opnieuw verzonden, afhankelijk van het foutafhandelingsmechanisme en de ingestelde protocollaag.
Stel dat een CAN-bericht het volgende (fictieve) dataveld bevat: 1010
De zender moet nu een eenvoudige controlewaarde (CRC) bepalen. In dit voorbeeld gebruiken we een simpele rekensom in plaats van de echte polynoomdeling, om het principe begrijpelijk te maken:
Tel de getallen bij elkaar op:
1 + 0 + 1 + 0 = 2Maak van de uitkomst een binaire waarde:
2 decimaal = 10 binairDeze binaire waarde wordt als CRC meegestuurd achter het bericht:
1010 10
De ontvanger doet hetzelfde:
1 + 0 + 1 + 0 = 2 → 10 binair
De ontvangen CRC was ook 10 → dus het bericht is goed.
Als er door ruis een bit fout binnenkomt (bijvoorbeeld 1010 wordt 1110):
1 + 1 + 1 + 0 = 3 → 11 binair
De berekende waarde (11) komt dan niet overeen met de ontvangen CRC (10). De ontvanger weet nu dat er een fout in het bericht zit.
Dit voorbeeld laat het basisprincipe zien:
De CRC is een controlegetal dat de ontvanger gebruikt om te bevestigen dat alle bits onderweg hetzelfde zijn gebleven. In de werkelijkheid is de berekening veel uitgebreider en nauwkeuriger, waardoor ook meerdere bitfouten tegelijk kunnen worden opgespoord.
Twisted Pair bedrading:
Als bekabeling voor de CAN-bus wordt gebruikgemaakt van twisted pair bedrading. De CAN High- en CAN Low-draden zijn om elkaar heen gedraaid (gevlochten), zoals op de afbeelding te zien is. Omdat beide draden door deze twisten voortdurend van positie wisselen, ontvangen ze vrijwel dezelfde storingssignalen van buitenaf. Hierdoor blijft het spanningsverschil tussen CAN High en CAN Low stabiel. Deze vorm van storingsonderdrukking wordt common-mode noise rejection genoemd en is een belangrijk voordeel van twisted pair-bedrading.
De CAN-bus werkt bovendien differentieel. Dat betekent dat niet de absolute spanning op één draad bepalend is, maar het spanningsverschil tussen beide draden. Bij een dominant signaal stijgt CAN High en daalt CAN Low, waardoor het spanningsverschil groter wordt. Als een storing beide draden tegelijk beïnvloedt, blijft dit verschil vrijwel gelijk en blijft het signaal leesbaar.
In voertuigen lopen veel stroomvoerende kabels vlak langs gevoelige datalijnen. Zonder twisted pair zou elektromagnetische inductie gemakkelijk spanningspieken of bitfouten veroorzaken op de CAN-lijn. Door het gebruik van twisted pair blijft het CAN-signaal betrouwbaar, zelfs bij sterke externe stoorsignalen of lange kabeltrajecten.

Stel dat dat beide draden (CAN High en CAN Low) recht en parallel naast elkaar lopen en niet zijn getwist. Door storingssignalen van buitenaf ontstaan er inductiespanningen in de bedrading. In dat geval werken deze inductediespanningen in dezelfde richting, waardoor er een groot spanningsverschil ontstaat ten opzichte van het oorspronkelijke signaal.
Wanneer CAN High en CAN Low als twisted pair zijn uitgevoerd, ondervinden beide draden dezelfde inductiespanningen van een externe stroomvoerende kabel. Omdat de draden gedraaid zijn, wisselt continu welke draad het dichtst bij de storingsbron ligt. Hierdoor heffen de inducediespanningen elkaar voor een groot deel op en blijft het oorspronkelijke signaal beter behouden.
Het onderstaande scoopbeeld laat zien hoe twisted pair-bedrading storingen voorkomt. Doordat de inductiespanningen in zowel kanaal A (blauw) als kanaal B (rood) op dezelfde hoogte optreden, blijft het spanningsverschil (ΔU) gelijk aan nul. De afbeelding bevestigt dit: tijdens de spanningspiek blijft ΔU hetzelfde als tijdens het normale signaalverloop.
Zonder twisted pair kan de rode piek omgekeerd zijn, waardoor het spanningsverschil (ΔU) verdubbelt en onbedoeld als een bit kan worden gedetecteerd.
Een signaal met veel ruis is visueel nauwelijks te beoordelen. Het is duidelijk dat er in dit voorbeeld sprake is van een storing bij een ECU of in een deel van het netwerk, waardoor zoveel ruis ontstaat. In het volgende datablok op hetzelfde scoopbeeld verloopt het signaal wel normaal. Met het rekenkanaal (paars) kan de differentiaalspanning tussen kanaal A en B worden weergegeven. Dit kanaal toont een correct verloop. Hieruit kunnen we concluderen dat twisted pair ervoor zorgt dat, ondanks de sterke ruis, een betrouwbaar signaal behouden blijft doordat er geen onbedoelde spanningsverschillen ontstaan. De ruis heeft dus geen invloed op de datacommunicatie. Hierdoor blijven de bits leesbaar, ook wanneer de signaalkwaliteit op het eerste gezicht volledig verloren lijkt.
Afsluitweerstanden:
In elk high speed CAN-busnetwerk worden afsluitweerstanden gebruikt. Deze zitten vaak in de nodes aan het einde van de CAN-busleiding (draad) of in de bedrading verwerkt. Deze weerstanden hebben elk een weerstand van 120Ω (Ohm). De vervangingsweerstand wordt gemeten als 60Ω bij een weerstandmeting op de draden.
Deze afsluitweerstanden dienen voor ontstoring; wanneer deze er niet zouden zitten, zou er reflectie ontstaan. Het spanningssignaal gaat door de CAN-busdraad heen, komt aan het einde en kaatst weer terug. Dat laatste wordt voorkomen. De spanning wordt opgenomen in de weerstand. Reflectie zou het weerkaatsen van spanningssignalen kunnen veroorzaken, waardoor de verzonden berichten beïnvloed worden en vervolgens de regelapparaten in storing komen te staan.

De onderstaande afbeelding toont het signaalverloop van de CAN-high en low waar veel oscillaties reflecties in het signaal te zien zijn. De reflecties ontstaan doordat delen van het signaal terugkaatsen op het punt waar de afsluiting ontbreekt, door ontbrekende of defecte afsluitweerstanden. Dit veroorzaakt overshoot, undershoot en natrillingen, zoals in het scoopbeeld zichtbaar is. Hoe slechter de afsluiting, hoe groter de reflectie en hoe onbetrouwbaarder het signaal. De signalen komen daardoor niet meer betrouwbaar over bij de ECU’s.
Gateway:
De auto is voorzien van een netwerk van regelapparaten (nodes). De gateway verbindt diverse CAN-busnetwerken (denk aan het interieur, de motor / transmissie en het onderstel), de MOST-bus, LIN-bus en Flexray met elkaar, waardoor alle netwerken met elkaar kunnen communiceren. Het is dus in feite een knooppunt tussen alle netwerken. De verschillen in snelheid tussen de netwerken zijn bij een gateway onbelangrijk. Klik hier om naar de pagina te gaan waar de werking en de functies van de Gateway beschreven worden.

CAN-bus diagnose:
Met een multimeter en een oscilloscoop kan er een diagnose gesteld worden door de weerstand of de spanningsniveaus op de draden te meten. Lees hier alles over op de pagina CAN-bus diagnose.
Gerelateerde pagina: