Kazalo:
- 1. korak: Uporabljeni viri
- 2. korak: CAN (omrežje krmilnika)
- 3. korak: LAHKO - Lastnosti
- 4. korak: Uporabljeno vezje
- 5. korak: Napetosti daljnovoda (diferencialno zaznavanje)
- Korak 6: Oblika standardov in okvirjev CAN
- 7. korak: Oblika standardov in okvirjev CAN
- 8. korak: Oblika standardov in okvirjev CAN
- 9. korak: štiri vrste okvirjev (okvirji)
- 10. korak: Vezje - podrobnosti o povezavah
- 11. korak: Vezje - zajem podatkov
- 12. korak: Vezje - zajem podatkov
- 13. korak: Vezje - zajem podatkov
- Korak 14: Knjižnica Arduino - LAHKO
- Korak 15: Github
- Korak 16: Izvorna koda oddajnika
- Korak 17: Izvorna koda: Zanka (), pošiljanje standardnega paketa CAN 2.0
- 18. korak: izvorna koda: zanka (), pošiljanje razširjenega paketa CAN 2.0
- 19. korak: izvorna koda sprejemnika
- 20. korak: izvorna koda: zanka (), pridobivanje paketa in preverjanje oblike
- 21. korak: Vir: Loop (), preveri, ali gre za oddaljeni paket
- Korak 22: Izvorna koda: Zanka (), Zahtevana ali prejeta dolžina podatkov
- 23. korak: izvorna koda: zanka (), če so podatki prejeti, se nato natisne
- Korak: Prenesite datoteke
2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-23 15:09
Druga tema, ki so jo privrženci mojega YouTube kanala nedavno predlagali, je bil protokol CAN (Controller Area Network), na katerega se bomo danes osredotočili. Pomembno je pojasniti, da je CAN protokol hkratne serijske komunikacije. To pomeni, da se sinhronizacija med moduli, povezanimi v omrežje, izvede glede na začetek vsakega sporočila, poslanega na vodilo. Začeli bomo z uvajanjem osnovnih konceptov protokola CAN in izvedli preprosto sestavo z dvema ESP32.
V našem vezju lahko ESP delujejo kot glavni in pomožni. Lahko oddajate več mikrokrmilnikov hkrati, ker CAN samodejno obravnava trčenje vsega. Izvorna koda tega projekta je zelo preprosta. Preverite!
1. korak: Uporabljeni viri
- Dva modula ESP WROOM 32 NodeMcu
- Dva oddajnika CAN iz WaveShare
- Mostički za priključke
- Logični analizator za zajem
- Trije USB kabli za ESP in analizator
- 10 metrov zvitega para, ki služi kot avtobus
2. korak: CAN (omrežje krmilnika)
- Robert Bosch GmbH ga je v osemdesetih letih prejšnjega stoletja razvil za avtomobilsko industrijo.
- Z leti je postala razširjena zaradi svoje robustnosti in prilagodljivosti pri izvajanju. Uporablja se z vojaško opremo, kmetijskimi stroji, industrijsko in gradbeno avtomatizacijo, robotiko in medicinsko opremo.
3. korak: LAHKO - Lastnosti
- Dvožična serijska komunikacija
- Največ 8 bajtov uporabnih informacij na okvir z možno fragmentacijo
- Naslov, usmerjen v sporočilo in ne v vozlišče
- Dodelitev prednostnih sporočil in prenos sporočil "na čakanju"
- Učinkovita sposobnost odkrivanja in signalizacije napak
- Možnost več glavnih (vsa vozlišča lahko zahtevajo dostop do vodila)
- Večpredstavnost (eno sporočilo za več sprejemnikov hkrati)
- Hitrosti prenosa do 1Mbit / s na 40-metrskem vodilu (zmanjšanje hitrosti s povečanjem dolžine vodila)
- Prilagodljivost konfiguracije in uvedbe novih vozlišč (do 120 vozlišč na vodilo)
- Standardna strojna oprema, nizki stroški in dobra razpoložljivost
- Regulirani protokol: ISO 11898
4. korak: Uporabljeno vezje
Tukaj imam oddajnike. Na vsaki strani je po ena in povezana sta s parom žic. Eden je odgovoren za pošiljanje, drugi pa za sprejem podatkov.
5. korak: Napetosti daljnovoda (diferencialno zaznavanje)
V CAN -u je prevladujoči bit nič.
Linearno diferencialno zaznavanje zmanjša občutljivost hrupa (EFI)
Korak 6: Oblika standardov in okvirjev CAN
Standardna oblika z 11-bitnim identifikatorjem
7. korak: Oblika standardov in okvirjev CAN
Razširjena oblika z 29-bitnim identifikatorjem
8. korak: Oblika standardov in okvirjev CAN
Pomembno je omeniti, da protokol že izračuna CRC in pošilja signale ACK in EOF, kar je že storjeno s protokolom CAN. To zagotavlja, da poslano sporočilo ne bo prispelo na napačen način. Če to povzroči težavo v CRC (Redundant Cyclic Check ali Redundancy Check), ki je enaka kontrolni številki informacij, jo bo CRC identificiral.
9. korak: štiri vrste okvirjev (okvirji)
Pomembno je omeniti, da protokol že izračuna CRC in pošilja signale ACK in EOF, kar je že storjeno s protokolom CAN. To zagotavlja, da poslano sporočilo ne bo prišlo na napačen način. Če to povzroči težavo v CRC (Redundant Cyclic Check ali Redundancy Check), ki je enaka kontrolni številki informacij, jo bo CRC identificiral.
Štiri vrste okvirjev (okvirjev)
Prenos in sprejem podatkov v CAN temelji na štirih vrstah okvirjev. Vrste okvirjev bodo prepoznane z variacijami kontrolnih bitov ali celo s spremembami pravil za zapis okvirja za vsak primer.
- Podatkovni okvir: vsebuje podatke oddajnika za sprejemnike
- Oddaljeni okvir: To je zahteva po podatkih iz enega od vozlišč
- Okvir napak: To je okvir, ki ga pošlje katero koli od vozlišč pri ugotavljanju napake v vodilu in ga lahko zaznajo vsa vozlišča
- Okvir preobremenitve: služi za zamudo prometa na vodilu zaradi preobremenitve podatkov ali zamude na enem ali več vozliščih.
10. korak: Vezje - podrobnosti o povezavah
11. korak: Vezje - zajem podatkov
Valovne dolžine, pridobljene za standardni CAN z 11-bitnim ID-jem
12. korak: Vezje - zajem podatkov
Valovne dolžine, pridobljene za razširjen CAN z 29-bitnim ID-jem
13. korak: Vezje - zajem podatkov
Podatki, pridobljeni z logičnim analizatorjem
Korak 14: Knjižnica Arduino - LAHKO
Tukaj prikazujem dve možnosti, kjer lahko namestite knjižnico gonilnikov CAN
Arduino IDE knjižnični upravitelj
Korak 15: Github
github.com/sandeepmistry/arduino-CAN
Korak 16: Izvorna koda oddajnika
Izvorna koda: Vključuje in nastavitev ()
Vključili bomo knjižnico CAN, zagnali serijsko serijo za odpravljanje napak in zagnali vodilo CAN pri 500 kb / s.
#include // Vključi biblioteco CAN void setup () {Serial.begin (9600); // inicia serijsko odpravljanje napak while (! Serial); Serial.println ("Transmisor CAN"); // Inicia o 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: Izvorna koda: Zanka (), pošiljanje standardnega paketa CAN 2.0
S standardnim CAN 2.0 pošljemo paket. 11-bitni ID identificira sporočilo. Podatkovni blok mora imeti do 8 bajtov. Začne paket z ID 18 v šestnajstiški številki. Pakira 5 bajtov in zapre funkcijo.
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 šestnajstiški CAN.write ('h'); // 1º bajt CAN.write ('e'); // 2º bajt CAN.write ('l'); // 3º bajt CAN.write ('l'); // 4º bajt CAN.write ('o'); // 5º bajt CAN.endPacket (); // encerra o pacote para envio Serial.println ("Enviado."); zamuda (1000);
18. korak: izvorna koda: zanka (), pošiljanje razširjenega paketa CAN 2.0
V tem koraku ima ID 29 bitov. Začne pošiljati 24 bitov ID -ja, spet pakira 5 bajtov in konča.
// 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 decimalno mesto (abcdef em hexa) = 24 bitov vnaprej nastavljenih na CAN.write ('w'); // 1º bajt CAN.write ('o'); // 2º bajt CAN.write ('r'); // 3º bajt CAN.write ('l'); // 4º bajt CAN.write ('d'); // 5º bajt CAN.endPacket (); // encerra o pacote para envio Serial.println ("Enviado."); zamuda (1000); }
19. korak: izvorna koda sprejemnika
Izvorna koda: Vključuje in nastavitev ()
Ponovno bomo vključili knjižnico CAN, začeli serijsko odpravljanje napak in zagnali vodilo CAN pri 500 kb / s. Če pride do napake, bo ta napaka natisnjena.
#include // Vključi biblioteco CAN void setup () {Serial.begin (9600); // inicia serijsko odpravljanje napak while (! Serial); Serial.println ("Receptor CAN"); // Inicia o 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); }}
20. korak: izvorna koda: zanka (), pridobivanje paketa in preverjanje oblike
Poskušali smo preveriti velikost prejetega paketa. Metoda CAN.parsePacket () mi pokaže velikost tega paketa. Če imamo torej paket, bomo preverili, ali je podaljšan ali ne.
void loop () {// Tenta verificar o tamanho do acote recebido int packetSize = CAN.parsePacket (); if (packetSize) {// Se temos um pacote Serial.println ("Recebido pacote."); if (CAN.packetExtended ()) {// preveri se o pacote é estendido Serial.println ("Estendido"); }
21. korak: Vir: Loop (), preveri, ali gre za oddaljeni paket
Tu preverimo, ali je prejeti paket podatkovna zahteva. V tem primeru ni podatkov.
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: Izvorna koda: Zanka (), Zahtevana ali prejeta dolžina podatkov
Če je prejeti paket zahteva, navedemo zahtevano dolžino. Nato dobimo kodo dolžine podatkov (DLC), ki označuje dolžino podatkov. Na koncu navedemo prejeto dolžino.
Serial.print ("Pacote com id 0x"); Serial.print (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);
23. korak: izvorna koda: zanka (), če so podatki prejeti, se nato natisne
Natisnemo (na serijski monitor) podatke, vendar le, če prejeti paket ni zahteva.
// 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: Prenesite datoteke
JAZ NE
Priporočena:
Božično drevo, ki ga nadzira spletna stran (vsak ga lahko nadzoruje): 19 korakov (s slikami)
Božično drevo, ki ga nadzira spletna stran (kdor koli ga lahko nadzoruje): Želite vedeti, kako izgleda božično drevo, ki ga nadzoruje spletna stran? Tukaj je video, ki prikazuje moj projekt mojega božičnega drevesa. Prenos v živo se je že končal, vendar sem posnel video posnetek dogajanja: Letos sredi decembra
Halloween Buča z gibljivim živalskim očesom - Ta buča lahko zavije z očmi!: 10 korakov (s slikami)
Halloween Buča z gibljivim živalskim očesom | Ta buča lahko zavije z očmi!: V tem navodilu se boste naučili, kako narediti bučo za noč čarovnic, ki prestraši vse, ko se njeno oko premakne. Prilagodite razdaljo sprožilca ultrazvočnega senzorja na pravo vrednost (korak 9) in vaša buča bo okamenila vsakogar, ki si upa vzeti svečo
Prikaz Nextion - Vmesnik in protokol razložen s PIC in Arduino: 10 korakov
Prikaz Nextion | Razložen vmesnik in protokol s PIC in Arduino: Nextion Display je zelo enostaven za uporabo in enostaven vmesnik z mikro krmilniki. S pomočjo urejevalnika Nextion lahko konfiguriramo zaslon in lahko oblikujemo uporabniški vmesnik na zaslonu. Torej na podlagi dogodkov ali ukazov Nextion display bo na zaslonu prikazal
Povratni inženiring Ritter 8341C protokol za ESP3866: 5 korakov
Povratni inženiring Protokol Ritter 8341C za ESP3866: Hi @all.Za svojo majhno domačo avtomatizacijo uporabljam primarne vtičnice s krmiljenjem 433 MHz. Imam 3 komplete z DIP stikali za nastavitev naslova. Te so delovale v redu. Toda pred časom (eno ali dve leti) sem kupil komplet vtičnic pri " ritter & quo
Kako priti do glasbe s skoraj vsakega (haha) spletnega mesta (dokler jo lahko slišite, jo lahko dobite v redu, če je vdelana v bliskavico, je morda ne boste mogli) UREJENO !!!!! Do
Kako priti do glasbe s skoraj vsakega (haha) spletnega mesta (dokler jo lahko slišite, jo lahko dobite … v redu, če je vdelana v bliskavico, je morda ne boste mogli) UREJENO !!!!! Dodani podatki: če kdaj obiščete spletno mesto in predvaja pesem, ki vam je všeč in si jo želite, potem je tukaj navodilo za vas, če nisem kaj zamotil, nisem jaz kriv (to se lahko zgodi le, če začnete brisati stvari brez razloga ) lahko sem dobil glasbo za