Hoe u een CAN-busnetwerk kunt creëren met MCP2515- en Arduino-modules

  • Het CAN-protocol maakt efficiënte communicatie in industriële en automobielomgevingen mogelijk.
  • De MCP2515-module is een optimale oplossing voor het aansluiten van Arduino op een CAN-netwerk.
  • De CAN-bus maakt gebruik van twee kabels (CAN_H en CAN_L) voor betrouwbare gegevensoverdracht over lange afstanden.
  • Deze tutorial begeleidt u stap voor stap bij het opzetten en gebruiken van een CAN-netwerk met Arduino.

verbonden auto's

Als je van technologie houdt en vaak experimenteert met Arduino, zal dit artikel je fascineren. Vandaag zullen we zien hoe u uw eigen CAN-netwerk kunt opzetten met behulp van de MCP2515-module en Arduino. Je ontdekt hoe je efficiënt en betrouwbaar kunt communiceren tussen verschillende apparaten op een CAN-netwerk. Dit type netwerk wordt veel gebruikt in auto's en andere industriële toepassingen.

Of u nu een automobielproject uitvoert of communicatie tussen meerdere microcontrollers nodig heeft, de CAN-bus is perfect voor toepassingen waarbij betrouwbaarheid en prestaties essentieel zijn. En met de MCP2515-module is het heel eenvoudig om Arduino in dit netwerk te integreren. Bereid u dus voor om diepgaand te leren over het CAN-protocol, de hardwareconfiguratie en de noodzakelijke programmering.

Wat is CAN-bus?

De CAN-bus (Controller Area Network) is een serieel communicatieprotocol waarmee verschillende apparaten met elkaar kunnen communiceren. Het werd in 1986 ontwikkeld door Bosch en is specifiek ontworpen voor toepassingen in de automobielsector, hoewel het gebruik ervan zich heeft verspreid naar andere sectoren, zoals de industriële automatisering. In dit type netwerk verzenden en ontvangen aangesloten apparaten berichten zonder dat er een centrale host of controller nodig is, waardoor het een zeer efficiënt protocol is voor omgevingen waar communicatie en betrouwbaarheid van cruciaal belang zijn.

Een moderne auto bevat meer dan 70 besturingsapparaten, ook wel ECU’s (Electronic Control Units) genoemd, die via de CAN-bus met elkaar zijn verbonden. Dankzij dit protocol wisselen de ECU's belangrijke informatie uit voor de werking van de auto, zoals gegevens over de voertuigsnelheid of de stand van het gaspedaal.

CAN-bustopologie en signalen

De topologie van het CAN-systeem is type multimaster, wat betekent dat elk apparaat dat op het netwerk is aangesloten, de controle over de bus kan overnemen om berichten te verzenden. Alle knooppunten luisteren naar deze berichten en beslissen of ze reageren of negeren.

Vanuit fysiek oogpunt wordt de communicatie uitgevoerd via twee kabels: KAN_H y KAN IK. Deze kabels zijn gevlochten om elektromagnetische interferentie te minimaliseren. Bovendien moeten de uiteinden van het netwerk worden afgesloten met weerstanden van 120 ohm om reflecties in het signaal te voorkomen.

CAN-signalering

Het CAN-systeem gebruikt twee logische toestanden voor communicatie: dominant y recessief. In de dominante toestand heeft CAN_H een spanning van 3.5 V en CAN_L een spanning van 1.5 V. In deze toestand wordt een logische '0' verzonden. Aan de andere kant hebben beide draden in de recessieve toestand een spanning van 2.5 V, wat aangeeft dat de bus vrij is en een logische '1' kan worden verzonden. Het is deze verandering in de spanning tussen de twee kabels die gegevensoverdracht op het netwerk mogelijk maakt.

De MCP2515-module

El MCP2515-module Het is een ideale oplossing voor het toevoegen van CAN-connectiviteit aan uw Arduino. Het bestaat uit een CAN-controller (de MCP2515, die de CAN 2.0B-specificatie volgt) en een CAN-transceiver (de TJA1050, die de fysieke communicatie afhandelt). Deze twee chips werken samen zodat je CAN-berichten kunt verzenden en ontvangen met je Arduino via de SPI-interface.

De MCP2515 ondersteunt zowel standaard (11-bit) als uitgebreide (29-bit) berichten en heeft de mogelijkheid om ongewenste berichten eruit te filteren door het gebruik van maskers en filters, waardoor het werk van de microcontroller wordt weggenomen. Het is een uitstekende optie voor projecten die betrouwbare communicatie vereisen, zowel in luidruchtige omgevingen als over lange afstanden.

MCP2515 Modulecomponenten

De MCP2515-module bevat de volgende onderdelen:

  • MCP2515 CAN-controller: Verantwoordelijk voor het uitvoeren van alle CAN-protocolfuncties, zoals het verzenden en ontvangen van berichten.
  • TJA1050 CAN-zendontvanger: Verantwoordelijk voor het omzetten van data van de CAN-controller naar signalen voor de fysieke CAN-bus en vice versa.
  • SPI-communicatiepinnen: Met behulp van de SCK-, MOSI-, MISO- en CS-pinnen communiceert de MCP2515 met de Arduino via de SPI-interface.
  • CAN-busterminals: Dit kleine schroefklemmenblok is gemarkeerd met 'H' en 'L'. CAN_H en CAN_L moeten op de CAN-netwerkkabels worden aangesloten.

Hoe je een CAN-netwerk opzet met Arduino

Met de MCP2515 module is het opzetten van een CAN-netwerk relatief eenvoudig. Hieronder leg ik uit hoe je de module op je Arduino bord aansluit en hoe je de software configureert.

MCP2515 Moduleverbindingen

Om te beginnen sluit u de SPI-pinnen van uw Arduino als volgt aan:

  • MISO (module-uitgang) op pin D12 van Arduino
  • MOSI (module-ingang) op pin D11 van Arduino
  • SCK (Klok) naar Arduino-pin D13
  • CS (Chip Select) naar Arduino-pin D10

U zult ook de INT-pin van de MCP2515 moeten aansluiten op een Arduino digitale pin, bijvoorbeeld D2, omdat deze pin wordt gebruikt om interrupts af te handelen wanneer een geldig bericht wordt ontvangen.

Vergeet niet uw module van stroom te voorzien. De VCC-pin moet worden aangesloten op 5V en de GND-pin op aarde.

Wat de CAN-busterminals betreft, verbindt u CAN_H met CAN_H en CAN_L met CAN_L tussen de verschillende knooppunten die u met elkaar wilt verbinden. Houd er rekening mee dat de CAN-bus aan beide uiteinden moet worden afgesloten met een weerstand van 120 ohm.

Arduino-programmering

Zodra je de knooppunten hebt aangesloten, is het tijd om je Arduino te programmeren om via de MCP2515-module met de CAN-bus te communiceren. De beste manier om dit te doen is door gebruik te maken van een geschikte bibliotheek, zoals de bibliotheek 'mcp2515'.

Eerst moet u deze bibliotheek installeren. Als u de Arduino IDE gebruikt, gaat u naar Schets > Bibliotheek opnemen > Bibliotheken beheren. Zoek naar 'mcp2515' en selecteer de installatieoptie.

Als de bibliotheek is geïnstalleerd, kunt u doorgaan met het schrijven van de code voor uw zenderknooppunt en uw ontvangerknooppunt. Hieronder laat ik u basisvoorbeelden voor beide zien.

Codevoorbeeld voor zenderknooppunt

Deze code verzendt elke seconde een 'Hello World'-bericht over de CAN-bus.

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

Codevoorbeeld voor het ontvangende knooppunt

Deze code ontvangt berichten van de CAN-bus en geeft deze weer op de seriële monitor.

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

Snelheden en afstanden in een CAN-netwerk

De CAN-bus maakt communicatie op verschillende snelheden mogelijk. De maximale snelheid die door de MCP2515 wordt ondersteund is 1 Mbit/s, maar de lengte van de bus beperkt de transmissiesnelheid. Bij 1 Mbit/s is de maximale buslengte bijvoorbeeld ongeveer 40 meter. Als u echter grotere afstanden moet afleggen, kunt u uw snelheid verlagen. Bij 125 kbit/s kan de buslengte oplopen tot 500 meter.

Het is belangrijk om het netwerk goed te plannen en de juiste snelheid te gebruiken voor de lengte van de bus en de omgeving waarin deze zal worden gebruikt, aangezien luidruchtige omgevingen de kwaliteit van de communicatie kunnen beïnvloeden.

Vergeet ook niet om twisted pair te gebruiken voor CAN_H- en CAN_L-kabels, omdat dit de elektromagnetische interferentie helpt verminderen en de netwerkbetrouwbaarheid verbetert.

CAN-netwerk met meerdere knooppunten

Als u een netwerk met meerdere knooppunten wilt vormen, is het proces vrijwel hetzelfde. Het enige dat u hoeft te doen is ervoor te zorgen dat u alle knooppunten parallel aansluit op de CAN_H- en CAN_L-lijnen. Denk er ook aan om afsluitweerstanden alleen aan de uiteinden van de hoofdlijn te plaatsen, en niet aan de tussenliggende knooppunten.

In een complexer netwerk heb je mogelijk meerdere knooppunten die als zenders en ontvangers fungeren. Elk knooppunt voegt minimale belasting toe aan de bus, waardoor maximaal 112 knooppunten op een CAN-netwerk kunnen worden aangesloten zonder de prestaties aanzienlijk te beïnvloeden.

Of u nu een CAN-bus in een auto gebruikt om motorgegevens uit te lezen of in een industrieel project om meerdere sensoren te communiceren, de MCP2515-module maakt het eenvoudig en efficiënt om deze functionaliteit toe te voegen. Dit type netwerk is ideaal voor toepassingen waarbij een lage latentie en betrouwbaarheid bij de gegevensoverdracht essentieel zijn.


Wees de eerste om te reageren

Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.