Wenn Sie Technik lieben und oft mit Arduino experimentieren, wird Sie dieser Artikel faszinieren. Heute werden wir sehen, wie Sie mit dem MCP2515-Modul und Arduino Ihr eigenes CAN-Netzwerk einrichten. Sie erfahren, wie Sie effizient und zuverlässig zwischen verschiedenen Geräten in einem CAN-Netzwerk kommunizieren. Diese Art von Netzwerk wird häufig in Automobilen und anderen industriellen Anwendungen eingesetzt.
Ganz gleich, ob Sie ein Automobilprojekt durchführen oder die Kommunikation zwischen mehreren Mikrocontrollern benötigen, der CAN-Bus eignet sich perfekt für Anwendungen, bei denen Zuverlässigkeit und Leistung von entscheidender Bedeutung sind. Und mit dem MCP2515-Modul ist es sehr einfach, Arduino in dieses Netzwerk zu integrieren. Machen Sie sich also bereit, sich eingehend mit dem CAN-Protokoll, der Hardware-Konfiguration und der notwendigen Programmierung vertraut zu machen.
Was ist CAN-Bus?
Der CAN-Bus (Controller Area Network) ist ein serielles Kommunikationsprotokoll, das es verschiedenen Geräten ermöglicht, miteinander zu kommunizieren. Es wurde 1986 von Bosch entwickelt und ist speziell für Automobilanwendungen konzipiert, obwohl seine Verwendung auch auf andere Bereiche wie die industrielle Automatisierung ausgeweitet wurde. In dieser Art von Netzwerk senden und empfangen verbundene Geräte Nachrichten, ohne dass ein zentraler Host oder Controller erforderlich ist. Dies macht es zu einem sehr effizienten Protokoll für Umgebungen, in denen Kommunikation und Zuverlässigkeit von entscheidender Bedeutung sind.
Ein modernes Auto enthält mehr als 70 Steuergeräte, sogenannte ECUs (Electronic Control Units), die über den CAN-Bus miteinander verbunden sind. Dank dieses Protokolls tauschen die Steuergeräte wichtige Informationen für den Betrieb des Fahrzeugs aus, beispielsweise Geschwindigkeitsdaten des Fahrzeugs oder die Stellung des Gaspedals.
CAN-Bus-Topologie und -Signale
Die Topologie des CAN-Systems ist Typ MultimasterDies bedeutet, dass jedes mit dem Netzwerk verbundene Gerät die Kontrolle über den Bus übernehmen und Nachrichten senden kann. Alle Knoten hören diese Nachrichten ab und entscheiden, ob sie antworten oder sie ignorieren.
Physikalisch gesehen erfolgt die Kommunikation über zwei Kabel: CAN_H y KANN ICH. Diese Kabel sind geflochten, um elektromagnetische Störungen zu minimieren. Zusätzlich müssen die Enden des Netzwerks mit 120-Ohm-Widerständen abgeschlossen werden, um Reflexionen im Signal zu vermeiden.
CAN-Signalisierung
Das CAN-System nutzt zur Kommunikation zwei logische Zustände: dominant y rezessiv. Im dominanten Zustand hat CAN_H eine Spannung von 3.5 V und CAN_L eine Spannung von 1.5 V. In diesem Zustand wird eine logische „0“ übertragen. Im rezessiven Zustand hingegen liegt an beiden Leitungen eine Spannung von 2.5V an, was anzeigt, dass der Bus frei ist und eine logische „1“ übertragen werden kann. Es ist diese Spannungsänderung zwischen den beiden Kabeln, die die Datenübertragung im Netzwerk ermöglicht.
Das MCP2515-Modul
El MCP2515-Modul Es ist eine ideale Lösung, um Ihrem Arduino CAN-Konnektivität hinzuzufügen. Es besteht aus einem CAN-Controller (dem MCP2515, der der CAN 2.0B-Spezifikation folgt) und einem CAN-Transceiver (dem TJA1050, der die physikalische Kommunikation übernimmt). Diese beiden Chips arbeiten zusammen, sodass Sie mit Ihrem Arduino über die SPI-Schnittstelle CAN-Nachrichten senden und empfangen können.
Der MCP2515 unterstützt sowohl Standardnachrichten (11 Bit) als auch erweiterte Nachrichten (29 Bit) und kann mithilfe von Masken und Filtern unerwünschte Nachrichten herausfiltern, wodurch der Mikrocontroller entlastet wird. Es ist eine hervorragende Option für Projekte, die eine zuverlässige Kommunikation erfordern, sei es in lauten Umgebungen oder über große Entfernungen.
Komponenten des MCP2515-Moduls
Das MCP2515-Modul umfasst die folgenden Teile:
- MCP2515 CAN-Controller: Verantwortlich für die Ausführung aller CAN-Protokollfunktionen, wie z. B. das Senden und Empfangen von Nachrichten.
- TJA1050 CAN-Transceiver: Verantwortlich für die Umwandlung von Daten vom CAN-Controller in Signale für den physischen CAN-Bus und umgekehrt.
- SPI-Kommunikationspins: Mithilfe der SCK-, MOSI-, MISO- und CS-Pins kommuniziert der MCP2515 über seine SPI-Schnittstelle mit dem Arduino.
- CAN-Bus-Terminals: Dieser kleine Schraubklemmenblock ist mit „H“ und „L“ gekennzeichnet. CAN_H und CAN_L müssen an die CAN-Netzwerkkabel angeschlossen werden.
So richten Sie ein CAN-Netzwerk mit Arduino ein
Mit dem MCP2515-Modul ist der Aufbau eines CAN-Netzwerks relativ einfach. Im Folgenden erkläre ich, wie Sie das Modul an Ihr Arduino-Board anschließen und die Software konfigurieren.
Anschlüsse des MCP2515-Moduls
Verbinden Sie zunächst die SPI-Pins Ihres Arduino wie folgt:
- MISO (Modulausgang) an Pin D12 des Arduino
- MOSI (Moduleingang) an Pin D11 von Arduino
- SCK (Uhr) an Arduino-Pin D13
- CS (Chip Select) an Arduino Pin D10
Sie müssen außerdem den INT-Pin des MCP2515 mit einem digitalen Arduino-Pin, zum Beispiel D2, verbinden, da dieser Pin zur Verarbeitung von Interrupts verwendet wird, wenn eine gültige Nachricht empfangen wird.
Vergessen Sie nicht, Ihr Modul mit Strom zu versorgen. Der VCC-Pin sollte an 5 V und der GND-Pin an Masse angeschlossen werden.
Bei den CAN-Bus-Anschlüssen verbinden Sie CAN_H mit CAN_H und CAN_L mit CAN_L zwischen den verschiedenen Knoten, die Sie miteinander verbinden möchten. Denken Sie daran, dass der CAN-Bus an beiden Enden mit einem 120-Ohm-Widerstand abgeschlossen werden muss.
Arduino-Programmierung
Sobald Sie die Knoten verbunden haben, ist es an der Zeit, Ihren Arduino so zu programmieren, dass er über das MCP2515-Modul mit dem CAN-Bus kommuniziert. Dies geht am besten über die Nutzung einer geeigneten Bibliothek, wie z.B. der Bibliothek 'mcp2515'.
Zuerst müssen Sie diese Bibliothek installieren. Wenn Sie die Arduino-IDE verwenden, gehen Sie zu Skizze > Bibliothek einschließen > Bibliotheken verwalten. Suchen Sie nach „mcp2515“ und wählen Sie die Installationsoption.
Wenn die Bibliothek installiert ist, können Sie mit dem Schreiben des Codes für Ihren Senderknoten und Ihren Empfängerknoten fortfahren. Im Folgenden zeige ich Ihnen grundlegende Beispiele für beides.
Codebeispiel für Senderknoten
Dieser Code sendet jede Sekunde eine „Hello World“-Nachricht über den 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);}
Codebeispiel für den Empfangsknoten
Dieser Code empfängt Nachrichten vom CAN-Bus und zeigt sie auf dem seriellen Monitor an.
#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();}
Geschwindigkeiten und Entfernungen in einem CAN-Netzwerk
Der CAN-Bus ermöglicht die Kommunikation mit unterschiedlichen Geschwindigkeiten. Die vom MCP2515 unterstützte Höchstgeschwindigkeit beträgt 1 Mbit/s, allerdings begrenzt die Länge des Busses die Übertragungsgeschwindigkeit. Bei 1 Mbit/s beträgt die maximale Buslänge beispielsweise etwa 40 Meter. Wenn Sie jedoch größere Distanzen zurücklegen müssen, können Sie Ihre Geschwindigkeit reduzieren. Bei 125 kbit/s kann die Buslänge 500 Meter erreichen.
Es ist wichtig, das Netzwerk gut zu planen und die Geschwindigkeit entsprechend der Länge des Busses und der Umgebung, in der er verwendet wird, zu verwenden, da laute Umgebungen die Qualität der Kommunikation beeinträchtigen können.
Denken Sie auch daran, Twisted-Pair-Kabel für CAN_H- und CAN_L-Kabel zu verwenden, da dies dazu beiträgt, elektromagnetische Störungen zu reduzieren und die Netzwerkzuverlässigkeit zu verbessern.
CAN-Netzwerk mit mehreren Knoten
Wenn Sie ein Netzwerk mit mehreren Knoten bilden möchten, ist der Vorgang sehr ähnlich. Sie müssen lediglich sicherstellen, dass alle Knoten parallel an die CAN_H- und CAN_L-Leitungen angeschlossen sind. Denken Sie auch daran, Abschlusswiderstände nur an den Enden der Hauptleitung und nicht an den Zwischenknoten anzubringen.
In einem komplexeren Netzwerk verfügen Sie möglicherweise über mehrere Knoten, die als Sender und Empfänger fungieren. Jeder Knoten belastet den Bus nur minimal, sodass bis zu 112 Knoten in einem CAN-Netzwerk verbunden werden können, ohne die Leistung wesentlich zu beeinträchtigen.
Ganz gleich, ob Sie einen CAN-Bus in einem Automobil zum Auslesen von Motordaten oder in einem Industrieprojekt zur Kommunikation mehrerer Sensoren verwenden, mit dem Modul MCP2515 können Sie diese Funktionalität einfach und effizient hinzufügen. Diese Art von Netzwerk ist ideal für Anwendungen, bei denen niedrige Latenzzeiten und Zuverlässigkeit bei der Datenübertragung von entscheidender Bedeutung sind.