Vektorzeichnungsmaschine # 3





Als Ingenieur war ich immer beeindruckt von dem pragmatischen russischen Stil, neue Produkte zu benennen. Während einige westliche Vermarkter ein kleines CRT-basiertes Spielgerät The Vectormatic Score-Master 3000 nennen, verwenden Russen eher aussagekräftigere Namen. Und da sie einen dritten Versuch in Betracht ziehen, ein Vektor-Rendering-System zu erstellen, würden sie es "Vector Drawing Machine # 3" nennen. Ingenieure - Vermarkter punkten (15: 0).



Vor vielen Jahren war ich fasziniert von der Idee, eine analoge Uhr mit einer kleinen Oszilloskop-Kathodenstrahlröhre anzuzeigen. Dieses Unterfangen versprach natürlich ästhetisches Vergnügen, aber gleichzeitig schien es lächerlich. Die Idee, die Kette mechanischer Verbindungen durch einen Mikrocontroller zu ersetzen, der zwei Hochspannungs-Differenzverstärker und ein unabhängiges Hochspannungsnetzteil ansteuert, um grob gesagt die Zeit zu bestimmen, schien ein wenig albern.

Wenn wir gleichzeitig alle Arbeiten an der Implementierung jeder Phase des Prozesses berücksichtigen, aufgrund derer ein anständig aussehendes Gerät erhalten werden sollte, und eine detaillierte Studie des Entwurfs hinzufügen, dann hat das gesamte Projekt bereits auf seine Monumentalität hingewiesen.



Keine der vielen vorgeschlagenen Aufgaben war an sich mit besonderen Schwierigkeiten verbunden, aber wenn wir sie als Ganzes betrachten, ist es die Phase der Integration aller Elemente in solche Projekte, die die Komplexität der Verbindungen einzelner Komponenten aufzeigt.



Dieser Artikel beschreibt den Aufbau eines einfachen Weltraumspiels basierend auf einer CRT. Dieses Projekt beschreibt die Architektur, enthält Konstruktionshinweise, Kommentare zu den verwendeten Geräten, zur Elektronik, zur Implementierung der Hochspannungsversorgung und zum Laserschneiden des Gehäuses.



Allgemeine Information



Der Körper besteht aus zwei Hauptteilen, die mittels Laserschneiden aus MDF-Platte hergestellt werden. Im oberen Teil befinden sich eine CRT-Anzeige, ein Hochspannungsnetzteil, Ablenkkanäle und entsprechende Kalibratoren. Unten befinden sich ein Joystick, Tasten, ein Mikrocontroller und ein Niederspannungsnetzteil. Auf der Rückseite befinden sich ein Stromanschluss und eine USB-Mini-B-Buchse. Das obere Segment des Gehäuses befindet sich auf dem unteren, und die gesamte Struktur wird durch ein flaches Bedienfeld fixiert, auf dem sich ein Joystick und Tasten befinden.



CRT



Die verwendete CRT ist die D7-16G mit einem Durchmesser von etwas mehr als 76 mm, einer Länge von 160 mm und Batteriestrom. Ich habe drei dieser CRTs vor vielen Jahren nur für ähnliche Projekte gekauft.









CRT D7-16G



Es wird ein 11-poliger Stecker vom Typ 30-232 verwendet, der sehr problematisch zu finden ist. Nach einiger Überlegung kam mir die Idee, meinen eigenen zusammenzubauen, indem ich mit einem Laser einen Rohling aus einer Acrylplatte schnitt und die entsprechenden Kontaktstifte vom Lampensockel aufnahm.









Montageanschluss 30-232



Zu diesem Zweck habe ich bei Autocketch zwei Verbundrohlinge entworfen, sodass die CRT-Kontakte entlang der „D“ -Kontur des linken Teils positioniert sind. Dann wurde jedes Stück aus einer 3 mm Acrylplatte geschnitten und zusammengeklebt. Ich entfernte die Kontakte von der neuen B9A-Lampenplatte, steckte sie in den geklebten Rohling und bog sie leicht, um sie zu befestigen. Dann löte ich Drähte an ihre Klemmen und isolierte die Verbindungen mit Wärmeschrumpfung.



Hochspannungsversorgung



Diese Einheit basiert auf dem SG3525-Schaltregler, der eine N-FET-Gegentaktstufe ansteuert, gefolgt von einem kleinen Ferrittransformator mit Hoch- und Niederspannungs-Sekundärspulen. Die Hochspannungsseite wird durch einen positiven Halbwellengleichrichter geleitet, der etwa 240 VDC erzeugt, und dann durch einen Parallelregler auf 210 V reduziert. Die gleichgerichtete Spannung wird den Ablenkverstärkern zugeführt und verbraucht ca. 7mA. Die HV-Sekundärspannung wird ebenfalls verdoppelt, wodurch ungefähr -600 V, 1 mA erzeugt werden, um den Elektronenkanonenstrahl vorzuspannen. Das Ausgleichen einer Gleichstrom-Sekundärwicklung, die den Kern sättigen oder eine magnetische Verschiebung verursachen kann, wird durch positive und negative Gleichrichter erreicht.



Der Aufbau des Transformators beginnt mit einer Primärwicklung in der Mitte. Danach beginnt die geerdete HV-Sekundärwicklung geerdet und endet mit einem Anschluss unter Anodenspannung. Schließlich gibt es eine Niederspannungswicklung, die zum Erhitzen der Kathodenstrahlröhrenspule verwendet wird. Diese Reihenfolge wird gewählt, um einen Durchschlag zwischen der Hoch- und der Niederspannungswicklung zu vermeiden. Nachdem ich das alles gesagt habe, habe ich über diese Topologie nachgedacht und werde vielleicht Zeit finden, sie zu verfeinern.









HV-Einheit und Ablenkvorrichtung



Ich habe so lange keinen Ferritpanzerkern mehr verwendet, dass ich seine elektrische Leitfähigkeit völlig vergessen habe. Dies erzeugte elektronische Lichtbögen zwischen der Oberseite des sekundären und dem geerdeten Ferrit, was dazu führte, dass mehrere Paare von primärseitigen STN3NF06L-Transistortreibern ausfielen. Um den Grund herauszufinden, habe ich sie durch ein Paar stabilerer TO252 (100A / 8mΩ) ersetzt, die sogar der Versorgung mit 12 V, 1A standhalten und einen Transformator mit kurzgeschlossenen Windungen starten können.



Ich war etwas verwirrt, als ich feststellte, dass der SG3525 sowohl in breiten als auch in schmalen SOIC-Paketen erhältlich ist. Infolgedessen wurde festgestellt, dass der PCB-Platzbedarf ungeeignet war und der schmale Teil aus Großbritannien bestellt werden musste.



Ablenkverstärker



Das Design dieses Subsystems erwies sich als entmutigende Aufgabe, weshalb die Arbeit mit dem SPICE-Simulator viel Zeit in Anspruch nahm, was zum Verständnis aller Nuancen beitrug.



Hier ist eine kurze Spezifikation:



  • unsymmetrischer Eingang 0..5V
  • Differenzausgang mit einer Schwingung> 80V pro Arm
  • bei 210V Stromaufnahme weniger als 2mA
  • Möglichkeit der Stromversorgung von 12V
  • Keine negativen Reifen
  • Bandbreite> 500 kHz mit weniger als 5 ° Phasenverschiebung in Bezug auf das Design


Im Laufe mehrerer Tage lernte ich verschiedene Topologien, beginnend mit einer Kaskoden-Push-Pull-Schaltung mit einer Stromquelle. Zunächst wurde nur der stationäre Modus getestet und optimiert. Nachdem ich die DC-Grundwerte erreicht hatte, nahm ich die AC-Parameter auf. Der Kondensator, der die Emitter der Gegentaktschaltung verbindet (nicht überraschend), beeinflusst die Wechselstromverstärkung, Frequenz, Phaseneigenschaften erheblich und interagiert anscheinend stark mit den Emitterwiderständen sowie den damit verbundenen Drains.



Als Verbesserung kann hier eine thermische Stabilisierung durch thermisches Verbinden der Ausgabegeräte angewendet werden (wenn wir bedenken, dass es sich jetzt um SOT-233 handelt, ist die Aufgabe nicht einfach). Alternativ können Sie natürlich auch zu den in Löchern montierten Gegenstücken wechseln, was die Aufgabe erheblich vereinfacht.



