Inhaltsverzeichnis:

STM32 CAN-Schnittstelle - Gunook
STM32 CAN-Schnittstelle - Gunook

Video: STM32 CAN-Schnittstelle - Gunook

Video: STM32 CAN-Schnittstelle - Gunook
Video: STM32f407 CAN Bus - LCD Displays 2024, November
Anonim
STM32 CAN-Schnittstelle
STM32 CAN-Schnittstelle

Der Controller-Area-Network-Bus oder CAN-Bus ist dank seiner Hochgeschwindigkeitsfunktionen, seiner Zuverlässigkeit über große Reichweiten und seiner Störfestigkeit ein sehr effektives Kommunikationsprotokoll. Aus diesen Gründen hat sich die CAN-Kommunikation zum Standard in Automobiltechnologien und Umgebungen mit hohem Rauschen entwickelt. Geräte am CAN-Bus werden als Knoten bezeichnet. Alle Knoten am CAN-Bus sind parallel geschaltet, dh jeder Knoten ist mit allen anderen Knoten im Netzwerk verbunden. Ein einzelner CAN-Bus kann je nach Nachrichtenübertragungsrate bis zu 115 Knoten gleichzeitig haben, für die meisten Anwendungen werden jedoch bis zu 32 Geräte empfohlen. Es wird auch empfohlen, die Länge zwischen dem ersten und letzten Knoten weniger als 40 Meter auseinander zu halten.

Diese Schritt-für-Schritt-Anleitung zeigt Ihnen, wie Sie einen CAN-Knoten mit dem STM32-Mikrocontroller einrichten, einschließlich der Schaltung und einfachem C-Code zum Lesen und Schreiben auf den CAN-Bus

Lieferungen

Für jeden CAN-Knoten:

  • 1x STM32 Breakout-Board (Nucleo, Blue Pill, andere)
  • 1x MCP2551 CAN-Transceiver-IC
  • 1x 0,1µF Kondensator
  • 1x 120Ω Widerstand
  • 1x 1kΩ Widerstand
  • 1+ lesbarer Eingang (Taster, Schalter, Potentiometer, etc.) oder Ausgang (LED, MOSFET, etc.)
  • 1x Dsub9-Anschluss

Schritt 1: Die Transceiver-Schaltung

Die Transceiver-Schaltung
Die Transceiver-Schaltung

Zur Kommunikation mit dem CAN-Bus verwenden wir den CAN-Transceiver-IC MCP2551. Der IC fungiert als zwischengeschaltetes Sender/Empfänger-Paar, um den STM32 mit dem CAN-Bus zu verbinden. Die Schaltung zum Einrichten dieses ICs ist recht einfach, aber es gibt ein paar Dinge zu beachten:

  • CAN_RX (Pin 4) und CAN_TX (Pin 1) auf dem MCP2551-Chip können nur an bestimmte Pins des STM32 gehen.

    • Verbinden Sie beim STM32F1 Nucleo die RX-Leitung mit Pin PB8 und die TX-Leitung mit Pin PB9.
    • Verbinden Sie auf der blauen Pille STM32F1 RX mit Pin PA11 und TX mit Pin PA12.
    • Beachten Sie, dass diese Pinbelegungen Alternativen haben. Lesen Sie in den Handbüchern des Mikrocontrollers nach, welche Pins CAN_RD und CAN_TD unterstützen
    • Wenn Sie ein Arduino oder ein Board ohne eingebauten CAN-Kommunikator verwenden, wird der IC-Chip MCP2515 benötigt, um andere Nachrichtenprotokolle in CAN umzuwandeln.
  • Der CANL-Pin sollte mit den anderen CANL-Pins der anderen Busknoten verbunden werden. Das gleiche gilt für die CANH-Pins.
  • Der 120Ω-Widerstand über den CANH- und CANL-Pins ist nur erforderlich, wenn der Knoten ein Endknoten ist. Dies bedeutet, dass es sich am Ende der Parallelschaltungsverdrahtung befindet. Mit anderen Worten, der CAN-Bus sollte nur zwei 120Ω-Widerstände enthalten und diese sollten möglichst weit voneinander entfernt sein.
  • Schließlich kann der 1kΩ-Widerstand an RS (Pin 8) gegen einen 10kΩ-Widerstand ausgetauscht werden, um die Anstiegs-/Abfallzeit der CAN-Nachrichtenbits zu steuern. Weitere Informationen finden Sie im Datenblatt des MCP2551-Chips.

Schritt 2: Lesen und Schreiben auf den CAN-Bus

Lesen und Schreiben auf den CAN-Bus
Lesen und Schreiben auf den CAN-Bus

Nachdem nun die Transceiver-Schaltung mit dem STM32 verbunden ist, können wir mit dem Schreiben von Nachrichten auf den CAN-Bus beginnen. Diese anweisbare Anleitung wird nicht in den STM32-Code eingehen. Sehen Sie sich jedoch unseren Code für Beispiele hier an. Die Verwendung des STM32 als CAN-Knoten erfordert eine CAN-Header-Datei. Wir haben unseren eigenen geschrieben, den Sie hier auf unserem Github finden können. Hier geben wir einen kurzen Überblick über den Lese-/Schreibvorgang.

Um vom CAN-Bus zu lesen, müssen wir zunächst die ID der CAN-Nachricht kennen. Jede Nachricht sollte eine eindeutige ID haben, wobei niedrigere IDs eine höhere Priorität haben. Der hier gezeigte Code-Schnipsel wartet auf eine CAN-Nachricht mit der ID 0x622. Wenn in unserem System das erste Bit des 6. Bytes hoch ist, möchten wir Pin A10 hoch setzen.

Beim Schreiben einer CAN-Nachricht müssen wir daran denken, dass CAN-Nachrichten Multi-Byte sind. Jede schriftliche Nachricht muss eine ID und Länge haben. Im zweiten gezeigten Code-Snippet schreiben wir Daten in jedes Byte und senden dann die Nachricht (Die ID- und Längenparameter werden weiter oben im Code definiert).

Schritt 3: Knoten verbinden

Knoten verbinden
Knoten verbinden

Beim Anschluss mehrerer CAN-Knoten ist auf die Kabellänge zu achten. Die beiden am weitesten entfernten Knoten können bis zu 40 m voneinander entfernt sein. Mittlere Knoten, die mit dem Bus verbunden sind, sollten sich innerhalb von 50 cm von den Hauptbuslinien befinden.

CAN-Verbindungen folgen einem Industriestandard mit einem Dsub9-Stecker mit der CANL-Leitung an Pin 2 und der CANH-Leitung an Pin7. Die Option CANGND-Leitung kann auf Pin 3 gehen.

Schritt 4: Machen Sie die Platine

Machen Sie die Platine
Machen Sie die Platine

Beachten Sie beim Routing von CAN-Signalen auf einer Leiterplatte, dass CAN ein differentielles Signal ist und daher die Routing-Richtlinien für CANH und CANL sorgfältig befolgt werden sollten.

Schritt 5: Erweiterung des Boards

Erweiterung des Vorstandes
Erweiterung des Vorstandes

Werfen Sie einige weitere Knoten zusammen, fügen Sie einige Ein-/Ausgänge hinzu und verbinden Sie alle ihre CANH- und CANL-Pins. Beachten Sie, dass jeder STM32 oder jeder andere Mikrocontroller seinen eigenen MCP2551-Chip benötigt; sie können nicht geteilt werden.

Versuchen Sie daher, Ihre Leiterplatten kleiner als die hier gezeigte zu halten

Schritt 6: Bestellen Sie Ihre Leiterplatten bei JLCPCB

Bestellen Sie Ihre Leiterplatten bei JLCPCB
Bestellen Sie Ihre Leiterplatten bei JLCPCB

JLCPCB bietet schnellen, qualitativ hochwertigen Service zu sehr günstigen Preisen. Holen Sie sich 5 Boards in jeder Farbe mit unzähligen Anpassungsmöglichkeiten für nur 2 US-Dollar! Und wenn es Ihre erste Bestellung ist, erhalten Sie 10 Boards zum gleichen Preis!

Laden Sie einfach Ihre Gerber hoch und erhalten Sie ein sofortiges Angebot! Senden Sie Ihre Bestellung und Ihre Boards werden innerhalb einer Stunde für die Produktion überprüft. Sobald Sie bezahlt haben, können Sie Ihre hochwertigen Boards bereits in drei Tagen erwarten!

Schau es dir hier an

Schritt 7: Holen Sie sich Ihre Boards

Holen Sie sich Ihre Bretter!
Holen Sie sich Ihre Bretter!

Großes Lob an JLCPCB für das Sponsoring dieses Projekts. JLCPCB (ShenzhenJLC Electronics Co., Ltd.) ist das größte Unternehmen für PCB-Prototypen in China und ein High-Tech-Hersteller, der sich auf schnelles PCB-Prototyping und PCB-Kleinserienfertigung spezialisiert hat. Sie waren so freundlich, UBC Solar unsere neuen Leiterplatten für unseren solarbetriebenen Rennwagen zur Verfügung zu stellen. Wir haben am Freitag unsere Bestellung aufgegeben und die Boards am Mittwoch erhalten!

Empfohlen: