Nëse e doni teknologjinë dhe bëni shpesh eksperimente me Arduino, ky artikull do t'ju magjepsë. Sot do të shohim se si të konfiguroni rrjetin tuaj CAN duke përdorur modulin MCP2515 dhe Arduino. Do të zbuloni se si të komunikoni ndërmjet pajisjeve të ndryshme në një rrjet CAN në mënyrë efikase dhe të besueshme. Ky lloj rrjeti përdoret gjerësisht në automobila dhe aplikacione të tjera industriale.
Pavarësisht nëse jeni duke bërë një projekt automobilistik ose keni nevojë për komunikim midis mikrokontrolluesve të shumtë, autobusi CAN është i përsosur për aplikacione ku besueshmëria dhe performanca janë thelbësore. Dhe me modulin MCP2515, është shumë e lehtë të integrosh Arduino në këtë rrjet. Pra, përgatituni të mësoni në thellësi për protokollin CAN, konfigurimin e harduerit dhe programimin e nevojshëm.
Çfarë është autobusi CAN?
Autobusi CAN (Controller Area Network) është një protokoll komunikimi serik që lejon pajisje të ndryshme të komunikojnë me njëra-tjetrën. Ai u zhvillua në vitin 1986 nga Bosch, dhe është projektuar posaçërisht për aplikimet e automobilave, megjithëse përdorimi i tij është përhapur në sektorë të tjerë si automatizimi industrial. Në këtë lloj rrjeti, pajisjet e lidhura dërgojnë dhe marrin mesazhe pa pasur nevojë për një host qendror ose kontrollues, duke e bërë atë një protokoll shumë efikas për mjediset ku komunikimi dhe besueshmëria janë thelbësore.
Një makinë moderne përmban më shumë se 70 pajisje kontrolli, të njohura si ECU (Electronic Control Units), të lidhura me njëra-tjetrën nëpërmjet autobusit CAN. Falë këtij protokolli, ECU-të shkëmbejnë informacione kyçe për funksionimin e makinës, si të dhënat e shpejtësisë së automjetit ose pozicionin e përshpejtuesit.
Topologjia dhe sinjalet e autobusit CAN
Topologjia e sistemit CAN është tip multimaster, që do të thotë se çdo pajisje e lidhur në rrjet mund të marrë kontrollin e autobusit për të dërguar mesazhe. Të gjitha nyjet i dëgjojnë këto mesazhe dhe vendosin nëse do t'i përgjigjen apo do t'i shpërfillin ato.
Nga pikëpamja fizike, komunikimi kryhet përmes dy kabllove: MUND_H y MUND_L. Këto kabllo janë gërshetuar për të minimizuar ndërhyrjet elektromagnetike. Për më tepër, skajet e rrjetit duhet të mbyllen me rezistorë 120 ohm për të shmangur reflektimet në sinjal.
sinjalizimi CAN
Sistemi CAN përdor dy gjendje logjike për komunikim: mbizotërues y recesive. Në gjendjen dominuese, CAN_H ka një tension prej 3.5V dhe CAN_L ka një tension prej 1.5V. Në këtë gjendje transmetohet një '0' logjike. Nga ana tjetër, në gjendje recesive, të dy telat kanë një tension prej 2.5 V, që tregon se autobusi është i lirë dhe një logjik "1" mund të transmetohet. Është ky ndryshim i tensioneve ndërmjet dy kabllove që lejon transmetimin e të dhënave në rrjet.
Moduli MCP2515
El Moduli MCP2515 Është një zgjidhje ideale për të shtuar lidhjen CAN në Arduino-n tuaj. Ai përbëhet nga një kontrollues CAN (MCP2515, i cili ndjek specifikimin CAN 2.0B) dhe një marrës CAN (TJA1050, i cili trajton komunikimin fizik). Këto dy çipa punojnë së bashku, kështu që ju mund të dërgoni dhe merrni mesazhe CAN me Arduino-n tuaj nëpërmjet ndërfaqes SPI.
MCP2515 mbështet mesazhet standarde (11-bit) dhe të zgjeruara (29-bit) dhe ka aftësinë për të filtruar mesazhet e padëshiruara përmes përdorimit të maskave dhe filtrave, të cilat shkarkojnë punën nga mikrokontrolluesi. Është një opsion i shkëlqyer për projektet që kërkojnë komunikime të besueshme, qoftë në mjedise me zhurmë apo në distanca të gjata.
Komponentët e modulit MCP2515
Moduli MCP2515 përfshin pjesët e mëposhtme:
- Kontrolluesi MCP2515 CAN: Përgjegjës për kryerjen e të gjitha funksioneve të protokollit CAN, të tilla si transmetimi dhe marrja e mesazheve.
- Transmetues TJA1050 CAN: Përgjegjës për konvertimin e të dhënave nga kontrolluesi CAN në sinjale për autobusin fizik CAN dhe anasjelltas.
- Kunjat e komunikimit SPI: Duke përdorur kunjat SCK, MOSI, MISO dhe CS, MCP2515 komunikon me Arduino përmes ndërfaqes së tij SPI.
- Terminalet e autobusëve CAN: Ky bllok i vogël i terminalit me vidë shënohet 'H' dhe 'L'. CAN_H dhe CAN_L duhet të lidhen me kabllot e rrjetit CAN.
Si të konfiguroni një rrjet CAN me Arduino
Me modulin MCP2515, konfigurimi i një rrjeti CAN është relativisht i thjeshtë. Më poshtë do të shpjegoj se si ta lidhni modulin me bordin tuaj Arduino dhe si të konfiguroni softuerin.
Lidhjet e modulit MCP2515
Për të filluar, lidhni kunjat SPI të Arduino-s tuaj si më poshtë:
- Miso (dalja e modulit) në pin D12 të Arduino
- DAWDLE (hyrja e modulit) në pin D11 të Arduino
- SCK (Ora) në pinin Arduino D13
- CS (Zgjidhja e çipit) në pinin Arduino D10
Do t'ju duhet gjithashtu të lidhni pinin INT të MCP2515 me një kunj dixhitale Arduino, për shembull D2, pasi ky pin përdoret për të trajtuar ndërprerjet kur merret një mesazh i vlefshëm.
Mos harroni të fuqizoni modulin tuaj. Pini VCC duhet të lidhet me 5V dhe kunja GND me tokën.
Sa i përket terminaleve të autobusëve CAN, lidhni CAN_H me CAN_H dhe CAN_L me CAN_L midis nyjeve të ndryshme që dëshironi të ndërlidhni. Mos harroni se autobusi CAN duhet të mbyllet në të dy skajet me një rezistencë 120 ohm.
Programimi Arduino
Pasi të keni lidhur nyjet, është koha të programoni Arduino-n tuaj për të komunikuar me autobusin CAN nëpërmjet modulit MCP2515. Mënyra më e mirë për ta bërë këtë është duke përdorur një bibliotekë të përshtatshme, siç është biblioteka 'mcp2515'.
Së pari, ju duhet të instaloni këtë bibliotekë. Nëse po përdorni Arduino IDE, shkoni te Sketch > Include Library > Manage Bibliotekat. Kërkoni për 'mcp2515' dhe zgjidhni opsionin e instalimit.
Me bibliotekën e instaluar, mund të vazhdoni të shkruani kodin për nyjen tuaj të transmetuesit dhe nyjen tuaj të marrësit. Më poshtë po ju tregoj shembuj bazë për të dyja.
Shembull kodi për nyjen transmetuese
Ky kod dërgon një mesazh 'Hello World' në autobusin CAN çdo sekondë.
#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);}
Shembull kodi për nyjen marrëse
Ky kod merr mesazhe nga autobusi CAN dhe i shfaq ato në monitorin serik.
#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();}
Shpejtësitë dhe distancat në një rrjet CAN
Autobusi CAN lejon komunikimin me shpejtësi të ndryshme. Shpejtësia maksimale e mbështetur nga MCP2515 është 1 Mbit/s, por gjatësia e autobusit kufizon shpejtësinë e transmetimit. Për shembull, në 1 Mbit/s, gjatësia maksimale e autobusit është afërsisht 40 metra. Megjithatë, nëse keni nevojë të udhëtoni në distanca më të mëdha, mund të zvogëloni shpejtësinë tuaj. Me 125 kbit/s, gjatësia e autobusit mund të arrijë 500 metra.
Është e rëndësishme të planifikoni mirë rrjetin dhe të përdorni shpejtësinë e duhur për gjatësinë e autobusit dhe mjedisin në të cilin do të përdoret, pasi mjediset e zhurmshme mund të ndikojnë në cilësinë e komunikimit.
Mos harroni gjithashtu të përdorni çiftin e përdredhur për kabllot CAN_H dhe CAN_L, pasi kjo ndihmon në reduktimin e ndërhyrjeve elektromagnetike dhe përmirëson besueshmërinë e rrjetit.
Rrjeti CAN me nyje të shumta
Nëse dëshironi të formoni një rrjet me disa nyje, procesi është shumë i ngjashëm. E vetmja gjë që duhet të bëni është të siguroheni që të lidhni të gjitha nyjet paralelisht me linjat CAN_H dhe CAN_L. Mos harroni gjithashtu të vendosni rezistorët e përfundimit vetëm në skajet e linjës kryesore, dhe jo në nyjet e ndërmjetme.
Në një rrjet më kompleks, mund të keni nyje të shumta që veprojnë si transmetues dhe marrës. Çdo nyje shton ngarkesë minimale në autobus, duke lejuar që deri në 112 nyje të lidhen në një rrjet CAN pa ndikuar ndjeshëm në performancën.
Pavarësisht nëse përdorni një autobus CAN në një makinë për të lexuar të dhënat e motorit ose në një projekt industrial për të komunikuar sensorë të shumtë, moduli MCP2515 e bën të lehtë dhe efikas shtimin e këtij funksioni. Ky lloj rrjeti është ideal për aplikacionet ku vonesa e ulët dhe besueshmëria në transmetimin e të dhënave është thelbësore.