Es wäre schön, eine Schaltung zu verwenden, in der Phasenverschiebung und Verstärkung weniger abhängig sind. Die derzeitige einfache Option hat jedoch viele schwierige technische Hindernisse überwunden, sodass die zusätzliche Anforderung zu lästig werden würde.



Controller Board und DAC



Angesichts der Tatsache, dass die Hauptaufgabe des Mikrocontrollers die wiederholte Berechnung einer Reihe von Vektorpaaren alle paar zehn Millisekunden ist, erschien es mir vernünftig, hierfür eine kostengünstige und einfache Option zu verwenden.



Der ATmega328P und der ST micro STM32F103C8T6 waren offensichtliche Kandidaten. Infolgedessen wurde der erste nur aufgrund seiner größeren Möglichkeiten und (einmaligen) Popularität ausgewählt. Bei der Montage der Platine wurde überraschenderweise festgestellt, dass ich versehentlich einen Controller der Version „B“ gekauft habe, aber dazu später mehr.



Insgesamt ist die Karte einfach und enthält einen FT232RL-USB-Wandler, einen zweikanaligen 8-Bit-DAC, eine Joystick- und Tastenschnittstelle, eine optionale I2C-Schnittstelle und einen 5-V-Regler. Es war möglich, den Arduino Nano mit einem Motherboard zu verwenden, aber die aktuelle Lösung war einfach und leicht zu verbinden.













Die Anforderungen an die Steuerplatine und das DAC- System implizieren den Betrieb mit einem Bus, was die Auswahl des DAC einschränkt. Anfangs habe ich den TLC7528 genommen, der einen Stromausgang zu haben scheint, aber bei näherer Betrachtung stellte sich heraus, dass er so konfiguriert werden kann, dass er im Spannungsausgangsmodus arbeitet. In Kombination mit den Operationsverstärkern TSH82 erwies sich dies als schlechte Wahl, da die Verzerrung selbst bei den niedrigsten Signalpegeln einige Prozent betrug. Ich habe dieses Problem gelöst, indem ich den DAC durch den AD7302 ersetzt habe, der zwei Spannungsausgänge und eine Einschwingzeit von 2 μs implementiert.









Ein paar Prozent Verzerrung können die Dinge durcheinander bringen



Im Nachhinein scheint es, dass die Verzerrung beim TLC7528 auf den begrenzten Gleichtaktbereich des Eingangs des zugehörigen TSH82 zurückzuführen ist. Dies lässt sich leicht überprüfen, indem diese Operationsverstärker entfernt und direkt mit den Sonden ein Lissajous-Kreis auf dem Oszilloskop gezeichnet wird.



Infolgedessen veranlassten mich eine Reihe von Designfehlern, diese scheinbar einfache Karte neu zu erstellen: Wählen Sie einen DAC, verwenden Sie zum ersten Mal den FT232RL und binden Sie den entsprechenden TST-Pin nicht an Masse. Ich habe auch einen Fehler in der Schaltung beim Anschließen des USB-Anschlusses auf der Platine gemacht (ich habe die Signalkabel vertauscht), den ich vorübergehend mit einem selbstgebauten Kabel korrigiert habe.



Neuer Mikrocontroller, Toolkit und Bootloader



Wie gesagt, überraschenderweise stellte sich heraus, dass die zuvor bestellten ATmega328Ps unverständlich weniger beliebte „B“ -Varianten waren. Sie sind bis auf die Chip-Signatur vollständig binär kompatibel mit ihren jüngeren Geschwistern. Die neuere Version bietet jedoch eine Reihe nützlicher Zusatzfunktionen, einschließlich der Unterstützung eines zweiten USART.



Arduino bietet das neueste Toolkit, das seltsamerweise auf der Atmel-Website nicht verfügbar war. Diese Tools mussten in einem tragbaren Paket extrahiert und zusammengestellt werden und waren daher nicht mehr auf das Arduino-Framework angewiesen. Ich habe dann das entsprechende Projekt-Makefile aktualisiert, um auf den neuen Controller und die neuen Tools zu verweisen.



Unter Berücksichtigung der Kompatibilität der Chips wurde der Standard-Arduino-Bootloader auf einem neueren mit der relativ kleinen AVR Studio 4-IDE programmiert, die ich aufgrund der Einfachheit der Schnittstelle ausgewählt habe. Die XML-Datei zur Beschreibung des neuen Controllers musste aus der alten Version erstellt werden. Die Hauptunterschiede waren daher die Anzahl und die entsprechende Unterschrift.



Das Dienstprogramm make wurde verwendet, um das Projekt und dementsprechend das Makefile zu flashen. Bei diesem Ansatz nahmen die Tools nur etwa 30 MB und nicht Hunderte ein, wie dies bei der Verwendung "moderner" integrierter IDEs der Fall ist.









Echte Programmierer verwenden keine IDEs



Firmware



Das System ist so ausgelegt, dass es ungefähr 10K Vektorpaare pro Sekunde zeichnet. Bei einer Bildwiederholfrequenz von 50 Hz können also 200 Vektoren gezeichnet werden. Nach jeweils 200 Vektoren (20 ms) erhält der Vordergrund ein Signal zur Aktualisierung der Liste, damit das Spiel reibungslos ablaufen kann.



Mehrere Prozesse im System erfordern die Fähigkeit, Vektoren zu drehen. Gleichzeitig erfordert eine solche Lösung trotz der offensichtlichen Angemessenheit der Verwendung eines Dezimalwerts im Bereich von 0,359 Grad die Verwendung von U16 und ist unnötig umständlich. Nach einigem Überlegen entschied ich, dass es angemessen wäre, so viele Daten wie möglich mit dem S8 zu verarbeiten (+127 bis –128). Es eignet sich auch zur Darstellung von X / Y-Koordinaten (unter der Annahme, dass ein 8-Bit-DAC verwendet wird), um einen Winkel (ungefähr ± 180 Grad) auszudrücken.



Die Bildschirmaktualisierung erfolgt über einen Timer-Interrupt und ist die einzige Möglichkeit, die DACs zu steuern. Vektoren werden aus dem Ping- oder Pong-Puffer gelesen und wiederholt, bis die Vordergrundaufgabe den Puffer wechselt. Jeder Puffer beginnt am Zähler U8 und fährt mit dem nächsten verfügbaren Schreibpunkt fort, gefolgt von einem Lesepunkt. Danach enthält es eine Liste von X- und Y-Werten, die im U8-Format gespeichert sind.



Die Richtung des Raumfahrzeugs wird durch Bewegen des Joysticks nach links / rechts geändert. Das Schiff selbst wird in Form von vier Punkten a la Chevron aus der Star Trek-Serie angezeigt, die sich um seine Mitte drehen. Jeder Vektor erfordert eine Sin- und Cos-Suche, 4 Multiplikationen und zwei Additionen. Insgesamt werden 37 Berechnungen pro Umdrehung erhalten, was insgesamt etwa 200 Anweisungen entspricht. Das Raumschiff wird immer zuerst gezeichnet, und die Nase wird immer das erste Vektorpaar sein. Im Ausgabepuffer ist dieses Vektorpaar also der Ausgangspunkt für den Start von Raketen.



Raketen werden durch Drücken der entsprechenden Taste abgefeuert. Sie fliegen aus dem Bug des Schiffes und setzen ihren aktuellen Kurs fort. Die Zerstörung einer Rakete, von der nicht mehr als 16 gleichzeitig abgefeuert werden können, erfolgt, wenn sie mit einem Asteroiden kollidiert oder wenn sie den sichtbaren Radius des Weltraums erreicht. Dieses Flugmodell basiert auf dem Zeichnen von Linien zwischen dem Bug des Schiffes und der Kante des sichtbaren Radius, wobei Delta X und Delta Y beim Start berechnet werden. Delta X / Y ist ein fester Punkt von 8,8, ebenso wie die Geschwindigkeit.









Schiff in der Mitte, Asteroid unter Asteroidenobjekten



erscheinen an einem zufälligen Radiuspunkt und fliegen direkt in einem Winkel zwischen 80 und 140 Grad darüber. Wenn sie erscheinen, wird eine zufällige Start- und Endposition erzeugt, die dann in kartesische Koordinaten umgewandelt wird, und die Frage einer geraden Linie wird auf die gleiche Weise wie bei den Raketen gelöst.



