Sisukord:

CAN -protokoll - Jah, saame !: 24 sammu
CAN -protokoll - Jah, saame !: 24 sammu

Video: CAN -protokoll - Jah, saame !: 24 sammu

Video: CAN -protokoll - Jah, saame !: 24 sammu
Video: Bob Marley Jammin 2024, November
Anonim
Image
Image
Kasutatud ressursid
Kasutatud ressursid

Teine teema, mille minu YouTube'i kanali jälgijad hiljuti välja pakkusid, oli CAN (Controller Area Network) protokoll, millele keskendume täna. Oluline on selgitada, et CAN on samaaegne jadaühenduse protokoll. See tähendab, et võrku ühendatud moodulite vaheline sünkroonimine toimub iga siinile saadetud teate alguse suhtes. Alustuseks tutvustame CAN -protokolli põhimõisteid ja teostame kahe ESP32 -ga lihtsa kokkupaneku.

Meie vooluringis võivad ESP -d toimida nii kapteni kui ka alluvana. Teil võib korraga olla mitu mikrokontrollerit, sest CAN tegeleb kõigi kokkupõrkega automaatselt. Selle projekti lähtekood on ülilihtne. Vaata järgi!

Samm: kasutatud ressursid

  • ESP WROOM 32 NodeMcu kaks moodulit
  • Kaks CAN transiiverit WaveShare'ist
  • Ühenduste jaoks džemprid
  • Loogiline analüsaator pildistamiseks
  • Kolm USB -kaablit ESP -de ja analüsaatori jaoks
  • 10 meetrit keerdpaari, mis toimib bussina

2. samm: CAN (kontrollerpiirkondade võrk)

CAN (kontrollerpiirkonna võrk)
CAN (kontrollerpiirkonna võrk)
  • Selle töötas välja 1980. aastatel Robert Bosch GmbH, et teenindada autotööstust.
  • See on aastate jooksul laialt levinud tänu oma tugevusele ja paindlikule rakendamisele. Seda kasutatakse koos sõjavarustuse, põllumajandusmasinate, tööstus- ja hooneautomaatika, robootika ja meditsiiniseadmetega.

3. samm: CAN - funktsioonid

CAN - funktsioonid
CAN - funktsioonid
CAN - funktsioonid
CAN - funktsioonid
  • Kahejuhtmeline jadaühendus
  • Maksimaalselt 8 baiti kasulikku teavet kaadri kohta, võimalik killustamine
  • Aadress on suunatud sõnumile, mitte sõlmele
  • Sõnumitele prioriteedi määramine ja ootel olevate sõnumite edastamine
  • Tõhus võime vigu avastada ja neist märku anda
  • Mitme kapteni võimalus (kõik sõlmed võivad taotleda juurdepääsu bussile)
  • Multisaate võimalus (üks sõnum mitmele vastuvõtjale korraga)
  • Ülekandekiirus kuni 1 Mbit / s 40-meetrises bussis (kiiruse vähendamine koos siini pikkuse suurenemisega)
  • Konfiguratsiooni paindlikkus ja uute sõlmede kasutuselevõtt (kuni 120 sõlme bussi kohta)
  • Tavaline riistvara, madal hind ja hea kättesaadavus
  • Reguleeritud protokoll: ISO 11898

Samm 4: kasutatud ahel

Kasutatud ahel
Kasutatud ahel

Siin on mul transiiverid. Mõlemal küljel on üks ja need on ühendatud paari juhtmega. Üks vastutab andmete saatmise ja teine andmete vastuvõtmise eest.

5. samm: ülekandeliini pinged (diferentsiaalne tuvastamine)

Ülekandeliini pinged (diferentsiaalne tuvastamine)
Ülekandeliini pinged (diferentsiaalne tuvastamine)

CAN -is on domineeriv bit Zero.

Liini diferentsiaalide tuvastamine vähendab müratundlikkust (EFI)

6. samm: CAN -i standardite ja raamide vorming

CAN standardite ja raamide vorming
CAN standardite ja raamide vorming

Standardvorming 11-bitise identifikaatoriga

Samm 7: CAN -i standardite ja raamide vorming

CAN standardite ja raamide vorming
CAN standardite ja raamide vorming

Laiendatud vorming 29-bitise identifikaatoriga

8. samm: CAN -i standardite ja raamide vorming

Oluline on märkida, et protokoll juba arvutab CRC ja saadab ACK ja EOF signaale, mis on asjad, mida CAN protokoll juba teeb. See tagab, et saadetud sõnum ei jõua valel viisil. Selle põhjuseks on asjaolu, et kui see tekitab probleemi CRC -s (redundant tsükliline kontroll või redundantskontroll), mis on sama mis teabe kontrollnumber, tuvastab selle CRC.

9. samm: nelja tüüpi raamid (raamid)

Neli tüüpi raamid (raamid)
Neli tüüpi raamid (raamid)

Oluline on märkida, et protokoll juba arvutab CRC ja saadab ACK ja EOF signaale, mis on asjad, mida CAN protokoll juba teeb. See tagab, et saadetud sõnum ei jõua valel viisil. Selle põhjuseks on asjaolu, et kui see tekitab probleemi CRC -s (redundant tsükliline kontroll või redundantskontroll), mis on sama mis teabe kontrollnumber, tuvastab selle CRC.

Neli tüüpi raamid (raamid)

Andmete edastamine ja vastuvõtmine CAN -is põhineb nelja tüüpi kaadritel. Kaadritüübid tuvastatakse juhtbittide variatsioonide või isegi kaadrite kirjutamise reeglite muudatuste põhjal iga juhtumi puhul.

  • Andmeraam: sisaldab vastuvõtja (te) saatjaandmeid
  • Kaugraam: see on ühe sõlme andmete päring
  • Vearaam: see on kaader, mille mis tahes sõlmed saadavad siinis vea tuvastamisel ja mida saavad tuvastada kõik sõlmed
  • Ülekoormusraam: toimib bussi liikluse viivitamiseks andmete ülekoormuse või ühe või mitme sõlme viivituse tõttu.

Samm: ahel - ühenduste üksikasjad

Vooluahel - üksikasjad ühenduste kohta
Vooluahel - üksikasjad ühenduste kohta

11. samm: ahel - andmete kogumine

Vooluahel - andmete kogumine
Vooluahel - andmete kogumine

Lainepikkused, mis on saadud standardse CAN-i jaoks 11-bitise ID-ga

12. samm: ahel - andmete kogumine

Vooluahel - andmete kogumine
Vooluahel - andmete kogumine

Lainepikkused, mis on saadud 29-bitise ID-ga laiendatud CAN-i jaoks

Samm 13: ahel - andmete kogumine

Vooluahel - andmete kogumine
Vooluahel - andmete kogumine

Loogikaanalüsaatoriga saadud andmed

14. samm: Arduino raamatukogu - CAN

Arduino raamatukogu - CAN
Arduino raamatukogu - CAN

Näitan siin kahte võimalust, kuhu saate CAN -i draiveriteegi installida

Arduino IDE raamatukoguhaldur

Samm: Github

Github
Github

github.com/sandeepmistry/arduino-CAN

16. samm: saatja lähtekood

Lähtekood: sisaldab ja seadistamist ()

Kaasame CAN -kogu, käivitame silumiseks seeria ja käivitame CAN -siini kiirusega 500 kbps.

#include // Sisaldab biblioteka CAN void setup () {Serial.begin (9600); // algatada seeria para debug while (! Serial); Serial.println ("Saatja 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. samm: lähtekood: Loop (), standardse CAN 2.0 paketi saatmine

Kasutades standardset CAN 2.0, saadame paketi. 11-bitine ID tuvastab sõnumi. Andmeplokil peab olema kuni 8 baiti. See alustab paketti ID 18 -ga kuueteistkümnendsüsteemis. See mahutab 5 baiti ja sulgeb funktsiooni.

void loop () {// Usando o CAN 2.0 padrão // Envia um pacote: o id tem 11 bits e identific a mensagem (prioridade, evento) // o bloco de dados deve possuir até 8 bytes Serial.println ("Enviando pacote … "); CAN.beginPacket (0x12); // id 18 em kuueteistkümnendarv CAN.write ('h'); // 1º bait CAN.write ('e'); // 2º bait CAN.write ('l'); // 3º bait CAN.write ('l'); // 4º bait CAN.write ('o'); // 5º bait CAN.endPacket (); // encerra o pacote para envio Serial.println ("Enviado."); viivitus (1000);

18. samm: lähtekood: Loop (), laiendatud CAN 2.0 paketi saatmine

Selles etapis on ID -l 29 bitti. See hakkab saatma 24 bitti ID -d ja pakendab veel kord 5 baiti ja lõpetab.

// Usando CAN 2.0 Estendido // Envia um pacote: o id tem 29 bits e identifika a mensagem (prioridade, evento) // o bloco de dados deve possuir até 8 bytes Serial.println ("Enviando pacote estendido…"); CAN.beginExtendedPacket (0xabcdef); // id 11259375 kümnendkoht (abcdef em hexa) = 24 bitti preenchidos até aqui CAN.write ('w'); // 1º bait CAN.write ('o'); // 2º bait CAN.write ('r'); // 3º bait CAN.write ('l'); // 4º bait CAN.write ('d'); // 5º bait CAN.endPacket (); // encerra o pacote para envio Serial.println ("Enviado."); viivitus (1000); }

19. samm: vastuvõtja lähtekood

Lähtekood: sisaldab ja seadistamist ()

Jällegi kaasame CAN -i teeki, alustame silumist jadastamiseks ja käivitame CAN -siini kiirusega 500 kbps. Kui ilmneb tõrge, prinditakse see viga.

#include // Sisaldab biblioteka CAN void setup () {Serial.begin (9600); // algatada seeria para debug while (! Serial); Serial.println ("Retseptor 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. samm: lähtekood: Loop (), paketi hankimine ja vormingu kontrollimine

Proovisime kontrollida saadud paketi suurust. Meetod CAN.parsePacket () näitab mulle selle paketi suurust. Nii et kui meil on pakett, kontrollime, kas see on pikendatud või mitte.

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. samm: allikas: Loop (), kontrollib, kas tegemist on kaugpaketiga

Siin kontrollime, kas vastuvõetud pakett on andmetaotlus. Sellisel juhul andmed puuduvad.

if (CAN.packetRtr ()) {// Verifica se o pacote é um pacote remoto (Requisição de dados), neste caso não há dados Serial.print ("RTR"); }

22. etapp: lähtekood: tsükkel (), taotletud või saadud andmete pikkus

Kui vastuvõetud pakett on taotlus, näitame soovitud pikkuse. Seejärel saame andmete pikkuse koodi (DLC), mis näitab andmete pikkust. Lõpuks näitame saadud pikkust.

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 (andmepikkuse kood, que indica o comprimento dos dados)} else {Serial.print ("e comprimento"); // aqui somente indica või comprimento recebido Serial.println (packetSize);

Samm 23: Lähtekood: Loop (), kui andmed võetakse vastu, prinditakse see seejärel välja

Prindime (jadamonitoril) andmed, kuid ainult siis, kui vastuvõetud pakett ei ole taotlus.

// 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 (); }}

Samm: laadige failid alla

PDF

INO

Soovitan: