Cuprins:

Un tutorial simplu pentru CANBUS: 8 pași
Un tutorial simplu pentru CANBUS: 8 pași

Video: Un tutorial simplu pentru CANBUS: 8 pași

Video: Un tutorial simplu pentru CANBUS: 8 pași
Video: How to Set CANBUS Settings on an Android Car Radio 2024, Iulie
Anonim
Un tutorial simplu pentru CANBUS
Un tutorial simplu pentru CANBUS

Am studiat CAN de trei săptămâni și acum am finalizat câteva aplicații pentru a-mi valida rezultatele învățării. În acest tutorial, veți învăța cum să utilizați Arduino pentru a implementa comunicarea CANBUS. Dacă aveți sugestii, vă rugăm să lăsați un mesaj.

Provizii:

Hardware:

  • Maduino Zero CANBUS
  • Modul de temperatură și umiditate DHT11
  • 1.3 "I2C OLED 128x64- Albastru
  • Cablu DB9 la DB9 (de la mamă la mamă)
  • Linia Dupont

Software:

IDE Arduino

Pasul 1: Ce este CANBUS

Ce este CANBUS
Ce este CANBUS
Ce este CANBUS
Ce este CANBUS

Despre CAN

CAN (Controller Area Network) este o rețea de comunicații seriale care poate realiza un control distribuit în timp real. Este dezvoltat pentru industria auto pentru a înlocui cablajul complex cu un autobuz cu două fire.

Protocolul CAN definește stratul de legătură de date și o parte din stratul fizic în modelul OSI.

Protocolul CAN este standardizat ISO cu ISO11898 și ISO11519. ISO11898 este standardul de comunicare de mare viteză CAN cu o viteză de comunicație de 125kbps-1Mbps. ISO11519 este standardul de comunicare CAN cu viteză redusă cu o viteză de comunicație mai mică de 125kbps.

Aici ne concentrăm pe CAN de mare viteză.

ISO-11898 descrie modul în care informațiile sunt transmise între dispozitivele dintr-o rețea și se conformează modelului de interconectare a sistemelor deschise (OSI) care este definit în termeni de straturi. Comunicarea efectivă între dispozitivele conectate de mediul fizic este definită de stratul fizic al modelului

  • Fiecare unitate CAN conectată la magistrală poate fi numită nod. Toate unitățile CAN sunt conectate la o magistrală terminată la fiecare capăt cu rezistențe de 120 Ω pentru a forma o rețea. Autobuzul este format din linii CAN_H și CAN_L. Controlerul CAN determină nivelul magistralei pe baza diferenței de nivel de putere pe ambele fire. Nivelurile autobuzelor sunt împărțite în niveluri dominante și recesive, care trebuie să fie unul dintre ele. Expeditorul trimite mesajul către receptor făcând o schimbare la nivelul autobuzului. Când linia logică "și" este executată pe magistrală, nivelul dominant este "0", iar nivelul recesiv este "1".
  • În starea dominantă, tensiunea CAN_H este de aproximativ 3,5V, iar tensiunea CAN_L este de aproximativ 1,5V. În starea recesivă, tensiunea ambelor linii este în jur de 2,5V.
  • Semnalul este diferențial, de aceea CAN își obține imunitatea robustă la zgomot și toleranța la erori. Semnalul diferențial echilibrat reduce cuplarea zgomotului și permite rate de semnalizare ridicate prin cablu cu perechi răsucite. Curentul din fiecare linie de semnal este egal, dar în direcția opusă, rezultând un efect de anulare a câmpului, care este esențial pentru emisiile de zgomot reduse. Utilizarea receptoarelor diferențiale echilibrate și a cablării cu perechi răsucite îmbunătățește respingerea modului comun și imunitatea ridicată la zgomot a unei magistrale CAN.

Transmițător CAN

Transmițătorul CAN este responsabil pentru conversia dintre nivelul logic și semnalul fizic. Convertiți un semnal logic la un nivel diferențial sau un semnal fizic la un nivel logic.

Controler CAN

Controlerul CAN este componenta de bază a CAN, care realizează toate funcțiile stratului de legătură de date din protocolul CAN și poate rezolva automat protocolul CAN.

MCU

MCU este responsabil pentru controlul circuitului funcțional și al controlerului CAN. De exemplu, parametrii controlerului CAN sunt inițializați când pornește nodul, cadrul CAN este citit și trimis prin intermediul controlerului CAN etc.

Pasul 2: Despre comunicările CAN

Când magistrala este inactivă, toate nodurile pot începe să trimită mesaje (control multi-master). Nodul care accesează mai întâi autobuzul are dreptul de a trimite (modul CSMA / CA). Când mai multe noduri încep să trimită în același timp, nodul care trimite mesajul ID cu prioritate ridicată are dreptul de a trimite.

În protocolul CAN, toate mesajele sunt trimise într-un format fix. Când autobuzul este inactiv, toate unitățile conectate la autobuz pot începe să trimită mesaje noi. Când mai mult de două celule încep să trimită mesaje în același timp, prioritatea este determinată pe baza identificatorului. ID-ul nu reprezintă adresa de destinație a expedierii, ci mai degrabă prioritatea mesajului care accesează autobuzul. Când mai mult de două celule încep să trimită mesaje în același timp, fiecare bit al ID-ului fără dobândă este arbitrat unul câte unul. Unitatea care câștigă arbitrajul poate continua să trimită mesaje, iar unitatea care pierde arbitrajul încetează imediat trimiterea și primește lucrarea.

Autobuzul CAN este un tip de autobuz difuzat. Aceasta înseamnă că toate nodurile pot „auzi” toate transmisiile. toate nodurile vor prelua invariabil tot traficul. Hardware-ul CAN oferă filtrare locală, astfel încât fiecare nod să poată reacționa numai la mesajele interesante.

Pasul 3: Rame

Rame
Rame

Dispozitivele CAN trimit date prin rețeaua CAN în pachete numite cadre. CAN are patru tipuri de cadre:

  • Cadru de date: un cadru care conține date nod pentru transmisie
  • Cadru la distanță: un cadru care solicită transmiterea unui identificator specific
  • Cadru de eroare: un cadru transmis de orice nod care detectează o eroare
  • Cadru de suprasarcină: un cadru pentru a injecta o întârziere între date sau cadru la distanță

Cadru de date

Există două tipuri de cadre de date, standard și extins.

Semnificația câmpurilor de biți din figură sunt:

  • SOF – bitul de start unic al cadrului dominant (SOF) marchează începutul mesajului și este utilizat pentru a sincroniza nodurile de pe un autobuz după ce a fost inactiv.
  • Identificator - Identificatorul standard CAN pe 11 biți stabilește prioritatea mesajului. Cu cât valoarea binară este mai mică, cu atât este mai mare prioritatea acesteia.
  • RTR – bitul cererii de transmisie la distanță unică (RTR)
  • IDE - Un bit dominant extensie identificator unic (IDE) înseamnă că un identificator CAN standard fără extensie este transmis.
  • R0 – Bit rezervat (pentru o posibilă utilizare prin viitoare modificări standard).
  • DLC – Codul de lungime a datelor pe 4 biți (DLC) conține numărul de octeți de date transmise.
  • Date – Până la 64 de biți de date ale aplicației pot fi transmise.
  • CRC - Verificarea redundanței ciclice pe 16 biți (15 biți plus delimitator) (CRC) conține suma de control (numărul de biți transmis) a datelor aplicației precedente pentru detectarea erorilor.
  • ACK – ACK are 2 biți, unul este bitul de confirmare și al doilea este un delimitator.
  • EOF – Acest câmp de 7 biți de sfârșit de cadru (EOF) marchează sfârșitul unui cadru CAN (mesaj) și dezactivează bitstuffing, indicând o eroare de umplere atunci când este dominantă. Când 5 biți de același nivel logic apar în succesiune în timpul funcționării normale, un pic de nivel logic opus este introdus în date.
  • IFS – Acest spațiu interframe de 7 biți (IFS) conține timpul necesar controlerului pentru a muta un cadru recepționat corect în poziția corectă într-o zonă tampon de mesaje.

Arbitraj

În starea de mers în gol a autobuzului, unitatea care începe să trimită mesajul primește mai întâi dreptul de trimitere. Când mai multe unități încep să trimită în același timp, fiecare unitate de trimitere începe la primul bit al segmentului de arbitraj. Unitatea cu cel mai mare număr de niveluri dominante de ieșire continuă poate continua să trimită.

Pasul 4: Viteză și distanță

Viteza și distanța
Viteza și distanța

Autobuzul CAN este un autobuz care conectează mai multe unități în același timp. Teoretic nu există nicio limită la numărul total de unități care pot fi conectate. În practică, însă, numărul de unități care pot fi conectate este limitat de întârzierea pe autobuz și de sarcina electrică. Reduceți viteza de comunicare, creșteți numărul de unități care pot fi conectate și creșteți viteza de comunicație, numărul de unități care pot fi conectate scade.

Distanța de comunicare este invers legată de viteza de comunicare și, cu cât distanța de comunicare este mai mare, cu atât este mai mică viteza de comunicare. Distanța mai mare poate fi de 1 km sau mai mult, dar viteza este mai mică de 40kps.

Pasul 5: Hardware

Hardware
Hardware

Modulul CAN-BUS Maduino Zero este un instrument dezvoltat de Makerfabs pentru comunicarea CANbus based se bazează pe Arduino, cu controler CAN și transceiver CAN, pentru a crea un port CAN-bus gata de utilizat.

  • MCP2515 este un controler CAN autonom care implementează specificația CAN. Este capabil să transmită și să recepționeze atât date standard cât și extinse și cadre la distanță.
  • Interfețele MAX3051 între controlerul de protocol CAN și firele fizice ale liniilor de magistrală într-o rețea de zonă a controlerului (CAN). MAX3051 oferă capacitatea de transmisie diferențială către magistrală și capacitatea de recepție diferențială către controlerul CAN.

Pasul 6: Conexiune

Conexiune
Conexiune

Conectați modulul DHT11 la modulul CAN-BUS Maduino Zero cu fire pentru a fi utilizate ca instrument de susținere a comunicării CAN. În mod similar, conectați afișajul la modul pentru a primi datele și a le afișa.

Conexiunea dintre Maduino Zero CANBUS și DHT11 :

Maduino Zero CANBUS - DHT11

3v3 ------ VCC GND ------ GND D10 ------ DATE

Conexiunea dintre Maduino Zero CANBUS și OLED :

Maduino Zero CANBUS - OLED

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

Utilizați un cablu DB9 pentru a conecta cele două module Maduino Zero CANBUS.

Pasul 7: Cod

MAX3051 finalizează conversia nivelurilor diferențiale în semnale logice. MCP2515 completează funcția CAN, cum ar fi codificarea și decodarea datelor. MCU trebuie doar să inițializeze controlerul și să trimită și să primească date.

  • Github:
  • După instalarea Arduino, nu există niciun pachet care să susțină placa (Arduino zero) care este necesar pentru a fi instalat.
  • Selectați instrumentele -> Board -> Board Manager, căutați „Arduino zero” și instalați „Arduino SAMD Boards”.
  • Selectați Instrumente -> Placă -> Arduino Zero (port USB nativ), selectați Instrumente -> Port -> com …
  • După ce obțineți programul de la GitHub, trebuie să vă asigurați că toate fișierele se află în directorul proiectului, care conține fișiere de bibliotecă care acceptă CANBUS.
  • Instalați biblioteca de senzori DHT de la Adafruit, care este utilizată pentru a conduce DHT11 pentru a obține temperatura și umiditatea.
  • Utilizați adrese diferite pentru a trimite temperatura și umiditatea separat în codul Test_DHT11.ino.

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

întârziere (500); CAN.sendMsgBuf (0x11, 0, stmp2.length (), stmp_send2); întârziere (500);

„0x10” înseamnă ID-ul mesajului, „0” este cadrul standard mediu, „stmp1.length ()” înseamnă lungimea mesajului, „stmp_send1” reprezintă datele trimise.

  • În codul Test_OLED.ino, toate mesajele de pe CANBUS sunt primite prin interogare și informațiile solicitate sunt afișate pe OLED.
  • Încărcați programul Maduino-CANbus-RS485 / Test_DHT11_OLED / Test_DHT11 / Test_DHT11.ino în modulul conectat la senzor și încărcați programul Maduino-CANbus-RS485 / Test_DHT11_OLED / Test_OLED / Test_OLED.ino pe un alt modul conectat la OLED.

Pasul 8: Arată

Spectacol
Spectacol
Spectacol
Spectacol

Porniți cele două module, temperatura și umiditatea vor fi afișate pe afișaj.

Recomandat: