- RS-485 Serielle Kommunikation
- Erforderliche Komponenten
- Schaltplan
- Programmierung von STM32F103C8 & Arduino UNO für die serielle RS485-Kommunikation
- Testen der RS485-Kommunikation zwischen STM32F103C8 und Arduino UNO:
Die Kommunikationsprotokolle sind integraler Bestandteil einer digitalen Elektronik und eines eingebetteten Systems. Überall dort, wo mehrere Mikrocontroller und Peripheriegeräte miteinander verbunden sind, muss das Kommunikationsprotokoll verwendet werden, um eine Reihe von Daten auszutauschen. Es gibt viele Arten von seriellen Kommunikationsprotokollen. Der RS485 ist eines der seriellen Kommunikationsprotokolle und wird in Industrieprojekten und schweren Maschinen eingesetzt.
Wir haben im vorherigen Tutorial etwas über die serielle RS485-Kommunikation zwischen Arduino Uno und Arduino Nano gelernt . In diesem Lernprogramm wird die Verwendung einer seriellen RS-485-Kommunikation im STM32F103C8-Mikrocontroller beschrieben. Wenn Sie mit STM32 Microcontroller noch nicht vertraut sind, beginnen Sie mit Erste Schritte mit STM32 mithilfe der Arduino IDE: Blinkende LED und überprüfen Sie alle STM32-Projekte hier.
In diesem Tutorial verfügt Master STM32F103C8 über drei Drucktasten, mit denen der Status von drei am Slave Arduino Uno vorhandenen LEDs mithilfe der seriellen RS-485-Kommunikation gesteuert wird.
Beginnen wir mit dem Verständnis der Funktionsweise der seriellen RS-485-Kommunikation.
RS-485 Serielle Kommunikation
RS-485 ist ein asynchrones serielles Kommunikationsprotokoll, für das keine Uhr erforderlich ist. Es verwendet eine als Differenzsignal bezeichnete Technik, um Binärdaten von einem Gerät zu einem anderen zu übertragen.
Was ist diese differenzielle Signalübertragungsmethode?
Die Differenzsignalmethode erzeugt eine Differenzspannung unter Verwendung einer positiven und einer negativen 5V. Es bietet eine Halbduplex- Kommunikation bei Verwendung von zwei Drähten und eine Vollduplex- Kommunikation bei Verwendung von vier Drähten.
Mit dieser Methode:
- RS-485 unterstützt eine höhere Datenübertragungsrate von maximal 30 Mbit / s.
- Es bietet auch eine maximale Datenübertragungsentfernung im Vergleich zum RS-232-Protokoll. Es überträgt Daten bis zu einem Maximum von 1200 Metern.
- Der Hauptvorteil von RS-485 gegenüber RS-232 ist der Mehrfach-Slave mit einem einzigen Master, während RS-232 nur einen einzigen Slave unterstützt.
- Maximal 32 Geräte können an das RS-485-Protokoll angeschlossen werden.
- Ein weiterer Vorteil des RS-485 ist unempfindlich gegen Rauschen, da bei der Übertragung die Differenzsignalmethode verwendet wird.
- RS-485 ist schneller als das I2C-Protokoll.
Das RS-485-Modul kann an jeden Mikrocontroller mit serieller Schnittstelle angeschlossen werden. Für die Verwendung des RS-485-Moduls mit Mikrocontrollern wird ein Modul namens 5V MAX485 TTL bis RS485 benötigt, das auf dem Maxim MAX485 IC basiert, da es eine serielle Kommunikation über eine Entfernung von 1200 Metern ermöglicht und bidirektional ist und Halbduplex eine Datenübertragungsrate von 2,5 hat Mbit / s. Dieses Modul benötigt eine Spannung von 5V.
RS-485 Pin Beschreibung:
Pin Name |
Beschreibung |
VCC |
5V |
EIN |
Nicht invertierender Empfängereingang Nicht invertierender Treiberausgang |
B. |
Invertieren des Empfängereingangs Treiberausgang invertieren |
GND |
GND (0 V) |
R0 |
Empfängerausgang (RX-Pin) |
RE |
Empfängerausgang (LOW-Enable) |
DE |
Treiberausgabe (HIGH-Enable) |
DI |
Treibereingang (TX-Pin) |
Das RS485-Modul verfügt über folgende Funktionen:
- Betriebsspannung: 5V
- On-Board-MAX485-Chip
- Ein geringer Stromverbrauch für die RS485-Kommunikation
- Begrenzter Transceiver mit Anstiegsgeschwindigkeit
- 2P-Anschluss mit 5,08 mm Abstand
- Praktische RS-485-Kommunikationsverkabelung
- Alle Pins des Chips, zu denen geführt wurde, können über den Mikrocontroller gesteuert werden
- Plattengröße: 44 x 14 mm
Die Verwendung dieses Moduls mit STM32F103C8 und Arduino UNO ist sehr einfach. Die seriellen Hardware-Ports von Mikrocontrollern werden verwendet. Die seriellen Hardware-Pins in STM32 und Arduino UNO sind unten angegeben.
- In STM32F103C8: Pins PA9 (TX) und PA10 (RX)
- In Arduino Uno: Pin 0 (RX) & 1 (TX)
Die Programmierung ist ebenfalls einfach. Verwenden Sie einfach Serial.print (), um in RS-485 zu schreiben, und Serial.Read (), um von RS-485 zu lesen, und die Pins DE & RE von RS-485 werden auf LOW gesetzt, um Daten zu empfangen, und auf HIGH gesetzt Daten auf den RS-485-Bus schreiben.
Erforderliche Komponenten
- STM32F103C8
- Arduino UNO
- MAX485 TTL zu RS485 Konverter Modul - (2)
- 10K Potentiometer
- Druckknopf - 3
- LED - 3
- Widerstände
- Steckbrett
- Kabel anschließen
Schaltplan
In diesem Tutorial wird STM32F103C8 als Master mit einem RS-485-Modul und Arduino UNO als Slave mit einem anderen RS-485-Modul verwendet.
Schaltungsverbindung zwischen RS-485 und STM32F103C8 (Master):
RS-485 |
STM32F103C8 |
DI |
PA9 (TX1) |
DE RE |
PA3 |
R0 |
PA10 (RX1) |
VCC |
5V |
GND |
GND |
EIN |
Zu A von Slave RS-485 |
B. |
Zu B von Slave RS-485 |
STM32F103C8 mit drei Druckknöpfen:
Drei Drucktasten mit drei Pull-Down-Widerständen von 10k sind mit den Pins PA0, PA1, PA2 von STM32F103C8 verbunden.
Schaltungsverbindung zwischen dem RS-485 und Arduino UNO (Slave):
RS-485 |
Arduino UNO |
DI |
1 (TX) |
DE RE |
2 |
R0 |
0 (RX) |
VCC |
5V |
GND |
GND |
EIN |
Zu A von Master RS-485 |
B. |
Zu B von Master RS-485 |
Drei LEDs werden verwendet, wenn Anoden von LEDs mit einem Widerstand von 330 Ohm an die Pins 4, 7, 8 von Arduino UNO und die Kathode der LEDs an GND angeschlossen sind.
Programmierung von STM32F103C8 & Arduino UNO für die serielle RS485-Kommunikation
Arduino IDE wird für die Entwicklung und Programmierung beider Boards verwendet, dh STM32 und Arduino UNO. Stellen Sie jedoch sicher, dass Sie den entsprechenden PORT unter Tools-> Port and Board unter Tools-> Board ausgewählt haben. Wenn Sie Schwierigkeiten oder Zweifel haben, lesen Sie einfach Programmieren Ihres STM32 in ARDUINO IDE. Die Programmierung für dieses Tutorial besteht aus zwei Abschnitten, einem für STM32F103C8 (Master) und einem für Arduino UNO (Slave). Beide Codes werden nachfolgend einzeln erläutert.
STM32F103C8 als MasterAuf der Masterseite wird der Status des Druckknopfs gelesen und diese Werte dann seriell über die seriellen Hardware-Ports 1 (PA9, PA10) des STM32F103C8 auf den RS-485-Bus geschrieben. Außerdem wird derzeit keine externe Bibliothek benötigt. Das Arduino verfügt über alle notwendigen Bibliotheken für die serielle Kommunikation.
Beginnen Sie die serielle Kommunikation mit den seriellen Hardware-Pins (PA9, PA10) bei einer Buadrate von 9600.
Serial1.begin (9600);
Lesen Sie den Status des Druckknopfs an den Stiften PA0, PA1, PA2 von STM32F103C8 ab und speichern Sie diese in einer Variablen button1val, button2val, button3val. Der Wert ist HIGH, wenn die Taste gedrückt wird, und LOW, wenn sie nicht gedrückt wird.
int button1val = digitalRead (button1); int button2val = digitalRead (button2); int button3val = digitalRead (button3);
Vor dem Senden der Tastenwerte an die serielle Schnittstelle sollten die Pins DE & RE von RS-485 HIGH sein, die mit dem Pin PA3 von STM32F103C8 verbunden sind (um Pin PA3 HIGH zu machen):
digitalWrite (enablePin, HIGH);
Um diese Werte in die serielle Schnittstelle zu legen und Werte zu senden, je nachdem, welcher Druckknopf gedrückt wird, verwenden Sie die if else-Anweisung und senden Sie den entsprechenden Wert, wenn der Knopf gedrückt wird.
Wenn die erste Taste gedrückt wird, stimmt die Bedingung überein und der Wert '1' wird an die serielle Schnittstelle gesendet, an die Arduino UNO angeschlossen ist.
if (button1val == HIGH) { int num1 = 1; Serial1.println (num1); }}
Wenn Taste 2 gedrückt wird, wird der Wert 2 über die serielle Schnittstelle gesendet, und wenn Taste 3 gedrückt wird, wird der Wert 3 über die serielle Schnittstelle gesendet.
sonst wenn (button2val == HIGH) { int num2 = 2; Serial1.println (num2); } else if (button3val == HIGH) { int num3 = 3; Serial1.println (num3); }}
Und wenn keine Taste gedrückt wird, wird der Wert 0 an Arduino Uno gesendet.
sonst { int num = 0; Serial1.println (num); }}
Damit ist die Programmierung zum Konfigurieren von STM32 als Master abgeschlossen.
Arduino UNO als SklaveAuf der Slave-Seite empfängt das Arduino UNO einen ganzzahligen Wert, der vom Master STM32F103C8 gesendet wird und an der seriellen Hardware-Schnittstelle des Arduino UNO (P0, 1) verfügbar ist, an der das RS-485-Modul angeschlossen ist.
Einfach Wert lesen und in einer Variablen speichern. Abhängig vom empfangenen Wert wird die entsprechende LED an Arduino GPIO ein- oder ausgeschaltet.
Um die Werte vom Master zu erhalten, setzen Sie einfach die Pins DE & RE des RS-485-Moduls auf LOW. Der Pin-2 (enablePin) von Arduino UNO ist also LOW.
digitalWrite (enablePin, LOW);
Lesen Sie jetzt einfach die an der seriellen Schnittstelle verfügbaren Ganzzahldaten und speichern Sie sie in einer Variablen.
int receive = Serial.parseInt ();
Abhängig vom empfangenen Wert dh (0, 1, 2, 3) wird die entsprechend eine der drei LED eingeschaltet.
if (receive == 1) // Abhängig vom empfangenen Wert wird die entsprechende LED ein- oder ausgeschaltet { digitalWrite (ledpin1, HIGH); } else if (receive == 2) { digitalWrite (ledpin2, HIGH); } else if (receive == 3) { digitalWrite (ledpin3, HIGH); } else { digitalWrite (ledpin1, LOW); digitalWrite (ledpin2, LOW); digitalWrite (ledpin3, LOW); }}
Damit ist die Programmierung und Konfiguration von Arduino UNO als Slave abgeschlossen. Damit sind auch die vollständigen Konfigurationen für Arduino UNO und STM32 abgeschlossen. Das Arbeitsvideo und alle Codes finden Sie am Ende dieses Tutorials.
Testen der RS485-Kommunikation zwischen STM32F103C8 und Arduino UNO:
1. Wenn der Druckknopf 1, der mit dem Master STM32 verbunden ist, gedrückt wird, leuchtet die LED 1 auf, die mit dem Slave Arduino verbunden ist.
2. Wenn die Taste 2, die mit dem Master STM32 verbunden ist, gedrückt wird, leuchtet die LED 2 auf, die mit dem Slave Arduino verbunden ist.
3. Wenn die Taste 3 gedrückt wird, leuchtet die LED 3 auf, die mit dem Slave Arduino verbunden ist.
Damit ist die serielle RS485-Kommunikation zwischen STM32F103C8 und Arduino UNO abgeschlossen. Die Arduino UNO- und STM32-Karten sind weit verbreitete Karten für das Rapid Prototyping, und wir haben viele nützliche Projekte auf diesen Karten durchgeführt. Wenn Sie Zweifel haben oder Vorschläge für uns haben, schreiben und kommentieren Sie unten.