Kaip sukurti CAN magistralės tinklą su MCP2515 ir Arduino moduliais

  • CAN protokolas leidžia efektyviai bendrauti pramoninėje ir automobilių aplinkoje.
  • MCP2515 modulis yra optimalus sprendimas prijungti Arduino prie CAN tinklo.
  • CAN magistralė naudoja du kabelius (CAN_H ir CAN_L), kad būtų galima patikimai perduoti duomenis dideliais atstumais.
  • Ši instrukcija padės jums žingsnis po žingsnio nustatyti ir naudoti CAN tinklą su „Arduino“.

prijungtų automobilių

Jei mėgstate technologijas ir dažnai eksperimentuojate su Arduino, šis straipsnis jus sužavės. Šiandien pamatysime, kaip nustatyti savo CAN tinklą naudojant MCP2515 modulį ir Arduino. Sužinosite, kaip efektyviai ir patikimai bendrauti tarp skirtingų įrenginių CAN tinkle. Šio tipo tinklai plačiai naudojami automobiliuose ir kitose pramonės srityse.

Nesvarbu, ar vykdote automobilių projektą, ar jums reikia ryšio tarp kelių mikrovaldiklių, CAN magistralė puikiai tinka toms programoms, kuriose būtinas patikimumas ir našumas. O su MCP2515 moduliu Arduino integruoti į šį tinklą labai paprasta. Taigi, pasiruoškite išsamiai sužinoti apie CAN protokolą, aparatinės įrangos konfigūraciją ir būtiną programavimą.

Kas yra CAN magistralė?

CAN magistralė (Controller Area Network) yra nuosekliojo ryšio protokolas, leidžiantis skirtingiems įrenginiams bendrauti tarpusavyje. Jį 1986 m. sukūrė „Bosch“ ir jis sukurtas specialiai automobiliams, nors jo naudojimas išplito ir kituose sektoriuose, pavyzdžiui, pramoninėje automatizacijoje. Šio tipo tinkle prijungti įrenginiai siunčia ir priima pranešimus nereikalaujant centrinio pagrindinio kompiuterio ar valdiklio, todėl tai yra labai efektyvus protokolas aplinkoje, kurioje svarbiausias ryšys ir patikimumas.

Šiuolaikiniame automobilyje yra daugiau nei 70 valdymo įrenginių, vadinamų ECU (elektroniniais valdymo blokais), sujungtų vienas su kitu per CAN magistralę. Šio protokolo dėka ECU keičiasi pagrindine informacija apie automobilio veikimą, pvz., duomenis apie automobilio greitį ar akceleratoriaus padėtį.

CAN magistralės topologija ir signalai

CAN sistemos topologija yra tipo multimaster, tai reiškia, kad bet kuris prie tinklo prijungtas įrenginys gali perimti magistralės valdymą ir siųsti pranešimus. Visi mazgai išklauso šiuos pranešimus ir nusprendžia, ar atsakyti, ar ignoruoti.

Fiziniu požiūriu ryšys vyksta dviem kabeliais: CAN_H y CAN_L. Šie kabeliai yra pinti, kad sumažintų elektromagnetinius trukdžius. Be to, tinklo galai turi būti užbaigti 120 omų rezistoriais, kad būtų išvengta atspindžių signale.

CAN signalizacija

CAN sistema komunikacijai naudoja dvi logines būsenas: dominuojantis y recesyvinis. Dominuojančioje būsenoje CAN_H įtampa yra 3.5 V, o CAN_L - 1.5 V. Šioje būsenoje perduodamas loginis „0“. Kita vertus, recesyvinėje būsenoje abiejų laidų įtampa yra 2.5 V, o tai rodo, kad magistralė yra laisva ir galima perduoti loginį „1“. Būtent šis įtampos pokytis tarp dviejų kabelių leidžia perduoti duomenis tinkle.

MCP2515 modulis

El MCP2515 modulis Tai idealus sprendimas norint pridėti CAN ryšį prie „Arduino“. Jį sudaro CAN valdiklis (MCP2515, kuris atitinka CAN 2.0B specifikaciją) ir CAN siųstuvas-imtuvas (TJA1050, kuris tvarko fizinį ryšį). Šie du lustai veikia kartu, todėl galite siųsti ir gauti CAN pranešimus naudodami savo Arduino per SPI sąsają.

MCP2515 palaiko ir standartinius (11 bitų), ir išplėstinius (29 bitų) pranešimus ir turi galimybę filtruoti nepageidaujamus pranešimus naudojant kaukes ir filtrus, kurie iškrauna darbą iš mikrovaldiklio. Tai puikus pasirinkimas projektams, kuriems reikalingas patikimas ryšys, tiek triukšmingoje aplinkoje, tiek dideliais atstumais.

MCP2515 modulio komponentai

MCP2515 modulį sudaro šios dalys:

  • MCP2515 CAN valdiklis: atsakingas už visų CAN protokolo funkcijų vykdymą, pvz., pranešimų siuntimą ir gavimą.
  • TJA1050 CAN siųstuvas-imtuvas: atsakingas už duomenų iš CAN valdiklio konvertavimą į signalus fizinei CAN magistralei ir atvirkščiai.
  • SPI ryšio kaiščiai: Naudodamas SCK, MOSI, MISO ir CS kaiščius, MCP2515 bendrauja su Arduino per SPI sąsają.
  • CAN autobusų terminalai: Šis mažas varžtų gnybtų blokas yra pažymėtas „H“ ir „L“. CAN_H ir CAN_L turi būti prijungti prie CAN tinklo kabelių.

Kaip nustatyti CAN tinklą naudojant „Arduino“.

Naudojant MCP2515 modulį CAN tinklo nustatymas yra gana paprastas. Žemiau paaiškinu, kaip prijungti modulį prie „Arduino“ plokštės ir kaip sukonfigūruoti programinę įrangą.

MCP2515 modulio jungtys

Norėdami pradėti, prijunkite savo Arduino SPI kaiščius taip:

  • Sojų pasta (modulio išvestis) į Arduino D12 kaištį
  • DAWDLE (modulio įvestis) į „Arduino“ D11 kaištį
  • SCK (Laikrodis) prie Arduino kaiščio D13
  • CS (Chip Select) prie Arduino kaiščio D10

Taip pat turėsite prijungti MCP2515 INT kaištį prie Arduino skaitmeninio kaiščio, pavyzdžiui, D2, nes šis kaištis naudojamas pertraukimams tvarkyti, kai gaunamas tinkamas pranešimas.

Nepamirškite įjungti modulio maitinimo. VCC kaištis turi būti prijungtas prie 5 V, o GND - prie žemės.

Kalbant apie CAN magistralės terminalus, prijunkite CAN_H prie CAN_H ir CAN_L prie CAN_L tarp skirtingų mazgų, kuriuos norite sujungti. Atminkite, kad CAN magistralė turi būti baigta abiejuose galuose su 120 omų rezistoriumi.

Arduino programavimas

Kai prijungiate mazgus, laikas užprogramuoti savo Arduino bendrauti su CAN magistrale per MCP2515 modulį. Geriausias būdas tai padaryti yra naudoti tinkamą biblioteką, pvz., biblioteką "mcp2515".

Pirmiausia turite įdiegti šią biblioteką. Jei naudojate Arduino IDE, eikite į Sketch > Include Library > Manage Libraries. Ieškokite „mcp2515“ ir pasirinkite diegimo parinktį.

Įdiegę biblioteką, galite pradėti rašyti siųstuvo ir imtuvo mazgo kodą. Žemiau parodysiu pagrindinius abiejų pavyzdžius.

Siųstuvo mazgo kodo pavyzdys

Šis kodas kas sekundę CAN magistrale siunčia pranešimą „Sveikas pasaulis“.

#include void setup() { Serial.begin(9600); while (!Serial); Serial.println("Nodo transmisor CAN"); if (!CAN.begin(500E3)) { Serial.println("Error al iniciar CAN"); while (1); }}void loop() { Serial.print("Enviando mensaje... "); CAN.beginPacket(0x12); CAN.write('H'); CAN.write('o'); CAN.write('l'); CAN.write('a'); CAN.write(' '); CAN.write('M'); CAN.write('u'); CAN.write('n'); CAN.write('d'); CAN.write('o'); CAN.endPacket(); Serial.println("Mensaje enviado correctamente"); delay(1000);}

Priimamojo mazgo kodo pavyzdys

Šis kodas gauna pranešimus iš CAN magistralės ir rodo juos serijiniame monitoriuje.

#include void setup() { Serial.begin(9600); while (!Serial); Serial.println("Nodo receptor CAN"); if (!CAN.begin(500E3)) { Serial.println("Error al iniciar CAN"); while (1); } CAN.onReceive(onReceive);}void loop() {}void onReceive(int packetSize) { Serial.print("Mensaje recibido con ID: 0x"); Serial.print(CAN.packetId(), HEX); Serial.print(" | Tamaño: "); Serial.print(packetSize); Serial.print(" | Datos: "); while (CAN.available()) { Serial.print((char)CAN.read()); } Serial.println();}

Greičiai ir atstumai CAN tinkle

CAN magistralė leidžia palaikyti ryšį įvairiu greičiu. Maksimalus MCP2515 palaikomas greitis yra 1 Mbit/s, tačiau magistralės ilgis riboja perdavimo greitį. Pavyzdžiui, esant 1 Mbit/s greičiui, maksimalus magistralės ilgis yra maždaug 40 metrų. Tačiau jei reikia nuvažiuoti didesnius atstumus, galite sumažinti greitį. Esant 125 kbit/s greičiui, autobuso ilgis gali siekti 500 metrų.

Svarbu gerai planuoti tinklą ir naudoti tinkamą greitį pagal magistralės ilgį ir aplinką, kurioje jis bus naudojamas, nes triukšminga aplinka gali turėti įtakos ryšio kokybei.

Taip pat nepamirškite naudoti vytos poros CAN_H ir CAN_L kabeliams, nes tai padeda sumažinti elektromagnetinius trukdžius ir pagerina tinklo patikimumą.

CAN tinklas su keliais mazgais

Jei norite suformuoti tinklą su keliais mazgais, procesas yra labai panašus. Vienintelis dalykas, kurį jums reikia padaryti, yra įsitikinti, kad visi mazgai yra lygiagrečiai prijungti prie CAN_H ir CAN_L linijų. Taip pat atminkite, kad baigiamuosius rezistorius dėkite tik pagrindinės linijos galuose, o ne tarpiniuose mazguose.

Sudėtingesniame tinkle gali būti keli mazgai, kurie veikia kaip siųstuvai ir imtuvai. Kiekvienas mazgas prideda minimalią magistralės apkrovą, todėl CAN tinkle galima prijungti iki 112 mazgų, nepažeidžiant našumo.

Nesvarbu, ar naudojate CAN magistralę automobilyje variklio duomenims nuskaityti, ar pramoniniame projekte, norėdami perduoti kelis jutiklius, MCP2515 modulis leidžia lengvai ir efektyviai pridėti šią funkciją. Šio tipo tinklas idealiai tinka programoms, kuriose būtinas mažas delsimas ir duomenų perdavimo patikimumas.


Būkite pirmas, kuris pakomentuos

Palikite komentarą

Jūsų elektroninio pašto adresas nebus skelbiamas. Privalomi laukai yra pažymėti *

*

*

  1. Atsakingas už duomenis: Miguel Ángel Gatón
  2. Duomenų paskirtis: kontroliuoti šlamštą, komentarų valdymą.
  3. Įteisinimas: jūsų sutikimas
  4. Duomenų perdavimas: Duomenys nebus perduoti trečiosioms šalims, išskyrus teisinius įsipareigojimus.
  5. Duomenų saugojimas: „Occentus Networks“ (ES) talpinama duomenų bazė
  6. Teisės: bet kuriuo metu galite apriboti, atkurti ir ištrinti savo informaciją.