Turinys:
- 1 žingsnis: naudojami ištekliai
- 2 žingsnis: CAN (valdiklio srities tinklas)
- 3 žingsnis: CAN - funkcijos
- 4 žingsnis: naudojama grandinė
- 5 žingsnis: perdavimo linijos įtampa (diferencinis aptikimas)
- 6 žingsnis: CAN standartai ir rėmelių formatas
- 7 žingsnis: CAN standartai ir rėmelių formatas
- 8 žingsnis: CAN standartai ir rėmelių formatas
- 9 žingsnis: Keturi rėmelių tipai (rėmeliai)
- 10 veiksmas: grandinė - išsami informacija apie jungtis
- 11 veiksmas: grandinė - duomenų surinkimas
- 12 veiksmas: grandinė - duomenų fiksavimas
- 13 veiksmas: grandinė - duomenų fiksavimas
- 14 žingsnis: „Arduino“biblioteka - CAN
- 15 žingsnis: „Github“
- 16 žingsnis: siųstuvo šaltinio kodas
- 17 veiksmas: šaltinio kodas: ciklas (), standartinio CAN 2.0 paketo siuntimas
- 18 veiksmas: šaltinio kodas: ciklas (), išplėstinio CAN 2.0 paketo siuntimas
- 19 veiksmas: imtuvo šaltinio kodas
- 20 veiksmas: šaltinio kodas: ciklas (), paketo gavimas ir formato tikrinimas
- 21 veiksmas: šaltinis: ciklas (), patikrinimai, ar tai nuotolinis paketas
- 22 veiksmas: šaltinio kodas: ciklas (), prašomas arba gautas duomenų ilgis
- 23 veiksmas: šaltinio kodas: ciklas (), jei duomenys gaunami, jie spausdinami
- 24 veiksmas: atsisiųskite failus
Video: CAN protokolas - Taip, mes galime !: 24 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:48
Kita tema, kurią neseniai pasiūlė mano „YouTube“kanalo pasekėjai, buvo CAN (valdiklio srities tinklo) protokolas, į kurį šiandien daugiausia dėmesio skirsime. Svarbu paaiškinti, kad CAN yra sinchroninio ryšio protokolas. Tai reiškia, kad sinchronizavimas tarp modulių, prijungtų prie tinklo, atliekamas atsižvelgiant į kiekvieno pranešimo, siunčiamo į magistralę, pradžią. Pradėsime pristatydami pagrindines CAN protokolo sąvokas ir atliksime paprastą surinkimą su dviem ESP32.
Mūsų grandinėje ESP gali veikti ir kaip pagrindinis, ir kaip pavaldus. Vienu metu galite perduoti kelis mikrovaldiklius, nes CAN automatiškai susiduria su viskuo. Šio projekto šaltinio kodas yra labai paprastas. Pasižiūrėk!
1 žingsnis: naudojami ištekliai
- Du ESP WROOM 32 moduliai NodeMcu
- Du CAN imtuvai iš „WaveShare“
- Džemperiai jungtims
- Loginis analizatorius fiksavimui
- Trys USB kabeliai ESP ir analizatoriui
- 10 metrų vytos poros tarnauja kaip autobusas
2 žingsnis: CAN (valdiklio srities tinklas)
- Jis buvo sukurtas Robert Bosch GmbH devintajame dešimtmetyje, kad tarnautų automobilių pramonei.
- Bėgant metams ji tapo plačiai paplitusi dėl tvirto ir lankstaus įgyvendinimo. Jis naudojamas su karine įranga, žemės ūkio technika, pramonės ir pastatų automatika, robotika ir medicinos įranga.
3 žingsnis: CAN - funkcijos
- Dviejų laidų nuoseklusis ryšys
- Viename kadre gali būti ne daugiau kaip 8 baitai naudingos informacijos, galima suskaidyti
- Adresas nukreiptas į pranešimą, o ne į mazgą
- Pranešimų prioriteto priskyrimas ir „sulaikytų“pranešimų perdavimas
- Efektyvus gebėjimas aptikti ir pranešti apie klaidas
- „Multi-master“galimybė (visi mazgai gali prašyti prieigos prie magistralės)
- „Multicast“galimybė (vienas pranešimas keliems imtuvams vienu metu)
- Perdavimo greitis iki 1 Mbit / s 40 metrų magistralėje (sumažinant greitį, padidinant šynų ilgį)
- Lankstus konfigūravimas ir naujų mazgų įvedimas (iki 120 mazgų vienoje magistralėje)
- Standartinė įranga, maža kaina ir geras prieinamumas
- Reguliuojamas protokolas: ISO 11898
4 žingsnis: naudojama grandinė
Čia aš turiu siųstuvus -imtuvus. Kiekvienoje pusėje yra vienas, ir jie yra sujungti laidais. Vienas yra atsakingas už duomenų siuntimą, o kitas - už duomenų priėmimą.
5 žingsnis: perdavimo linijos įtampa (diferencinis aptikimas)
CAN dominuojantis bitas yra nulis.
Linijų diferencialo aptikimas sumažina triukšmo jautrumą (EFI)
6 žingsnis: CAN standartai ir rėmelių formatas
Standartinis formatas su 11 bitų identifikatoriumi
7 žingsnis: CAN standartai ir rėmelių formatas
Išplėstinis formatas su 29 bitų identifikatoriumi
8 žingsnis: CAN standartai ir rėmelių formatas
Svarbu pažymėti, kad protokolas jau apskaičiuoja CRC ir siunčia ACK ir EOF signalus, o tai jau yra padaryta pagal CAN protokolą. Tai garantuoja, kad išsiųstas pranešimas nepasieks netinkamo kelio. Taip yra todėl, kad jei tai sukels problemą CRC (Redundant Cyclic Check or Redundancy Check), kuris yra tas pats kaip informacijos tikrinimo skaitmuo, jį identifikuos CRC.
9 žingsnis: Keturi rėmelių tipai (rėmeliai)
Svarbu pažymėti, kad protokolas jau apskaičiuoja CRC ir siunčia ACK ir EOF signalus, o tai jau yra padaryta pagal CAN protokolą. Tai garantuoja, kad išsiųstas pranešimas nepasieks netinkamo kelio. Taip yra todėl, kad jei tai sukels problemą CRC (Redundant Cyclic Check or Redundancy Check), kuris yra tas pats kaip informacijos tikrinimo skaitmuo, jį identifikuos CRC.
Keturi rėmelių tipai (rėmeliai)
Duomenų perdavimas ir priėmimas CAN yra pagrįsti keturių tipų kadrais. Rėmelių tipai bus identifikuojami pagal valdymo bitų variantus arba net pagal kiekvieno atvejo rašymo taisyklių pakeitimus.
- Duomenų rėmas: yra imtuvo (-ų) siųstuvo duomenys
- Nuotolinis kadras: tai duomenų užklausa iš vieno iš mazgų
- Klaidų rėmas: tai kadras, kurį siunčia bet kuris mazgas, nustatydamas magistralės klaidą ir kurį gali aptikti visi mazgai
- Perkrovos rėmas: skirtas atidėti eismą magistralėje dėl duomenų perkrovos ar uždelsimo viename ar daugiau mazgų.
10 veiksmas: grandinė - išsami informacija apie jungtis
11 veiksmas: grandinė - duomenų surinkimas
Bangos ilgiai, gauti naudojant standartinį CAN su 11 bitų ID
12 veiksmas: grandinė - duomenų fiksavimas
Bangos ilgiai gauti išplėstiniam CAN su 29 bitų ID
13 veiksmas: grandinė - duomenų fiksavimas
Loginio analizatoriaus gauti duomenys
14 žingsnis: „Arduino“biblioteka - CAN
Čia parodysiu dvi parinktis, kuriose galite įdiegti CAN tvarkyklių biblioteką
„Arduino IDE“bibliotekos vadovas
15 žingsnis: „Github“
github.com/sandeepmistry/arduino-CAN
16 žingsnis: siųstuvo šaltinio kodas
Šaltinio kodas: apima ir sąranka ()
Įtrauksime CAN biblioteką, pradėsime derinimo seriją ir paleisime CAN magistralę 500 kbps greičiu.
#include // Įtraukta biblioteka CAN void setup () {Serial.begin (9600); // inicia a serial para debug while (! Serial); Serial.println („Transmisor 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 veiksmas: šaltinio kodas: ciklas (), standartinio CAN 2.0 paketo siuntimas
Naudodami standartinį CAN 2.0, siunčiame paketą. 11 bitų ID identifikuoja pranešimą. Duomenų blokas turi turėti iki 8 baitų. Jis pradeda paketą su ID 18 šešioliktainiu skaičiumi. Jis turi 5 baitus ir uždaro funkciją.
void loop () {// Usando o CAN 2.0 padrão // Envia um pacote: o id tem 11 bits e identifa a mensagem (prioridade, evento) // o bloco de dados deve possuir até 8 bytes Serial.println ("Enviando pacote … "); CAN.beginPacket (0x12); // id 18 em šešioliktainis CAN.write ('h'); // 1º baitas CAN.write ('e'); // 2º baitas CAN.write ('l'); // 3º baitas CAN.write ('l'); // 4º baitas CAN.write ('o'); // 5º baitas CAN.endPacket (); // encerra o pacote para envio Serial.println ("Enviado."); vėlavimas (1000);
18 veiksmas: šaltinio kodas: ciklas (), išplėstinio CAN 2.0 paketo siuntimas
Šiame etape ID turi 29 bitus. Jis pradeda siųsti 24 bitų ID ir dar kartą pakuoja 5 baitus ir išeina.
// 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 dešimtainis (abcdef em hexa) = 24 bitai preenchidos até aqui CAN.write ('w'); // 1º baitas CAN.write ('o'); // 2º baitas CAN.write ('r'); // 3º baitas CAN.write ('l'); // 4º baitas CAN.write ('d'); // 5º baitas CAN.endPacket (); // encerra o pacote para envio Serial.println ("Enviado."); vėlavimas (1000); }
19 veiksmas: imtuvo šaltinio kodas
Šaltinio kodas: apima ir sąranka ()
Vėlgi, mes įtrauksime CAN biblioteką, pradėsime serijinį derinimą ir paleisime CAN magistralę 500 kbps greičiu. Jei įvyks klaida, ši klaida bus išspausdinta.
#include // Įtraukta biblioteka CAN void setup () {Serial.begin (9600); // inicia a serial para debug while (! Serial); Serial.println („CAN receptorius“); // 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 veiksmas: šaltinio kodas: ciklas (), paketo gavimas ir formato tikrinimas
Bandėme patikrinti gauto paketo dydį. CAN.parsePacket () metodas parodo man šio paketo dydį. Taigi, jei turime paketą, mes patikrinsime, ar jis pratęstas, ar 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 ()) {// verifica se o pacote é estendido Serial.println ("Estendido"); }
21 veiksmas: šaltinis: ciklas (), patikrinimai, ar tai nuotolinis paketas
Čia mes patikriname, ar gautas paketas yra duomenų užklausa. Šiuo atveju duomenų nėra.
if (CAN.packetRtr ()) {// Verifica se o pacote é um pacote remoto (Requisição de dados), neste caso não há dados Serial.print ("RTR"); }
22 veiksmas: šaltinio kodas: ciklas (), prašomas arba gautas duomenų ilgis
Jei gautas paketas yra užklausa, nurodome prašomą ilgį. Tada gauname duomenų ilgio kodą (DLC), kuris nurodo duomenų ilgį. Galiausiai nurodome gautą ilgį.
Serial.print („Pacote com id 0x“); Serijinis spaudinys (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 (Duomenų ilgio kodas, que indica o comprimento dos dados)} else {Serial.print ("e comprimento"); // aqui somente indica o comprimento recebido Serial.println (packetSize);
23 veiksmas: šaltinio kodas: ciklas (), jei duomenys gaunami, jie spausdinami
Spausdiname (serijiniame monitoriuje) duomenis, bet tik tuo atveju, jei gautas paketas nėra užklausa.
// 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 (); }}
24 veiksmas: atsisiųskite failus
AŠ NE
Rekomenduojamas:
Tachometras/nuskaitymo matuoklis naudojant „Arduino“, OBD2 ir CAN magistralę: 8 žingsniai
Tachometras/nuskaitymo matuoklis naudojant „Arduino“, OBD2 ir CAN magistralę: Visi „Toyota Prius“(ar kitos hibridinės/specialios transporto priemonės) savininkai žinos, kad jų prietaisų skydeliuose gali nebūti kelių ratukų! Mano prius neturi variklio apsisukimų per minutę ar temperatūros matuoklio. Jei esate atlikėjas, galbūt norėsite žinoti tokius dalykus kaip laiko planavimas ir
Nulaužkite savo automobilį naudodami „Wio“terminalą ir CAN magistralę: 7 žingsniai
Nulaužkite savo automobilį naudodami „Wio“terminalą ir CAN magistralę: Jei turite tam tikrą supratimą apie CAN magistralės ir „Arduino“programavimą ir norite nulaužti savo automobilį, tai šioje instrukcijoje galite rasti sprendimą. Kodėl norite įsilaužti į savo automobilį, aš nežinau, bet tai tikrai įdomus dalykas
Mes esame mokymo grupės 6 UQD10801 (Robocon1) studentai iš Universiti Tun Hussein Onn Malaizijos (UTHM): 4x4 klaviatūra ir LCD „Arduino“: 3 žingsniai
Mes esame mokymo grupės 6 UQD10801 (Robocon1) studentai iš Universiteto Tun Hussein Onn Malaizija (UTHM): 4x4 klaviatūra ir LCD „Arduino“: klaviatūros yra puikus būdas leisti vartotojams bendrauti su jūsų projektu. Galite juos naudoti naršydami meniu, įvesdami slaptažodžius ir valdydami žaidimus bei robotus. Šioje pamokoje parodysiu, kaip nustatyti klaviatūrą „Arduino“. Pirmiausia paaiškinsiu, kaip Ardu
„Nextion“ekranas - Sąsaja ir protokolas paaiškinami naudojant PIC ir „Arduino“: 10 žingsnių
„Nextion“ekranas | Sąsaja ir protokolas paaiškinta naudojant PIC ir „Arduino“: „Nextion Display“yra labai paprasta naudoti ir paprasta sąsaja su mikrovaldikliais. Naudodamiesi „Nextion“redaktoriumi, mes galime sukonfigūruoti ekraną ir galime suprojektuoti vartotojo sąsają. Taigi, atsižvelgiant į įvykius ar komandas „Nextion“ekranas veiks, kad būtų rodomas
Atvirkštinės inžinerijos „Ritter 8341C“protokolas, skirtas ESP3866: 5 žingsniai
Atvirkštinės inžinerijos „Ritter 8341C“protokolas, skirtas ESP3866: Sveiki, visi. Savo mažų namų automatizavimui naudoju pirminius 433 MHz valdomus lizdus. Turiu 3 komplektus su DIP jungikliais, kad būtų galima koreguoti adresą. Šie veikė gerai. Tačiau prieš kurį laiką (vienerius ar dvejus metus) iš „ritter & quo“įsigijau lizdų rinkinį