
Tartalomjegyzék:
- 1. lépés: Felhasznált erőforrások
- 2. lépés: CAN (Controller Area Network)
- 3. lépés: CAN - Jellemzők
- 4. lépés: Használt áramkör
- 5. lépés: Átviteli vonal feszültségei (differenciálérzékelés)
- 6. lépés: CAN szabványok és keretek formátuma
- 7. lépés: CAN szabványok és keretek formátuma
- 8. lépés: CAN szabványok és keretek formátuma
- 9. lépés: Négyféle keret (keret)
- 10. lépés: Áramkör - a csatlakozások részletei
- 11. lépés: Áramkör - adatrögzítés
- 12. lépés: Áramkör - adatrögzítés
- 13. lépés: Áramkör - adatrögzítés
- 14. lépés: Arduino könyvtár - CAN
- 15. lépés: Github
- 16. lépés: Az adó forráskódja
- 17. lépés: Forráskód: Loop (), Standard CAN 2.0 csomag küldése
- 18. lépés: Forráskód: Loop (), kiterjesztett CAN 2.0 csomag küldése
- 19. lépés: A vevő forráskódja
- 20. lépés: Forráskód: Loop (), a csomag beszerzése és a formátum ellenőrzése
- 21. lépés: Forrás: Loop (), ellenőrzi, hogy távoli csomag -e
- 22. lépés: Forráskód: Loop (), Adathossz kérve vagy fogadva
- 23. lépés: Forráskód: Loop (), Ha adatokat fogad, akkor kinyomtatja
- 24. lépés: Töltse le a fájlokat
2025 Szerző: John Day | [email protected]. Utoljára módosítva: 2025-01-23 14:48



Egy másik téma, amelyet YouTube -csatornám követői nemrégiben javasoltak, a CAN (Controller Area Network) protokoll volt, amelyre ma összpontosítunk. Fontos elmagyarázni, hogy a CAN egyidejű soros kommunikációs protokoll. Ez azt jelenti, hogy a hálózatra csatlakoztatott modulok közötti szinkronizálás a buszra küldött minden üzenet elejéhez képest történik. Kezdjük azzal, hogy bemutatjuk a CAN protokoll alapfogalmait, és elvégzünk egy egyszerű szerelést két ESP32 -vel.
Az áramkörünkben az ESP -k mesterként és szolgaként is működhetnek. Több mikrokontroller is küldhet egyidejűleg, mivel a CAN automatikusan kezeli az összes ütközést. A projekt forráskódja rendkívül egyszerű. Nézd meg!
1. lépés: Felhasznált erőforrások
- Két modul ESP WROOM 32 NodeMcu
- Két CAN adó -vevő a WaveShare -től
- Kapcsoló csatlakozókhoz
- Logikai elemző a rögzítéshez
- Három USB kábel ESP -hez és elemzőhöz
- 10 méter csavart érpár buszként szolgál
2. lépés: CAN (Controller Area Network)

- A Robert Bosch GmbH fejlesztette ki az 1980 -as években, hogy kiszolgálja az autóipart.
- Robosztussága és rugalmas végrehajtása miatt az évek során elterjedt. Katonai felszerelésekkel, mezőgazdasági gépekkel, ipari és épületautomatizálással, robotikával és orvosi berendezésekkel használják.
3. lépés: CAN - Jellemzők


- Kétvezetékes soros kommunikáció
- Maximum 8 bájt hasznos információ keretenként, töredezettséggel
- Az üzenetre irányított cím, és nem a csomópontra
- Prioritás hozzárendelése az üzenetekhez és a "várakoztatott" üzenetek továbbítása
- Hatékony képesség a hibák észlelésére és jelzésére
- Multi-master képesség (minden csomópont kérhet buszhozzáférést)
- Multicast képesség (egy üzenet több vevő számára egyszerre)
- Átviteli sebesség akár 1 Mbit / s 40 méteres buszon (a sebesség csökkenése a gyűjtősín hosszának növekedésével)
- Rugalmas konfiguráció és új csomópontok bevezetése (buszonként akár 120 csomópont)
- Standard hardver, alacsony költség és jó rendelkezésre állás
- Szabályozott protokoll: ISO 11898
4. lépés: Használt áramkör

Itt vannak az adó -vevők. Mindkét oldalon van egy, és egy pár vezeték köti össze őket. Az egyik felelős az adatok küldéséért, a másik pedig az adatok fogadásáért.
5. lépés: Átviteli vonal feszültségei (differenciálérzékelés)

A CAN -ban a domináns bit a Zero.
Vonalkülönbség -érzékelés csökkenti a zajérzékenységet (EFI)
6. lépés: CAN szabványok és keretek formátuma

Standard formátum 11 bites azonosítóval
7. lépés: CAN szabványok és keretek formátuma

Bővített formátum 29 bites azonosítóval
8. lépés: CAN szabványok és keretek formátuma
Fontos megjegyezni, hogy egy protokoll már kiszámítja a CRC -t, és elküldi az ACK és EOF jeleket, amelyeket a CAN protokoll már elvégez. Ez garantálja, hogy az elküldött üzenet nem rossz úton érkezik. Ennek az az oka, hogy ha problémát ad a CRC -ben (Redundáns Cyclic Check or Redundancy Check), amely megegyezik az információs ellenőrző számjeggyel, akkor a CRC azonosítja.
9. lépés: Négyféle keret (keret)

Fontos megjegyezni, hogy egy protokoll már kiszámítja a CRC -t, és elküldi az ACK és EOF jeleket, amelyeket a CAN protokoll már elvégez. Ez garantálja, hogy az elküldött üzenet nem rossz úton érkezik. Ennek az az oka, hogy ha problémát ad a CRC -ben (Redundant Cyclic Check or Redundancy Check), amely megegyezik az információs ellenőrző számjeggyel, akkor azt a CRC azonosítja.
Négyféle keret (keret)
Az adatok továbbítása és fogadása a CAN -ban négyféle kereten alapul. A kerettípusokat a vezérlőbitek variációi, vagy akár a keretírási szabályok változásai határozzák meg minden esetben.
- Adatkeret: Tartalmazza a vevő (k) adó adatait
- Távoli keret: Ez egy adatkérés az egyik csomóponttól
- Hibakeret: Ez egy keret, amelyet bármelyik csomópont küld, amikor hibát azonosít a buszon, és minden csomópont észlelhető
- Túlterhelési keret: arra szolgál, hogy késleltesse a forgalmat a buszon az adatok túlterhelése vagy késleltetése miatt egy vagy több csomóponton.
10. lépés: Áramkör - a csatlakozások részletei

11. lépés: Áramkör - adatrögzítés

Hullámhosszak standard CAN-hoz, 11 bites azonosítóval
12. lépés: Áramkör - adatrögzítés

Hullámhosszak a kiterjesztett CAN-hoz 29 bites azonosítóval
13. lépés: Áramkör - adatrögzítés

A logikai elemző által kapott adatok
14. lépés: Arduino könyvtár - CAN

Itt bemutatom azt a két lehetőséget, ahol telepítheti a CAN illesztőprogram -könyvtárat
Arduino IDE könyvtárkezelő
15. lépés: Github

github.com/sandeepmistry/arduino-CAN
16. lépés: Az adó forráskódja
Forráskód: Tartalmazza és beállítás ()
Belefoglaljuk a CAN könyvtárat, elindítjuk a sorozatot a hibakereséshez, és elindítjuk a CAN buszt 500 kbps sebességgel.
#include // Inclui a biblioteca CAN void setup () {Serial.begin (9600); // inicial a serial para debug while (! Serial); Serial.println ("Transmissor CAN"); // Inicia o barramento CAN a 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); }}
17. lépés: Forráskód: Loop (), Standard CAN 2.0 csomag küldése
A szabványos CAN 2.0 használatával csomagot küldünk. A 11 bites azonosító azonosítja az üzenetet. Az adatblokknak legfeljebb 8 bájtnak kell lennie. A csomagot hexadecimális 18 -as azonosítóval indítja. 5 bájtot csomagol, és bezárja a függvényt.
void loop () {// Usando o CAN 2.0 padrão // Envia um pacote: o id tem 11 bit e identifa a mensagem (prioridade, evento) // o bloco de dados deve possuir até 8 byte Serial.println ("Enviando pacote … "); CAN.beginPacket (0x12); // id 18 em hexadecimális CAN.write ('h'); // 1º bájt CAN.write ('e'); // 2º bájt CAN.write ('l'); // 3º bájt CAN.write ('l'); // 4º bájt CAN.write ('o'); // 5º bájt CAN.endPacket (); // encerra o pacote para envio Serial.println ("Enviado."); késleltetés (1000);
18. lépés: Forráskód: Loop (), kiterjesztett CAN 2.0 csomag küldése
Ebben a lépésben az azonosító 29 bitből áll. Elkezdi küldeni a 24 bites azonosítót, és ismét csomagol 5 bájtot és kilép.
// Usando CAN 2.0 Estendido // Envia um pacote: o id tem 29 bit e identifica a mensagem (prioridade, evento) // o bloco de dados deve possuir até 8 byte Serial.println ("Enviando pacote estendido…"); CAN.beginExtendedPacket (0xabcdef); // id 11259375 decimális (abcdef em hexa) = 24 bit preenchidos até aqui CAN.write ('w'); // 1º bájt CAN.write ('o'); // 2º bájt CAN.write ('r'); // 3º bájt CAN.write ('l'); // 4º bájt CAN.write ('d'); // 5º bájt CAN.endPacket (); // encerra o pacote para envio Serial.println ("Enviado."); késleltetés (1000); }
19. lépés: A vevő forráskódja
Forráskód: Tartalmazza és beállítás ()
Ismét belefoglaljuk a CAN könyvtárat, elindítjuk a hibakeresési sorozatot, és elindítjuk a CAN buszt 500 kbps sebességgel. Ha hiba történik, akkor a hiba kinyomtatásra kerül.
#include // Inclui a biblioteca CAN void setup () {Serial.begin (9600); // inicial a serial para debug while (! Serial); Serial.println ("Receptor CAN"); // Inicia o barramento CAN a 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. lépés: Forráskód: Loop (), a csomag beszerzése és a formátum ellenőrzése
Megpróbáltuk ellenőrizni a kapott csomag méretét. A CAN.parsePacket () módszer megmutatja ennek a csomagnak a méretét. Tehát ha van csomagunk, ellenőrizni fogjuk, hogy meghosszabbították -e vagy sem.
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 ()) {// verifica se o pacote é estendido Serial.println ("Estendido"); }
21. lépés: Forrás: Loop (), ellenőrzi, hogy távoli csomag -e
Itt ellenőrizzük, hogy a fogadott csomag adatkérés -e. Ebben az esetben nincs adat.
if (CAN.packetRtr ()) {// Verifica se o pacote é um pacote remoto (Requisição de dados), neste caso não há dados Serial.print ("RTR"); }
22. lépés: Forráskód: Loop (), Adathossz kérve vagy fogadva
Ha a fogadott csomag kérés, akkor megadjuk a kért hosszúságot. Ezután megkapjuk az adathossz -kódot (DLC), amely az adatok hosszát jelzi. Végül jelezzük a kapott hosszúságot.
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 (Adathossz -kód, que indica o comprimento dos dados)} else {Serial.print ("e comprimento"); // aqui somente indica vagy comprimento recebido Serial.println (packetSize);
23. lépés: Forráskód: Loop (), Ha adatokat fogad, akkor kinyomtatja
Nyomtatjuk (a soros monitoron) az adatokat, de csak akkor, ha a fogadott csomag nem kérés.
// Imprime os dados somente se o pacote recebido não foi de requisição while (CAN.available ()) {Serial.print ((char) CAN.read ()); } Sorozat.println (); } Sorozat.println (); }}
24. lépés: Töltse le a fájlokat
ÉN NEM
Ajánlott:
RC5 távirányító protokoll dekódoló könyvtár nélkül: 4 lépés

RC5 távirányító protokoll dekódoló könyvtár nélkül: az rc5 dekódolása előtt először megbeszéljük, hogy mi az rc5 parancs és mi a felépítése. Tehát alapvetően az rc5 parancsot használják a távvezérlőkben, amelyeket televíziókban, cd -lejátszókban, d2h -ben, házimozi -rendszerekben stb. használnak. 13 vagy 14 bit van elrendezve egy
Nextion kijelző - Interfész és protokoll magyarázva PIC és Arduino segítségével: 10 lépés

Nextion kijelző | Interfész és protokoll magyarázva a PIC és az Arduino segítségével: A Nextion Display nagyon könnyen használható és egyszerű kezelőfelület a mikrovezérlőkkel. A Nextion editor segítségével konfigurálhatjuk a kijelzőt, és megtervezhetjük a felhasználói felületet. Tehát események vagy parancsok alapján Nextion display működni fog, hogy megjelenítse a
Digitális hirdetőtábla a Raspberry Pi és az MQTT protokoll használatával: 8 lépés

Digitális hirdetőtábla a Raspberry Pi és az MQTT protokoll használatával: Az értesítő táblákat szinte mindenhol használják, például irodákban, iskolákban, kórházakban és szállodákban. Újra és újra felhasználhatók fontos értesítések megjelenítésére vagy a közelgő események vagy találkozók hirdetésére. De a hirdetménynek vagy hirdetéseknek nyomtatottnak kell lenniük
A SPI KOMMUNIKÁCIÓS PROTOKOLL ALAPJAI: 13 lépés

A SPI KOMMUNIKÁCIÓS PROTOKOLL ALAPJAI: Amikor egy mikrokontrollert csatlakoztat egy érzékelőhöz, kijelzőhöz vagy más modulhoz, elgondolkodik -e valaha azon, hogy a két eszköz hogyan beszél egymással? Pontosan mit mondanak? Hogyan képesek megérteni egymást? Kommunikáció az elektronikus készülékek között
Reverse Engineering Ritter 8341C protokoll ESP3866 -hoz: 5 lépés

Reverse Engineering Ritter 8341C Protocol for ESP3866: Szia @all. Saját kis otthoni automatizáláshoz elsődleges 433 MHz -es aljzatokat használok. Három készletem van DIP kapcsolókkal a cím beállításához. Ezek jól működtek. De valamikor (egy vagy két évvel ezelőtt) megvásároltam egy aljzatkészletet a " ritter & quo -tól