- Unterschied zwischen UART- und RS485-Kommunikation
- Erforderliche Komponenten
- Schaltplan für die drahtgebundene Fernkommunikation
- MAX485 UART-RS485-Konvertermodul
- Ethernet CAT-6E-Kabel
- Erklärung des Arduino-Codes
- Fazit
Wir verwenden seit langem Mikrocontroller-Entwicklungsplatinen wie Arduino, Raspberry Pi, NodeMCU, ESP8266, MSP430 usw. in unseren kleinen Projekten, bei denen der Abstand zwischen den Sensoren und der Platine meistens nicht mehr als einige Zentimeter beträgt In diesen Abständen kann die Kommunikation zwischen den verschiedenen Sensormodulen, Relais, Aktuatoren und Steuerungen problemlos über einfache Überbrückungsdrähte erfolgen, ohne dass wir uns über die Signalverzerrung im Medium und die darin eindringenden elektrischen Geräusche Gedanken machen müssen. Wenn Sie jedoch ein Steuerungssystem mit diesen Entwicklungsplatinen über eine Entfernung von mehr als 10 bis 15 Metern bauen, sollten Sie das Rauschen und die Signalleistung berücksichtigen, denn wenn Sie möchten, dass Ihr System zuverlässig funktioniert, können Sie es sich nicht leisten, das zu verlieren Daten während der Übertragung.
Es gibt viele verschiedene Arten von seriellen Kommunikationsprotokollen wie I2C und SPI, die mit Arduino einfach implementiert werden können. Heute werden wir uns ein anderes am häufigsten verwendetes Protokoll ansehen, RS485, das in industriellen Umgebungen mit hohem Rauschen sehr häufig zum Übertragen der Daten verwendet wird eine lange Distanz. In diesem Tutorial lernen wir das RS485-Kommunikationsprotokoll kennen und wie man es mit den beiden Arduino Nano implementiert, die wir bei uns haben, und wie man das Konvertierungsmodul MAX485 RS485 zu UART verwendet. Zuvor haben wir auch die MAX485-Kommunikation mit Arduino und die MAX485-Kommunikation mit Raspberry pi durchgeführt. Sie können sie auch bei Interesse überprüfen.
Unterschied zwischen UART- und RS485-Kommunikation
Die meisten kostengünstigen Sensoren und anderen Module wie GPS, Bluetooth, RFID, ESP8266 usw., die üblicherweise mit Arduino, Raspberry Pi auf dem Markt verwendet werden, verwenden UART TTL-basierte Kommunikation, da nur 2 Drähte TX (Transmitter) und RX erforderlich sind (Empfänger). Es ist kein Standard-Kommunikationsprotokoll, aber es ist eine physikalische Schaltung, mit der Sie serielle Daten mit anderen Peripheriegeräten senden und empfangen können. Es kann nur seriell Daten senden / empfangen, konvertiert also zuerst die parallelen Daten in serielle Daten und überträgt sie dann.
UART ist ein asynchrones Übertragungsgerät, daher gibt es kein Taktsignal zum Synchronisieren der Daten zwischen den beiden Geräten. Stattdessen werden Start- und Stoppbits am Anfang und Ende jedes Datenpakets verwendet, um die Enden der übertragenen Daten zu markieren. Von UART übertragene Daten sind in Paketen organisiert. Jedes Paket enthält 1 Startbit, 5 bis 9 Datenbits (abhängig vom UART), ein optionales Paritätsbit und 1 oder 2 Stoppbits. Es ist sehr gut dokumentiert und weit verbreitet und verfügt über ein Paritätsbit, um Fehler zu überprüfen. Es gibt jedoch einige Einschränkungen, da nicht mehrere Slaves und mehrere Master unterstützt werden können und der maximale Datenrahmen ist auf 9 Bits begrenzt. Für die Datenübertragung müssen die Baudraten von Master und Slave zwischen 10% voneinander liegen. Unten sehen Sie ein Beispiel dafür, wie ein Zeichen ein Sender über eine UART-Datenleitung ist. Signal High und Lows werden gegen den GND-Pegel gemessen, sodass eine Verschiebung des GND-Pegels katastrophale Auswirkungen auf die Datenübertragung hat.
Auf der anderen Seite ist RS485 eine eher branchenbasierte Kommunikation, die für ein Netzwerk aus mehreren Geräten entwickelt wurde, die über große Entfernungen und auch mit höheren Geschwindigkeiten verwendet werden können. Es arbeitet mit einer Differenzsignalisierungsmethode und nicht mit einer Spannungsmessung für den GND-Pin. Die RS485-Signale schweben und jedes Signal wird über eine Sig + -Leitung und eine Sig-Leitung übertragen.
Der RS485-Empfänger vergleicht die Spannungsdifferenz zwischen beiden Leitungen anstelle des absoluten Spannungspegels auf einer Signalleitung. Dies funktioniert gut und verhindert das Vorhandensein von Erdschleifen, eine häufige Ursache für Kommunikationsprobleme. Die besten Ergebnisse werden erzielt, wenn die Sig + - und Sig- -Linien verdreht werden, da durch Verdrehen der Effekt des in einem Kabel induzierten elektromagnetischen Rauschens aufgehoben wird und eine viel bessere Störfestigkeit gegen das Rauschen erzielt wird, wodurch der RS485 die Daten mit einer Reichweite von bis zu 1200 m übertragen kann. Durch Twisted Pair können die Übertragungsgeschwindigkeiten auch viel höher sein als mit geraden Kabeln möglich. Bei kleinen Übertragungsentfernungen können mit RS485 Geschwindigkeiten von bis zu 35 Mbit / s realisiert werden, obwohl die Übertragungsgeschwindigkeit mit der Entfernung abnimmt. Bei einer Übertragungsgeschwindigkeit von 1200 m können Sie nur eine Übertragungsgeschwindigkeit von 100 kbit / s verwenden. Zur Realisierung dieses Kommunikationsprotokolls benötigen Sie ein spezielles Ethernet-Kabel. Es gibt viele Kategorien von Ethernet-Kabeln, die wir verwenden können, z. B. CAT-4, CAT-5, CAT-5E, CAT-6, CAT-6A usw. In unserem Lernprogramm werden wir CAT-6E-Kabel verwenden Das hat 4 verdrillte Paare von 24AWG-Drähten und kann bis zu 600MHz unterstützen. Es wird an beiden Enden durch einen RJ45-Stecker abgeschlossen. Typische Netzspannungspegel von den Leitungstreibern sind mindestens ± 1,5 V bis maximal ± 6 V. Die Eingangsempfindlichkeit des Empfängers beträgt ± 200 mV. Rauschen im Bereich von ± 200 mV wird aufgrund der Gleichtakt-Rauschunterdrückung im Wesentlichen blockiert. Ein Beispiel dafür, wie ein Byte (0x3E) über die beiden Leitungen der RS485-Kommunikation übertragen wird.
Erforderliche Komponenten
- 2 × MAX485 Konvertermodul
- 2 × Arduino Nano
- 2 × 16 * 2 Alphanumerisches LCD
- 2 × 10k Wischerpotentiometer
- Cat-6E-Ethernet-Kabel
- Steckbretter
- Überbrückungsdrähte
Schaltplan für die drahtgebundene Fernkommunikation
Das folgende Bild zeigt den Sende- und Empfängerschaltplan für die drahtgebundene Fernkommunikation von Arduino. Beachten Sie, dass sowohl die Sende- als auch die Empfängerschaltung identisch aussehen. Das einzige, was sich unterscheidet, ist der darin geschriebene Code. Auch für die Demonstration verwenden wir eine Karte als Sender und eine Karte als Empfänger, aber wir können die Karten problemlos so programmieren, dass sie sowohl als Sender als auch als Empfänger mit derselben Konfiguration arbeiten
Das Anschlussdiagramm für die obige Schaltung ist ebenfalls unten angegeben.
Wie Sie oben sehen können, gibt es zwei nahezu identische Schaltungspaare mit jeweils einem Arduino Nano, einem 16 * 2 Alphanumeric LCD und einem MAX485 UART-RS485-Konverter-IC, die über einen RJ45-Anschluss an jedes Ende eines Ethernet Cat-6E-Kabels angeschlossen sind. Das Kabel, das ich im Tutorial verwendet habe, ist 25 m lang. Wir werden einige Daten von der Senderseite über das Kabel vom Nano senden, das über das im Master-Modus arbeitende MAX RS485-Modul in RS485-Signale umgewandelt wird.
Auf der Empfangsseite arbeitet das MAX485-Konvertermodul als Slave. Wenn es die Übertragung vom Master abhört, konvertiert es die empfangenen RS485-Daten erneut in die Standard-5-V-TTL-UART-Signale, die vom empfangenden Nano gelesen und auf 16 * angezeigt werden. 2 Alphanumerisches LCD angeschlossen.
MAX485 UART-RS485-Konvertermodul
Dieses UART-RS485-Konvertermodul verfügt über einen integrierten MAX485-Chip, einen Transceiver mit geringem Stromverbrauch und begrenzter Anstiegsgeschwindigkeit, der für die RS-485-Kommunikation verwendet wird. Es arbeitet mit einer einzelnen + 5V-Stromversorgung und der Nennstrom beträgt 300 μA. Es arbeitet mit Halbduplex-Kommunikation, um die Funktion der Umwandlung des TTL-Pegels in einen RS-485-Pegel zu implementieren. Dies bedeutet, dass es jederzeit senden oder empfangen kann, nicht beides. Es kann eine maximale Übertragungsrate von 2,5 Mbit / s erreichen. Der Transceiver MAX485 zieht unter unbeladenen oder voll beladenen Bedingungen einen Versorgungsstrom zwischen 120 μA und 500 μA, wenn der Treiber deaktiviert ist. Der Treiber ist auf Kurzschlussstrom begrenzt und die Treiberausgänge können durch die thermische Abschaltschaltung in einen hochohmigen Zustand versetzt werden. Der Empfängereingang verfügt über eine ausfallsichere Funktion, die einen logisch hohen Ausgang garantiert, wenn der Eingang offen ist.Darüber hinaus hat es eine starke Entstörungsleistung. Es verfügt auch über integrierte LEDs, die den aktuellen Status des Chips anzeigen, dh ob der Chip mit Strom versorgt wird oder ob er Daten sendet oder empfängt, was das Debuggen und Verwenden erleichtert.
Das oben angegebene Schaltbild erläutert, wie der integrierte MAX485-IC mit verschiedenen Komponenten verbunden ist, und bietet 0,1-Zoll-Standardabstandsüberschriften, die bei Bedarf mit Steckbrettern verwendet werden können.
Ethernet CAT-6E-Kabel
Wenn wir an die Datenübertragung über große Entfernungen denken, denken wir sofort daran, über Ethernet-Kabel eine Verbindung zum Internet herzustellen. Heutzutage verwenden wir hauptsächlich Wi-Fi für die Internetverbindung, aber früher verwendeten wir Ethernet-Kabel, die zu jedem PC führten, um ihn mit dem Internet zu verbinden. Der Hauptgrund für die Verwendung dieser Ethernet-Kabel über normale Kabel ist, dass sie einen viel besseren Schutz gegen das Eindringen von Rauschen und die Verzerrung des Signals über große Entfernungen bieten. Sie haben einen Schutzmantel über der Isolationsschicht, um vor elektromagnetischen Störungen zu schützen, und außerdem ist jedes Adernpaar miteinander verdrillt, um die Bildung von Stromschleifen und damit einen viel besseren Schutz gegen Rauschen zu verhindern. Sie werden häufig mit 8-poligen RJ45-Steckern an beiden Enden abgeschlossen. Es gibt viele Kategorien von Ethernet-Kabeln, die wir verwenden können, wie CAT-4, CAT-5,CAT-5E, CAT-6, CAT-6A usw. In unserem Tutorial verwenden wir ein CAT-6E-Kabel mit 4 verdrillten Paaren von 24AWG-Drähten, die bis zu 600 MHz unterstützen können.
Das Bild zeigt, wie ein Kabelpaar innerhalb der Isolationsschicht des CAT-6E-Kabels verdrillt ist
RJ-45-Anschluss für CAT-6E-Ethernet-Kabel
Erklärung des Arduino-Codes
In diesem Projekt verwenden wir zwei Arduino Nano, einen als Sender und einen als Empfänger, die jeweils ein 16 * 2 alphanumerisches LCD ansteuern, um die Ergebnisse anzuzeigen. Im Arduino-Code konzentrieren wir uns also auf das Senden der Daten und die Anzeige der gesendeten oder empfangenen Daten auf dem LCD-Bildschirm.
Für die Senderseite:
Wir beginnen mit der Aufnahme der Standardbibliothek zum Ansteuern des LCD und deklarieren den D8-Pin des Arduino Nano als Ausgangs-Pin, den wir später verwenden werden, um das MAX485-Modul als Sender oder Empfänger zu deklarieren.
int enablePin = 8; int potval = 0; #einschließen
Kommen wir nun zum Setup-Teil. Wir werden den Aktivierungsstift nach oben ziehen, um das MAX485-Modul in den Sendemodus zu versetzen. Da es sich um einen Halbduplex-IC handelt, kann er nicht gleichzeitig senden und empfangen. Wir werden hier auch das LCD initialisieren und eine Begrüßungsnachricht drucken.
Serial.begin (9600); // Seriell mit Baudrate 9600 initialisieren: pinMode (enablePin, OUTPUT); lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("Transmitter Nano"); Verzögerung (3000); lcd.clear ();
Jetzt in der Schleife schreiben wir einen kontinuierlich ansteigenden ganzzahligen Wert auf die seriellen Leitungen, der dann an den anderen Nano übertragen wird. Dieser Wert wird auch zum Anzeigen und Debuggen auf dem LCD gedruckt.
Serial.print ("Sent Value ="); Serial.println (potval); // Serielles Schreiben von POTval auf RS-485-Bus lcd.setCursor (0,0); lcd.print ("Gesendeter Wert"); lcd.setCursor (0,1); lcd.print (potval); Verzögerung (1000); lcd.clear (); Potval + = 1;
Empfängerseite:
Auch hier beginnen wir mit der Aufnahme der Standardbibliothek zum Ansteuern des LCD und deklarieren den D8-Pin des Arduino Nano als Ausgangs-Pin, mit dem wir später das MAX485-Modul als Sender oder Empfänger deklarieren werden.
int enablePin = 8; #einschließen
Kommen wir nun zum Setup-Teil. Wir werden den Aktivierungsstift nach oben ziehen, um das MAX485-Modul in den Empfängermodus zu versetzen. Da es sich um einen Halbduplex-IC handelt, kann er nicht gleichzeitig senden und empfangen. Wir werden hier auch das LCD initialisieren und eine Begrüßungsnachricht drucken.
Serial.begin (9600); // Seriell mit Baudrate 9600 initialisieren: pinMode (enablePin, OUTPUT); lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("Receiver Nano"); Verzögerung (3000); digitalWrite (enablePin, LOW); // (Pin 8 immer LOW, um Wert vom Master zu erhalten)
Jetzt in der Schleife prüfen wir, ob an der seriellen Schnittstelle etwas verfügbar ist, und lesen dann die Daten. Da die eingehenden Daten eine Ganzzahl sind, analysieren wir sie und zeigen sie auf dem angeschlossenen LCD an.
int pwmval = Serial.parseInt (); // INTEGER-Wert vom Master über RS-485 Serial.print empfangen ("Ich habe Wert"); Serial.println (pwmval); lcd.setCursor (0,0); lcd.print ("Received Value"); lcd.setCursor (0,1); lcd.print (pwmval); Verzögerung (1000); lcd.clear ();
Fazit
Das Test-Setup, das wir für dieses Projekt verwendet haben, finden Sie unten.
Die vollständige Arbeitsweise dieses Projekts finden Sie im unten verlinkten Video. Diese Methode ist eine der einfach und leicht zu implementierenden Methoden zum Übertragen der Daten über große Entfernungen. In diesem Projekt haben wir nur eine Baudrate von 9600 verwendet, was deutlich unter der maximalen Übertragungsgeschwindigkeit liegt, die wir mit dem MAX-485-Modul erreichen können. Diese Geschwindigkeit ist jedoch für die meisten Sensormodule da draußen geeignet und wird nicht wirklich benötigt Alle Höchstgeschwindigkeiten bei der Arbeit mit Arduino und anderen Entwicklungsplatinen, es sei denn, Sie verwenden das Kabel als Ethernet-Verbindung und benötigen die gesamte Bandbreite und Übertragungsgeschwindigkeit, die Sie erhalten können. Spielen Sie selbst mit der Übertragungsgeschwindigkeit herum und probieren Sie auch andere Ethernet-Kabeltypen aus. Wenn Sie Fragen haben, lassen Sie diese im Kommentarbereich unten oder nutzen Sie unsere Foren. Ich werde mein Bestes geben, um sie zu beantworten. Bis dahin Adios!