Optoelektronischer Pegelwandler RS232 zu TTL (RxD/TxD)


Besonders in Mikrocontrollern werden UART-Funktionen zur einfachen seriellen Datenübertragung implementiert. Für den Übergang von unipolarer 5V-Logik auf bipolare RS232-Signale dient dann meist ein Pegelwandler nach Art des MC1488, SN7515X, und vor allem der MAX232. Leider bieten diese Standardlösungen keinen wirksamen Schutz vor Erdschleifen, Überspannungen oder gegenseitigen EM-Störungen. Da liegt es nahe, Pegelwandlung und Potenzialtrennung in einer Baugruppe zusammenzufassen. Aber bitte mit Sahne!


IdeeSchaltung | Details | Stückliste | Layout | Anmerkungen | Index


Bild 1: RS232-TTL-Wandler
  • Pegelwandlung RS232 <--> 5V-Logik
  • Potenzialtrennung per Optokoppler
  • Bipolare Signalaufbereitung
  • Übertragung bis 57600 Baud
  • Keine separate Spannungsquelle auf DTE-Seite
  • HF-neutrales Frontend
  • Preiswerte Standardbauteile
  • Hochsicherheits-Ersatz für MAX232 (RxD/TxD)



Idee

Was tun, wenn ein Gerät mit serieller Schnittstelle besondere Anforderungen an die elektrische Sicherheit stellt? Beispiele wären ferngesteuerte Transceiver, medizinische Apparate, Netzmodems, Rundsteueranlagen, KW-PAs, EM-Waffen... Na klar: Gegen Brummschleifen, hochfrequente Beeinflussungen und allzu prickelnde Spannungsdifferenzen hilft nur eine potenzialfreie Signalübertragung per Glasfaserkabel oder Optokoppler.

Im Gegensatz zur vollständigen RS232-Kopplung muss man beim reinen Softwareprotokoll zum Glück nur die Leitungen RxD und TxD optoelektronisch übertragen - kein Ding, meinen viele... Tatsächlich finden sich anderswo auch schon ein paar "Lösungen" zur RS232-Potenzialtrennung, die mit verdächtig geringem Aufwand an Optokopplern auskommen wollen. Schade, dass viele dieser ultrasimplen Schaltungen nur an solchen Schnittstellen funktionieren, die bereits 0 Volt als "logische 1" interpretieren... Was soll man dazu sagen? Normal ist das nicht! - Siehe EIA-232-Spezifikationen.

Hier mein Vorschlag für einen optoelektronischen RS232-TTL-Wandler, der mit bipolaren Signalpegeln arbeitet und schon deshalb eine gute Kompatibilität zu normgerechten RS232-Schnittstellen erreicht. Anders als viele Minimallösungen basiert dieses Konzept auf jeweils zwei Optokopplern im Gegentaktbetrieb. Auf TTL-Seite erreicht man damit eine saubere Regenerierung von TxD, auf RS232-Seite einen optimalen Wirkungsgrad bei der Nachbildung eines bipolaren RxD-Signals. So ist es möglich, positive und negative Hilfsspannungen direkt aus der Schnittstelle zu gewinnen - ohne den Umweg über zusätzliche DC/DC-Wandler und daher auch ganz ohne hausgemachte HF-Störungen.
Das Ganze funktioniert mit leicht erhältlichen Standardkomponenten. Schon ein Optokoppler, wie der CNY17-1 erreicht in dieser Schaltung Übertragungsraten bis 57600 Baud, was für die meisten Mikrocontroller-Anbindungen völlig ausreicht.
Nebenbei findet die gewohnte Signalinvertierung statt. Die RS232-TTL-Baugruppe kann also in vielen Fällen als direkter potenzialfreier Ersatz für einen MAX232 eingesetzt werden; ohne Redesign der übrigen Hardware, und ohne dass auch nur eine einzige Zeile im Programmcode des Mikrocontrollers geändert werden müsste!

Natürlich gibt's auch einen Wermutstropfen: Die hier praktizierte Methode der Hilfsspannungsgewinnung ist auf normgerechte Spannungen und Ströme angewiesen. Schnittstellen mit besonders schwachen Treibern oder nur unipolaren Spannungspegeln werden schlicht und ergreifend nicht unterstützt! An halbwegs normalen Schnittstellen funktioniert es dagegen sehr zuverlässig - siehe Anmerkungen.



Schaltung



Bild 2: Schaltung des optoelektronischen RS232-TTL-Wandlers mit Eiern


Details

RS232-Anschaltung und Gewinnung der Hilfsspannungen
Direkt an der weiblichen SUB-D9-Buchse X1 findet sich eine Brücke zwischen RTS+CTS sowie DTR+DCD+DSR. Aus Sicht des Computers (Data Terminal Equipment, DTE) sieht es dann so aus, als sei ein ständig empfangsbereites Gerät an der RS232-Schnittstelle angeschlossen. Mit diesem uralten Trick lässt sich vielen Anwenderprogrammen sogar ein funktionierendes Hardwareprotokoll vorgaukeln, obwohl natürlich nur RxD und TxD tatsächlich weitergeleitet werden. DTR und RTS bleiben in der Regel auf "logisch 0", solange der Port geöffnet bleibt. Das ist schön. Die positive Spannung von DTR nutzen wir, um über D1 den Elko C1 auf etwa +12V nachzuladen. Somit steht eine gepufferte positive Hilfsspannung zur Regenerierung des normgemäßen RxD-Signals zur Verfügung.
Mit demselben Trick lässt sich auch eine negative Spannung aus der Schnittstelle gewinnen, dafür kommt allerdings bei regulärem Betrieb leider nur die Sendeleitung TxD infrage. Sie liegt, zumindest in den Sendepausen, auf "logisch 1" (Stopp-Bit), und lädt dann über D3 den Elko C2 auf volle negative Schnittstellenspannung von bis zu -12V. (Wenn TxD seiner eigentlichen Aufgabe, dem Datensenden, nachkommt, dann sieht die Ladebilanz für C2 bisweilen schlechter aus, siehe Anmerkungen.)
Ganz nebenbei werden über D2 noch die positiven Zustände von TxD mitgenutzt (gleichmäßigere Auslastung).
Somit steht auch die gepufferte negative Hilfsspannung zur Regenerierung des normgemäßen RxD-Signals zur Verfügung.

Signalrichtung TxD  -->  TxDTTL
Das bipolare RS232-Sendesignal gelangt über R1 als Vorwiderstand auf die zwei antiparallel geschalteten Sende-LEDs in PC1/PC2. Negativer Sendepegel bringt die LED in PC1 zum Leuchten, positiver Pegel die LED in PC2. Auf TTL-Seite zieht also immer nur einer der beiden Phototransistoren den "Set"- oder aber den "Reset"-Eingang des aus IC1a/b gebildeten R/S-Flipflops gegen Masse. Die Pullup-Widerstände R4/R5 verbessern die Flankensteilheit im Zusammenspiel mit etwas lahmen Optokopplern. Das alte Push-Pull-Spiel sorgt am Ausgang der Kippschaltung für ein sauberes digitales TxD-Rechteck (Pin 2 von X2: TxDTTL).

Signalrichtung RxDTTL --> RxD
Zur Darstellung eines normgerechten bipolaren RxD-Signals muss man, dem Datensignal entsprechend, entweder die positive oder aber die negative Hilfsspannung auf den Eingang RxD durchschalten. Dazu wird das vom Controller kommende Datensignal (Pin 3 von X2: RxDTTL) über IC1c/d jeweils invertiert und treibt dann die  entsprechende Sende-LED in PC3 oder diejenige in PC4. R6 und R7 dienen zur notwendigen Strombegrenzung. Auf RS232-Seite schaltet nun entweder PC3 die positive Hilfsspannung, oder PC4 die negative Hilfsspannung nach RxD durch; die Schnittstelle bekommt ihr bipolares Datensignal.
Die symmetrische Arbeitsweise hat hier gleich mehrere Vorteile: Die Schaltung ist energieeffizient, weil die Hilfsspannungen nur durch den Innenwiderstand des RxD-Einganges belastet werden. Und selbst wenn eine der Hilfsspannungen stark einbricht, so verschieben sich die Nulldurchgänge des seriellen Datensignals nur unwesentlich - die Synchronisation des UARTs auf DTE-Seite bleibt erhalten.

Stromversorgung
Betriebsspannung für IC1 (74LS00 - 4xNAND) wird über Pin 1 (0V) und Pin 4 (+5VTTL) von X2 zugeführt. Die Quelle muss lediglich Mindestanforderungen für TTL-Schaltkreise erfüllen, was kein Problem darstellen sollte, wenn ohnehin noch weitere 5V-Systeme mitversorgt werden. Der 5V-Teil zieht bei Verwendung eines 74LS00 maximal 20mA. Mehr als die Hälfte geht übrigens auf das Konto der Sende-LEDs in PC3/PC4.



Stückliste

Kondensatoren

C1,C2 220µF/16V (Elko)
C3 47µF/10V
C4 100nF Keramik-Scheibchenkondensator


Widerstände

R1,R2,R3 330
R4,R5 2k2
R6,R7 220


Halbleiter

D1,D2,D3 1N4148 oder BAT46 (Shottky)
D4 1N4001 (Verpolschutz)
PC1-4 CNY 17-1, 4N25, 4N36 o.ä. - siehe Text!
IC1 74LS00 (4x NAND - LSTTL!)


Sonstiges

9-pol. D-SUB-Buchse für Printmontage (siehe Layout/Bestückungsplan)
3x DIL14 IC-Fassung
Platine oder Lochrasterplatte 65 x 40 mm




Platinenlayout

Für den modularen Aufbau empfehle ich unten stehendes Platinenlayout. Der Nachbau auf Lochraster ist ebenfalls gut möglich, wenn's auch tierisch nervt, dass die D-SUB-Anschlusspins nicht wirklich im 2,54mm-Raster vorliegen :(

Bild 3a/b: rs232ttl  - Layout und Bestückungsplan @ 200dpi
 


Anmerkungen

Geeignete Messpunkte für die Hilfsspannungen sind der Pluspol von C1 bzw. der Minuspol von C2 (siehe Bild 3b). Hier sollten im Ruhezustand bei geöffnetem Port etwa +/-12V gegenüber Signal-Masse (GND) anliegen. Ein paar Volt mehr oder weniger ist nicht weiter schlimm.

Mit dem Oszi sieht man mehr: Das regenerierte RxD-Signal auf RS232-Seite zum Beispiel. Es darf im laufenden Betrieb durchaus auf +/-6V einbrechen, eine normgerechte Schnittstelle sollte das Signal dennoch einwandfrei auswerten können (wie gesagt, nach EIA-232 wären +/-3V die Untergrenze).
Ebenfalls interessante Messpunkte bei der Fehlersuche (Controller empfängt nix?) sind die Kollektoren der Phototransistoren in PC1/PC2 (jeweils Pin 5). Hier sieht man sofort, ob die Koppler bei der gegebenen Geschwindigkeit noch mitspielen. Selbst wenn die Signale schon reichlich "abgerundet" aussehen, kann die Übertragung aufgrund der gegentaktigen Auswertung durchaus noch funktionieren. An den Ausgängen der Kippschaltung (Pin 3+6 von IC1) sollte in jedem Fall ein sauberes und prellfreies TTL-Rechteck stehen. Ob die Signalregenerierung hinreichend symmetrisch funktioniert, lässt sich besonders gut durch Senden einer ununterbrochenen Folge von Nullen und Einsen (ASCII-Zeichen "U", dez.85, hex.55) testen.

Ein allgemeiner Funktionstest ist auch ohne weitere Messmittel möglich. Hierzu einfach RS232-TTL-Wandler (über 1:1 SUB-D9-Verlängerung) mit dem RS232-Port des Computers verbinden, 5V-Spannung anklemmen, Direktverbindung TxDTTL mit RxDTTL (z.B. durch einen "Jumper" auf Pin 2/3 von X2). Durch diesen "Loopback" wird jedes von TxD ausgesendete Zeichen an RxD zurückgeliefert - hier allerdings über den Umweg sämtlicher Optokoppler inklusive digitaler Signalaufbereitung.
Also: Terminalprogramm starten, richtige Schnittstelle wählen, moderate Übertragungsgeschwindigkeit von 9600 Baud einstellen, Softwareprotokoll (Xon/Xoff) an, Echo aus. Mit diesen Einstellungen sollte jedes eingetippte Zeichen unverfälscht zurückgesendet und auf dem Bildschirm angezeigt werden. Mit Kopplern vom Typ CNY17-1 funktioniert der Loopback-Test gewöhnlich bis 57600 Baud.

Andere Optokoppler
Da die Anschlussbelegung bei vielen Optos im DIL-6 Gehäuse identisch ist, lohnt sich ein Test mit Bauteilen "aus der Bastelkiste". Die Schaltung läuft mit vielen Kopplern, deren CTR zwischen 50% bis 200% liegt.
Je Übertragungsrichtung sollten immer zwei Optokoppler desselben Typs verwendet werden (Symmetrie).
Erfolgreich getestet bisher mit: 4N25, 4N36, CNX62, CNX83, CNY17-1, MOC3012, TIL117.

Einschränkungen
Ob der Datenempfang über RxD auf Schnittstellenseite klappt, hängt entscheidend von der Belastbarkeit der positiven und negativen Hilfsspannung ab. Theoretisch wäre folgendes Worst-Case-Szenario denkbar: DTE-RS232 liefert nur sehr schwache Ströme <5mA (Laptop-Müll!), TxD sendet nur Nullbytes. Zur Auffrischung von C2 sind nur noch die obligatorischen Stoppbits nutzbar. Wenn dann auch noch RxD einen vergleichsweise niedrigen Eingangswiderstand hätte und die Gegenseite (Controller) plötzlich lauter Einsen senden wollte, dann könnte die negative Hilfsenergie doch langsam knapp werden...

Als Härtetest habe ich zwei RS232-TTL-Wandler mit CNY17-1 nach Art eines Nullmodems zusammengeschaltet - TxDTTL des einen Wandlers ging auf RxDTTL des zweiten, und umgekehrt. Mit dieser Kopplung wurden zwischen verschiedenen PCs (XT/AT/Pentium) serielle IPX-, Interlink- und Filelink-Verbindungen aufgebaut. Zwischen DTE und RS232-TTL-Wandler waren noch jeweils 2 Meter D-SUB-Verlängerungskabel, was aber erwartungsgemäß keine besondere Rolle spielte (waren auch nicht die billigsten Kabel!). Verzeichnisse und größere Dateien wurden in beiden Richtungen verschoben. Die Übertragung klappte in allen Konfigurationen bis 57600 Baud, unabhängig davon, ob neue oder alte Schnittstellen daran beteiligt waren. (Immerhin ein Indiz für gute Hardware-Kompatibilität dieser Schaltung.)
Mit dem Oszilloskop wurden Datensignale und Hilfsspannungen beobachtet, um einen Eindruck zu bekommen, wie die Energiebilanz unter verschiedenen Impuls- und Dauerbelastungen aussieht. Tatsächlich schwankte die negative Hilfsspannung, je nach Transfermodus, um mehrere Volt; der zulässige Bereich wurde aber zu keinem Zeitpunkt verlassen. Hier zahlt sich aus, dass normgerechte RS232-Eingänge auch bei vermindertem Spannungshub noch sauber mitspielen, solange eben ein echtes bipolares Signal im korrekten Timing angeboten wird. Unterstützend kam wohl noch hinzu, dass die meisten Software-Protokolle nur blockweise (Halbduplex) übertragen; wenn DTE Sendepause hat, kann sich die negative Hilfsspannung erholen.



Ich danke besonders denjenigen,
die mich durch ihre hanebüchenen Pfuschlösungen zu diesem Gegenentwurf inspirierten,
und hoffe, mit der vorliegenden Schaltung einen echten Beitrag für mehr Hardwaresicherheit geleistet zu haben!


Anregungen, Kritik, Fragen oder Spenden?  ;-)


Links

Datenblätter CNY17-X

Overview RS232

Wikipedia über RS232

Eine der besten Zusammenfassungen über RS232/EIA232 in englischer Sprache

Vollständige potenzialfreie RS232-Kopplung mit vielen, vielen Optokopplern

Erstveröffentlichung FUNKAMATEUR Ausgabe 11/05 [www.funkamateur.de]



Nach oben

Index


 © 2004/2005 Julien Thomas 12/2005, rev. 11/2007
julien thomas joytec jte jtt jts elektronik technik computer hardware projekte hobby selbstbau semiprofessionell forschung durchblick reverse engineering postwar standards do-it-yourself mangelwirtschaft geld sparen mitmachen lernen löten statt labern standard bausatz autor übersetzer praktisch rs232 rs-232 ttl wandler cmos 5V rxd txd microcontroller max232 1488 1489 75188 75189 75150 75154 bipolar unipolr pegelwandler ersatz schutz schaltung opto koppler softwareprotokoll brummschleife ladungspumpe robust standardkomponenten hochfrequenz neutral sicherheit dc/dc diy selbstbau einfach preiswert modul baugruppe