Wenn eine Rakete einen Asteroiden trifft, werden beide Einheiten zerstört und der aktuelle Punktezähler erhöht. Die numerischen Anzeigeobjekte stammen aus der Nachschlagetabelle "7 Segmente".



Das gesamte "schwere" Gameplay wird mit der "Spin" -Funktion ausgeführt, mit der ein Eingabeobjekt (Asteroid, Raumschiff, 7-Segment-Wert usw.) zum Ausgabepuffer hinzugefügt wird. Darüber hinaus kann sich das Eingabeobjekt drehen und einen Versatz entlang der X- und Y-Achse anwenden. Gleichzeitig hindert Sie nichts daran, dem Eingabepuffer einen 2x2-Zug außerirdischer Schiffe hinzuzufügen und diese dann als Gruppe zu nehmen und vor dem Zeichnen bereitzustellen.



Mechanisches Teil



Um diesem Raumgerät eine Ästhetik zu verleihen, war bereits viel mehr Aufwand erforderlich, obwohl der Prozess selbst viel unterhaltsamer war als ich erwartet hatte. Anfänglich war die Neigung des CRT-Körpers merklich geringer als geplant, und am Ende dauerte es mehrere Stunden, um einen Weg zu finden, das gleitende Retentionssegment so zu schneiden, dass der obere und der untere Teil auf geeignete Weise verbunden werden konnten.









Primäres Design



Was für einen großen Unterschied buchstäblich ein paar Grad machen können. Ich war erstaunt, wie sehr sich die Ästhetik am Ende verändert hatte und wie schief die erste Version am abgewinkeltesten aussah.









Set: CRT-Modul, unteres Segment des Gehäuses und Abdeckung der Frontplatte der



CRT, befestigt mit runden MDF-Halterungen, die oben auf das Fach geklebt sind. Diese Halterungen sind von innen mit elastischem Schaumgummi auf Klebstoffbasis ummantelt.









Leere CRT-Vorderseite mit einem Gehäuseschloss und Markierungen für eine Leiterplatte Auf



den Fotos ist schwer zu erkennen, dass das Bedienfeld mit einem Joystick und Tasten das CRT-Modul sicher fixiert und verhindert, dass es nach hinten herausgezogen wird.



Pakete für die Rumpfgestaltung



Für das anfängliche Design der Ober- und Unterkörpersegmente wurde der Inkscape-Editor mit der Erweiterung „The Laser Cut Box“ verwendet. Als Bündel dieser Segmente dienten nur gezackte Kerben. Ich habe gerade die endgültige Vorlage von Inkscape kopiert und in Autosketch eingefügt, in der ich alle erforderlichen Verbesserungen vorgenommen habe.



Ich habe einen 70-W-Laserschneider verwendet, um MDF-Rohlinge zu schneiden. Der Arbeitszyklus erwies sich als schnell genug, so dass gleichzeitig alternative Gestaltungsideen ausprobiert werden konnten.



Fazit



Wie ich erwartet hatte, konnte ich bei diesem Projekt viel lernen, da sich herausstellte, dass alles, außer vielleicht dem eingebauten Mikrocontroller, meine gewöhnliche Erfahrung überstieg.



Offensichtlich können viele verschiedene Spiele und Anwendungen basierend auf diesem Vektor-Rendering-Gerät entwickelt werden. Bisher möchte ich der Karte definitiv ein Synchronisationsmodul hinzufügen (über I2C), nachdem ich meine langjährige Idee, eine analoge Uhr anzuzeigen, verwirklicht habe. Der Rest der möglichen Verbesserungen wird schrittweise eingeführt.



Ein unanständiger Fehler war natürlich die USB-Mini-B-Schaltung und der erste erfolglose Versuch, einen DAC mit einem Stromausgang im Spannungsausgangsmodus zu verwenden. Aber sonst weiß ich nicht einmal, was ich sonst noch reparieren würde, wenn ich eine solche Einheit wieder zusammenbauen würde.



Im aktuellen Projekt wurden alle Ziele erreicht, einschließlich der Erweiterung des Horizonts, wobei es, wie so oft, einige Überraschungen gab.



Kontaktieren Sie den Autor Mark Atherton per E-Mail markaren1@xtra.co.nz










All Articles