logo

CAN-protocol (Controller Area Network).

KAN staat voor Controllergebiednetwerk protocol. Het is een protocol dat is ontwikkeld door Robert Bosch rond 1986. Het CAN-protocol is een standaard die is ontworpen om de microcontroller en andere apparaten met elkaar te laten communiceren zonder dat er een hostcomputer nodig is. De eigenschap die het CAN-protocol uniek maakt ten opzichte van andere communicatieprotocollen is het broadcast-type bus. Uitzending betekent hier dat de informatie naar alle knooppunten wordt verzonden. Het knooppunt kan een sensor, microcontroller of een gateway zijn waarmee de computer via het netwerk kan communiceren via de USB-kabel of ethernetpoort. Het CAN is een op berichten gebaseerd protocol, wat betekent dat het bericht de berichtidentificatie draagt, en op basis van de identificatie wordt de prioriteit bepaald. Er is geen noodzaak voor knooppuntidentificatie in het CAN-netwerk, dus het wordt heel eenvoudig om het in het netwerk in te voegen of te verwijderen. Het is een serieel half-duplex en asynchrone communicatieprotocol. Het CAN is een tweedraads communicatieprotocol, omdat het CAN-netwerk is verbonden via de tweedraads bus. De draden zijn getwist paar met een impedantie van 120 Ω en zijn aan elk uiteinde aangesloten. Aanvankelijk was het vooral bedoeld voor communicatie binnen de voertuigen, maar het wordt inmiddels in veel andere contexten gebruikt. Net als UDS en KWP 2000 kan CAN ook worden gebruikt voor de boorddiagnose.

Waarom kan?

De behoefte aan een gecentraliseerd standaardcommunicatieprotocol kwam voort uit de toename van het aantal elektronische apparaten. Er kunnen bijvoorbeeld meer dan 7 TCU's zijn voor verschillende subsystemen, zoals dashboard, transmissieregeling, motorregeleenheid en nog veel meer in een modern voertuig. Als alle knooppunten één-op-één zijn verbonden, zou de snelheid van de communicatie erg hoog zijn, maar de complexiteit en de kosten van de draden zouden erg hoog zijn. In het bovenstaande voorbeeld heeft een enkel dashboard acht connectoren nodig. Om dit probleem op te lossen werd CAN geïntroduceerd als een gecentraliseerde oplossing waarvoor twee draden nodig zijn, namelijk CAN hoog en CAN laag. De oplossing van het gebruik van het CAN-protocol is behoorlijk efficiënt vanwege de berichtprioriteit, en flexibel omdat een knooppunt kan worden ingevoegd of verwijderd zonder het netwerk te beïnvloeden.

Toepassingen van het CAN-protocol

Aanvankelijk was het CAN-protocol ontworpen om het communicatieprobleem aan te pakken dat zich in de voertuigen voordoet. Maar later wordt het, vanwege de functies die het biedt, op verschillende andere gebieden gebruikt. Hieronder volgen de toepassingen van het CAN-protocol:

  • Automotive (personenauto's, vrachtwagens, bussen)
  • Elektronische apparatuur voor luchtvaart en navigatie
  • Industriële automatisering en mechanische besturing
  • Lift en roltrappen
  • Domotica
  • Medische instrumenten en apparatuur
  • Maritiem, medisch, industrieel, medisch

CAN-gelaagde architectuur

Zoals we weten is de OSI-model verdeelt het communicatiesysteem in 7 verschillende lagen. Maar de CAN-gelaagde architectuur bestaat uit twee lagen, d.w.z.

Laten we beide lagen begrijpen.

np punt
  • Datalinklaag: Deze laag is verantwoordelijk voor de gegevensoverdracht van knooppunt naar knooppunt. Hiermee kunt u de verbinding tot stand brengen en beëindigen. Het is ook verantwoordelijk voor het detecteren en corrigeren van de fouten die op de fysieke laag kunnen optreden. De datalinklaag is onderverdeeld in twee sublagen:
      MAC:MAC staat voor Media Access Control. Het definieert hoe apparaten in een netwerk toegang krijgen tot het medium. Het biedt inkapseling en decapsulatie van gegevens, foutdetectie en signalering.
  • LLC:LLC staat voor Logical Link Control. Het is verantwoordelijk voor het filteren van frameacceptatie, meldingen over overbelasting en herstelbeheer.
  • Fysieke laag: De fysieke laag is verantwoordelijk voor de overdracht van ruwe gegevens. Het definieert de specificaties voor de parameters zoals spanningsniveau, timing, datasnelheden en connector.

CAN-specificaties definiëren het CAN-protocol en de fysieke CAN-laag, die zijn gedefinieerd in de CAN-standaard ISO 11898. ISO 11898 bestaat uit drie delen:

  • ISO 11898-1: Dit deel bevat de specificatie van de datalinklaag en de fysieke signaallink.
  • ISO 11898-2: Dit onderdeel valt onder de fysieke CAN-laag voor CAN met hoge snelheid. De hoge snelheid CAN maakt datasnelheden tot 1 Mbps mogelijk die worden gebruikt in de aandrijflijn en het laadgebied van het voertuig.
  • ISO 11898-3: Dit onderdeel valt ook onder de fysieke CAN-laag voor CAN met lage snelheid. Het maakt datasnelheden tot 125 kbps mogelijk, en de lage snelheid CAN wordt gebruikt waar de snelheid van communicatie geen kritische factor is.

CiA DS-102: De volledige vorm van CiA is CAN in Automation, dat de specificaties voor de CAN-connector definieert.

Wat de implementatie betreft, worden de CAN-controller en CAN-transceiver met behulp van de applicatie-, besturingssysteem- en netwerkbeheerfuncties in de software geïmplementeerd.

CAN-framing

Laten we de structuur van het CAN-frame begrijpen.

CAN-protocol
    SOF:SOF staat voor start van frame, wat aangeeft dat het nieuwe frame in een netwerk wordt ingevoerd. Het is van 1 bit.Identificatie:Een standaardgegevensformaat gedefinieerd onder de CAN 2.0 A-specificatie gebruikt een 11-bits berichtidentificatie voor arbitrage. Kortom, deze berichtidentificatie stelt de prioriteit van het dataframe in.RTR:RTR staat voor Remote Transmission Request, dat het frametype definieert, of het nu een dataframe of een extern frame is. Het is van 1-bit.Controleveld:Het heeft door de gebruiker gedefinieerde functies.
      GAAN:Een IDE-bit in een besturingsveld staat voor identifier extension. Een dominante IDE-bit definieert de 11-bits standaardidentificatie, terwijl een recessieve IDE-bit de 29-bits uitgebreide identificatie definieert.DLC:DLC staat voor Data Length Code, wat de datalengte in een dataveld definieert. Het bestaat uit 4 bits.Dataveld:Het gegevensveld kan maximaal 8 bytes bevatten.
    CRC-veld:Het dataframe bevat ook een cyclisch redundantiecontroleveld van 15 bit, dat wordt gebruikt om de corruptie te detecteren als deze tijdens de transmissietijd optreedt. De afzender berekent de CRC voordat het dataframe wordt verzonden, en de ontvanger berekent ook de CRC en vergelijkt vervolgens de berekende CRC met de CRC die van de afzender is ontvangen. Als de CRC niet overeenkomt, genereert de ontvanger de fout.ACK-veld:Dit is de bevestiging van de ontvanger. Bij andere protocollen wordt een afzonderlijk pakket ter bevestiging verzonden nadat alle pakketten zijn ontvangen, maar bij het CAN-protocol wordt er geen afzonderlijk pakket verzonden ter bevestiging.EOF:EOF staat voor einde van frame. Het bevat 7 opeenvolgende recessieve bits, bekend als End of frame.

Nu zullen we zien hoe gegevens via het CAN-netwerk worden verzonden.

c structuur in structuur
CAN-protocol

Een CAN-netwerk bestaat uit meerdere CAN-knooppunten. In het bovenstaande geval hebben we drie CAN-knooppunten overwogen en deze knooppunt A, knooppunt B en knooppunt C genoemd. Het CAN-knooppunt bestaat uit drie elementen, die hieronder worden gegeven:

  • Gastheer
    Een host is een microcontroller of microprocessor die een applicatie uitvoert om een ​​specifieke taak uit te voeren. Een host bepaalt wat het ontvangen bericht betekent en welk bericht vervolgens moet worden verzonden.
  • CAN-controller
    CAN-controller verzorgt de communicatiefuncties beschreven door het CAN-protocol. Het activeert ook de verzending of de ontvangst van de CAN-berichten.
  • CAN-zendontvanger
    CAN-transceiver is verantwoordelijk voor het verzenden of ontvangen van de gegevens op de CAN-bus. Het zet het datasignaal om in de datastroom verzameld van de CAN-bus die de CAN-controller kan begrijpen.

In het bovenstaande diagram wordt een niet-afgeschermde, getwiste kabel gebruikt om de gegevens te verzenden of te ontvangen. Het is ook bekend als CAN-bus, en CAN-bus bestaat uit twee lijnen, d.w.z. CAN low-lijn en CAN high-lijn, die ook respectievelijk CANH en CANL worden genoemd. De transmissie vindt plaats vanwege de differentiële spanning die op deze lijnen wordt toegepast. De CAN maakt vanwege zijn omgeving gebruik van twisted pair-kabel en differentiële spanning. In een auto kunnen bijvoorbeeld de motor, het ontstekingssysteem en vele andere apparaten gegevensverlies en gegevensbeschadiging veroorzaken als gevolg van ruis. Het draaien van de twee lijnen vermindert ook het magnetische veld. De bus is aan elk uiteinde afgesloten met een weerstand van 120 Ω.

boom doorkruisen

CAN-kenmerken

CAN-protocol

Met behulp van differentiële spanning gaan we bepalen hoe 0 en 1 via de CAN-bus worden verzonden. De bovenstaande afbeelding is de spanningsgrafiek die het spanningsniveau van CAN laag en CAN hoog toont. In CAN-terminologie wordt gezegd dat logica 1 recessief is, terwijl logica 0 dominant is. Wanneer CAN hoge lijn en CAN lage lijn worden toegepast met 2,5 volt, dan zou de werkelijke differentiële spanning nul volt zijn. Een nul volt op de CAN-bus wordt door de CAN-transceiver gelezen als een recessieve of logische 1. Een nul volt op de CAN-bus is een ideale toestand van de bus. Wanneer de CAN-hoge lijn wordt opgetrokken tot 3,5 volt en de CAN-lage lijn wordt verlaagd tot 1,5 volt, dan zou de werkelijke differentiële spanning van de bus 2 volt zijn. Het wordt door de CAN-transceiver behandeld als een dominant bit of een logische 0. Als de busstatus dominant of logisch 0 wordt bereikt, wordt het onmogelijk om door een ander knooppunt naar de recessieve status te gaan.

Belangrijkste punten die zijn geleerd uit de CAN-kenmerken

  • Logica 1 is een recessieve toestand. Om er 1 op de CAN-bus te zenden, moeten zowel CAN high als CAN low met 2,5V worden aangelegd.
  • Logische 0 is een dominante toestand. Om 0 op de CAN-bus te verzenden, moet CAN High worden toegepast op 3,5 V en CAN Low moet worden toegepast op 1,5 V.
  • De ideale toestand van de bus is recessief.
  • Als het knooppunt de dominante toestand bereikt, kan het door geen enkel ander knooppunt terugkeren naar de recessieve toestand.

CAN-buslogica

CAN-protocol
CAN-protocol

Uit het bovenstaande scenario leren we dat de dominante staat de recessieve staat overschrijft. Wanneer het knooppunt tegelijkertijd het dominante en het recessieve bit verzendt, blijft de bus dominant. Het recessieve niveau treedt alleen op als alle knooppunten het recessieve bit verzenden. Dergelijke logica staat bekend als AND-logica en wordt fysiek geïmplementeerd als een open collectorcircuit.

CAN-communicatieprincipe

Zoals we weten, wordt het bericht verzonden op basis van de prioriteit die is ingesteld in het arbitrageveld. Voor het standaardframe is de berichtidentificatie 11 bit, terwijl voor het uitgebreide frame de berichtidentificatie 29 bit is. Hiermee kan de systeemontwerper de berichtidentificatie bij het ontwerp zelf ontwerpen. Hoe kleiner de bericht-ID, hoe hoger de berichtprioriteit.

Laten we begrijpen hoe arbitrage werkt via een stroomschema.

CAN-protocol (Controller Area Network).

De afzender wil het bericht verzenden en wacht tot de CAN-bus inactief wordt. Als de CAN-bus inactief is, verzendt de zender de SOF of de dominante bit voor de bustoegang. Vervolgens verzendt het de berichtidentificatiebit in de meest significante bit. Als het knooppunt het dominante bit op de bus detecteert terwijl het de recessieve bit heeft verzonden, betekent dit dat het knooppunt de arbitrage heeft verloren en stopt met het verzenden van verdere bits. De afzender wacht en verzendt het bericht opnieuw zodra de bus vrij is.

CAN-arbitragevoorbeeld

CAN-protocol

Als we drie knooppunten beschouwen, dat wil zeggen knooppunt 1, knooppunt 2 en knooppunt 3, zijn de berichtidentificaties van deze knooppunten respectievelijk 0x7F3, 0x6B3 en 0x6D9.

een array in Java
CAN-protocol

De transmissie van alle drie de knooppunten met het meest significante bit wordt weergegeven in het bovenstaande diagram.

elfebit: Omdat alle drie de bits van knooppunten recessief zijn, blijft de busbit ook recessief.

10ebit: Alle knooppunten hebben de 10e bit als recessief, dus de bus blijft ook recessief.

9ebit: Knooppunt 1 heeft een recessief bit terwijl andere knooppunten een dominant bit hebben, dus de bus blijft ook dominant. In dit geval heeft knooppunt 1 de arbitrage verloren en stopt het met het verzenden van bits.

8ebit: Zowel knooppunt 2 als knooppunt 3 zenden een recessief bit uit, zodat de busstatus recessief blijft.

7ebit: Het knooppunt 2 verzendt een dominant bit terwijl knooppunt 3 een recessief bit heeft verzonden, zodat de busstatus dominant blijft. In dit geval heeft knooppunt 3 de arbitrage verloren, dus stopt het met het verzenden van het bericht terwijl knooppunt 2 de arbitrage heeft gewonnen, wat betekent dat het de bus zal blijven vasthouden totdat het bericht is ontvangen.

if else-verklaring java