Sadržaj:
- Korak 1: Korišteni resursi
- Korak 2: CAN (Područje mreže kontrolera)
- Korak 3: MOŽE - Značajke
- Korak 4: Korišteni krug
- Korak 5: Napon dalekovoda (diferencijalno otkrivanje)
- Korak 6: CAN standardi i okviri
- Korak 7: CAN standardi i okviri
- Korak 8: CAN standardi i okviri
- Korak 9: Četiri vrste okvira (okviri)
- Korak 10: Krug - pojedinosti o vezama
- Korak 11: Krug - Hvatanje podataka
- Korak 12: Krug - hvatanje podataka
- Korak 13: Krug - hvatanje podataka
- Korak 14: Arduino knjižnica - MOŽE
- Korak 15: Github
- Korak 16: Izvorni kod odašiljača
- Korak 17: Izvorni kod: Loop (), slanje standardnog paketa CAN 2.0
- Korak 18: Izvorni kod: Loop (), slanje proširenog CAN 2.0 paketa
- Korak 19: Izvorni kod prijemnika
- Korak 20: Izvorni kod: Petlja (), Dobivanje paketa i provjera formata
- Korak 21: Izvor: Loop (), provjerava radi li se o udaljenom paketu
- Korak 22: Izvorni kod: Petlja (), Tražena ili primljena duljina podataka
- Korak 23: Izvorni kod: Petlja (), Ako se podaci dobiju, tada se ispisuju
- Korak 24: Preuzmite datoteke
Video: CAN protokol - Da, možemo !: 24 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:36
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)
- 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
- 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
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)
U CAN -u je dominantan bit nula.
Linearno diferencijalno otkrivanje smanjuje osjetljivost na buku (EFI)
Korak 6: CAN standardi i okviri
Standardni format s 11-bitnim identifikatorom
Korak 7: 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)
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
Korak 11: Krug - Hvatanje podataka
Valne duljine dobivene za standardni CAN s 11-bitnim ID-om
Korak 12: Krug - hvatanje podataka
Valovne duljine dobivene za prošireni CAN s 29-bitnim ID-om
Korak 13: Krug - hvatanje podataka
Podaci dobiveni logičkim analizatorom
Korak 14: 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.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
INO
Preporučeni:
Pringles Can Guitar Amp: 7 koraka
Pringles Can Guitar Amp: Ponekad poželim zgrabiti električnu gitaru samo da odsviram nekoliko rifova, a da ne moram postaviti svoje uobičajeno pojačalo. Pa sam htio stvoriti jeftino, jednostavno za izradu i vrlo jednostavno pojačalo za gitaru: The Pringles Can Amp
Tahometar/mjerač skeniranja pomoću Arduina, OBD2 i CAN sabirnice: 8 koraka
Mjerač broja okretaja/mjerač skeniranja pomoću Arduina, OBD2 i CAN sabirnice: Svaki vlasnik Toyote Prius (ili drugog hibridnog/posebnog vozila) znat će da na nadzornoj ploči nedostaje nekoliko brojčanika! Moj prius nema broj okretaja motora ili mjerač temperature. Ako ste performans, možda biste htjeli znati stvari poput unaprijed određenog vremena i
Nextion zaslon - Sučelje i protokol objašnjeni pomoću PIC -a i Arduina: 10 koraka
Nextion zaslon | Sučelje i protokol objašnjeni pomoću PIC -a i Arduina: Nextion Display je vrlo jednostavan za korištenje i jednostavno sučelje s mikro kontrolerima. Uz pomoć Nextion uređivača možemo konfigurirati zaslon i možemo dizajnirati korisničko sučelje na zaslonu. Dakle, na temelju događaja ili naredbi Nextion prikaz će djelovati na da prikaže
Digitalna oglasna ploča koja koristi Raspberry Pi i MQTT protokol: 8 koraka
Digitalna oglasna ploča koja koristi protokol Raspberry Pi i MQTT: Oglasne ploče gotovo se koriste svugdje, poput ureda, škola, bolnica i hotela. Mogu se koristiti uvijek iznova za prikaz važnih obavijesti ili oglašavanje predstojećih događaja ili sastanaka. No, obavijest ili oglasi moraju se ispisati
Obrnuti inženjering Ritter 8341C protokol za ESP3866: 5 koraka
Obrnuti inženjering Ritter 8341C protokol za ESP3866: Hi @all.Za svoju malu kućnu automatizaciju koristim primarne upravljačke utičnice na 433 MHz. Posjedujem 3 kompleta s DIP prekidačima za podešavanje adrese. Ovi su radili dobro. Ali prije nekog vremena (jedne ili dvije godine) kupio sam set utičnica od "ritter & quo