UART/USART <-> RS232 mit MAX232 und weniger Platzverbrauch

    • Allgemein

    Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von fraju.

      UART/USART <-> RS232 mit MAX232 und weniger Platzverbrauch

      Grundvoraussetzung:
      0. Dieses Tutorial ist für frisch gebackene Hardware-Bastler gedacht, die noch nicht allzu viel Plan haben. Ich hoffe, dass der eine oder andere generell davon einen Nutzen hat, oder den CMOS-Trick noch nicht kannte.
      1. Ich empfehle wärmstens einen Quartz als Frequenzgeber zu verwenden, da das Timing der RS232 nicht allzu falsch sein darf. Ob integrierte RC-Oszillatoren verwendbar sind, muss je nach Anwendung festgestellt werden (vgl. Datenblatt).
      2. Ich gehe hier davon aus, dass die gesamte Schaltung mit 5V versorgt wird. Bei 3.3V sind einige Annahmen oder Werte möglicherweise nicht zutreffend. Bitte in den jeweiligen Datenblättern überprüfen.

      Wie verbinde ich den µC mit dem PC?
      Der klassische Weg einen UART/USART (seriellen) Port von einem µC mit dem PC zu verbinden ist mit einem MAX232. Das ganze braucht leider selbst mit SMD-Bauteilen recht viel Platz, da der MAX232 mit seinen 16 Pins ein recht großer IC ist und noch 5 Kondensatoren benötigt werden. Üblicherweise sind zumindestens 1µF/16V (z.B. SMD MLCC* 0805 oder THT Tantal) zu empfehlen, um ein wenig Saft am Ausgang zu bieten.

      Andererseits gibt es 2 ungeschriebene Gesetze:
      1. die meisten (jeder?) RS232-Chip unterscheidet nicht zwischen 0V und -12V am Eingang.
      2. jeder mir bekannte CMOS**-Eingang hat 2 Dioden (eine auf +VCC, eine auf GND). D.h. die überschüssige Spannung kann an einem Vorwiderstand abfallen.
      MAN BEACHTE: Es funktioniert idR., entspricht aber nicht der Spezifikation.

      Was hält uns davon ab den CMOS-µC "direkt" (über Widerstände) an den PC zu hängen?
      Ganz einfach: die UART ist im vgl. zur RS232 invertiert. -12V entspricht +5V und +12V entspricht 0V. Es muss also noch ein Inverter her, wenn man die Hardware-UART verwenden will. Bei einer Software-UART lässt sich das Invertieren bereits im µC erledigen. Dort muss dann nurnoch auf der Rx- und Tx-Leitung der Strom begrenzt werden.
      ACHTUNG: Große Serienwiderstände führen zu schlechteren Signalen, zu kleine Serienwiderstände führen möglicherweise zur Zerstörung des µCs.
      Als Inverter (für Hardware-UART) bieten sich folgende Logik-ICs*** an: Dual oder Quad 2-Input-NAND Gates (z.B. HC00), Mehr-Port-Inverter (auch Schmitt) oder einzelne Single Inverter im kleinen SMD-Gehäuse (z.B. HC1GU04). Wenn man HC00 mit freien Gattern*** auf der Platine hat, kann man diese verwenden. Bei den NAND-Gates werden einfach beide NAND-Eingänge auf die gleiche Signalleitung gehängt. Bei Invertern ist die Beschaltung hoffentlich selbsterklärend ;)
      Man beachte: es werden zum. 2, besser 3 Widerstände benötigt. Bei THT erspart man sich also ggf. kaum oder garkeinen Platz, je nach IC, den man rumkugeln hat.

      Nun zu den Schaltungen:

      1. MAX232
      MAX232, MAX202, ADM232, ADM202, ... sind übrigens quasi das gleiche. In neuen Designs verwende ich, wie bereits oben erwähnt, 1µF 0805 MLCC. Der MAX232 ist bei uns im WSOIC (Wide SOIC). Bei THT rate ich zu 4µ7 Tantal-Kondensatoren, da diese kaum größer und teurer sind als 1µ Tantal und Tantal langsamer sind als MLCC. Den genauen Mindestwert kann man dem Datenblatt entnehmen. Viele bieten 0.1µF als Mindestwert an, was aber problematisch ist, wenn das andere "Ende" kurzzeitig einen höheren Strom ziehen will. Unterhalb von 1µF würde ich nicht nehmen.

      Da der MAX232 2 Receiver und 2 Transmitter besitzt, lassen sich entweder 2 RX-TX-Paare oder 1 RX-TX-Paar und 2 Steuerleitungen wandeln.
      Anm.: Die Steuerleitungen kommen aber heutzutage bei digitalen Systemen immer weniger zum Einsatz. Ein Einsatzbeispiel wäre z.B. dass ein serieller Drucker einen Puffer hat, der sich schneller befüllen lässt, als er drucken kann. Wenn nicht gerade etwas langsam verarbeitet wird, was aber schnell beginnen soll, kann man einfach die Baud-Rate (Bits pro Sekunde) so wählen, dass es zu keinem Datenstau kommt, was dann auch softwareseitig einfacher ist.

      Nun zur Beschaltung:
      Es empfielt sich auch bei größeren, nicht-polarisierten Kondensatoren ggf. trotzdem ELKO-Symbole zu verwenden, da man bei Prototypen ggf. andere (THT) Bauteile verwendet.

      C3 muss als Spannungsfestigkeit die Versorgungsspannung (5V, bzw. vlg. Datenblatt) haben.
      C1, C2, C4 und C5 das doppelte (d.h. 10V). Schritt 1: Spannung aufdoppeln: 5V -> 10V. Schritt 2: Spannung invertieren: 10V -> -10V. Die 10V werden nur unbelastet beinahe erreicht. Belastet sinkt die Spannung ein.
      Erfahrungsgemäß nimmt man einfach 5 gleiche Kondensatoren mit 16V oder mehr.
      R1 und R2 dienen lediglich zur Strom- und Flankenbegrenzung und sind eig. nicht zwingend notwendig, aber empfehlenswert.

      2. Inverter

      Bei Gattern sollte ein Stürzkondensator (üblicherweise 10nF) zwischen VCC und GND, möglichst nahe am IC sein.
      An R1 fällt die Spannungsdifferenz zwischen 12V und 5V bzw. -12V und 0V ab. Die 22kOhm sind ein Erfahrungswert. 47kOhm klappen auch, mehr hab ich nicht versucht. Berechnen lässt sich das mit der Eingangskapazität des Gatters und der gewünschten Anstiegs- und Abfalldauer.
      R2 dient dazu den offenen Eingang auf GND zu ziehen.
      R3 ist ein Widerstand um den Strom zu begrenzen. Wenn man dauerhafte Kurzschluss-/Verpolungsfestigkeit (vor allem +5V "gegen" -12V) haben will, muss man den Widerstand ggf. größer wählen (vgl. Datenblatt).

      3. NAND-Gatter
      Beschaltung: vgl. "Inverter". Einziger Unterschied ist, dass die Eingangskapazität doppelt so hoch ist, da es 2 Eingänge sind. 47kOhm für R1 klappen erfahrungsgemäß auch.


      Anm.:Bei Störanfälligkeit können Stützkondensatoren und kleinere Serienwiderstände Abhilfe schaffen.


      * MLCC: Multi Layer Ceramic Capacitor
      ** CMOS: ist eine Logik-Serie, die mit MOSFETs aufgebaut ist. Das ganze funktioniert Spannungsgesteuert, d.h. Strom fließt nur, wenn die FET-bedingten Kapazitäten umgeladen werden. vgl. Wikipedia.
      *** ein Logik-IC besteht aus einem oder mehreren Gattern. Ein Gatter führt dabei eine logische Operation aus (z.B. NAND: Out = NOT (In1 AND In2); Inverter: Out = NOT In)