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, Studeni
Anonim
Image
Image
Korišteni resursi
Korišteni resursi

Još jedna tema koju su sljedbenici mog YouTube kanala nedavno predložili bio je protokol CAN (Controller Area Network), na što ćemo se danas usredotočiti. Važno je objasniti da je CAN istovremeni serijski komunikacijski protokol. To znači da se sinkronizacija između modula spojenih na mrežu izvodi u odnosu na početak svake poruke poslane na sabirnicu. Poč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 istodobno, jer se CAN automatski bavi sudarom svega. Izvorni kod ovog projekta je vrlo jednostavan. Provjerite!

Korak 1: Korišteni resursi

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

Korak 2: CAN (Područje mreže kontrolera)

CAN (Područje mreže kontrolera)
CAN (Područje mreže kontrolera)
  • Razvio ga je Robert Bosch GmbH osamdesetih godina prošlog stoljeća kako bi služio automobilskoj industriji.
  • S godinama je postao široko rasprostranjen zbog svoje robusnosti i fleksibilnosti provedbe. Koristi se s vojnom opremom, poljoprivrednim strojevima, industrijskom i automatizacijom zgrada, robotikom i medicinskom opremom.

Korak 3: MOŽE - Značajke

MOŽE - Značajke
MOŽE - Značajke
MOŽE - Značajke
MOŽE - Značajke
  • Dvožična serijska komunikacija
  • Najviše 8 bajta korisnih informacija po kadru, uz moguću fragmentaciju
  • Adresa usmjerena na poruku, a ne na čvor
  • Dodjeljivanje prioriteta porukama i prijenos poruka "na čekanju"
  • Učinkovita sposobnost otkrivanja i signaliziranja pogrešaka
  • Mogućnost višestrukog upravljanja (svi čvorovi mogu zahtijevati pristup sabirnici)
  • Mogućnost multicast (jedna poruka za više prijemnika u isto vrijeme)
  • Brzine prijenosa do 1Mbit / s na sabirnici od 40 metara (smanjenje brzine s povećanjem duljine 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: Korišteni krug

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 (diferencijalno otkrivanje)

Napon dalekovoda (diferencijalno otkrivanje)
Napon dalekovoda (diferencijalno otkrivanje)

U CAN -u je dominantan bit nula.

Linearno diferencijalno otkrivanje smanjuje osjetljivost na buku (EFI)

Korak 6: CAN standardi i okviri

CAN standardi i okviri
CAN standardi i okviri

Standardni format s 11-bitnim identifikatorom

Korak 7: CAN standardi i okviri

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. To jamči da poslana poruka neće stići na pogrešan način. To je zato što će, ako to izazove problem u CRC -u (redundantna ciklična provjera ili provjera redundancije), koja je ista kao kontrolna znamenka za informacije, to biti identificirano CRC -om.

Korak 9: Četiri vrste okvira (okviri)

Č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. To 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. Vrste okvira bit će identificirane varijacijama u kontrolnim bitovima ili čak promjenama pravila pisanja okvira za svaki slučaj.

  • Okvir podataka: Sadrži podatke odašiljača za prijamnike
  • Udaljeni okvir: Ovo je zahtjev za podacima s jednog od čvorova
  • Okvir pogreške: To je okvir koji šalje bilo koji od čvorova prilikom identifikacije greške u 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 - pojedinosti o vezama

Krug - detalji o vezama
Krug - detalji o vezama

Korak 11: Krug - Hvatanje podataka

Krug - Hvatanje podataka
Krug - Hvatanje podataka

Valne duljine dobivene za standardni CAN s 11-bitnim ID-om

Korak 12: Krug - hvatanje podataka

Krug - Hvatanje podataka
Krug - Hvatanje podataka

Valovne duljine dobivene za prošireni CAN s 29-bitnim ID-om

Korak 13: Krug - hvatanje podataka

Krug - Hvatanje podataka
Krug - Hvatanje podataka

Podaci dobiveni logičkim analizatorom

Korak 14: Arduino knjižnica - MOŽE

Arduino knjižnica - MOŽE
Arduino knjižnica - MOŽE

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

Arduino IDE knjižnični upravitelj

Korak 15: Github

Github
Github

github.com/sandeepmistry/arduino-CAN

Korak 16: Izvorni kod odašiljača

Izvorni kod: Uključuje i postavljanje ()

Uključit ćemo CAN knjižnicu, pokrenuti serijski program za otklanjanje pogrešaka i pokrenuti CAN sabirnicu pri 500 kbps.

#include // Uključuje biblioteku CAN void setup () {Serial.begin (9600); // inicia serijski para debug while (! Serial); Serial.println ("Transmisor CAN"); // Inicia o barramento MOŽE 500 kbps ako (! 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 paketa CAN 2.0

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

void loop () {// Usando o CAN 2.0 padrão // Envia um pacote: o id tem 11 bits e 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, opet, pakira 5 bajtova i prekida.

// Usando CAN 2.0 Estendido // Envia um pacote: o id tem 29 bits e identifica a mensagem (prioridade, evento) // o bloco de dados deve possuir até 8 bytes Serial.println ("Enviando pacote estendido …"); CAN.beginExtendedPacket (0xabcdef); // id 11259375 decimal (abcdef em hexa) = 24 bita preenchidos até 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 knjižnicu, pokrenuti serijski program za otklanjanje pogrešaka i pokrenuti CAN sabirnicu pri 500 kbps. Ako dođe do pogreške, ta će se pogreška ispisati.

#include // Uključuje biblioteku CAN void setup () {Serial.begin (9600); // inicia serijski para debug while (! Serial); Serial.println ("Receptor CAN"); // Inicia o barramento MOŽE 500 kbps ako (! 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: Petlja (), Dobivanje 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 ne.

void loop () {// Tenta verifikator o tamanho do acote recebido int packetSize = CAN.parsePacket (); if (packetSize) {// Se temos um pacote Serial.println ("Recebido pacote."); if (CAN.packetExtended ()) {// verifica se o pacote é estendido Serial.println ("Estendido"); }

Korak 21: Izvor: Loop (), provjerava radi li se o udaljenom paketu

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

if (CAN.packetRtr ()) {// Verifica se o pacote é um pacote remoto (Requisição de dados), neste caso não há dados Serial.print ("RTR"); }

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

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

Serial.print ("Pacote com id 0x"); Serijski.ispis (CAN.packetId (), HEX); if (CAN.packetRtr ()) {// se o pacote recebido é de requisição, indicamos o comprimento solicitado Serial.print ("e requsitou o comprimento"); Serial.println (CAN.packetDlc ()); // obtem o DLC (Data Length Code, que indica o comprimento dos dados)} else {Serial.print ("e comprimento"); // aqui somente indica o comprimento recebido Serial.println (packetSize);

Korak 23: Izvorni kod: Petlja (), Ako se podaci dobiju, tada se ispisuju

Ispisujemo (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

INO

Preporučeni: