Kondensator im RS232-Pegelumsetzer. Die Daten sind streng halbduplex

Geben Sie hier die Bildbeschreibung ein

Ich habe einen Level Shifter erstellt, der dem Schema sehr ähnlich ist unter: http://picprojects.org.uk/projects/simpleSIO/ssio.htm mit Ausnahme des Kondensators, den ich 47nF verwende, weil die Seite behauptet:

Bei hohen Bitraten kann der 100-nF-Kondensator dazu führen, dass das Signal so stark verzerrt wird, dass es nicht korrekt empfangen werden kann. Versuchen Sie in diesem Fall, den 100-nF-Kondensator durch einen 47-nF- oder sogar 22-nF-Kondensator zu ersetzen. Wenn die Kommunikation ausschließlich halbduplex ist, benötigen Sie den Kondensator möglicherweise überhaupt nicht.

Aber es wird nicht erwähnt, welcher Kondensatorwert am besten ist oder warum.

Dann sehe ich das:

Wenn der Host viele Nulldaten in einem Stream überträgt, entlädt sich der Kondensator, da bei RS232 Nullbits als positive Spannung und Einsen als negative Spannung gesendet werden. Da die Schaltung die negative Spannung benötigt, um den Kondensator aufzuladen, führt dies auch zu Problemen bei der Datenübertragung zurück zum Host.

Dies deutet darauf hin, dass ich einen größeren Kondensator benötige, den viele andere Schaltungen verwenden.

Idealerweise möchte ich Daten halbduplex mit 115200bps austauschen, da ich später Funkmodule verwende, die meine Daten auf halbduplex beschränken.

Was soll ich machen? Soll ich den Kondensator entfernen? seinen Wert ändern? oder meine Baudrate senken? und nein, ich möchte nicht meine gesamte Schaltung in den Mülleimer werfen, nur um sie auf dem max232-Chip zu wiederholen. Ich habe keine davon und sie sind nicht billig.

Sie könnten dies auch lösen, indem Sie ein Protokoll verwenden, das 50 % Nullen überträgt
@Mike: Warum hast du den Schaltplan nicht eingebunden? Je einfacher Sie es Ihren Lesern machen, desto größer sind Ihre Chancen, gute Antworten zu erhalten. Fest.
Wenn ich 50% Nullen mache, würde das die Mikrocontroller-CPUs belasten, an denen diese angeschlossen sind, da sie die Daten umwandeln müssen und die Geschwindigkeit bestenfalls halbiert wird.
Ehrlich gesagt, tun Sie sich selbst einen Gefallen und verwenden Sie einen MAX3232 und vergessen Sie dieses beschissene Hack-Schema.

Antworten (1)

Es ist wahrscheinlich einfacher, Ihre Schaltung zu verstehen, wenn sie etwas anders gezeichnet wird:

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Nun ist leicht zu erkennen, dass drei unterschiedliche Funktionen ausgeführt werden.

  1. Kommunikationsschaltung von PIC zu DB9.
  2. Kommunikationsschaltung, die von DB9 zu PIC geht.
  3. Schaltung zur Erzeugung einer negativen Stromversorgungsschiene.

Die obere Schaltung muss mit RS-232-Spannungswerten an die DB9-Schnittstelle übertragen. Dazu benötigt es sowohl positive als auch negative Spannungsschienen. Aber nominell benötigt Ihr PIC nur eine positive Schiene. Es wird also etwas Zusätzliches benötigt, um die negative Schiene herzustellen.

Der untere Schaltkreis muss von der DB9-Schnittstelle unter Verwendung von RS-232-Spannungspegeln empfangen. Dies ist jedoch viel einfacher zu handhaben und es ist keine negative Versorgungsschiene für diese Teilschaltung erforderlich.

Die negative Versorgungsschiene wurde unter der Annahme entwickelt , dass Ihre DB9-Schnittstelle an ein echtes RS-232-Gerät angeschlossen ist. Normalerweise ist der DB9 TxD „MARK“-Wert eine negative Spannung – irgendwo dazwischen 3 v Und 15 v . (Hoffentlich kratzt man mit einer Größenordnung nicht einfach vorbei.) Da der DB9 gelegentlich ein "MARK" (Stoppbit, mindestens einmal pro Byte) erzeugen muss, wird es immer einen Moment lang Zugriff auf diese Spannung geben die Periode jedes Zeichens. Diode D 1 lässt diese negative Spannung durch und lädt sich auf C 1 auf eine negative Spannung. Dies kann dann von der ersten Schaltung (der PIC-TxD-Schaltung) verwendet werden, um gültige negative Spannungswerte zu erzeugen, ohne Sie zu zwingen, Ihrem PIC eine Stromversorgung mit negativer Spannung hinzuzufügen. Es "stiehlt" stattdessen die negative Versorgung von der DB9-Verbindung.

Dies ist ein ernsthafter "Betrug". Und es kann nicht immer unter allen Umständen gut funktionieren. Der Dateninhalt selbst, den Sie am PIC empfangen, beeinflusst, wie gut es funktioniert, wenn der PIC sendet. Deshalb gibt es hier eine Art Balanceakt. Wenn der Kondensator zu groß ist, dauert das Aufladen einige Zeit und die MARK des Stoppbits (und/oder einige Daten-MARK-Werte) reichen möglicherweise nicht aus, um es schnell genug aufzuladen. Wenn der Kondensator zu klein ist, entlädt er sich viel zu schnell, wenn der PIC MARKs an den DB9 überträgt.

Es gibt keine Garantie dafür, dass diese Schaltung immer unter allen Umständen funktioniert. Der DB9 TxD-Treiber erwartet eine Ladung dazwischen 3 k Ω Und 7 k Ω , Erinnerung dient. Und nicht eine Belastung eines Kondensators durch eine Diode! Die PIC-RxD-Schaltung lädt die Dinge auch bereits so herunter, wie sie sind. Die Schaltung macht also einige ernsthafte Annahmen über die Ausgangsimpedanz der DB9 TxD-Treiberschaltung.


Diese Art von Schaltung ist sicherer in Situationen zu verwenden, in denen Sie a priori Wissen über die Länge und die Intervalle zwischen den Verzögerungen zwischen Übertragungen vom DB9 zu Ihnen haben. Dies liegt daran, dass sich die DB9 TxD-Leitung während der Zeit zwischen den Übertragungen im MARK-Zustand befindet und Ihren Kondensator versorgt. Je höher der Prozentsatz der Zeit ist, die die DB9 TxD-Leitung im MARK-Zustand bleibt, konsistent auch, dass es nicht zu lange Verzögerungen dazwischen gibt, desto sicherer sind Sie, dass der Kondensator ausreichend gut für die Übertragung aufgeladen ist andere Richtung. Und dies ermöglicht Ihnen möglicherweise auch die Verwendung größerer Kondensatoren, die es Ihnen dann ermöglichen, Daten in die andere Richtung für längere Zeiträume (oder mit mehr Inhalten mit Null-Bit-Werten) zu übertragen.


Die Schaltung ist ein Hack, den ich zum ersten Mal in den 1970er Jahren gesehen habe, als Mikrocontroller zum ersten Mal in die breite Öffentlichkeit eingeführt wurden und RS-232 weit verbreitet war. Wir hatten genau zwei gemeinsame Chips für RS-232, den MC1488 und den MC1489 (Jim Thompson ist schuld an diesen brennenden HEIßEN Stromfressern -- siehe: Analog Innovations (jetzt auf der WayBack-Maschine)) und sie erforderten separate Stromversorgungsschienen. All dies kostet Geld, Platz, Zeit und so weiter. Ein Hack wie dieser war also fast ein Kinderspiel, da die Übertragungsraten damals weitaus typischer um 300 bps und fast nie so hoch wie 9600 bps waren. (Die 9600-bps-Kommunikation war ziemlich für sehr teure Bell-Telefongeräte reserviert, zu denen nur wenige von uns Zugang hatten.) Dies liegt daran, dass wir normalerweise RS-232 zur Kommunikation zwischen einem Terminal (ASR-33, Diablo 1600 usw.) und verwendet haben ein Modem. Nicht zwischen zwei benachbarten Mikros. Die Geschwindigkeit von RS-232 wuchs schnell, als die neueren, billigeren "Glasterminals" zum Einsatz kamen (z. B. das von mir gebaute ADM-3A-Kit), bei denen höhere Geschwindigkeiten nützlich waren. Aber selbst dann,

Die Geschwindigkeiten stiegen jedoch Anfang bis Mitte der 1980er Jahre rapide an. Und der Hack blieb hängen. Aber ich denke, Sie peitschen ein schwaches Pferd ziemlich hart aus, und es ist jetzt weit über sein Code-Datum hinaus. Es gibt zu viele andere gute Optionen zur Auswahl, die wir damals NICHT hatten. Damals waren die Tarife (meistens) niedrig genug und die Optionen gering (keine billigen Schalter, keine MAX232 usw.) und die erforderliche Leistung und Verlustleistung auch so viel höher, dass es von Zeit zu Zeit gerechtfertigt werden konnte. Aber heute sind die Geschwindigkeiten so viel höher und die Zahl der wirklich guten Entscheidungen so viel größer, dass mir kein guter Grund mehr einfällt, diese alte Technik zu verwenden.


Schlussbemerkungen. Ein weiterer Trick bei all dem besteht darin, wenn Sie Zugriff darauf haben, eine andere RS-232-Signalausgangsleitung am DB9 als TxD zu verwenden. Beispielsweise gibt es vier gemeinsame Signale namens DTR, DSR, RTS und CTS. (Es gibt noch zwei weitere, RI und DCD, aber das sind mehr Modem-erforderliche Dinge und weniger wahrscheinlich.) Wenn Sie feststellen können, ob eine dieser Leitungen Ausgänge an Ihrer RS-232-Schnittstelle sind, und sicherstellen können, dass sie hineingehen und bleiben den MARK-Zustand, dann können Sie eine davon als negative Schiene verwenden (oder sie verwenden, um diesen Kondensator aufzuladen). Dies könnte also eine weitere Option sein, die Sie in Betracht ziehen sollten.

Oh ok, aber gibt es eine Gleichung, mit der ich den besten Kondensatorwert bestimmen kann?
@Mike Nein, gibt es nicht, weil Sie nicht über die erforderlichen Informationen über das andere Ende der DB9 TxD-Fahrschaltung verfügen. Wenn Sie davon ausgehen, dass es sich um einen Ausgang ohne Impedanz handelt, würde sich der Kondensator fast sofort mit nur einem einzigen Stoppbit aufladen, und Sie würden einfach den größten Kondensator verwenden, den Sie wollten, und fertig. Es würde sich mit dem ersten MARK aufladen und nie entladen, weil es ein so großer Kondensator war. Der Grund, warum Sie es nicht mit einer Gleichung dimensionieren können, ist, dass Sie die übertragenen Daten und die Schaltung nicht kennen. Es ist ein Balanceakt ohne Sicherheitsnetz.
@Mike Wenn Sie den Kommunikationsinhalt steuern können, beispielsweise wenn Sie sicherstellen können, dass bestimmte Daten mit bestimmten Werten in bestimmten Intervallen an Sie übertragen werden (oder wenn Sie bestimmte "Totzeiten" zwischen Übertragungen sicherstellen können), kann eine Gleichung angenähert werden Treffen Sie einige begründete Annahmen über den Treiber zusammen mit Worst-Case-Annahmen über die Daten, die Sie an den DB9 übertragen (vielleicht).
@Mike Aber lassen Sie mich in diesem Punkt absolut klar sein: Die Schaltung funktioniert ÜBERHAUPT NICHT, wenn Sie den Kondensator entfernen. Da hast du also keine Wahl.
@mike Ich habe meiner Antwort eine letzte Anmerkung hinzugefügt, die in Ihrem Fall hilfreich sein kann - je nachdem, was genau an den DB9 angeschlossen ist.
Ok ja, ich habe die Kontrolle über die zu sendenden Daten. Würde es mir helfen, wenn ich jedes zweite Datenbyte nur hoch oder tief machen würde (Beispiel: ffh oder 00h) oder wenn ich abwechselnde Werte in Bits für das zweite Byte verwenden würde (Beispielwerte: a5h oder 5ah)?
Oh, ich habe gerade deine Antwort gelesen. Ich werde versuchen, jedes zweite Datenbyte zu einem speziellen Byte zu machen, damit der Kondensator funktioniert, und wenn das funktioniert, kann ich mindestens 56k Geschwindigkeit über 115k Baud erreichen
@Mike Das ist ein Ansatz zum Ausprobieren. Wenn Sie die Kontrolle darüber haben, können Sie dies wahrscheinlich zum Laufen bringen.
ok, lassen Sie mich versuchen zu verstehen ... Wenn ich den Kondensator durch einen Kondensator mit großem Wert ersetze, verzögere ich die Übertragung vom PC (sende alle MARKS) um RC (Zeit definiert durch Widerstandskondensator) Sekunden nach dem Senden von irgendetwas dann dem Mikro hat nur RC Sekunden an den PC zu übertragen nur wenn der PC Leerzeichen statt Markierungen sendet? (Entschuldigung, ich versuche, eine Gleichung zu finden)
@Mike Wenn Sie einen großen Kondensator verwenden und ihm Zeit geben, sich vollständig aufzuladen, bevor Sie mit der Kommunikation in beide Richtungen beginnen, sollten Sie diese Spannung problemlos mit einem Messgerät messen und feststellen können, dass die von Ihnen zugelassene Zeit ausreicht. Sie können das für jeden Kondensator Ihrer Wahl herausfinden, indem Sie einfach zuschauen und sehen. Und wenn Sie einen ausreichend großen Kondensator verwenden und Zeit und Messwerte von Ihrem Messgerät aufschreiben möchten, können Sie sogar den Quellenwiderstand dessen ermitteln, woran Sie angeschlossen sind.
@Mike Auf jeden Fall ist es möglich, mit Experimenten und der Messung der Ergebnisse eine Strategie für jeden Kondensator (ich meine, einen, der nicht zu klein ist, um auch nur die Übertragung eines Bytes zu bewältigen) und ein DB9-Gerät auszuarbeiten du verbindest dich. Beachten Sie, dass dies für verschiedene DB9-Geräte, die Sie verwenden, unterschiedlich sein kann. Sie könnten mehrere verwenden und eine Strategie finden, die für alle funktioniert. Aber das braucht natürlich Zeit und Maß. Ein Zielfernrohr würde hier helfen, und es gibt SEHR billige (15-20 US-Dollar) "Zielfernrohre", die für diese Arbeit gut genug wären.