Sadržaj:

CAN protokol - Da, možemo !: 24 koraka
CAN protokol - Da, možemo !: 24 koraka

Video: CAN protokol - Da, možemo !: 24 koraka

Video: CAN protokol - Da, možemo !: 24 koraka
Video: Моя работа наблюдать за лесом и здесь происходит что-то странное 2024, Juli
Anonim
Image
Image
Korišteni resursi
Korišteni resursi

Još jedna tema koju su sljedbenici mog YouTube kanala nedavno predložili je CAN (Controller Area Network) protokol, na što ćemo se danas fokusirati. Važno je objasniti da je CAN istovremeni serijski komunikacijski protokol. To znači da se sinhronizacija između modula povezanih na mrežu vrši u odnosu na početak svake poruke poslane na sabirnicu. Započet ćemo uvođenjem osnovnih koncepata CAN protokola i izvesti jednostavnu montažu s dva ESP32.

U našem krugu, ESP -ovi mogu djelovati i kao master i kao slave. Možete imati više mikrokontrolera koji emitiraju istovremeno, jer se CAN automatski bavi kolizijom svega. Izvorni kod ovog projekta je vrlo jednostavan. Provjeri!

Korak 1: Korišteni resursi

  • Dva modula ESP WROOM 32 NodeMcu
  • Dva primopredajnika CAN iz WaveShare -a
  • Džemperi za povezivanje
  • Logički analizator za hvatanje
  • Tri USB kabla za ESP -ove i analizator
  • 10 metara upletenog para koji će služiti kao autobus

Korak 2: CAN (mreža kontrolera)

CAN (Područje mreže kontrolera)
CAN (Područje mreže kontrolera)
  • Razvio ga je Robert Bosch GmbH 1980 -ih za opsluživanje automobilske industrije.
  • S godinama je postao široko rasprostranjen zbog svoje robusnosti i fleksibilnosti implementacije. Koristi se s vojnom opremom, poljoprivrednim mašinama, industrijskom i automatizacijom zgrada, robotikom i medicinskom opremom.

Korak 3: MOŽE - Značajke

CAN - Karakteristike
CAN - Karakteristike
CAN - Karakteristike
CAN - Karakteristike
  • Dvožična serijska komunikacija
  • Maksimalno 8 bajtova korisnih informacija po kadru, uz moguću fragmentaciju
  • Adresa usmjerena na poruku, a ne na čvor
  • Dodjeljivanje prioriteta porukama i slanje poruka "na čekanju"
  • Efikasna sposobnost otkrivanja i signaliziranja grešaka
  • Mogućnost višestrukog upravljanja (svi čvorovi mogu zatražiti pristup sabirnici)
  • Mogućnost slanja više poruka (jedna poruka za više prijemnika istovremeno)
  • Brzine prijenosa do 1Mbit / s na sabirnici od 40 metara (smanjenje brzine s povećanjem dužine sabirnice)
  • Fleksibilnost konfiguracije i uvođenje novih čvorova (do 120 čvorova po sabirnici)
  • Standardni hardver, niske cijene i dobra dostupnost
  • Regulirani protokol: ISO 11898

Korak 4: Upotrijebljeno kolo

Korišteno kolo
Korišteno kolo

Evo, imam primopredajnike. Sa svake strane nalazi se po jedan, a povezani su parom žica. Jedan je odgovoran za slanje, a drugi za primanje podataka.

Korak 5: Napon dalekovoda (diferencijalna detekcija)

Napon dalekovoda (diferencijalna detekcija)
Napon dalekovoda (diferencijalna detekcija)

U CAN -u, dominantan bit je nula.

Linijsko diferencijalno otkrivanje smanjuje osjetljivost na buku (EFI)

Korak 6: CAN standardi i okviri

CAN standardi i okviri
CAN standardi i okviri

Standardni format sa 11-bitnim identifikatorom

Korak 7: CAN standardi i format okvira

CAN standardi i okviri
CAN standardi i okviri

Prošireni format s 29-bitnim identifikatorom

Korak 8: CAN standardi i okviri

Važno je napomenuti da protokol već izračunava CRC i šalje ACK i EOF signale, što je već učinjeno putem CAN protokola. Ovo jamči da poslana poruka neće stići na pogrešan način. To je zato što će CRC identificirati problem u CRC -u (redundantna ciklična provjera ili provjera redundancije), koji je isti kao kontrolna znamenka za informacije.

Korak 9: Četiri vrste okvira (okvira)

Četiri vrste okvira (okviri)
Četiri vrste okvira (okviri)

Važno je napomenuti da protokol već izračunava CRC i šalje ACK i EOF signale, što je već učinjeno putem CAN protokola. Ovo jamči da poslana poruka neće stići na pogrešan način. To je zato što će CRC identificirati problem u CRC -u (redundantna ciklična provjera ili provjera redundancije), koji je isti kao kontrolna znamenka za informacije.

Četiri vrste okvira (okvira)

Prijenos i prijem podataka u CAN -u temelje se na četiri vrste okvira. Tipovi okvira bit će identificirani varijacijama u kontrolnim bitovima ili čak promjenama pravila za pisanje okvira za svaki slučaj.

  • Okvir podataka: Sadrži podatke o odašiljaču za prijemnike
  • Udaljeni okvir: Ovo je zahtjev za podacima s jednog od čvorova
  • Okvir greške: To je okvir koji šalje bilo koji čvor kada identificira grešku na sabirnici i mogu ga otkriti svi čvorovi
  • Okvir preopterećenja: Služi za odgađanje prometa na sabirnici zbog preopterećenja podacima ili kašnjenja na jednom ili više čvorova.

Korak 10: Krug - detalji o vezama

Krug - detalji o vezama
Krug - detalji o vezama

Korak 11: Krug - Hvatanje podataka

Krug - Hvatanje podataka
Krug - Hvatanje podataka

Talasne dužine dobijene za standardni CAN sa 11-bitnim ID-om

Korak 12: Krug - Hvatanje podataka

Krug - Hvatanje podataka
Krug - Hvatanje podataka

Talasne dužine dobijene za prošireni CAN sa 29-bitnim ID-om

Korak 13: Krug - Hvatanje podataka

Krug - Hvatanje podataka
Krug - Hvatanje podataka

Podaci dobijeni logičkim analizatorom

Korak 14: Arduino biblioteka - MOŽE

Arduino biblioteka - MOŽE
Arduino biblioteka - MOŽE

Ovdje prikazujem dvije mogućnosti na kojima možete instalirati biblioteku upravljačkih programa CAN

Arduino IDE Library Manager

Korak 15: Github

Github
Github

github.com/sandeepmistry/arduino-CAN

Korak 16: Izvorni kod odašiljača

Izvorni kod: Uključuje i postavljanje ()

Uključićemo CAN biblioteku, pokrenuti serijski program za otklanjanje grešaka i pokrenuti CAN magistralu pri 500 kbps.

#include // Uključuje biblioteku CAN void setup () {Serial.begin (9600); // inicia serijski para debug while (! Serial); Serial.println ("Transmisor CAN"); // Iniciacija ili barramento CAN 500 kbps if (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN"); // caso não seja possível iniciar o controlador while (1); }}

Korak 17: Izvorni kod: Loop (), slanje standardnog CAN 2.0 paketa

Koristeći standardni CAN 2.0, šaljemo paket. 11-bitni ID identificira poruku. Blok podataka mora imati do 8 bajtova. Pokreće paket sa ID 18 u heksadecimalnom broju. Pakuje 5 bajtova i zatvara funkciju.

void loop () {// Usando o CAN 2.0 padrão // Envi um pacote: o id tem 11 bits and identifica a mensagem (prioridade, evento) // o bloco de dados deve possuir até 8 bytes Serial.println ("Enviando pacote … "); CAN.beginPacket (0x12); // id 18 em heksadecimalni CAN.write ('h'); // 1º bajta CAN.write ('e'); // 2º bajta CAN.write ('l'); // 3º bajta CAN.write ('l'); // 4º bajta CAN.write ('o'); // 5º bajta CAN.endPacket (); // encerra o pacote para envio Serial.println ("Enviado."); kašnjenje (1000);

Korak 18: Izvorni kod: Loop (), slanje proširenog CAN 2.0 paketa

U ovom koraku ID ima 29 bita. Počinje slanje 24 bita ID -a i još jednom pakuje 5 bajtova i prekida.

// Usando CAN 2.0 Estendido // Pošaljite zahtjev za pakovanje: o id 29 bita i identifikaciju izbornika (prioritet, događaj) // o bloku podataka koji su potrebni za 8 bajtova Serial.println ("Enviando pacote estendido …"); CAN.beginExtendedPacket (0xabcdef); // id 11259375 decimal (abcdef em hexa) = 24 bita ažurirana u aqui CAN.write ('w'); // 1º bajt CAN.write ('o'); // 2º bajta CAN.write ('r'); // 3º bajta CAN.write ('l'); // 4º bajta CAN.write ('d'); // 5º bajta CAN.endPacket (); // encerra o pacote para envio Serial.println ("Enviado."); kašnjenje (1000); }

Korak 19: Izvorni kod prijemnika

Izvorni kod: Uključuje i postavljanje ()

Opet ćemo uključiti CAN biblioteku, pokrenuti serijski program za otklanjanje grešaka i pokrenuti CAN sabirnicu pri 500 kbps. Ako dođe do greške, ova greška će biti odštampana.

#include // Uključuje biblioteku CAN void setup () {Serial.begin (9600); // inicia serijski para debug while (! Serial); Serial.println ("Receptor CAN"); // Iniciacija ili barramento CAN 500 kbps if (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN"); // caso não seja possível iniciar o controlador while (1); }}

Korak 20: Izvorni kod: Loop (), Dobijanje paketa i provjera formata

Pokušali smo provjeriti veličinu primljenog paketa. Metoda CAN.parsePacket () pokazuje mi veličinu ovog paketa. Dakle, ako imamo paket, provjerit ćemo je li produžen ili nije.

void loop () {// Potvrda provjere tamanho učinka prijema int packetSize = CAN.parsePacket (); if (packetSize) {// Se temos um pacote Serial.println ("Recebido pacote."); if (CAN.packetExtended ()) {// verifikuje se o pacote é estendido Serial.println ("Estendido"); }

Korak 21: Izvor: Loop (), provjerava je li to udaljeni paket

Ovdje provjeravamo je li primljeni paket zahtjev za podacima. U ovom slučaju nema podataka.

if (CAN.packetRtr ()) {// Verificira se o pakoti i daljinskom upravljaču (Requisição de dados), nije moguće dodati Serial.print ("RTR"); }

Korak 22: Izvorni kod: Petlja (), Tražena ili primljena dužina podataka

Ako je primljeni paket zahtjev, označavamo traženu dužinu. Zatim dobivamo kod dužine podataka (DLC), koji označava dužinu podataka. Na kraju, navodimo primljenu dužinu.

Serial.print ("Pacote com id 0x"); Serial.print (CAN.packetId (), HEX); if (CAN.packetRtr ()) {// se o pacote recebido é de requisição, ukazuje na komprimento solicitado Serial.print ("e requsitou o comprimento"); Serial.println (CAN.packetDlc ()); // izvor o DLC -u (kôd dužine podataka, oznaka o komprimento dos dados)} else {Serial.print ("e comprimento"); // aqui somente indica o compridimento recebido Serial.println (packetSize);

Korak 23: Izvorni kôd: Loop (), ako se podaci prime, onda se ispisuju

Štampamo (na serijskom monitoru) podatke, ali samo ako primljeni paket nije zahtjev.

// Imprime os dados somente se o pacote Recebido não foi de requisição while (CAN.available ()) {Serial.print ((char) CAN.read ()); } Serial.println (); } Serial.println (); }}

Korak 24: Preuzmite datoteke

PDF

JA NE

Preporučuje se: