Turinys:

Paprasta CANBUS pamoka: 8 žingsniai
Paprasta CANBUS pamoka: 8 žingsniai

Video: Paprasta CANBUS pamoka: 8 žingsniai

Video: Paprasta CANBUS pamoka: 8 žingsniai
Video: Big Tree Tech — SKR 3EZ — Основы 2024, Lapkritis
Anonim
Paprasta CANBUS pamoka
Paprasta CANBUS pamoka

Aš tris savaites mokiausi CAN, o dabar užpildžiau kai kurias programas, kad patvirtinčiau savo mokymosi rezultatus. Šioje pamokoje sužinosite, kaip naudoti „Arduino“CANBUS ryšiui įgyvendinti. Jei turite pasiūlymų, kviečiame palikti žinutę.

Priedai:

Techninė įranga:

  • „Maduino Zero CANBUS“
  • DHT11 temperatūros ir drėgmės modulis
  • 1,3 colio I2C OLED 128x64- mėlyna
  • Kabelis nuo DB9 iki DB9 (iš moters į moterį)
  • Duponto linija

Programinė įranga:

„Arduino IDE“

1 žingsnis: kas yra CANBUS

Kas yra CANBUS
Kas yra CANBUS
Kas yra CANBUS
Kas yra CANBUS

Apie CAN

CAN (valdiklio srities tinklas) yra nuoseklus ryšio tinklas, galintis realizuoti paskirstytą realaus laiko valdymą. Jis sukurtas automobilių pramonei pakeisti sudėtingą laidų grandinę dviejų laidų magistralėje.

CAN protokolas apibrėžia duomenų nuorodos sluoksnį ir fizinio sluoksnio dalį OSI modelyje.

CAN protokolas yra standartizuotas pagal ISO11898 ir ISO11519. ISO11898 yra CAN didelės spartos ryšio standartas, kurio ryšio greitis yra 125 kbps-1 Mbps. ISO11519 yra CAN mažo greičio ryšio standartas, kurio ryšio greitis yra mažesnis nei 125 kbps.

Čia mes sutelkiame dėmesį į didelės spartos CAN.

ISO-11898 aprašo, kaip informacija perduodama tarp tinklo įrenginių ir atitinka atvirų sistemų sujungimo modelį (OSI), kuris yra apibrėžtas sluoksniais. Faktinį ryšį tarp fizine laikmena sujungtų įrenginių apibrėžia fizinis modelio sluoksnis

  • Kiekvienas prie magistralės prijungtas CAN įrenginys gali būti vadinamas mazgu. Visi CAN įrenginiai yra prijungti prie magistralės, baigtos kiekviename gale su 120 Ω rezistoriais, kad sudarytų tinklą. Autobusą sudaro CAN_H ir CAN_L linijos. CAN valdiklis nustato magistralės lygį pagal abiejų laidų galios lygio skirtumą. Autobusų lygiai yra suskirstyti į dominuojančius ir recesyvinius lygius, kurie turi būti vienas iš jų. Siuntėjas siunčia pranešimą gavėjui, atlikdamas pakeitimus magistralės lygiu. Kai magistralėje vykdoma loginė eilutė „ir“, dominuojantis lygis yra „0“, o recesyvinis - „1“.
  • Dominuojančioje būsenoje CAN_H įtampa yra apie 3,5 V, o CAN_L - apie 1,5 V. Recesyvinėje būsenoje abiejų linijų įtampa yra apie 2,5 V.
  • Signalas yra diferencinis, todėl CAN turi tvirtą triukšmo atsparumą ir gedimų toleranciją. Subalansuotas diferencialinis signalas sumažina triukšmo susiejimą ir užtikrina aukštą signalizacijos greitį per vytos poros kabelį. Srovė kiekvienoje signalo linijoje yra lygi, bet priešinga kryptimi, todėl susidaro lauką slopinantis efektas, kuris yra labai svarbus mažam triukšmui. Naudojant subalansuotus diferencialinius imtuvus ir vytos poros kabelius, padidinamas bendro režimo atmetimas ir didelis CAN magistralės atsparumas triukšmui.

CAN siųstuvas -imtuvas

CAN siųstuvas -imtuvas yra atsakingas už loginio lygio ir fizinio signalo konvertavimą. Konvertuokite loginį signalą į diferencinį lygį arba fizinį signalą į loginį lygį.

CAN valdiklis

CAN valdiklis yra pagrindinis CAN komponentas, kuris realizuoja visas duomenų ryšio sluoksnio funkcijas CAN protokole ir gali automatiškai išspręsti CAN protokolą.

MCU

MCU yra atsakingas už funkcijų grandinės ir CAN valdiklio valdymą. Pvz., CAN valdiklio parametrai inicijuojami, kai mazgas paleidžiamas, CAN kadras skaitomas ir siunčiamas per CAN valdiklį ir pan.

2 žingsnis: Apie „CAN Communications“

Kai magistralė neveikia, visi mazgai gali pradėti siųsti pranešimus (kelių valdiklių valdymas). Mazgas, kuris pirmą kartą pasiekia magistralę, gauna teisę siųsti (CSMA/CA režimas). Kai vienu metu pradeda siųsti keli mazgai, mazgas, siunčiantis aukšto prioriteto ID pranešimą, turi teisę siųsti.

CAN protokole visi pranešimai siunčiami fiksuoto formato. Kai magistralė neveikia, visi prie magistralės prijungti įrenginiai gali pradėti siųsti naujus pranešimus. Kai daugiau nei dvi ląstelės pradeda siųsti pranešimus vienu metu, prioritetas nustatomas pagal identifikatorių. ID neatspindi siuntimo paskirties adreso, o greičiau pranešimo, pasiekiančio magistralę, prioritetas. Kai daugiau nei dvi ląstelės pradeda siųsti pranešimus vienu metu, kiekvienas beprocentinio ID bitas yra sprendžiamas po vieną. Skyrius, laimėjęs arbitražą, gali toliau siųsti pranešimus, o pralaimėjęs arbitražas tuoj pat nustoja siųsti ir gauna darbą.

CAN magistralė yra transliavimo tipo autobusas. Tai reiškia, kad visi mazgai gali „išgirsti“visas transliacijas. visi mazgai visada sulauks visą srautą. CAN aparatūra užtikrina vietinį filtravimą, kad kiekvienas mazgas galėtų reaguoti tik į įdomius pranešimus.

3 žingsnis: rėmai

Rėmeliai
Rėmeliai

CAN įrenginiai siunčia duomenis per CAN tinklą paketais, vadinamais rėmeliais. CAN turi keturis rėmelių tipus:

  • Duomenų rėmas: rėmas, kuriame yra perduodamų mazgų duomenys
  • Nuotolinis kadras: kadras, kuriuo prašoma perduoti konkretų identifikatorių
  • Klaidos rėmas: bet kurio mazgo perduodamas kadras, aptikęs klaidą
  • Perkrovos kadras: kadras, skirtas įvesti vėlavimą tarp duomenų ar nuotolinio kadro

Duomenų rėmas

Yra dviejų tipų duomenų rėmai, standartiniai ir išplėstiniai.

Paveikslo bitų laukų reikšmė yra tokia:

  • SOF - vienintelis dominuojantis kadro pradžios (SOF) bitas žymi pranešimo pradžią ir naudojamas sinchronizuoti magistralės mazgus, kai jie nenaudojami.
  • Identifier-Standartinis CAN 11 bitų identifikatorius nustato pranešimo prioritetą. Kuo mažesnė dvejetainė vertė, tuo didesnis jos prioritetas.
  • RTR - vienas nuotolinio perdavimo užklausos (RTR) bitas
  • IDE - dominuojantis vieno identifikatoriaus plėtinio (IDE) bitas reiškia, kad perduodamas standartinis CAN identifikatorius be plėtinio.
  • R0 - rezervuotas bitas (galima naudoti ateityje pakeitus standartą).
  • DLC-4 bitų duomenų ilgio kodas (DLC) apima perduodamų duomenų baitų skaičių.
  • Duomenys - gali būti perduota iki 64 bitų programos duomenų.
  • CRC-16 bitų (15 bitų plius skiriamųjų ženklų) ciklinis dubliavimo patikrinimas (CRC) apima ankstesnių programos duomenų kontrolinę sumą (perduotų bitų skaičių), kad būtų galima aptikti klaidas.
  • ACK – ACK yra 2 bitai, vienas yra patvirtinimo bitas, o antrasis - skiriamieji ženklai.
  • EOF-šis kadro pabaigos (EOF) 7 bitų laukas žymi CAN kadro (pranešimo) pabaigą ir išjungia bitų užpildymą, nurodydamas užpildymo klaidą, kai ji dominuoja. Kai įprasto veikimo metu iš eilės atsiranda 5 to paties loginio lygio bitai, į duomenis įdedama šiek tiek priešingo loginio lygio.
  • IFS-šioje 7 bitų tarpo kadrų erdvėje (IFS) yra laikas, kurio reikia valdikliui, norint teisingai gautą kadrą perkelti į reikiamą vietą pranešimų buferio srityje.

Arbitražas

Kai autobusas veikia tuščiąja eiga, įrenginys, kuris pirmiausia pradeda siųsti pranešimą, gauna siuntimo teisę. Kai keli vienetai pradeda siųsti vienu metu, kiekvienas siunčiantis vienetas prasideda nuo pirmojo arbitražo segmento bito. Įrenginys, turintis daugiausia nuolatinio išėjimo dominuojančių lygių, gali ir toliau siųsti.

4 žingsnis: greitis ir atstumas

Greitis ir atstumas
Greitis ir atstumas

CAN magistralė yra autobusas, jungiantis kelis įrenginius vienu metu. Bendras prijungiamų įrenginių skaičius teoriškai neribojamas. Tačiau praktiškai prijungiamų įrenginių skaičių riboja magistralės uždelsimas ir elektros apkrova. Sumažinkite ryšio greitį, padidinkite prijungiamų įrenginių skaičių ir padidinkite ryšio greitį, todėl prijungiamų įrenginių skaičius mažėja.

Ryšio atstumas yra atvirkščiai susijęs su ryšio greičiu, ir kuo toliau, tuo mažesnis ryšio greitis. Ilgesnis atstumas gali būti 1 km ar daugiau, tačiau greitis yra mažesnis nei 40 km / h.

5 žingsnis: Aparatūra

Techninė įranga
Techninė įranga

„Maduino Zero CAN-BUS“modulis yra „Makerfabs“sukurtas įrankis, skirtas „CANbus“ryšiui-jis sukurtas naudojant „Arduino“, su CAN valdikliu ir CAN siųstuvu-imtuvu, kad būtų sukurtas paruoštas naudoti CAN magistralės prievadas.

  • MCP2515 yra atskiras CAN valdiklis, įgyvendinantis CAN specifikaciją. Jis gali perduoti ir priimti tiek standartinius, tiek išplėstinius duomenis ir nuotolinius kadrus.
  • MAX3051 sąsajos tarp CAN protokolo valdiklio ir fizinių magistralinių linijų laidų valdiklio srities tinkle (CAN). MAX3051 suteikia diferencinio perdavimo galimybę į magistralę ir diferencinio priėmimo galimybę CAN valdikliui.

6 žingsnis: prijungimas

Ryšys
Ryšys

Prijunkite DHT11 modulį prie „Maduino Zero CAN-BUS“modulio laidais, kurie bus naudojami kaip CAN ryšio palaikymo priemonė. Panašiai prijunkite ekraną prie modulio, kad gautumėte duomenis ir juos rodytumėte.

Ryšys tarp „Maduino Zero CANBUS“ir DHT11.

„Maduino Zero CANBUS“- DHT11

3v3 ------ VCC GND ------ GND D10 ------ DUOMENYS

Ryšys tarp „Maduino Zero CANBUS“ir „OLED“

Maduino Zero CANBUS - OLED

3v3 ------ VCC GND ------ GND SCL ------ SCL SDA ------ SDA

Norėdami prijungti du „Maduino Zero CANBUS“modulius, naudokite DB9 kabelį.

7 žingsnis: kodas

MAX3051 užbaigia diferencinių lygių konvertavimą į loginius signalus. MCP2515 atlieka CAN funkciją, pvz., Duomenų kodavimą ir dekodavimą. MCU reikia tik inicijuoti valdiklį ir siųsti bei gauti duomenis.

  • „Github“:
  • Įdiegus „Arduino“, nėra paketo, palaikančio plokštę („Arduino zero“), kurią reikia įdiegti.
  • Pasirinkite įrankius -> Lenta -> Valdybos valdytojas, ieškokite „Arduino zero“ir įdiekite „Arduino SAMD Boards“.
  • Pasirinkite Įrankiai -> Lenta -> Arduino Zero (vietinis USB prievadas), pasirinkite Įrankiai -> Prievadas -> com…
  • Gavę programą iš „GitHub“, turite įsitikinti, kad visi failai yra projekto kataloge, kuriame yra bibliotekos failai, palaikantys CANBUS.
  • Įdiekite „Adafruit“DHT jutiklių biblioteką, kuri naudojama DHT11 vairuoti, norint gauti temperatūrą ir drėgmę.
  • Naudokite skirtingus adresus, norėdami atskirai siųsti temperatūrą ir drėgmę į kodą Test_DHT11.ino.

CAN.sendMsgBuf (0x10, 0, stmp1.length (), stmp_send1);

vėlavimas (500); CAN.sendMsgBuf (0x11, 0, stmp2.length (), stmp_send2); vėlavimas (500);

„0x10“reiškia pranešimo ID, „0“yra vidutinis standartinis kadras, „stmp1.length ()“reiškia pranešimo ilgį, „stmp_send1“yra išsiųsti duomenys.

  • Kode Test_OLED.ino visi CANBUS pranešimai gaunami pagal užklausą, o reikalinga informacija rodoma OLED.
  • Įkelkite programą „Maduino-CANbus-RS485/Test_DHT11_OLED/Test_DHT11/Test_DHT11.ino“į modulį, prijungtą prie jutiklio, ir įkelkite programą „Maduino-CANbus RS485/Test_DHT11_OLED/Test_OLED/Test_OLED.ino“į kitą modulį, prijungtą prie OLED.

8 žingsnis: Parodykite

Rodyti
Rodyti
Rodyti
Rodyti

Įjunkite du modulius, ekrane bus rodoma temperatūra ir drėgmė.

Rekomenduojamas: