Inhaltsverzeichnis:

Ein einfaches Tutorial für CANBUS - Gunook
Ein einfaches Tutorial für CANBUS - Gunook

Video: Ein einfaches Tutorial für CANBUS - Gunook

Video: Ein einfaches Tutorial für CANBUS - Gunook
Video: CAN-Bus Grundlagen / Datenübertragung 2024, November
Anonim
Ein einfaches Tutorial für CANBUS
Ein einfaches Tutorial für CANBUS

Ich studiere seit drei Wochen CAN und habe jetzt einige Bewerbungen ausgefüllt, um meine Lernergebnisse zu validieren. In diesem Tutorial erfahren Sie, wie Sie mit Arduino die CANBUS-Kommunikation implementieren. Wenn Sie Vorschläge haben, können Sie gerne eine Nachricht hinterlassen.

Lieferungen:

Hardware:

  • Maduino Zero CANBUS
  • DHT11 Temperatur- und Feuchtigkeitsmodul
  • 1,3" I2C OLED 128x64 - Blau
  • DB9 zu DB9 Kabel (weiblich zu weiblich)
  • Dupont-Linie

Software:

Arduino-IDE

Schritt 1: Was ist CANBUS?

Was ist CANBUS
Was ist CANBUS
Was ist CANBUS
Was ist CANBUS

Über CAN

CAN (Controller Area Network) ist ein serielles Kommunikationsnetzwerk, das eine verteilte Echtzeitsteuerung realisieren kann. Es wurde für die Automobilindustrie entwickelt, um den komplexen Kabelbaum durch einen Zweidrahtbus zu ersetzen.

Das CAN-Protokoll definiert die Sicherungsschicht und einen Teil der physikalischen Schicht im OSI-Modell.

Das CAN-Protokoll ist ISO-standardisiert mit ISO11898 und ISO11519. ISO11898 ist der CAN-Hochgeschwindigkeits-Kommunikationsstandard mit einer Kommunikationsgeschwindigkeit von 125kbps-1Mbps. ISO11519 ist der CAN-Low-Speed-Kommunikationsstandard mit einer Kommunikationsgeschwindigkeit von weniger als 125kbps.

Hier konzentrieren wir uns auf High-Speed-CAN.

ISO-11898 beschreibt, wie Informationen zwischen Geräten in einem Netzwerk weitergegeben werden und entspricht dem Open Systems Interconnection Model (OSI), das in Bezug auf Schichten definiert ist. Die tatsächliche Kommunikation zwischen Geräten, die über das physikalische Medium verbunden sind, wird durch die physikalische Schicht des Modells definiert

  • Jede an den Bus angeschlossene CAN-Einheit kann als Knoten bezeichnet werden. Alle CAN-Einheiten sind an einen Bus angeschlossen, der an beiden Enden mit 120--Widerständen terminiert ist, um ein Netzwerk zu bilden. Der Bus besteht aus den Leitungen CAN_H und CAN_L. Der CAN-Controller bestimmt den Buspegel anhand der Differenz des Leistungspegels auf beiden Drähten. Bus-Ebenen werden in dominante und rezessive Ebenen unterteilt, die eine davon sein müssen. Der Sender sendet die Nachricht an den Empfänger, indem er eine Änderung auf Busebene vornimmt. Wenn die logische Leitung "und" auf dem Bus ausgeführt wird, ist der dominante Pegel "0" und der rezessive Pegel "1".
  • Im dominanten Zustand beträgt die Spannung von CAN_H etwa 3,5 V und die Spannung von CAN_L etwa 1,5 V. Im rezessiven Zustand beträgt die Spannung beider Leitungen etwa 2,5V.
  • Das Signal ist differentiell, weshalb CAN seine robuste Störfestigkeit und Fehlertoleranz ableitet. Das symmetrische Differenzsignal reduziert die Rauschkopplung und ermöglicht hohe Signalraten über Twisted-Pair-Kabel. Der Strom in jeder Signalleitung ist gleich, aber in die entgegengesetzte Richtung und führt zu einem Feldunterdrückungseffekt, der für geringe Geräuschemissionen entscheidend ist. Die Verwendung von symmetrischen Differenzempfängern und Twisted-Pair-Verkabelung verbessert die Gleichtaktunterdrückung und die hohe Störfestigkeit eines CAN-Busses.

CAN-Transceiver

Der CAN-Transceiver ist für die Wandlung zwischen dem logischen Pegel und dem physikalischen Signal verantwortlich. Wandeln Sie ein logisches Signal in einen Differenzpegel oder ein physikalisches Signal in einen logischen Pegel um.

CAN-Controller

Der CAN-Controller ist die Kernkomponente von CAN, die alle Funktionen der Sicherungsschicht im CAN-Protokoll realisiert und das CAN-Protokoll automatisch auflösen kann.

MCU

Die MCU ist für die Ansteuerung des Funktionskreises und des CAN-Controllers zuständig. Zum Beispiel werden die CAN-Controller-Parameter beim Start des Knotens initialisiert, der CAN-Frame wird gelesen und durch den CAN-Controller gesendet usw.

Schritt 2: Über CAN-Kommunikation

Im Ruhezustand des Busses können alle Knoten mit dem Senden von Nachrichten beginnen (Multi-Master-Steuerung). Der Knoten, der zuerst auf den Bus zugreift, erhält das Senderecht (CSMA/CA-Modus). Wenn mehrere Knoten gleichzeitig mit dem Senden beginnen, erhält der Knoten, der die ID-Nachricht mit hoher Priorität sendet, das Recht zum Senden.

Im CAN-Protokoll werden alle Nachrichten in einem festen Format gesendet. Wenn der Bus im Leerlauf ist, können alle an den Bus angeschlossenen Einheiten mit dem Senden neuer Nachrichten beginnen. Wenn mehr als zwei Zellen gleichzeitig mit dem Senden von Nachrichten beginnen, wird die Priorität basierend auf der Kennung bestimmt. Die ID repräsentiert nicht die Zieladresse des Sendens, sondern die Priorität der auf den Bus zugreifenden Nachricht. Wenn mehr als zwei Zellen gleichzeitig mit dem Senden von Nachrichten beginnen, wird jedes Bit der zinsfreien ID nacheinander entschieden. Die Einheit, die das Schiedsverfahren gewinnt, kann weiterhin Nachrichten senden, und die Einheit, die das Schiedsverfahren verliert, hört sofort auf zu senden und empfängt das Werk.

Der CAN-Bus ist ein Broadcast-Bus. Dies bedeutet, dass alle Knoten alle Übertragungen „hören“können. alle Knoten werden ausnahmslos den gesamten Verkehr aufnehmen. Die CAN-Hardware bietet eine lokale Filterung, so dass jeder Knoten nur auf die interessanten Nachrichten reagieren kann.

Schritt 3: Rahmen

Rahmen
Rahmen

CAN-Geräte senden Daten über das CAN-Netzwerk in Paketen, die als Frames bezeichnet werden. CAN hat vier Rahmentypen:

  • Datenrahmen: ein Rahmen, der Knotendaten für die Übertragung enthält
  • Remote-Frame: ein Frame, der die Übertragung einer bestimmten Kennung anfordert
  • Error-Frame: ein Frame, der von einem beliebigen Knoten gesendet wird, der einen Fehler erkennt
  • Overload-Frame: ein Frame zum Einfügen einer Verzögerung zwischen Daten oder Remote-Frame

Datenrahmen

Es gibt zwei Arten von Datenrahmen, Standard und erweitert.

Die Bitfelder der Abbildung haben folgende Bedeutung:

  • SOF – Das einzelne dominante Start-of-Frame-Bit (SOF) markiert den Beginn der Nachricht und wird verwendet, um die Knoten auf einem Bus nach dem Leerlauf zu synchronisieren.
  • Identifier-Der Standard-CAN-11-Bit-Identifier legt die Priorität der Nachricht fest. Je niedriger der Binärwert, desto höher seine Priorität.
  • RTR – Das einzelne Remote Transmission Request (RTR)-Bit
  • IDE – Ein dominantes Single Identifier Extension (IDE)-Bit bedeutet, dass ein Standard-CAN-Identifier ohne Erweiterung übertragen wird.
  • R0 – Reserviertes Bit (für mögliche Verwendung durch zukünftige Standardänderungen).
  • DLC – Der 4-Bit-Datenlängencode (DLC) enthält die Anzahl der übertragenen Datenbytes.
  • Daten–Bis zu 64 Bit Anwendungsdaten können übertragen werden.
  • CRC – Die 16 Bit (15 Bit plus Trennzeichen) zyklische Redundanzprüfung (CRC) enthält die Prüfsumme (Anzahl der übertragenen Bits) der vorhergehenden Anwendungsdaten zur Fehlererkennung.
  • ACK–ACK besteht aus 2 Bits, eines ist das Bestätigungsbit und das zweite ist ein Begrenzer.
  • EOF – Dieses 7-Bit-Feld für das Ende des Rahmens (EOF) markiert das Ende eines CAN-Rahmens (Nachricht) und deaktiviert das Bitstuffing, was bei Dominanz einen Stuffing-Fehler anzeigt. Wenn im Normalbetrieb 5 Bits des gleichen Logikpegels nacheinander auftreten, wird ein Bit des entgegengesetzten Logikpegels in die Daten gestopft.
  • IFS – Dieser 7-Bit-Interframe-Raum (IFS) enthält die Zeit, die der Controller benötigt, um einen korrekt empfangenen Frame an seine richtige Position in einem Nachrichtenpufferbereich zu verschieben.

Schiedsverfahren

Im Bus-Ruhezustand erhält die Einheit, die zuerst mit dem Senden der Nachricht beginnt, das Senderecht. Wenn mehrere Einheiten gleichzeitig mit dem Senden beginnen, beginnt jede sendende Einheit beim ersten Bit des Arbitrierungssegments. Das Gerät mit der größten Anzahl von Dauerausgangs-dominanten Pegeln kann weiter senden.

Schritt 4: Geschwindigkeit und Distanz

Geschwindigkeit und Distanz
Geschwindigkeit und Distanz

Der CAN-Bus ist ein Bus, der mehrere Geräte gleichzeitig verbindet. Die Gesamtzahl der anschließbaren Geräte ist theoretisch unbegrenzt. In der Praxis ist die Anzahl der anschließbaren Geräte jedoch durch die Zeitverzögerung am Bus und die elektrische Last begrenzt. Reduzieren Sie die Kommunikationsgeschwindigkeit, erhöhen Sie die Anzahl der anschließbaren Einheiten und erhöhen Sie die Kommunikationsgeschwindigkeit, die Anzahl der anschließbaren Einheiten verringert sich.

Die Kommunikationsentfernung ist umgekehrt proportional zur Kommunikationsgeschwindigkeit, und je weiter die Kommunikationsentfernung ist, desto geringer ist die Kommunikationsgeschwindigkeit. Die längere Distanz kann 1 km oder mehr betragen, aber die Geschwindigkeit beträgt weniger als 40 km/s.

Schritt 5: Hardware

Hardware
Hardware

Das Maduino Zero CAN-BUS-Modul ist ein von Makerfabs entwickeltes Tool für die CANbus-Kommunikation, das auf Arduino basiert, mit dem CAN-Controller und dem CAN-Transceiver, um einen gebrauchsfertigen CAN-Bus-Port zu erstellen.

  • MCP2515 ist ein eigenständiger CAN-Controller, der die CAN-Spezifikation implementiert. Es ist in der Lage, sowohl Standard- als auch erweiterte Daten und Remote-Frames zu senden und zu empfangen.
  • Der MAX3051 bildet die Schnittstelle zwischen dem CAN-Protokollcontroller und den physischen Leitungen der Busleitungen in einem Controller Area Network (CAN). Der MAX3051 bietet differentielle Sendefähigkeit zum Bus und differentielle Empfangsfähigkeit zum CAN-Controller.

Schritt 6: Verbindung

Verbindung
Verbindung

Verbinden Sie das DHT11-Modul mit dem Maduino Zero CAN-BUS-Modul mit Drähten, die als Instrument zur Unterstützung der CAN-Kommunikation verwendet werden sollen. Schließen Sie auf ähnliche Weise das Display an das Modul an, um die Daten zu empfangen und anzuzeigen.

Die Verbindung zwischen Maduino Zero CANBUS und DHT11:

Maduino Zero CANBUS -- DHT11

3v3 ------ VCC GND ------ GND D10 ------ DATEN

Die Verbindung zwischen Maduino Zero CANBUS und OLED:

Maduino Zero CANBUS -- OLED

3v3 ------ VCC GND ------ GND SCL ------ SCL SDA ------ SDA

Verwenden Sie ein DB9-Kabel, um die beiden Maduino Zero CANBUS-Module zu verbinden.

Schritt 7: Code

Der MAX3051 vervollständigt die Umwandlung von Differenzpegeln in logische Signale. Der MCP2515 vervollständigt CAN-Funktionen wie Datenkodierung und -dekodierung. Die MCU muss nur den Controller initialisieren und Daten senden und empfangen.

  • Github:
  • Nach der Installation von Arduino gibt es kein Paket zur Unterstützung des zu installierenden Boards (Arduino Zero).
  • Wählen Sie Tools -> Board -> Board Manager, suchen Sie nach "Arduino Zero" und installieren Sie "Arduino SAMD Boards".
  • Wählen Sie Tools -> Board -> Arduino Zero (Native USB Port), wählen Sie Tools -> Port -> com…
  • Nachdem Sie das Programm von GitHub erhalten haben, müssen Sie sicherstellen, dass sich alle Dateien im Projektverzeichnis befinden, das Bibliotheksdateien enthält, die CANBUS unterstützen.
  • Installieren Sie die DHT-Sensorbibliothek von Adafruit, die verwendet wird, um den DHT11 zu steuern, um Temperatur und Luftfeuchtigkeit zu erhalten.
  • Verwenden Sie im Code Test_DHT11.ino unterschiedliche Adressen, um Temperatur und Luftfeuchtigkeit separat zu senden.

CAN.sendMsgBuf(0x10, 0, stmp1.length(), stmp_send1);

Verzögerung (500); CAN.sendMsgBuf(0x11, 0, stmp2.length(), stmp_send2); Verzögerung (500);

„0x10“steht für die Nachrichten-ID, „0“steht für den Standard-Frame, „stmp1.length()“steht für die Nachrichtenlänge, „stmp_send1“für die gesendeten Daten.

  • Im Code Test_OLED.ino werden alle Nachrichten auf dem CANBUS per Abfrage empfangen und die benötigten Informationen auf dem OLED angezeigt.
  • Laden Sie das Programm Maduino-CANbus-RS485/Test_DHT11_OLED/Test_DHT11/Test_DHT11.ino auf das Modul hoch, das mit dem Sensor verbunden ist, und laden Sie das Programm Maduino-CANbus RS485/Test_DHT11_OLED/Test_OLED/Test_OLED.ino auf ein anderes Modul hoch, das mit dem OLED verbunden ist.

Schritt 8: Zeigen

Zeigen
Zeigen
Zeigen
Zeigen

Schalten Sie die beiden Module ein, Temperatur und Luftfeuchtigkeit werden auf dem Display angezeigt.

Empfohlen: