Stromversorgung
Der TRNG wird aus einem konventionellen Netztrafo mit 9VAC Sekundärspannung und mindestens 100mA Belastbarkeit versorgt. Bestens geeignet sind die üblichen Steckernetzteile für analoge Modems und Anrufbeantworter (9V / 500-1000mA), weil solche Trafos gewöhnlich in kapazitätsarmer Zweikammerbauweise ausgelegt sind, sodass die kapazitive Kopplung ins Stromnetz nicht allzu stark ist. Auch ein konventionelles 12V-Gleichspannungsnetzteil kann verwendet werden. (Bitte kein Schaltnetzteil!)
Die Wechselspannung wird über eine diskret aufgebaute Graetz-Brücke, bestehend aus D1-D4 (1N4001) mit parallel geschalteten HF-Abblockkondensatoren C1-C4 (47nF) gleichgerichtet und im ersten Siebelko C5 (1000µF/25V) geglättet.
An dieser Stelle sollten bei Verwendung eines 9VAC-Netzteils etwa 12VDC (entsprechend der Sinus-Spitzenspannung), bei Verwendung eines 12VAC-Netzteils etwa 16VDC anstehen. C5 ist somit ein erster wichtiger Messpunkt, falls sich garnichts tut und auch die LED nicht leuchtet.
Die gesiebte Gleichspannung gelangt auf einen konventionellen Festspannungsregler VR1 (7805), der den Digitalteil mit stabilen 5V versorgt. An dieser Stelle kommt selbstverständlich
kein Schaltregler infrage, sondern nur ein
Linearregler, der von sich aus keine hochfrequenten Störungen verursacht! Daher bitte auch den Abblockkondensator C7 nicht vergessen, dieser verhindert eine Selbsterregung des Spannungsreglers.
Der Strombedarf des Digitalteils beträgt nur maximal 60 mA. Bis ca. 12...16V Eingangsgleichspannung beträgt die Verlustleistung nur etwa 0,3 Watt, und der Linearregler braucht definitiv keinen zusätzlichen Kühlkörper. Wer sich damit unwohl fühlt oder ein Netzteil mit höherer Nennspannung anschließen will, sollte ein Kühlblech vorsehen.
An die Betriebsspannung der Rauschquelle sind andere Forderungen zu stellen. Die Rauschquelle stabilisiert sich in weitem Betriebsspannungsbereich von selbst, ihre Betriebsspannung muss also keineswegs auf einen Festwert stabilisiert sein. Sie sollte aber besonders sauber und frei von Lastschwankungen des Digitalteils sein. Und natürlich muss die Betriebsspannung für die Rauschquelle mindestens 1V über der Nennspannung der verwendeten Z-Diode liegen, damit der Rauscheffekt genutzt werden kann. Da die Rauschquelle nur etwa 1mA Betriebsstrom benötigt, reicht ein klassisches RC-Siebglied, bestehend aus R2 (2k2) und C6 (1000µF) vollkommen aus, um aus der eventuell noch leicht verbrummten Rohspannung an C5 eine hochreine Gleichspannung in Batteriequalität zu machen.
Radikale Idee - Batterie statt Netzteil?Alles in einen Metallkasten verfrachten und diesen noch besser von der Außenwelt abschirmen, zum Beispiel mit Bleiplatten gegen die Röntgen- und Gamma-Hintergrundstrahlung? Kann man machen...
Meiner Meinung nach spricht erst einmal nichts dagegen, außer vielleicht der Strombedarf der LSTTL-Bausteine. Inzwischen hat sich leider heraus kristallisiert, dass 74HC-Bausteine in dieser Anwendung doch keine vollwertige Alternative zu LSTTL-Bausteinen sind. Man müsste also schon einen kleinen Bleiakku oder eine etwas größere Lithiumbatterie verwenden.
Und immer schön den Ladezustand im Auge behalten! Ich selbst habe mal mit einem 12V-Pack aus Alkali-Batterien experimentiert. Wichtigste Erkenntnis: Wenn man vergisst, das Gerät bei Nichtbenutzung auszuschalten, dann kann es vorkommen, dass man Stunden später immernoch Daten geliefert bekommt, die aber nur noch aus den Werten $00 oder $FF bestehen. Was war passiert - die Rauschquelle hatte ihren Dienst versagt, weil die Batteriespannung bereits die Zenerspannung unterschritten hatte, aber es war noch genügend Saft für den Logikteil, dessen Betriebsspannung ja zusätzlich stabilisiert ist.
Mein Vorschlag für einen Akkubetrieb inklusive ultrasimpler Ladeschaltung, ohne Layout-Änderungen:
Der Pfad vom Pluspol der Gleichrichterbrücke zu C5 und VR1 ist aufzutrennen und an dieser Stelle ein einpoliger Umschalter einzusetzen. Der Pluspol des Akku-Packs wird über diesen Umschalter entweder auf den Pluspol des Gleichrichters oder auf C5/VR1 geschaltet. (Minuspol mit GND verbunden). In den Wechselstrompfad X1 sollte noch ein für den gewünschten Ladestrom dimensionierter Vorwiderstand eingebaut werden. Man könnte dann mit einem Wechsel- oder Gleichspannungsnetzteil den Akku laden, ODER den XR232 mit absolut reinem Gleichstrom betreiben.Rauschquelle
Die gegenwärtige Version der Rauschquelle (im Schaltbild mit "X" bezeichnete Komponenten) beruht auf einer Kleinleistungs-Z-Diode 9V1 (z.B. Standardtyp C9V1, Philips) und zwei bipolaren NPN-Transistoren (Standardtyp BC547B/C).
Die "Rauschdiode" XZD liegt gleichstrommäßig im Gegenkopplungszweig der konventionellen Emitterschaltung aus XVT1/XR1/XR2. Bei ausreichend hoher Betriebsspannung stabilisieren sich die Arbeitspunkte von Transistor und Diode automatisch im Bereich der Z-Spannung (genau genommen im Kennlinienknick derselben plus Spannungsabfall an der B-E-Strecke des Transistors). Dadurch stellt sich immer der optimale Arbeitspunkt für den "Rauschbetrieb" ein und die Schaltung wird vollkommen abgleichfrei. Nebenbei wird sie in gewissem Umfang gegen Spannungsschwankungen und Temperaturdrift unempfindlich.
Die Kathode von XZD liegt über XC1 wechselstrommäßig direkt auf Schaltungsmasse / Emitterpotenzial von XVT1.
Das dem Diodenstrom überlagerte Rauschen gelangt praktisch ungedämpft auf die Basis von XVT1 und wird von diesem, noch annähernd linear, um etwa den Faktor 250 verstärkt. Am Kollektor steht bereits ein Nutzsignal in der Größenordnung von 1V
SS.
Über XC2 wird der Wechselstromanteil dieses Signals augekoppelt und auf die zweite Stufe mit XVT2/XR3 gegeben. Sie hebt das Signal bis in die Begrenzung an. Der Kollektor von XVT2 liefert (über den externen Pullup-Widerstand R3) ein digitales Rauschen mit gut lesbaren TTL-Pegeln.
Balancierung
Das digitalisierte Rauschen geht auf den Takteingang des als Frequenzteiler arbeitenden ersten Flipflops von IC3a (74LS74, Pin 3).
Als digitales Balancierungsverfahren ist die Frequenzteilung in ihrer Effizienz vergleichbar mit der XOR- oder Von-Neumann-Verknüpfung aufeinander folgender Bits: Am Ausgang steht ein nahezu perfekt ausgeglichenes digitales Zufalls-Rauschen. Auch hierbei geht die Hälfte der ursprünglichen Bandbreite verloren, was wir uns in diesem Fall aber durchaus leisten können.
Aus dem balancierten aber nach wie vor asynchronen Roh-Datenstrom holt sich der angeschlossene Computer per digitalem Sample-and-Hold (D-Flipflop in IC3) seine Zufallsbits mit der jeweils benötigten seriellen Abtastrate.
Taktgewinnung
Zur Gewinnung des Sampling-Taktes und zur Steuerung der Logik für die Erzeugung von Start-/Stoppbits wird das vom Rechner kommende TxD-Signal (X2b) konsequent bipolar ausgewertet. So können die Flankenwechsel auch unter schwierigeren Bedingungen (lange Leitung, schwache Leitungstreiber) besonders sicher regeneriert werden. Voraussetzung ist natürlich, dass die Schnittstelle einigermaßen normgerechte und vor allem bipolare Spannungspegel liefert.
TxD steuert, je nach Polarität, entweder die Sende-LED in PC1 oder diejenige in PC2 durch. Die Phototransistoren auf TTL-Seite ziehen abwechselnd die Eingänge von zweien als R/S-Flipflop verschalteten NAND-Gatter in IC1c/d (74LS00) auf Massepotenzial. An den Ausgängen (Pins 8 und 11) dieser bistabilen Kippschaltung findet man ein sauber regeneriertes und flankensteiles TxD-Signal mit TTL-Pegeln.
Mit Hilfe eines Wired-AND (D5/D6, Pullup R5) werden beide Ausgänge des RS-FF kombiniert, um aus jedem Flankenwechsel einen kurzen positiven Impuls zu gewinnen. Sendet der Computer über TxD ein Taktzeichen (0-10101010-1), so liefert die Auswertung der Flankenwechsel genau 10 Impulse im Zeitraster der aktuell verwendeten Baudrate. Damit hat der Zufallsgenerator alles, was er braucht, um eigene serielle Zeichen zu generieren.
Modifikationen von Schaltungsversion 2.0 zu 2.1:
Von der Taktregenerierung hängt die gesamte weitere Funktion der Schaltung ab.
Beide Modifikationen für "Version 2.1" verbessern die Kompatibilität mit bestimmten Untergruppen innerhalb der 74LS-Familie und mit grenzwertigen Optokopplern. Die Schaltung an sich wird nicht verändert, die Platinenlayouts entsprechen weiterhin der Version 2.0.
Schottky-Dioden für D5-D10:
Für D5/D6 sollten auf TTL-Seite ausschließlich Schottky-Dioden vom Typ BAT42 oder BAT46 verwendet werden. Diese haben eine niedrigere Flussspannung, als Siliziumdioden, sodass das digitale Zusammenspiel von IC1 und IC3 (Nadelimpulse für den Bitzellen-Takt) auch bei höheren Baudraten einwandfrei im Rahmen der zulässigen Low-Pegel abläuft.
Verwendet man auf RS232-Seite ebenfalls Schottky-Dioden, dann lässt sich der Spannungshub für RS232-Signale um knapp 1 Volt anheben, was an schwachen Schnittstellen schon den Unterschied zwischen "geht nicht" und "geht gut" bedeuten kann.
Ausschließliche Verwendung von CNY17-2 für PC1-4 und Erhöhen von R8/R9 von 2,2 kOhm auf 4,7 kOhm:
Wenn als Optokoppler ausschließlich CNY17-2 verwendet werden (was ich empfehle), dann können die Pullup-Widerstände R8/R9 ruhig auf 3k3 oder 4k7 vergrößert werden. Das gelieferte Signal wird dann etwas steiler, was bei einer seltsamen Variante des 74LS00 die saubere Taktregenerierung bei hohen Baudraten tatsächlich retten konnte. (Aber auch hier gilt: Never touch a running system! Wenn's bisher einwandfrei funktioniert hat, muss nichts geändert werden!)
Zufalls-Bitsampling
Die aus TxD abgeleiteten Taktimpulse gehen direkt auf den Takteingang des zweiten D-FF in IC3b (Pin 11). Es speichert den zum Abtastzeitpunkt vorliegenden Logikpegel bis zum nächsten Takt. An den Q-Ausgängen stehen nun serielle Bits, die bereits genau dem Zeitraster der aktuell eingestellten Baudrate entsprechen. Zum normgerechten RS232-Datenstrom fehlen allerdings noch zwei Kleinigkeiten...
Generierung der Start- und Stoppbits
Im fortlaufenden Zufalls-Bitstrom müssen an den richtigen Stellen Start- und Stoppbits vorliegen. Dazu müssen die über TxD gelieferten Taktimpulse abgezählt werden. Diese Aufgabe übernimmt IC2 (Dezimalzähler 74LS90). Er liefert im Abstand von 10 Takten an seinem Ausgang Qd (Pin 11) ein 2 Takte breites Zeitfenster, in dem je ein Stopp- und ein Startbit eingefügt werden. (Anmerkung: Nur die fallenden Flanken triggern den Zähler, daher muss man auch nur das Teilersystem "durch 5" für diesen Zweck benutzen.)
Durch Verknüpfung von TxD-TTL mit Qd und zeitnahes Setzen der R/S-Eingänge von IC3a/b über Verzögerungsglieder (R4/C9, R6/C10) erreicht man, dass das 1.Bit grundsätzlich LOW-Pegel ("Startbit") bekommt, während als 10.Bit immer ein HIGH-Pegel ("Stoppbit") gesetzt wird. Dieses Verfahren funktioniert unabhängig von der aktuellen Baudrate, da die Verzögerungsglieder lediglich ein paar unkritische Vorher-Nachher-Bedingung gewährleisten müssen. Die Zeitglieder haben auch praktisch keinen nennenswerten Einfluss auf die tatsächliche Bitdauer der Start- und Stoppbits; diese wird ausschließlich durch das aus TxD gewonnene Zeitraster (IC3, Pin 11) bestimmt. Mehr als tausend Worte sagt hoffentlich das
Timingdiagramm!
Das beschriebene Verfahren zur Erzeugung serieller Zeichen funktioniert optimal, wenn der Bitzähler mit dem Sendetakt "synchronisiert" wurde, d.h. wenn Start- und Stoppbits der zurückgelieferten Zeichen immer deckungsgleich mit den vom UART gesendeten Zeichen sind. In diesem Fall wird jedes über RxD zurückgelieferte Zeichen ein gültiges serielles Zeichen sein, es können keine "Framing-Errors" entstehen. Dann ist es auch vollkommen egal, wie unregelmäßig die Zeichen über TxD ausgegeben werden, da der UART selbstverständlich immer nur vollständige Zeichen sendet.
Dass die Start- und Stoppbits immer deckungsgleich sind, kann man bei Verwendung eines Zählers sicherstellen, indem der Zähler zu Beginn der Übertragung einen entsprechenden RESET-Impuls erhält. Genau genommen ist es hier der "SET"-Eingang, denn der Zähler soll, wie auch im Timingdiagramm zu sehen, am Beginn der Übertragung auf "5" stehen.
Dieses Setzen des Zählers wird in der vorliegenden Schaltungsversion durch einen weiteren Optokoppler bewerkstelligt. Er wird durch die Schnittstellenleitung DTR gesteuert (Anschlussvariante 1, siehe weiter unten), und zwar so, dass der Set-Eingang des Zählers erst mit dem regulären Öffnen der Schnittstelle freigegeben wird. Auf diese Weise ist sichergestellt, dass der XR232 keinen Mucks von sich gibt, solange die Schnittstelle nicht regulär geöffnet ist, weil der Zähler zu diesem Zeitpunkt an seinem Set-Eingang dauerhaft HIGH ist - erst wenn die RS232-konforme Übertragung beginnt, wird der Zähler freigegeben, indem der Optokoppler den Set-Eingang auf LOW zieht. Jetzt steht der Zähler richtig und ist bereit, Taktimpulse zu zählen, sodass der XR232 bereits für das erste über TxD reinkommende Taktzeichen ein gültiges Zufallszeichen zurückliefert. Eine relativ zeitaufwändige Synchronisationsprozedur ist mit der Schaltung ab Version 2.x also nicht mehr notwendig.
Schnittstellen-Ankopplung
Die Verbindung zur computerseitigen RS232-Schnittstelle erfolgt aus den bereits genannten Gründen der Störsicherheit über Optokoppler.
Wegen der hohen Anforderungen an die Integrität der Signale wird mit echten bipolaren RS232-Pegeln gearbeitet, sodass für TxD und RxD je zwei Optokoppler benötigt werden. Es kommt eine abgewandelte Form der "Potenzialfreien Pegelwandlung für die RS232-Schnittstelle" [6] zum Einsatz.
Über einen weiteren Optokopper wird der Pegelwechsel auf der Statusleitung DTR (oder RTS) auf die Logikseite übernommen und sorgt dort für einen definierten Stand des Taktzählers, sobald die Schnittstelle geöffnet wird. Da man bei DTR (oder RTS) keine sehr schnellen Pegelwechsel auswerten muss, reicht für PC5 ein billiger Standard-Optokoppler (z.B. PC817).
Wenn die Dioden D7-D10 als Schottky-Dioden ausgeführt werden, gewinnt man insgesamt fast 1 Volt mehr Spannungshub für die RS232-Signale. Diese Maßnahme könnte zur verbesserten Betriebssicherheit beitragen, wenn der Zufallsgenerator an einer eher schwachen Schnittstelle betrieben wird.