Ak milujete technológie a často robíte experimenty s Arduinom, tento článok vás zaujme. Dnes sa pozrieme na to, ako si nastaviť vlastnú CAN sieť pomocou modulu MCP2515 a Arduina. Zistíte, ako efektívne a spoľahlivo komunikovať medzi rôznymi zariadeniami v sieti CAN. Tento typ siete je široko používaný v automobiloch a iných priemyselných aplikáciách.
Či už robíte automobilový projekt alebo potrebujete komunikáciu medzi viacerými mikrokontrolérmi, zbernica CAN je ideálna pre aplikácie, kde je spoľahlivosť a výkon nevyhnutné. A s modulom MCP2515 je veľmi jednoduché integrovať Arduino do tejto siete. Takže sa pripravte na podrobné informácie o protokole CAN, konfigurácii hardvéru a potrebnom programovaní.
Čo je zbernica CAN?
Zbernica CAN (Controller Area Network) je sériový komunikačný protokol, ktorý umožňuje rôznym zariadeniam navzájom komunikovať. Bol vyvinutý v roku 1986 spoločnosťou Bosch a je navrhnutý špeciálne pre automobilové aplikácie, hoci sa jeho použitie rozšírilo aj do iných sektorov, ako je priemyselná automatizácia. V tomto type siete pripojené zariadenia odosielajú a prijímajú správy bez potreby centrálneho hostiteľa alebo kontroléra, čo z neho robí veľmi efektívny protokol pre prostredia, kde je kľúčová komunikácia a spoľahlivosť.
Moderné auto obsahuje viac ako 70 riadiacich zariadení, známych ako ECU (Electronic Control Units), vzájomne prepojených cez zbernicu CAN. Vďaka tomuto protokolu si ECU vymieňajú kľúčové informácie pre prevádzku auta, ako sú údaje o rýchlosti vozidla alebo polohe akcelerátora.
Topológia a signály zbernice CAN
Topológia systému CAN je typová multimaster, čo znamená, že akékoľvek zariadenie pripojené k sieti môže prevziať kontrolu nad zbernicou na odosielanie správ. Všetky uzly počúvajú tieto správy a rozhodujú sa, či na ne odpovedať alebo ich ignorovať.
Z fyzického hľadiska sa komunikácia uskutočňuje prostredníctvom dvoch káblov: Can_h y Can_l. Tieto káble sú opletené, aby sa minimalizovalo elektromagnetické rušenie. Okrem toho musia byť konce siete zakončené 120 ohmovými odpormi, aby sa zabránilo odrazom v signáli.
CAN signalizácia
Systém CAN používa na komunikáciu dva logické stavy: dominantné y recesívny. V dominantnom stave má CAN_H napätie 3.5V a CAN_L má napätie 1.5V. V tomto stave sa prenáša logická '0'. Na druhej strane, v recesívnom stave majú oba vodiče napätie 2.5 V, čo znamená, že zbernica je voľná a je možné prenášať logickú „1“. Práve táto zmena napätia medzi dvoma káblami umožňuje prenos dát v sieti.
Modul MCP2515
El Modul MCP2515 Je to ideálne riešenie pre pridanie CAN konektivity do vášho Arduina. Skladá sa z CAN radiča (MCP2515, ktorý sa riadi špecifikáciou CAN 2.0B) a CAN transceiveru (TJA1050, ktorý zabezpečuje fyzickú komunikáciu). Tieto dva čipy spolupracujú, takže môžete odosielať a prijímať správy CAN s vaším Arduinom cez rozhranie SPI.
MCP2515 podporuje štandardné (11-bitové) aj rozšírené (29-bitové) správy a má schopnosť odfiltrovať nežiaduce správy pomocou masiek a filtrov, čo znižuje prácu mikrokontroléru. Je to vynikajúca možnosť pre projekty, ktoré vyžadujú spoľahlivú komunikáciu, či už v hlučnom prostredí alebo na veľké vzdialenosti.
Komponenty modulu MCP2515
Modul MCP2515 obsahuje nasledujúce časti:
- Ovládač CAN MCP2515: Zodpovedá za vykonávanie všetkých funkcií protokolu CAN, ako je prenos a príjem správ.
- Vysielač a prijímač TJA1050 CAN: Zodpovedá za konverziu dát z CAN radiča na signály pre fyzickú CAN zbernicu a naopak.
- Komunikačné kolíky SPI: Pomocou pinov SCK, MOSI, MISO a CS komunikuje MCP2515 s Arduinom cez rozhranie SPI.
- Terminály zbernice CAN: Táto malá skrutková svorkovnica je označená „H“ a „L“. CAN_H a CAN_L musia byť pripojené k sieťovým káblom CAN.
Ako nastaviť sieť CAN s Arduino
S modulom MCP2515 je nastavenie siete CAN pomerne jednoduché. Nižšie vysvetľujem, ako pripojiť modul k vašej Arduino doske a ako nakonfigurovať softvér.
Pripojenia modulu MCP2515
Ak chcete začať, pripojte kolíky SPI vášho Arduina nasledovne:
- Mišový (výstup modulu) na pin D12 Arduina
- Mosi (vstup modulu) na pin D11 Arduina
- SCK (Hodiny) na Arduino pin D13
- CS (Chip Select) na Arduino pin D10
Budete tiež musieť pripojiť kolík INT na MCP2515 k digitálnemu kolíku Arduino, napríklad D2, pretože tento kolík sa používa na spracovanie prerušení pri prijatí platnej správy.
Nezabudnite napájať modul. Pin VCC by mal byť pripojený k 5V a pin GND k zemi.
Pokiaľ ide o svorky zbernice CAN, pripojte CAN_H k CAN_H a CAN_L k CAN_L medzi rôznymi uzlami, ktoré chcete prepojiť. Pamätajte, že zbernica CAN musí byť na oboch koncoch ukončená 120 ohmovým odporom.
Programovanie Arduina
Po pripojení uzlov je čas naprogramovať vaše Arduino na komunikáciu so zbernicou CAN cez modul MCP2515. Najlepší spôsob, ako to urobiť, je použiť vhodnú knižnicu, ako je knižnica 'mcp2515'.
Najprv musíte nainštalovať túto knižnicu. Ak používate Arduino IDE, prejdite na Sketch > Include Library > Manage Libraries. Vyhľadajte „mcp2515“ a vyberte možnosť inštalácie.
S nainštalovanou knižnicou môžete pokračovať v písaní kódu pre uzol vysielača a uzol prijímača. Nižšie uvádzam základné príklady oboch.
Príklad kódu pre uzol vysielača
Tento kód posiela každú sekundu správu „Hello World“ cez zbernicu CAN.
#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);}
Príklad kódu pre prijímajúci uzol
Tento kód prijíma správy zo zbernice CAN a zobrazuje ich na sériovom monitore.
#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();}
Rýchlosti a vzdialenosti v sieti CAN
Zbernica CAN umožňuje komunikáciu rôznymi rýchlosťami. Maximálna rýchlosť podporovaná MCP2515 je 1 Mbit/s, ale dĺžka zbernice obmedzuje prenosovú rýchlosť. Napríklad pri rýchlosti 1 Mbit/s je maximálna dĺžka zbernice približne 40 metrov. Ak však potrebujete prejsť väčšie vzdialenosti, môžete znížiť rýchlosť. Pri 125 kbit/s môže dĺžka zbernice dosiahnuť 500 metrov.
Je dôležité dobre naplánovať sieť a použiť vhodnú rýchlosť pre dĺžku zbernice a prostredie, v ktorom sa bude používať, pretože hlučné prostredie môže ovplyvniť kvalitu komunikácie.
Nezabudnite tiež použiť krútenú dvojlinku pre káble CAN_H a CAN_L, pretože to pomáha znižovať elektromagnetické rušenie a zvyšuje spoľahlivosť siete.
CAN sieť s viacerými uzlami
Ak chcete vytvoriť sieť s niekoľkými uzlami, proces je veľmi podobný. Jediná vec, ktorú musíte urobiť, je zabezpečiť, aby ste všetky uzly pripojili paralelne k linkám CAN_H a CAN_L. Nezabudnite tiež umiestniť ukončovacie odpory iba na konce hlavného vedenia a nie na medziľahlé uzly.
V zložitejšej sieti môžete mať viacero uzlov, ktoré fungujú ako vysielače a prijímače. Každý uzol pridáva minimálne zaťaženie zbernice, čo umožňuje pripojenie až 112 uzlov do siete CAN bez výrazného vplyvu na výkon.
Či už používate zbernicu CAN v automobile na čítanie údajov motora alebo v priemyselnom projekte na komunikáciu viacerých snímačov, modul MCP2515 uľahčuje a zefektívňuje pridanie tejto funkcie. Tento typ siete je ideálny pre aplikácie, kde je dôležitá nízka latencia a spoľahlivosť pri prenose dát.