Com crear una xarxa CAN Bus amb mòduls MCP2515 i Arduino

  • El protocol CAN permet la comunicació eficient en entorns industrials i automotrius.
  • El mòdul MCP2515 és una solució òptima per connectar Arduino a una xarxa CAN.
  • El bus CAN utilitza dos cables (CAN_H i CAN_L) per a la transferència de dades fiable i de llarga distància.
  • Aquest tutorial us guiarà pas a pas per la configuració i l'ús d'una xarxa CAN amb Arduino.

cotxes connectats

Si t'encanta la tecnologia i sols fer experiments amb Arduino, aquest article et fascinarà. Avui veurem com muntar la teva pròpia xarxa CAN utilitzant el mòdul MCP2515 i Arduino. Descobriràs com fer la comunicació entre diferents dispositius en una xarxa CAN de manera eficient i fiable. Aquest tipus de xarxa és molt usada en automòbils i altres aplicacions industrials.

Ja sigui que estiguis realitzant un projecte automotriu o necessitis comunicació entre diversos microcontroladors, el bus CAN és perfecte per a aplicacions on la confiança i el rendiment són essencials. I amb el mòdul MCP2515, és molt senzill integrar Arduino a aquesta xarxa. Així que, prepara't per aprendre a fons sobre el protocol CAN, la configuració del maquinari i la programació necessària.

Què és el bus CAN?

El bus CAN (Controller Area Network) és un protocol de comunicació serial que permet que diferents dispositius es comuniquin entre si. Va ser desenvolupat el 1986 per Bosch, i està dissenyat específicament per a aplicacions automotrius, encara que el seu ús s'ha estès a altres sectors com l'automatització industrial. En aquest tipus de xarxa, els dispositius connectats envien i reben missatges sense necessitat d'un host o controlador central, cosa que el converteix en un protocol molt eficient per a entorns on la comunicació i la confiança són claus.

Un cotxe modern conté més de 70 dispositius de control, coneguts com a ECUs (Unitats de Control Electrònic), connectats entre si mitjançant el bus CAN. Gràcies a aquest protocol, les ECUs intercanvien informació clau per al funcionament de l'automòbil, com ara les dades de velocitat del vehicle o la posició de l'accelerador.

Topologia i senyals del bus CAN

La topologia del sistema CAN és de tipus multimestre, el que significa que qualsevol dispositiu connectat a la xarxa pot agafar el control del bus per enviar missatges. Tots els nodes escolten aquests missatges i decideixen si han de respondre o ignorar-los.

Des del punt de vista físic, la comunicació es fa mitjançant dos cables: CAN_H y CAN_L. Aquests cables estan trenats per minimitzar interferències electromagnètiques. A més, els extrems de la xarxa han d'estar acabats amb resistències de 120 ohms per evitar reflexions al senyal.

Senyalització a CAN

El sistema CAN utilitza dos estats lògics per a la comunicació: dominant y recessiu. A l'estat dominant, CAN_H té un voltatge de 3.5V i CAN_L de 1.5V. En aquest estat es transmet un '0' lògic. D'altra banda, a l'estat recessiu, tots dos cables tenen un voltatge de 2.5V, cosa que indica que el bus està lliure i es pot transmetre un '1' lògic. És aquest canvi de voltatges entre els dos cables el que permet la transmissió de dades a la xarxa.

El mòdul MCP2515

El mòdul MCP2515 és una solució ideal per afegir connectivitat CAN al teu Arduino. Està compost per un controlador CAN (el MCP2515, que segueix l'especificació CAN 2.0B) i un transceptor CAN (el TJA1050, que maneja la comunicació física). Aquests dos xips treballen junts perquè puguis enviar i rebre missatges CAN amb el teu Arduino a través de la interfície SPI.

El MCP2515 admet tant missatges estàndard (11 bits) com estesos (29 bits) i té la capacitat de filtrar missatges no desitjats mitjançant l'ús de màscares i filtres, cosa que descarrega treball del microcontrolador. És una excel·lent opció per a projectes que requereixen comunicacions fiables, ja sigui en ambients sorollosos o sobre llargues distàncies.

Components del mòdul MCP2515

El mòdul MCP2515 inclou les parts següents:

  • Controlador CAN MCP2515: Responsable de realitzar totes les funcions de protocol CAN, com la transmissió i recepció de missatges.
  • Transceptor CAN TJA1050: Responsable de convertir les dades del controlador CAN en senyals per al bus CAN físic i viceversa.
  • Pins de comunicació SPI: Mitjançant els pins SCK, MOSI, MISSO i CS, el MCP2515 es comunica amb l'Arduino a través de la seva interfície SPI.
  • Terminals de bus CAN: Aquest petit bloc de terminals de cargol està marcat com a 'H' i 'L'. CAN_H i CAN_L s'han de connectar als cables de la xarxa CAN.

Com muntar una xarxa CAN amb Arduino

Amb el mòdul MCP2515, muntar una xarxa CAN és relativament senzill. A continuació t'explico com connectar el mòdul a la teva placa Arduino i com configurar el programari.

Connexions del mòdul MCP2515

Per començar, connecta els pins SPI del teu Arduino de la següent manera:

  • MISO (Sortida del mòdul) al pin D12 d'Arduino
  • Extensió MOSI (Entrada del mòdul) al pin D11 d'Arduino
  • SCK (Rellotge) al pin D13 d'Arduino
  • CS (Selecció de xip) al pin D10 d'Arduino

També necessitareu connectar el pin INT del MCP2515 a un pin digital d'Arduino, per exemple, el D2, ja que aquest pin es fa servir per manejar les interrupcions quan es rep un missatge vàlid.

No oblidis alimentar el teu mòdul. El pin VCC s'ha de connectar a 5V, i el pin GND a terra.

Pel que fa als terminals del bus CAN, connecta CAN_H a CAN_H i CAN_L a CAN_L entre els diferents nodes que vulguis interconnectar. Recorda que el bus CAN ha d'estar acabat als dos extrems amb una resistència de 120 ohms.

Programació a Arduino

Quan hagis connectat els nodes, és hora de programar el teu Arduino perquè es comuniqui amb el bus CAN a través del mòdul MCP2515. La millor manera de fer-ho és utilitzant una biblioteca adequada, com la biblioteca 'mcp2515'.

Primer, necessites instal·lar aquesta biblioteca. Si utilitzeu l'IDE d'Arduino, dirigiu-vos a Sketch > Include Library > Manage Libraries. Cerca 'mcp2515' i selecciona l'opció d'instal·lar.

Amb la biblioteca instal·lada, pots escriure el codi per al teu node transmissor i el teu node receptor. A continuació et mostro exemples bàsics per a tots dos.

Exemple de codi per al node transmissor

Aquest codi envia un missatge 'Hola Món' a través del bus CAN cada segon.

#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);}

Exemple de codi per al node receptor

Aquest codi rep els missatges del bus CAN i els mostra al monitor sèrie.

#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();}

Velocitats i distàncies en una xarxa CAN

El bus CAN permet la comunicació a diverses velocitats. La velocitat màxima suportada pel MCP2515 és de 1 Mbit/s, però la longitud del bus limita la velocitat de transmissió. Per exemple, a 1 Mbit/s, la longitud màxima del bus és aproximadament de 40 metres. No obstant això, si necessites recórrer distàncies més grans, pots reduir la velocitat. A 125 kbit/s, la longitud del bus pot arribar als 500 metres.

És important planificar bé la xarxa i fer servir la velocitat adequada per a la longitud del bus i l'entorn en què s'utilitzarà, ja que els entorns sorollosos poden afectar la qualitat de la comunicació.

Recorda també utilitzar parell trenat per als cables CAN_H i CAN_L, ja que això ajuda a reduir les interferències electromagnètiques i millora la fiabilitat de la xarxa.

Xarxa CAN amb múltiples nodes

Si voleu formar una xarxa amb diversos nodes, el procés és molt similar. L'únic que necessites fer és assegurar-te de connectar tots els nodes en paral·lel a les línies CAN_H i CAN_L. També recorda col·locar les resistències de terminació només als extrems de la línia principal, i no als nodes intermedis.

En una xarxa més complexa, pots tenir diversos nodes que actuen com a transmissors i receptors. Cada node afegeix una càrrega mínima al bus, cosa que permet connectar fins a 112 nodes en una xarxa CAN sense afectar significativament el rendiment.

Ja sigui que estiguis utilitzant un bus CAN en un automòbil per llegir dades del motor o en un projecte industrial per comunicar diversos sensors, el mòdul MCP2515 permet afegir aquesta funcionalitat de manera senzilla i eficient. Aquest tipus de xarxa és ideal per a aplicacions on és essencial la baixa latència i la fiabilitat en la transmissió de dades.