- RS-485 Serial Communication Protocol
- RS-485 in Arduino
- Erforderliche Komponenten
- Schaltplan
- Programmierung von Arduino UNO und Arduino Nano für die serielle RS485-Kommunikation
- Steuern der LED-Helligkeit mit serieller Kommunikation RS485
Die Auswahl eines Kommunikationsprotokolls für die Kommunikation zwischen Mikrocontrollern und Peripheriegeräten ist ein wichtiger Bestandteil des eingebetteten Systems. Dies ist wichtig, da die Gesamtleistung einer eingebetteten Anwendung von den Kommunikationsmitteln abhängt, da sie mit Kostensenkung, schnellerer Datenübertragung, Fernabdeckung usw. zusammenhängt.
In den vorherigen Tutorials haben wir das I2C-Kommunikationsprotokoll und die SPI-Kommunikationsprotokolle in Arduino kennengelernt. Jetzt gibt es ein anderes serielles Kommunikationsprotokoll namens RS-485. Dieses Protokoll verwendet eine asynchrone serielle Kommunikation. Der Hauptvorteil von RS-485 ist die Ferndatenübertragung zwischen zwei Geräten. Und sie werden am häufigsten in elektrisch lauten Industrieumgebungen verwendet.
In diesem Tutorial lernen wir die serielle RS-485-Kommunikation zwischen zwei Arduinos kennen und demonstrieren sie, indem wir die Helligkeit der an ein Slave-Arduino angeschlossenen LED von Master Arduino aus steuern, indem wir ADC-Werte über das RS-485-Modul senden. Ein 10k-Potentiometer wird verwendet, um die ADC-Werte bei Master Arduino zu variieren.
Beginnen wir mit dem Verständnis der Funktionsweise der seriellen RS-485-Kommunikation.
RS-485 Serial Communication Protocol
RS-485 ist ein asynchrones serielles Kommunikationsprotokoll, das keinen Takt benötigt. 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, wenn zwei Drähte verwendet werden, und Vollduplex erfordert 4 Vierer- Drähte.
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 maximal 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.
- Es können maximal 32 Geräte an das RS-485-Protokoll angeschlossen werden.
- Ein weiterer Vorteil des RS-485 besteht darin, dass er unempfindlich gegen Rauschen ist, da für die Übertragung die Differenzsignalmethode verwendet wird.
- RS-485 ist schneller als das I2C-Protokoll.
RS-485 in Arduino
Für die Verwendung von RS-485 in Arduino 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. Im Halbduplexmodus hat es eine Datenübertragungsrate von 2,5 Mbit / s.
5V MAX485 TTL zu RS485 Modul benötigt eine Spannung von 5V und verwendet 5V Logikpegel, so dass es mit seriellen Hardware-Ports von Mikrocontrollern wie Arduino verbunden werden kann.
Es hat 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
Pinbelegung von RS-485:
Pin Name |
Verwenden |
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) |
Dieses RS-485-Modul kann problemlos mit Arduino verbunden werden. Verwenden wir die seriellen Hardware-Ports von Arduino 0 (RX) und 1 (TX) (In UNO, NANO). 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.
Der Programmierteil wird später ausführlich erläutert, aber zuerst werden die erforderlichen Komponenten und der Schaltplan überprüft.
Erforderliche Komponenten
- Arduino UNO oder Arduino NANO (2)
- MAX485 TTL zu RS485 Konverter Modul - (2)
- 10K Potentiometer
- 16x2 LCD-Anzeige
- LED
- Steckbrett
- Kabel anschließen
In diesem Tutorial wird Arduino Uno als Master und Arduino Nano als Slave verwendet. Hier werden zwei Arduino-Boards verwendet, sodass zwei RS-485-Module erforderlich sind.
Schaltplan
Schaltungsverbindung zwischen dem ersten RS-485 und Arduino UNO (Master):
RS-485 |
Arduino UNO |
DI |
1 (TX) |
DE RE |
8 |
R0 |
0 (RX) |
VCC |
5V |
GND |
GND |
EIN |
Zu A von Slave RS-485 |
B. |
Zu B von Slave RS-485 |
Verbindung zwischen dem zweiten RS-485 und Arduino Nano (Slave):
RS-485 |
Arduino UNO |
DI |
D1 (TX) |
DE RE |
D8 |
R0 |
D0 (RX) |
VCC |
5V |
GND |
GND |
EIN |
Zu A von Master RS-485 |
B. |
Zu B von Master RS-485 |
Schaltungsverbindung zwischen einem 16x2 LCD und Arduino Nano:
16x2 LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Zum Potentiometer-Mittelstift zur Kontrastregelung des LCD |
RS |
D2 |
RW |
GND |
E. |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
EIN |
+ 5V |
K. |
GND |
Ein 10K-Potentiometer ist an den Analog-Pin A0 des Arduino UNO angeschlossen, um einen Analogeingang bereitzustellen, und eine LED ist an Pin D10 des Arduino Nano angeschlossen.
Programmierung von Arduino UNO und Arduino Nano für die serielle RS485-Kommunikation
Für die Programmierung beider Karten wird Arduino IDE verwendet. Stellen Sie jedoch sicher, dass Sie den entsprechenden PORT unter Tools-> Port and Board unter Tools-> Board ausgewählt haben.
Den vollständigen Code mit einem Demo-Video finden Sie am Ende dieses Tutorials. Hier erklären wir einen wichtigen Teil des Codes. In diesem Tutorial gibt es zwei Programme, eines für Arduino UNO (Master) und eines für Arduino Nano (Slave).
Code Erklärung für Master: Arduino UNO
Nehmen Sie auf der Masterseite einfach den Analogeingang an Pin A0, indem Sie das Potentiometer variieren, und schreiben Sie diese Werte dann über die seriellen Hardware-Ports (0,1) von Arduino UNO auf den RS-485-Bus.
Verwenden Sie Folgendes, um die serielle Kommunikation an den seriellen Hardware-Pins (0,1) zu beginnen:
Serial.begin (9600);
Um den Analogwert an Pin A0 von Arduino UNO zu lesen und in einem variablen Potval zu speichern, verwenden Sie:
int potval = analogRead (pushval);
Vor dem Schreiben des Potval- Werts in die serielle Schnittstelle sollten die Pins DE & RE von RS-485 HIGH sein, die mit Pin 8 von Arduino UNO verbunden sind, um Pin 8 HIGH zu machen:
digitalWrite (enablePin, HIGH);
Verwenden Sie die folgende Anweisung, um diese Werte in den mit dem RS-485-Modul verbundenen seriellen Anschluss zu übertragen
Serial.println (potval);
Code Erklärung für Slave: Arduino NANO
Auf der Slave-Seite wird vom Master RS-485 ein ganzzahliger Wert empfangen, der am seriellen Hardware-Port des Arduino Nano verfügbar ist (Pins -0,1). Lesen Sie einfach diesen Wert und speichern Sie ihn in einer Variablen. Die Werte sind in Form von (0 - 1023). Daher wird es in (0-255) umgewandelt, da die PWM-Technik zur Steuerung der LED-Helligkeit verwendet wird.
Dann AnalogWrite diese konvertierten Werte auf den LED-Pin D10 (es ist ein PWM-Pin). Abhängig vom PWM-Wert ändert sich also die Helligkeit der LED und zeigt diese Werte auch im 16x2-LCD-Display an.
Damit der RS-485 des Slave Arduino die Werte vom Master empfängt, setzen Sie einfach die Pins DE & RE des RS-485 auf LOW. Der Pin D8 (enablePin) von Arduino NANO ist also LOW.
digitalWrite (enablePin, LOW);
Und um die an der seriellen Schnittstelle verfügbaren Ganzzahldaten zu lesen und in einer variablen Verwendung zu speichern
int pwmval = Serial.parseInt ();
Konvertieren Sie als nächstes den Wert von (0-1023 in 0-255) und speichern Sie ihn in einer Variablen:
int convert = map (pwmval, 0,1023,0,255);
Schreiben Sie als nächstes den Analogwert (PWM) an Pin D10, an dem die LED-Anode angeschlossen ist:
analogWrite (ledpin, convert);
Verwenden Sie zum Drucken dieser PWM-Werte in einem 16x2-LCD-Display
lcd.setCursor (0,0); lcd.print ("PWM FROM MASTER"); lcd.setCursor (0,1); lcd.print (konvertieren);
Steuern der LED-Helligkeit mit serieller Kommunikation RS485
Wenn der PWM-Wert mit einem Potentiometer auf 0 gesetzt wird, wird die LED ausgeschaltet.
Und wenn der PWM-Wert mit einem Potentiometer auf 251 eingestellt wird: Die LED leuchtet mit voller Helligkeit, wie in der folgenden Abbildung gezeigt:
So kann RS485 für die serielle Kommunikation in Arduino verwendet werden.