Innehållsförteckning:

En enkel handledning för CANBUS: 8 steg
En enkel handledning för CANBUS: 8 steg

Video: En enkel handledning för CANBUS: 8 steg

Video: En enkel handledning för CANBUS: 8 steg
Video: LÄR DIG ATT RITA EN SÖT OCH ROLIG VATTENMELON - STEG FÖR STEG GUIDE 2024, November
Anonim
En enkel handledning för CANBUS
En enkel handledning för CANBUS

Jag har studerat CAN i tre veckor, och nu har jag slutfört några ansökningar för att validera mina inlärningsresultat. I denna handledning lär du dig hur du använder Arduino för att implementera CANBUS -kommunikation. Om du har några förslag, välkommen att lämna ett meddelande.

Tillbehör:

Hårdvara:

  • Maduino Zero CANBUS
  • DHT11 temperatur- och luftfuktighetsmodul
  • 1,3 "I2C OLED 128x64- Blå
  • DB9 till DB9 kabel (hona till hona)
  • Dupont Line

Programvara:

Arduino IDE

Steg 1: Vad är CANBUS

Vad är CANBUS
Vad är CANBUS
Vad är CANBUS
Vad är CANBUS

Om CAN

CAN (Controller Area Network) är ett seriellt kommunikationsnätverk som kan realisera distribuerad realtidskontroll. Det är utvecklat för bilindustrin att ersätta den komplexa ledningsnätet med en tvåtrådsbuss.

CAN -protokollet definierar datalänkskiktet och en del av det fysiska skiktet i OSI -modellen.

CAN -protokollet är ISO -standardiserat med ISO11898 och ISO11519. ISO11898 är CAN-höghastighetskommunikationsstandarden med en kommunikationshastighet på 125 kbps-1 Mbps. ISO11519 är CAN låghastighets kommunikationsstandard med en kommunikationshastighet på mindre än 125 kbps.

Här fokuserar vi på höghastighets CAN.

ISO-11898 beskriver hur information skickas mellan enheter i ett nätverk och överensstämmer med Open Systems Interconnection-modellen (OSI) som definieras i termer av lager. Den faktiska kommunikationen mellan enheter som är anslutna av det fysiska mediet definieras av modellens fysiska lager

  • Varje CAN -enhet som är ansluten till bussen kan kallas en nod. Alla CAN -enheter är anslutna till en buss som avslutas i varje ände med 120 Ω motstånd för att bilda ett nätverk. Bussen består av CAN_H och CAN_L linjer. CAN -regulatorn bestämmer bussnivån baserat på skillnaden i effektnivån på båda ledningarna. Bussnivåer är indelade i dominerande och recessiva nivåer, vilket måste vara en av dem. Avsändaren skickar meddelandet till mottagaren genom att göra en ändring på bussnivå. När den logiska linjen "och" exekveras på bussen är den dominerande nivån "0" och den recessiva nivån är "1".
  • I det dominerande tillståndet är spänningen för CAN_H cirka 3,5V och spänningen för CAN_L är cirka 1,5V. I recessivt tillstånd är spänningen på båda ledningarna runt 2,5V.
  • Signalen är differential, varför CAN härleder sin robusta bullerimmunitet och feltolerans. Balanserad differentialsignal minskar bruskopplingen och möjliggör höga signalhastigheter över en tvinnad kabel. Strömmen i varje signalledning är lika men i motsatt riktning och resulterar i en fältreducerande effekt som är nyckeln till låga bulleremissioner. Användningen av balanserade differentialmottagare och tvinnade parkablar förbättrar vanligt avslag och hög brusimmunitet hos en CAN-buss.

KAN Sändtagare

CAN -sändtagaren är ansvarig för konverteringen mellan logiknivån och den fysiska signalen. Konvertera en logisk signal till en differentialnivå eller en fysisk signal till en logisk nivå.

CAN -styrenhet

CAN -styrenheten är kärnkomponenten i CAN, som realiserar alla funktioner i datalänkskiktet i CAN -protokollet och kan automatiskt lösa CAN -protokollet.

