Sadržaj:
- Korak 1: Korišteni resursi
- Korak 2: CAN (mreža kontrolera)
- Korak 3: MOŽE - Značajke
- Korak 4: Upotrijebljeno kolo
- Korak 5: Napon dalekovoda (diferencijalna detekcija)
- Korak 6: CAN standardi i okviri
- Korak 7: CAN standardi i format okvira
- Korak 8: CAN standardi i okviri
- Korak 9: Četiri vrste okvira (okvira)
- Korak 10: Krug - detalji o vezama
- Korak 11: Krug - Hvatanje podataka
- Korak 12: Krug - Hvatanje podataka
- Korak 13: Krug - Hvatanje podataka
- Korak 14: Arduino biblioteka - MOŽE
- Korak 15: Github
- Korak 16: Izvorni kod odašiljača
- Korak 17: Izvorni kod: Loop (), slanje standardnog CAN 2.0 paketa
- Korak 18: Izvorni kod: Loop (), slanje proširenog CAN 2.0 paketa
- Korak 19: Izvorni kod prijemnika
- Korak 20: Izvorni kod: Loop (), Dobijanje paketa i provjera formata
- Korak 21: Izvor: Loop (), provjerava je li to udaljeni paket
- Korak 22: Izvorni kod: Petlja (), Tražena ili primljena dužina podataka
- Korak 23: Izvorni kôd: Loop (), ako se podaci prime, onda se ispisuju
- Korak 24: Preuzmite datoteke
2025 Autor: John Day | [email protected]. Zadnja izmjena: 2025-01-23 14:37
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)
- 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
- 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
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)
U CAN -u, dominantan bit je nula.
Linijsko diferencijalno otkrivanje smanjuje osjetljivost na buku (EFI)
Korak 6: CAN standardi i okviri
Standardni format sa 11-bitnim identifikatorom
Korak 7: CAN standardi i format okvira
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)
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
Korak 11: Krug - Hvatanje podataka
Talasne dužine dobijene za standardni CAN sa 11-bitnim ID-om
Korak 12: Krug - Hvatanje podataka
Talasne dužine dobijene za prošireni CAN sa 29-bitnim ID-om
Korak 13: Krug - Hvatanje podataka
Podaci dobijeni logičkim analizatorom
Korak 14: 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.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
JA NE
Preporučuje se:
Pringles Can Guitar Amp: 7 koraka
Pringles Can Guitar Amp: Ponekad poželim zgrabiti električnu gitaru samo da odsviram nekoliko rifova bez potrebe za postavljanjem svog običnog pojačala. 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
Tahometar/mjerač skeniranja pomoću Arduina, OBD2 i CAN sabirnice: Bilo koji vlasnik Toyote Prius (ili drugog hibridnog/specijalnog vozila) znat će da na njihovoj nadzornoj ploči nedostaje nekoliko brojčanika! Moj prius nema broj okretaja motora ili mjerač temperature. Ako ste momak s performansama, možda biste htjeli znati stvari poput unaprijed određenog vremena i
Nextion Display - Interfejs i protokol objašnjeni pomoću PIC -a i Arduina: 10 koraka
Nextion Display | 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čki interfejs na ekranu. Dakle, na osnovu događaja ili naredbi Nextion display ć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 se gotovo svugdje koriste, poput ureda, škola, bolnica i hotela. Mogu se koristiti uvijek iznova za prikazivanje važnih obavijesti ili oglašavanje predstojećih događaja ili sastanaka. No, obavijest ili oglasi moraju se odštampati
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 kontrolne utičnice na 433 MHz. Posjedujem 3 kompleta sa DIP prekidačima za prilagođavanje adrese. Ovi su radili dobro. Ali prije nekog vremena (jedne ili dvije godine), kupio sam set utičnica od "ritter & quo