Uhr "Morpheus"



Die Röhre

D7-16 GJ


Als Röhre habe ich mich für die D7-16 GJ entschieden, D7-16 was unterschiedliche Gründe hat: Sowohl die Röhre als auch ihr Datenblatt sind leicht zu beschaffen; die D7-16 hat eine schön kurze Bauform (≈16cm), ist preiswert, einfach anzusteuern und begnügt sich mit einer Anodenspannung von nur 800 Volt. Die Nachleuchtdauer "mittel" des GJ-Schirms ist weder zu kurz noch zu lange und passt zur geplanten Anwendung mit einer Bildwiederholrate von 30...40 Bilder pro Sekunde.

Zudem lässt das ursprüngliche Einsatzfeld der Röhre darauf schliessen, daß sie vergleichsweise robust ist — wichtig, wenn ein Bastler Hand anlegt... Verwendung fand die D7-16 GJ in Datensichtgeräten der Bundeswehr. Vermutlich wurde sie in großen Stückzahlen als Ersatzteil eingelagert und ist daher gut als Neuware zu bekommen. Als Preis kann man ca. 20€ rechnen, der Beschaffungspreis für die BW lag einstmals angeblich bei über 300 DM. Gekauft habe ich bei Flick Elektronik, wo je nach Angebotslage Neuware und/oder Altröhren, Fassungen aus alten BW-Geräten sowie Schirmungen aus MU-Metall verfügbar sind.


Die Röhren-Fassung

mit PWM-Spannungssteller für Ohm'sche Last


Für Fassung mit Einzelkontakten FAS901 meine D7-16 konnte ich keine passende Fassung finden, daher habe ich eine kleine Platine entworfen. Zum Bau der Fassung eignen sich 11 der Einzelkontakte FAS901 sehr gut, die man bei Jan Wüsten bekommt. Die Platine enthält einen integriertem Spannungssteller, der für eine gleichbleibende und langsam anfahrende Heisspannung sorgt.

Für die Heizung der Kathode der D7-16 wird eine Spannung von 6.3 Volt benötigt. Die verwendete Spannungsquelle ist nicht geregelt, liefert also eine Spannung, die über 6.3 Volt liegen kann. Die Röhren soll jedoch weder unter- noch überheizt werden, damit sie keinen Schaden nimmt und möglichst lange lebt.

Ein Röhrenfassung mit PWM-Steller Linearregler wäre die einfachste Lösung für diese Aufgabe, hätte jedoch den Nachteil, daß die Leistungsdifferenz zwischen Eingangsleistung (zB 12V·90mA) und Ausgangsleistung (zB 6.3V·85mA) in Wärme umgewandelt wird. Das wäre sehr ungünstig, weil die Heizspannung auf Kathodenpotential bei ca. -600 Volt liegt und mühsam über eine Drossel übertragen werden muss.

Der PWM-Spannungssteller hat diesen Nachteil nicht. Durch schnelles Ein- und Ausschalten der Eingangsspannung (PWM) wird die Röhrenheizung immer mit einer Effektivspannung von 6.3 Volt versorgt. Am Schalttransistor entsteht praktisch keine Verlustleistung, und der als PWM-Controller eingesetzte AVR ATtiny25 ist mit 2 mA zufrieden.

Die Schaltung ist in die Röhrenfassung integriert und erledigt die Aufgabe mit minimaler Verlustleistung. Zudem ermöglicht sie ein langsames Anheizen der Röhre, falls gewünscht. Mit einem Jumper kann der Spannungssteller überbrückt werden, wodurch die Heizspannung ±UB dann unbeeinflusst zugeführt wird.

Der Effektivwert der erzeugten Spannung soll der Nennspannung des Verbrauchers entsprechen. Weil in beiden Fällen die gleiche Leistung ausgenommen werden soll – was auch bedeutet, daß die Temperatur und damit der Widerstand der Heizwendel gleich bleiben soll – muss gelten: Schaltplan PWM-Steller
t_on*(U_in-U_Tr)^2 = (t_on+t_off)*U_eff^2
Dabei bezeichnet UTr die Spannung, die am Schalttransistor abfällt. Damit gilt für das Tastverhältnis δ (duty cycle) der PWM:
duty = t_on/(t_on+t_off) = (U_eff/(U_in-U_Tr))^2
Die mittlere Spannung an der Last, wie man sie zum Beispiel mit einem Voltmeter angezeigt bekommt, ist
U_quer = U_eff^2 / (U_in-U_Tr)
Je höher die Eingangsspannung, desto kleiner ist also die Spannung, die ein Voltmeter (auf "Gleich­spannung" bzw. "DC" eingestellt) anzeigt!

Beispiel

Die Heizung mit der Nennspannung von 6.3V soll an 10 Volt betrieben werden. Als Schalter dient ein npn-Transistor: BC517. Es ergibt sich δ = 0.46 = 46%, und ein DC-Voltmeter zeigt eine Spannung von ca. 4.25 Volt an. Bei der Rechnung wurde ein Spannungsabfall von 0.7 Volt über der Collector-Emitter-Strecke des Transistors angenommen.

Download

Projekt als zip-Archiv (2009-01-18, 75 kByte)

  • C-Quelle (avr-gcc) + Makefile
  • hex- und elf-Datei
  • Schaltplan, Layout für eagle

Inzwischen wird die Heizungsplatine über einen kleinen Blocktrafo versorgt, also nicht wie urspünglich geplant über einen Aufwärtswandler. Der Spannungssteller bleibt aber weiterhin im Einsatz, auch wenn sich die Spannung und das Anheizen etwas einfacher über einen Linearregler und eine analoge Power-Up Schaltung realisierbar wären.


Die Hauptplatine

nach der ScopeClock von Sascha Ittner


Im Hauptplatine Internet habe ich Sascha Ittners ScopeClock mit D7-16 und Atmel-Controller gefundene, von der ich die Ansteuerung der Ablank­platten übernommen habe. Meine Platine enthält jedoch zwei wesentliche Änderungen:

Schaltplan Hauptplatine 1/2

Zum einen ist der Mikrocontroller kein Atmel AT89C4051, wie er auch in meiner Baumann-Uhr zum Einsatz kommt, sondern ein etwas leistungs­fähigerer Atmel AVR ATmega168, der sich mit avr-gcc bequem in C programmieren lässt.

Zum anderen sind auf der Haupt­platine keine Netzteile; weder für die Nieder­spannung- noch für Hoch­spannungs-Versorgung. Die Netz­teile für die verschiedenen Spannungen sind weitere Teil­projekte.


Schaltplan Hauptplatine 2/2

Der µC ist mit 24 MHz leicht übertaktet, was bei Raum­temperatur und satter Spannungs­versorgung absolut kein Problem ist. Er funktioniert einwandfrei und zeigt keine Erwärmung.

Weitere, kleine Erweiterungen sind ein Infrarot-Empfänger zur Bedienung über eine handels­übliche IR-Fern­bedienung, eine UART-Schnitt­stelle zu Kommuni­kation mit den PC und ein kleiner Piezo-Beeper, der bei Snake zum Einsatz kommt, hier zu hören in einem youtube-Video.

Insgesamt sind die Bauteile etwas dichter arrangiert damit die Platine nicht größer wird als 100 cm2. Sie ist ca. 11 cm × 8.5 cm groß und zweiseitig geroutet.

Wichtiger Hinweis:
Der Steckverbinder zum Anschluss der Röhre hat eine andere Belegung als bei Sascha Ittners Uhr!



Die Netzteile

für die Niederspannung


Die NV-Netzteile auf Steckbrett Netzteile bestehen eingansseitig aus kleine Blocktrafos, die primärseitig an 230 V~ Netzspannung angeschlossen sind. Aus den Niederspannungen speisen sich

  • 5 V für den Controller, TSOP, etc
  • ±12 V= für den D/A-Wandler und die Ansteuerung der Ablenk-Transistoren
  • ca. 8 V als ±UB für den Spannungssteller in der Fassung und damit letztendlich für die Röhrenheizung
  • 12 V für die HV-Netzteile

Die Netzteile sind noch Baustelle und erst im fliegenden Aufbau.


Die Netzteile

für die Hochspannungen


Die HV-Netzteile auf Steckbrett beiden Hochspannungs-Netzteile habe ich als Aufwärtswandler umgesetzt, die mit 12 Volt Gleichspannung aus dem Niederspannungs-Netzteil versorgt werden. Die 12 Volt können über den ATmega168 durch einen P-FET abgeschaltet werden. Beim Einschalten und kalter Röhre wird die Hochspannung erst nach 10 Sekunden Anheizzeit aktiviert.

Aus diesen 12 Volt werden drei weitere Spannungen erzeugt:

  • 5 V für einen µC, der als Schaltregler für die -600 V fungiert
  • -600 V bis -900 V Kathodenspannung aus Schaltnetzteil mit AVR ATtiny25 als SMPS-Controller
  • +200 V bis +300 V Anodenspannung aus Schaltnetzteil mit MC34063 als SMPS-Controller

Die Schaltnetzteile sind voltage boostet boost converter mit selbst geklöppelten Drosseln auf E-Kernen.

Die Netzteile sind noch Baustelle und erst im fliegenden Aufbau.


Die Software

in C für avr-gcc


Ebenfalls Baustelle ist die Software. .

Zurzeit Snake: Level 3, Frame 300 hab ich Spaß mit Snake :-) Zum Rumprobieren gibt's auch eine PC-Version zum selber compilieren. Die PC-Version kann einzelne Frames als PPM-Grafik erstellen. Damit habe ich über ein Skript auch die Animation auf der Startseite erstellt. Wie das geht, steht im Makefile. Du brauchst eine richtige Umgebung wie Linux oder MSYS+MinGW sowie ImageMagick. Die exe lässt sich von einer mormalen DOS-Eingabeaufforderung starten, aber make funktioniert darunten nicht einwandfrei.

Hier ein paar Merkmale der momentanen Software:

  • RAM-Verbrauch: 85% von 2 kB
  • Flash-Verbrauch: 75% von 16 kB
  • Pixelrate: 48000 Pixel/s
  • Taktrate: 24 MHz
  • Compiler: avr-gcc 3.4.6, weil neuere Versionen avr-gcc wie 4.3.2 größeren/langsameren Code erzeugen

Ein Vorberechnen und Zwischenspeichern kompletter Frames ist aufgrund der begrenzten RAM-Resourcen von 1 kByte nicht möglich. Die Koordinaten der einzelnen Pixel müssen also immer wieder neu gewonnen werden. Bei einer Pixel-Rate von 48 kHz bleiben zur Berechnung und Ausgabe eines Pixels also 500 CPU-Ticks bzw. rund 20 µs.

Pixel-Rate [Hz] Ticks/Pixel Zeit/Pixel [µs]  
3000080033.3
3200075031.2
3750064026.6
3840062526.0
4000060025.0
4800050020.8
5000048020.0

Prinzipiell gibt es zwei Wege um die X/Y-Koordinaten zu verarbeiten:

  • Über eine FIFO. Die Pixel-Routinen laufen auf Applikationsebene und füllen eine FIFO mit den berechneten Koordinaten. Über die FIFO können kurzzeitige Resourcen-Engpässe überbrückt werden.
  • Die Pixel-Routinen werden direkt von der Interrupt-Ebene aus aufgerufen. Resourcen-Engpässe können nicht ausgebügelt werden. Im Gegensatz zur FIFO ist dieser Mechanismus schneller, weil keine FIFO verwaltet werden muss. Die 2×50000 FIFO-Operationen pro Sekunde brauchen eben auch ihre Zeit.

Die Pixel-Routinen sind so gearbeitet, daß sie pro Aufruf maximal einen Satz an X/Y-Koordinaten ausgeben; sie sind also nicht-blockierend.

Todo-Liste:

  • Bildschirm-Schoner √
  • Menü-Implementierung vervollständigen
  • DCF-Routinen integrieren
  • Startup- und Powerdown für Hochspannung √
  • Drehgeber zur Eingabe von Uhrzeit, Einstellungen, ... √
  • Verwaltung für Konfigurationen/Einstellungen
  • Doppel-Pufferung der darzustellenden Daten √
  • Erhöhung der Pixel-Rate auf 48000 bis 50000 Pixel pro Sekunde √
  • allgemeine Aufräumarbeiten wie
    • Reduktion von Abhängigkeiten, Verallgemeinerung der Algorithmen
    • Optimierung auf Größe und Geschwindigkeit
      • Pixel-ISR entlasten, indem Berechnungen auf Applikationsebene anstatt auf ISR-Ebene getätigt werden √
      • Nach Möglichkeit alle Pixel-Routinen schnell genug machen, so daß kein FIFO-Mechanismus mehr gebraucht wird √
      • Arithmetik optimieren √
      • Kommunikation über Flag-Register anstatt über Objekte √
    • Dokumentation

Letzter Schnappschuß: morpheus_2011-06-25.zip (140 kB). Inzwischen ist die Pixel-Engine auch fix und klein genug, um einen Asteroid-Clone zu implementieren: Video