Tartalomjegyzék:

CAN protokoll - Igen, tudjuk!: 24 lépés
CAN protokoll - Igen, tudjuk!: 24 lépés

Videó: CAN protokoll - Igen, tudjuk!: 24 lépés

Videó: CAN protokoll - Igen, tudjuk!: 24 lépés
Videó: ЛЮБОВЬ С ДОСТАВКОЙ НА ДОМ (2020). Романтическая комедия. Хит 2024, Július
Anonim
Image
Image
Felhasznált források
Felhasznált források

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)

CAN (Controller Area Network)
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

CAN - Jellemzők
CAN - Jellemzők
CAN - Jellemzők
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

Használt áramkör
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)

Átviteli vonal feszültségei (differenciálérzékelé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

CAN szabványok és keretek formátuma
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

CAN szabványok és keretek formátuma
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)

Négyféle keret (keret)
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

Áramkör - a csatlakozások részletei
Áramkör - a csatlakozások részletei

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

Áramkör - adatrögzíté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

Áramkör - adatrögzíté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

Áramkör - adatrögzítés
Áramkör - adatrögzítés

A logikai elemző által kapott adatok

14. lépés: Arduino könyvtár - CAN

Arduino Könyvtár - CAN
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
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

PDF

ÉN NEM

Ajánlott: