Sisukord:
- Samm: kasutatud ressursid
- 2. samm: CAN (kontrollerpiirkondade võrk)
- 3. samm: CAN - funktsioonid
- Samm 4: kasutatud ahel
- 5. samm: ülekandeliini pinged (diferentsiaalne tuvastamine)
- 6. samm: CAN -i standardite ja raamide vorming
- Samm 7: CAN -i standardite ja raamide vorming
- 8. samm: CAN -i standardite ja raamide vorming
- 9. samm: nelja tüüpi raamid (raamid)
- Samm: ahel - ühenduste üksikasjad
- 11. samm: ahel - andmete kogumine
- 12. samm: ahel - andmete kogumine
- Samm 13: ahel - andmete kogumine
- 14. samm: Arduino raamatukogu - CAN
- Samm: Github
- 16. samm: saatja lähtekood
- 17. samm: lähtekood: Loop (), standardse CAN 2.0 paketi saatmine
- 18. samm: lähtekood: Loop (), laiendatud CAN 2.0 paketi saatmine
- 19. samm: vastuvõtja lähtekood
- 20. samm: lähtekood: Loop (), paketi hankimine ja vormingu kontrollimine
- 21. samm: allikas: Loop (), kontrollib, kas tegemist on kaugpaketiga
- 22. etapp: lähtekood: tsükkel (), taotletud või saadud andmete pikkus
- Samm 23: Lähtekood: Loop (), kui andmed võetakse vastu, prinditakse see seejärel välja
- Samm: laadige failid alla
Video: CAN -protokoll - Jah, saame !: 24 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:49
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)
- 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
- 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
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)
CAN -is on domineeriv bit Zero.
Liini diferentsiaalide tuvastamine vähendab müratundlikkust (EFI)
6. samm: CAN -i standardite ja raamide vorming
Standardvorming 11-bitise identifikaatoriga
Samm 7: CAN -i 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)
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
11. samm: ahel - andmete kogumine
Lainepikkused, mis on saadud standardse CAN-i jaoks 11-bitise ID-ga
12. samm: ahel - andmete kogumine
Lainepikkused, mis on saadud 29-bitise ID-ga laiendatud CAN-i jaoks
Samm 13: ahel - andmete kogumine
Loogikaanalüsaatoriga saadud andmed
14. samm: Arduino raamatukogu - CAN
Näitan siin kahte võimalust, kuhu saate CAN -i draiveriteegi installida
Arduino IDE raamatukoguhaldur
Samm: 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
INO
Soovitan:
Tahhomeeter/skannimõõtur Arduino, OBD2 ja CAN -siini abil: 8 sammu
Tahhomeeter/skannimõõtur Arduino, OBD2 ja CAN -bussi abil: kõik Toyota Priuse (või muu hübriid-/erisõiduki) omanikud teavad, et nende armatuurlaual võib puududa mõni valik! Minu priusil pole mootori pöörlemiskiirust ega temperatuurinäidikut. Kui olete esitusmees, võiksite teada selliseid asju nagu ajastus ja
Häkkige oma autot Wio terminali ja CAN -bussiga: 7 sammu
Häkkige oma autot Wio -terminali ja CAN -bussiga: kui teil on CAN -bussi ja Arduino programmeerimisest arusaamist ja soovite oma autot häkkida, siis see juhend annab teile lahenduse. Miks soovite oma autot häkkida, ei tea, aga see on tõepoolest huvitav asi. See pr
Rooli võtmed autostereo adapterini (CAN -buss -> võti 1): 6 sammu
Rooliratta võtmed autostereoadapterile (CAN -buss -> Key1): paar päeva pärast kasutatud auto ostmist avastasin, et ma ei saa telefonist muusikat stereosüsteemi kaudu esitada. Veelgi masendavam oli see, et autol oli bluetooth, kuid lubatud ainult häälkõned, mitte muusika. Sellel oli ka Windows Phone'i USB -port, kuid ma
Sõiduki CAN -siini andmete dekodeerimine: 8 sammu
Sõiduki CAN -siiniandmete dekodeerimine: selles juhendis salvestame auto või veoauto CAN -siiniandmed ja teisendame salvestatud CAN -siini logiandmed loetavateks väärtusteks. Dekodeerimiseks kasutame tasuta pilveteenust can2sky.com. Logi saame salvestada CAN-USB-adapterite abil, kuid maksame
STM32 CAN -liides: 7 sammu
STM32 CAN -liides: Controller Area Network siin või CAN -siin on väga tõhus suhtlusprotokoll tänu oma kiiretele võimalustele, pika töökindluse ja mürakindlusele. Nendel põhjustel on CAN -side muutunud autotööstuse standardiks