Innholdsfortegnelse:

En enkel opplæring for CANBUS: 8 trinn
En enkel opplæring for CANBUS: 8 trinn

Video: En enkel opplæring for CANBUS: 8 trinn

Video: En enkel opplæring for CANBUS: 8 trinn
Video: WEBINAR // Smartere brøyting og vedlikehold av vei 2024, November
Anonim
En enkel opplæring for CANBUS
En enkel opplæring for CANBUS

Jeg har studert KAN i tre uker, og nå har jeg fullført noen søknader for å validere læringsresultatene mine. I denne opplæringen lærer du hvordan du bruker Arduino til å implementere CANBUS -kommunikasjon. Hvis du har forslag, er du velkommen til å legge igjen en melding.

Rekvisita:

Maskinvare:

  • Maduino Zero CANBUS
  • DHT11 temperatur- og fuktighetsmodul
  • 1,3 "I2C OLED 128x64- Blå
  • DB9 til DB9 kabel (hunn til hunn)
  • Dupont Line

Programvare:

Arduino IDE

Trinn 1: Hva er CANBUS

Hva er CANBUS
Hva er CANBUS
Hva er CANBUS
Hva er CANBUS

Om CAN

CAN (Controller Area Network) er et serielt kommunikasjonsnettverk som kan realisere distribuert sanntidskontroll. Den er utviklet for bilindustrien for å erstatte den komplekse ledningsnettet med en to-leder buss.

CAN -protokollen definerer datalinklaget og en del av det fysiske laget i OSI -modellen.

CAN -protokollen er ISO standardisert med ISO11898 og ISO11519. ISO11898 er CAN høyhastighets kommunikasjonsstandard med en kommunikasjonshastighet på 125 kbps-1 Mbps. ISO11519 er CAN lavhastighets kommunikasjonsstandard med en kommunikasjonshastighet på mindre enn 125 kbps.

Her fokuserer vi på høyhastighets CAN.

ISO-11898 beskriver hvordan informasjon sendes mellom enheter på et nettverk og samsvarer med Open Systems Interconnection-modellen (OSI) som er definert i form av lag. Den faktiske kommunikasjonen mellom enheter som er tilkoblet av det fysiske mediet, er definert av modellens fysiske lag

  • Hver CAN -enhet som er koblet til bussen, kan kalles en node. Alle CAN -enheter er koblet til en buss som er avsluttet i hver ende med 120 Ω motstander for å danne et nettverk. Bussen består av CAN_H og CAN_L linjer. CAN -kontrolleren bestemmer bussnivået basert på forskjellen i effektnivået på begge ledningene. Bussnivåer er delt inn i dominerende og recessive nivåer, som må være et av dem. Avsenderen sender meldingen til mottakeren ved å gjøre en endring på bussnivå. Når den logiske linjen "og" blir utført på bussen, er det dominerende nivået "0" og det recessive nivået er "1".
  • I den dominerende tilstanden er spenningen til CAN_H omtrent 3,5V og spenningen til CAN_L er omtrent 1,5V. I recessiv tilstand er spenningen til begge linjene rundt 2,5V.
  • Signalet er differensielt, og derfor får CAN sin robuste støyimmunitet og feiltoleranse. Balansert differensialsignal reduserer støykobling og gir mulighet for høye signalhastigheter over kablet kabel. Strømmen i hver signallinje er lik, men i motsatt retning og resulterer i en feltdempende effekt som er nøkkelen til lave støyutslipp. Bruken av balanserte differensialmottakere og snoede parkabler forbedrer vanlig modus avvisning og høy støyimmunitet til en CAN-buss.

CAN -mottaker

CAN Transceiver er ansvarlig for konverteringen mellom det logiske nivået og det fysiske signalet. Konverter et logisk signal til et differensialnivå eller et fysisk signal til et logisk nivå.

CAN -kontroller

CAN -kontrolleren er kjernekomponenten i CAN, som realiserer alle funksjonene til datalinklaget i CAN -protokollen og kan automatisk løse CAN -protokollen.

MCU

MCU er ansvarlig for kontrollen av funksjonskretsen og CAN -kontrolleren. For eksempel initialiseres CAN -kontrollparameterne når noden starter, CAN -rammen leses og sendes gjennom CAN -kontrolleren, etc.

Trinn 2: Om CAN -kommunikasjon

Når bussen er inaktiv, kan alle noder begynne å sende meldinger (multi-master kontroll). Noden som først får tilgang til bussen får rett til å sende (CSMA/CA -modus). Når flere noder begynner å sende samtidig, får noden som sender ID -meldingen med høy prioritet rett til å sende.

I CAN -protokollen sendes alle meldingene i et fast format. Når bussen er inaktiv, kan alle enheter som er koblet til bussen begynne å sende nye meldinger. Når mer enn to celler begynner å sende meldinger samtidig, bestemmes prioriteten basert på identifikatoren. ID -en representerer ikke destinasjonsadressen til sendingen, men snarere prioriteten til meldingen som får tilgang til bussen. Når mer enn to celler begynner å sende meldinger samtidig, arbitreres hver bit av den interessefrie ID-en en etter en. Enheten som vinner voldgiften kan fortsette å sende meldinger, og enheten som taper voldgiften slutter umiddelbart å sende og mottar arbeidet.

CAN -bussen er en kringkastingstype buss. Dette betyr at alle noder kan 'høre' alle overføringer. alle noder vil alltid plukke opp all trafikk. CAN -maskinvaren gir lokal filtrering slik at hver node bare kan reagere på interessante meldinger.

Trinn 3: Rammer

Rammer
Rammer

CAN -enheter sender data over CAN -nettverket i pakker som kalles rammer. CAN har fire rammetyper:

  • Dataramme: en ramme som inneholder nodedata for overføring
  • Ekstern ramme: en ramme som ber om overføring av en spesifikk identifikator
  • Feilramme: en ramme overført av en hvilken som helst node som oppdager en feil
  • Overbelastningsramme: en ramme for å injisere en forsinkelse mellom data eller ekstern ramme

Dataramme

Det er to typer datarammer, standard og utvidet.

Betydningen av bitfeltene i figuren er:

  • SOF - Den enkelt dominerende starten på rammen (SOF) -biten markerer starten på meldingen, og brukes til å synkronisere nodene på en buss etter å ha vært inaktiv.
  • Identifier-Standard CAN 11-bits identifikator fastslår prioriteten til meldingen. Jo lavere binærverdi, desto høyere prioritet.
  • RTR - Den enkelte fjernoverføringsforespørselen (RTR) -biten
  • IDE - En dominerende single identifier extension (IDE) bit betyr at en standard CAN -identifikator uten utvidelse blir overført.
  • R0 - Reservert bit (for mulig bruk av fremtidig standardendring).
  • DLC-4-biters datalengdekoden (DLC) inneholder antall byte med data som overføres.
  • Data - Opptil 64 biter applikasjonsdata kan overføres.
  • CRC-16-biters (15 bits pluss skilletegn) syklisk redundanskontroll (CRC) inneholder kontrollsummen (antall bits overført) for de foregående applikasjonsdataene for feildeteksjon.
  • ACK - ACK er 2 bits, en er bekreftelsesbiten og den andre er en skilletegn.
  • EOF-Dette slutten av rammen (EOF), 7-bits feltet markerer slutten på en CAN-ramme (melding) og deaktiverer bitstuffing, noe som indikerer en fyllingsfeil når den er dominerende. Når 5 biter av samme logiske nivå forekommer etter hverandre under normal drift, blir litt av det motsatte logiske nivået fylt inn i dataene.
  • IFS-Dette 7-biters mellomromsområdet (IFS) inneholder tiden som kontrolleren krever for å flytte en riktig mottatt ramme til riktig posisjon i et meldingsbufferområde.

Megling

I bussens inaktiv tilstand får enheten som begynner å sende meldingen først sendingsretten. Når flere enheter begynner å sende samtidig, starter hver sendeenhet på den første biten i voldgiftssegmentet. Enheten med det største antallet kontinuerlige output -dominerende nivåer kan fortsette å sende.

Trinn 4: Hastighet og avstand

Hastighet og avstand
Hastighet og avstand

CAN -bussen er en buss som kobler flere enheter samtidig. Det er teoretisk sett ingen grense for det totale antallet enheter som kan kobles til. I praksis er imidlertid antall enheter som kan kobles til begrenset av tidsforsinkelsen på bussen og den elektriske belastningen. Reduser kommunikasjonshastigheten, øk antall enheter som kan kobles til, og øk kommunikasjonshastigheten, antallet enheter som kan kobles til reduseres.

Kommunikasjonsavstanden er omvendt relatert til kommunikasjonshastigheten, og jo lenger kommunikasjonsavstanden er, jo mindre blir kommunikasjonshastigheten. Den lengre distansen kan være 1km eller mer, men hastigheten er mindre enn 40kps.

Trinn 5: Maskinvare

Maskinvare
Maskinvare

Maduino Zero CAN-BUS-modulen er et verktøy utviklet av Makerfabs for CANbus-kommunikasjon-den er basert på Arduino, med CAN-kontrolleren og CAN-mottakeren, for å lage en klar-til-bruk CAN-bussport.

  • MCP2515 er en frittstående CAN-kontroller som implementerer CAN-spesifikasjonen. Den er i stand til å overføre og motta både standard og utvidet data og eksterne rammer.
  • MAX3051 grensesnittet mellom CAN -protokollkontrolleren og de fysiske ledningene til busslinjene i et controller area network (CAN). MAX3051 gir differensiell overføringskapasitet til bussen og differensialmottakskapasitet til CAN -kontrolleren.

Trinn 6: Tilkobling

Forbindelse
Forbindelse

Koble DHT11-modulen til Maduino Zero CAN-BUS-modulen med ledninger som skal brukes som et instrument for å støtte CAN-kommunikasjon. På samme måte kan du koble skjermen til modulen for å motta dataene og vise dem.

Forbindelsen mellom Maduino Zero CANBUS og DHT11:

Maduino Zero CANBUS - DHT11

3v3 ------ VCC GND ------ GND D10 ------ DATA

Forbindelsen mellom Maduino Zero CANBUS og OLED:

Maduino Zero CANBUS - OLED

3v3 ------ VCC GND ------ GND SCL ------ SCL SDA ------ SDA

Bruk en DB9 -kabel for å koble de to Maduino Zero CANBUS -modulene.

Trinn 7: Kode

MAX3051 fullfører konverteringen av differensialnivåer til logiske signaler. MCP2515 fullfører CAN -funksjonen, for eksempel datakoding og dekoding. MCU trenger bare å initialisere kontrolleren og sende og motta data.

  • Github:
  • Etter installert Arduino er det ingen pakke for å støtte kortet (Arduino zero) som må installeres.
  • Velg verktøy -> Board -> Board Manager, søk "Arduino zero" og installer "Arduino SAMD Boards".
  • Velg Tools -> Board -> Arduino Zero (Native USB Port), velg Tools -> Port -> com …
  • Etter at du har fått programmet fra GitHub, må du sørge for at alle filene er i prosjektkatalogen, som inneholder biblioteksfiler som støtter CANBUS.
  • Installer DHT -sensorbiblioteket av Adafruit, som brukes til å drive DHT11 for å oppnå temperatur og fuktighet.
  • Bruk forskjellige adresser til å sende temperatur og fuktighet separat i koden Test_DHT11.ino.

CAN.sendMsgBuf (0x10, 0, stmp1.length (), stmp_send1);

forsinkelse (500); CAN.sendMsgBuf (0x11, 0, stmp2.length (), stmp_send2); forsinkelse (500);

"0x10" betyr meldings -ID, "0" er standard ramme, "stmp1.length ()" betyr lengden på meldingen, "stmp_send1" er dataene som sendes.

  • I koden Test_OLED.ino mottas alle meldinger på CANBUSEN etter forespørsel og nødvendig informasjon vises på OLED.
  • Last opp programmet Maduino-CANbus-RS485/Test_DHT11_OLED/Test_DHT11/Test_DHT11.ino til modulen som er koblet til sensoren, og Last opp programmet Maduino-CANbus RS485/Test_DHT11_OLED/Test_OLED/Test_OLED.ino til en annen modul som er koblet til OLED.

Trinn 8: Vis

Forestilling
Forestilling
Forestilling
Forestilling

Strøm på de to modulene, temperatur og fuktighet vises på displayet.

Anbefalt: