Elektronik :: Halbduplex-Interface mit RS485:Im Gänsemarsch auf langer Leitungvon RS232 zu RS485 |
![]() |
Die serielle Schnittstelle des PC ist (immer noch) eine wichtige Schnittstelle für den Funkamateur. Sie versagt jedoch bei großen Distanzen, also dann, wenn zwei Geräte über mehr als 15 Meter zu verbinden sind. Was ist zu tun, wenn z. B. die Packet-Radio-Mailbox und der Digipeater weit auseinander stehen? Die Lösung des Problems ist ebenso seriell und heißt RS485.
Die serielle Schnittstelle des PC (oft als RS232- oder V.24-Schnittstelle bezeichnet) bietet auch im USB-Zeitalter vielen Peripheriegeräten Anschluss. Insbesondere Funkamateure können auf diese Schnittstelle zurzeit nicht verzichten, denken wir nur an die Packet- und Pactor-Modems, Rotorsteuerungen und vieles mehr. Sollen jedoch größerer Entfernungen als nur ein paar Meter überbrückt werden, versagt die RS232-Schnittstelle, deren maximale Entfernung bei etwa 15 Metern liegt. Was ist zu tun, wenn Digipeater und Mailbox -- sagen -- wir 50 Meter auseinander liegen? Für größere Entfernungen bis ca. 1500 Meter wurde RS485 geschaffen.
Jedes Signal, das über eine RS232-Schnittstelle gesendet wird, erscheint auf dem Sub-D-Stecker als eine auf Masse bezogene Spannung im Bereich von -15 bis +15 V. So ist beispielsweise das Signal TD (Sendedaten) auf Pin 2 bezogen auf Pin 7 (GND). Wenn keine Daten gesendet werden, wird an TD eine negative Spannung anliegen, die zu einer positiven wechselt, sobald Informationen übertragen werden. Diese Art der Übertragung wird als unsymmetrisch (im Englischen: unbalanced) bezeichnet.
RS485 benutzt zur Übertragung eines Signals zwei Leitungen A und B, deren Spannungen nicht auf Masse bezogen gewertet werden. Statt dessen ist die Differenz zwischen A und B maßgeblich für die übertragene Information. Man spricht von differenziellen Signalen, das System ist symmetrisch (englisch: balanced). Die übertragen Spannungen liegen im Bereich zwischen maximal -7 und +12 Volt. Für den korrekten Empfang reichen allerdings bereits +-200 mV Spannungshub aus. Leistet der Sender also -7 und +12 V, können -6,8 bzw. +11,8 Volt auf dem Übertragungsweg "verloren" gehen (sie fallen an der langen Leitung ab). Die restlichen +-200 mV reichen für einen korrekten Empfang aus. Spannungen darunter sind undefiniert.
Die logischen Zustände sind so definiert:
Wenn A negativ zu B ist, wird dieser Zustand als logische 1 gewertet (MARK-Signal). Wenn A positiv zu B ist, wird dieser Zustand als logische 0 interpretiert (SPACE-Signal).
Es gibt noch einen dritten Zustand, der als Tri-State oder disconnected bezeichnet wird. Er dient dazu, einen RS485-Sender von der Leitung zu nehmen und einem anderen Teilnehmer die Möglichkeit zu geben, selbst zu senden. Dies geschieht über einen ENABLE-Eingang am RS485-Chip. Im LTC485 beispielsweise sind ein Empfänger und ein Sender enthalten, die wahlweise auf die Leitung geschaltet werden. Zur Steuerung dient ein kombinierter ENABLE-Eingang. Dieser ermöglicht, das mehrere Teilnehmer über ein Leitungspaar A und B miteinander kommunizieren können. Bis zu 32 Stationen können an der Kommunikation teilnehmen. Sicherlich kann das nur geordnet geschehen -- es darf nur einer senden, alle anderen sind in Empfangsbereitschaft und lauschen. Solange nur ein A-B-Leitungspaar existiert, ist die Kommunikation folglich auf Halbduplexbetrieb beschränkt. Für Vollduplexverbindungen (gleichzeitiges Senden und Empfangen) wird ein weiteres A-B-Leitungspaar benötigt. Wie zuvor erwähnt, muss ein RS485-System die Möglichkeit haben, den Sender von der Leitung zu trennen. Bei einem RS232 zu RS485-Konverter kann dazu die RTS-Leitung der seriellen Schnittstelle genutzt werden. RTS bedeutet Request To Send, das RS232-Signal meldet also einen Sendewunsch des PC an. Wird RTS logisch high, verbindet es den RS485-Sender mit A und B, wird es logisch low, nimmt es den Sender von der Leitung und versetzt ihn in den Tri-State-Zustand. Im LTC485 wird dann auch der Receiver auf die Leitung "geklemmt" und das System ist empfangsbereit. Nun kann ein anderer Sender über das selbe Leitungspaar aktiv werden. Wird RTS zur Umschaltung zwischen Senden und Empfang genutzt, wie in dieser Schaltung, muss man sich sicher sein, dass RTS high wird, bevor das erste Zeichen gesendet wird. Sonst gehen Zeichen oder der Beginn eines Zeichens verloren. Ebenso darf RTS erst low werden, nachdem das letzte Bit gesendet wurde. Dies muss von der Software geleistet werden und ist nicht Aufgabe des Konverters. Auch dürfen nicht mehrere Teilnehmer ihr RTS zugleich auf high legen.
...wird dazu verwandt, die Impedanz eines "Knotens" an die Impedanz der Leitung anzupassen. Ist sie nicht angepasst, wird das Sendesignal nicht komplett vom Empfänger absorbiert und ein Teil der Energie wird auf die Leitung reflektiert. Funkamateure kennen das von HF-Leitungen und messen das SWR. Ist die Impedanz von Signalquelle, Leitung und Last (Empfänger) gleich, sind Reflexionen ausgeschlossen und können das System nicht nachteilig beeinflussen. Das gilt auch für unser Leitungspaar A-B. Die Entscheidung, eine Terminierung zu benutzen oder nicht, sollte von der Kabellänge und der Übertragungsgeschwindigkeit abhängig gemacht werden. Eine Regel besagt: Wenn die Ausbreitungsverzögerung der Leitung sehr viel geringer ist als die Länge eines Bits, wird keine Terminierung benötigt. In unserer Schaltung wurde dennoch vorsorglich auf beiden Enden mit einem 100 Ohm Widerstand (R1) terminiert. Schließen Sie zwischen diesen beiden Teilnehmern weitere an das Leitungspaar an, entfällt auf diesen Platinen R1!
ist kurz erklärt: Er besteht im Wesentlichen aus zwei Pegelwandler. Der eine, MAX232, ist sicher vielen Lesern bekannt und für die serielle Schnittstelle des PC zuständig. Er wandelt von RS232 zu TTL für den Empfang und umgekehrt für den Sendebetrieb. Der LTC485 wandelt RS485-komforme Pegel in TTL und zurück. Eigentlich war's das schon, wäre da nicht RTS. Das Signal benötigt, um die ENABLE-Eingänge des LTC485 korrekt zu bedienen, einen TTL-Inverter, das 74HCT04, 74LS04 oder 7404. R1 schließlich ist der Widerstand zur Terminierung und die vier Elektrolytkondensatoren sorgen für schöne RS232-Pegel beim Senden in Richtung PC. Für den Rest ist Software zuständig.
und ein Layout sind bei dieser geringen Zahl Bauelemente sicher ein Luxus. Sie vereinfacht aber den Aufbau der Schaltung und das Einsetzen der Sub-D-Buchse, dessen Rastermaß sich dem einer Lochrasterplatine entzieht. Zudem verhindert es versehentlich falsch gelegte Verbindungen. Da Sie die Platine doppelt aufbauen müssen, lohnt ein Layout also schon. So gelangen wir nahtlos zum Aufbau: Die Platine ist nur minimal breiter als die Sub-D-Buchse. Sie kann daher direkt auf eine serielle Schnittstelle des PC gesteckt werden. In diesem Fall bietet es sich an, die Spannungsversorgung von 5 Volt direkt aus dem PC zu beziehen.
Dazu ist die 5-V-Anschlussbuchse so gestaltet, dass man wahlweise einfache Klemmen oder die bekannten Stromversorgungsstecker der 5,25-Floppy-Laufwerke (als Printversion) einlöten kann. Für das Leitungspaar A-B kommt die übliche Klemme zum Einsatz.
Der aufmerksame Leser wird sich fragen, weshalb die Software in diesem Zusammenhang eine besondere Erwähnung findet. Schließlich sollte ein gewöhnliches Terminalprogramm mit der RS485-Hardware klaglos zusammen arbeiten. Unter DOS scheint das auch so zu sein: Stellt man ein beliebiges DOS-Terminalprogramm auf das Protokoll "RTS/CTS" ein, wird die Umschaltung zwischen Senden und Empfang funktionieren. Unter Windows allerdings geschieht das nicht immer zuverlässig, das Betriebssystem sieht das recht "locker". Es kommt also darauf an, dass das benutzte Terminalprogramm zuerst RTS auf high legt und erst dann sendet. Das mit Windows gelieferte Hyperterm legt zwar RTS auf high, aber kaum zurück auf low! Andere Programme verhalten sich anders. Als begeisterter Programmierer der Atmel AVR-Mikroprozessoren bin ich auf AVR-Terminal gestoßen, das unseren Bedürfnissen in idealer Weise entgegen kommt: Es kennt nicht nur das RTS/CTS-Protokoll, sondern verfügt speziell für RS485-Anwender zusätzlich über die Einstellung "RTS on TX". Besser geht es kaum! Zudem bietet es die Möglichkeit, RTS manuell auf high bzw. low zu setzen.
Für Ihre Experimente noch einige Tipps: Nach dem Start des Terminalprogramms klicken Sie auf beiden Rechnern auf "Connect". AVR-Terminal ist dann mit der RS232 verbunden und es kann eine Datenverbindung erfolgen. Möchten Sie eine Datei senden, setzen Sie mit einem Mausklick manuell RTS auf high und nachdem die Datei übertragen ist, zurück auf low. Probieren Sie auch andere Windows-Terminalprogramme auf ihre Tauglichkeit in Bezug auf das RTS-Verhalten aus.
In der Datei rs485.zip sind die Original EAGLE-Dateien, das Layout und Bestückungsplan sowie Schaltbild enthalten. Eine Freeware-Version von EAGLE gibts bei www.CadSoft.de zum Download.
Und hier geht es zum Download.
Für dieses Projekt biete ich einen Bauteileservice an.