MCU

MCU är ansvarig för kontrollen av funktionskretsen och CAN -styrenheten. Till exempel initieras parametrarna för CAN -styrenheten när noden startar, CAN -ramen läses och skickas via CAN -styrenheten etc.

Steg 2: Om CAN -kommunikation

När bussen är inaktiv kan alla noder börja skicka meddelanden (multi-master kontroll). Noden som först kommer åt bussen får rätt att skicka (CSMA/CA -läge). När flera noder börjar skicka samtidigt får noden som skickar det högprioriterade ID -meddelandet rätt att skicka.

I CAN -protokollet skickas alla meddelanden i ett fast format. När bussen är inaktiv kan alla enheter som är anslutna till bussen börja skicka nya meddelanden. När mer än två celler börjar skicka meddelanden samtidigt bestäms prioriteten utifrån identifieraren. ID: t representerar inte sändarens destinationsadress, utan snarare prioriteten för meddelandet som kommer till bussen. När mer än två celler börjar skicka meddelanden samtidigt, arbitreras varje bit av det räntefria IDet en efter en. Enheten som vinner skiljeförfarandet kan fortsätta att skicka meddelanden, och den enhet som förlorar skiljeförfarandet slutar omedelbart skicka och tar emot arbetet.

CAN -bussen är en sändningstyp av buss. Detta innebär att alla noder kan "höra" alla sändningar. alla noder kommer alltid att plocka upp all trafik. CAN -hårdvaran tillhandahåller lokal filtrering så att varje nod endast kan reagera på intressanta meddelanden.

Steg 3: Ramar

Ramar
Ramar

CAN -enheter skickar data över CAN -nätverket i paket som kallas ramar. CAN har fyra ramtyper:

  • Dataram: en ram som innehåller noddata för överföring
  • Fjärrram: en ram som begär överföring av en specifik identifierare
  • Felram: en ram överförd av valfri nod som upptäcker ett fel
  • Överbelastningsram: en ram för att injicera en fördröjning mellan data eller fjärrram

Dataram

Det finns två typer av dataramar, standard och utökade.

Betydelsen av bitens fält i figuren är:

  • SOF - Den enda dominerande starten på ramen (SOF) -biten markerar början på meddelandet och används för att synkronisera noder på en buss efter att ha varit inaktiv.
  • Identifier-Standard CAN 11-bitars identifieraren fastställer meddelandets prioritet. Ju lägre binärt värde desto högre prioritet.
  • RTR - Den enda fjärröverföringsbegäran (RTR) -biten
  • IDE - En dominerande enkel identifierare -förlängning (IDE) betyder att en standard CAN -identifierare utan tillägg överförs.
  • R0 – Reserverad bit (för möjlig användning av framtida standardändringar).
  • DLC-4-bitars datalängdskoden (DLC) innehåller antalet byte data som överförs.
  • Data - Upp till 64 bitar applikationsdata kan överföras.
  • CRC – 16-bitars (15 bitar plus avgränsare) cyklisk redundanskontroll (CRC) innehåller kontrollsummen (antal bitar som överförs) för föregående applikationsdata för feldetektering.
  • ACK – ACK är 2 bitar, en är kvitteringsbiten och den andra är en avgränsare.
  • EOF – Detta 7-bitars fält i slutet av ramen (EOF) markerar slutet på en CAN-ram (meddelande) och inaktiverar bitstuffing, vilket indikerar ett fyllningsfel när det är dominant. När 5 bitar av samma logiska nivå inträffar i följd under normal drift, stoppas lite av den motsatta logiska nivån i data.
  • IFS-Detta 7-bitars interram-utrymme (IFS) innehåller den tid som styrenheten behöver för att flytta en korrekt mottagen ram till sin rätta position i ett meddelandebuffertområde.

Skiljedom

I bussens viloläge får enheten som börjar skicka meddelandet först sändningsrätten. När flera enheter börjar sända samtidigt börjar varje sändningsenhet vid den första biten i skiljedomsegmentet. Enheten med det största antalet kontinuerliga utgående dominerande nivåer kan fortsätta att skicka.

Steg 4: Hastighet och distans

Hastighet och distans
Hastighet och distans

CAN -bussen är en buss som ansluter flera enheter samtidigt. Det finns teoretiskt sett ingen gräns för det totala antalet enheter som kan anslutas. I praktiken begränsas dock antalet enheter som kan anslutas av tidsfördröjningen på bussen och den elektriska belastningen. Minska kommunikationshastigheten, öka antalet enheter som kan anslutas och öka kommunikationshastigheten, antalet enheter som kan anslutas minskar.

Kommunikationsavståndet är omvänt relaterat till kommunikationshastigheten, och ju längre kommunikationsavståndet är, desto mindre är kommunikationshastigheten. Den längre sträckan kan vara 1km eller mer, men hastigheten är mindre än 40kps.

Steg 5: Hårdvara

Hårdvara
Hårdvara

Maduino Zero CAN-BUS-modulen är ett verktyg som utvecklats av Makerfabs för CANbus-kommunikation.

  • MCP2515 är en fristående CAN-styrenhet som implementerar CAN-specifikationen. Den kan överföra och ta emot både standard och utökad data och fjärrbilder.
  • MAX3051 -gränssnittet mellan CAN -protokollstyrenheten och de fysiska ledningarna för busslinjerna i ett CAN (controller area network). MAX3051 ger differentiell överföringskapacitet till bussen och differentiell mottagningskapacitet till CAN -styrenheten.

Steg 6: Anslutning

Förbindelse
Förbindelse

Anslut DHT11-modulen till Maduino Zero CAN-BUS-modulen med kablar som ska användas som ett instrument för att stödja CAN-kommunikation. Anslut på samma sätt bildskärmen till modulen för att ta emot data och visa den.

Anslutningen mellan Maduino Zero CANBUS och DHT11:

Maduino Zero CANBUS - DHT11

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

Anslutningen mellan Maduino Zero CANBUS och OLED:

Maduino Zero CANBUS - OLED

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

Använd en DB9 -kabel för att ansluta de två Maduino Zero CANBUS -modulerna.

Steg 7: Kod

MAX3051 slutför omvandlingen av differentialnivåer till logiska signaler. MCP2515 kompletterar CAN -funktion som datakodning och avkodning. MCU behöver bara initiera styrenheten och skicka och ta emot data.

  • Github:
  • Efter installationen av Arduino finns det inget paket som stöder kortet (Arduino zero) som behöver installeras.
  • Välj verktyg -> Board -> Board Manager, sök "Arduino zero" och installera "Arduino SAMD Boards".
  • Välj Verktyg -> Kort -> Arduino Zero (Native USB -port), välj Verktyg -> Port -> kom …
  • Efter att ha fått programmet från GitHub måste du se till att alla filer finns i projektkatalogen, som innehåller biblioteksfiler som stöder CANBUS.
  • Installera DHT -sensorbiblioteket från Adafruit, som används för att driva DHT11 för att få temperatur och luftfuktighet.
  • Använd olika adresser för att skicka temperatur och luftfuktighet separat i koden Test_DHT11.ino.

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

fördröjning (500); CAN.sendMsgBuf (0x11, 0, stmp2.length (), stmp_send2); fördröjning (500);

"0x10" betyder meddelande -ID, "0" är standardram, "stmp1.length ()" betyder meddelandelängd, "stmp_send1" är data som skickas.

  • I koden Test_OLED.ino tas alla meddelanden på CANBUS emot genom förfrågan och nödvändig information visas på OLED.
  • Ladda upp programmet Maduino-CANbus-RS485/Test_DHT11_OLED/Test_DHT11/Test_DHT11.ino till modulen som är ansluten till sensorn och ladda upp programmet Maduino-CANbus RS485/Test_DHT11_OLED/Test_OLED/Test_OLED.ino till en annan modul som är ansluten till OLED.

Steg 8: Visa

Show
Show
Show
Show

Strömmen på de två modulerna, temperatur och luftfuktighet visas på displayen.

Rekommenderad: