
En tant qu'ingénieur, j'ai toujours été impressionné par la manière pragmatique russe de nommer les nouveaux produits. Alors que certains spécialistes du marketing occidentaux pourraient appeler un petit appareil de jeu basé sur CRT le Vectormatic Score-Master 3000, les Russes ont tendance à utiliser des noms plus significatifs. Et puisque la troisième tentative de création d'un système de rendu vectoriel est envisagée, ils l'appelleraient "Vector Drawing Machine # 3". Ingénieurs - score des spécialistes du marketing (15: 0).
Il y a de nombreuses années, j'ai été fasciné par l'idée d'utiliser un petit tube cathodique d'oscilloscope pour afficher une horloge analogique. Cette entreprise, bien sûr, promettait un plaisir esthétique, mais en même temps elle semblait ridicule. L'idée de remplacer la chaîne de connexions mécaniques par un microcontrôleur qui pilote deux amplificateurs différentiels haute tension et une alimentation haute tension indépendante juste pour, grosso modo, indiquer l'heure semblait un peu ridicule.
Si, dans le même temps, nous prenons en compte tout le travail de mise en œuvre de chaque étape du processus, à la suite duquel un appareil d'apparence décente doit être obtenu, et ajoutons une étude détaillée de la conception, alors l'ensemble du projet a déjà laissé entendre sa monumentalité.
Aucune des nombreuses tâches proposées ne présentait de difficultés particulières en soi, mais si nous la prenons dans son ensemble, c'est l'étape de tout intégrer dans de tels projets qui révèle la complexité des interconnexions des composants individuels.
Cet article traite de l'assemblage d'un jeu spatial simple basé sur un CRT. Ce projet décrit l'architecture, fournit des notes de conception, des commentaires sur l'équipement utilisé, l'électronique, la mise en œuvre de l'alimentation haute tension et le processus de découpe laser du boîtier.
informations générales
Le corps est assemblé à partir de deux parties principales, en panneau MDF par découpe laser. La partie supérieure abrite un écran CRT, une alimentation haute tension, des canaux de déviation et des calibrateurs correspondants. La partie inférieure contient un joystick, des boutons, un microcontrôleur et un bloc d'alimentation basse tension. À l'arrière, il y a un connecteur d'alimentation et une prise USB mini B. Le segment supérieur du boîtier est placé sur le segment inférieur, et toute la structure est fixée par un panneau de commande plat, sur lequel se trouvent un joystick et des boutons.
CRT
Le CRT utilisé est le D7-16G, qui mesure un peu plus de 76 mm de diamètre, 160 mm de longueur et fonctionne sur batterie. J'ai acheté trois de ces tubes cathodiques il y a de nombreuses années juste pour des projets similaires.

CRT D7-16G
Il utilise un connecteur à 11 broches de type 30-232, ce qui est très problématique à trouver. Après quelques délibérations, j'ai eu l'idée d'assembler le mien en découpant un blanc avec un laser dans une feuille d'acrylique et en prenant les broches de contact appropriées sur la base du panneau de la lampe.

Assemblage Connecteur 30-232
Pour ce faire, j'ai conçu deux ébauches composites sur Autocketch afin que les contacts CRT soient positionnés le long du contour en «D» de la partie gauche. Ensuite, chaque pièce a été découpée dans une feuille acrylique de 3 mm et collée ensemble. J'ai enlevé les contacts du nouveau panneau de lampe B9A, les ai insérés dans le blanc collé et légèrement plié pour les fixer, puis soudé les fils à leurs bornes, isolant les connexions avec un rétrécissement thermique.
Alimentation haute tension
Cette unité est basée sur le régulateur de commutation SG3525 pilotant un étage push-pull N-FET suivi d'un petit transformateur en ferrite avec des bobines secondaires haute et basse tension. Le côté haute tension est passé à travers un redresseur demi-onde positive, générant environ 240VDC, puis réduit par un régulateur parallèle à 210V. La tension redressée est fournie aux amplificateurs de déviation et consomme environ 7 mA. La tension secondaire HV est également doublée, générant environ -600V, 1mA pour polariser le faisceau du canon à électrons. L'équilibrage de tout enroulement secondaire CC capable de saturer le noyau ou de provoquer un déplacement magnétique est réalisé par des redresseurs positifs et négatifs.
La structure du transformateur commence par un enroulement primaire au milieu, après quoi il y a un début à la terre de l'enroulement secondaire HT, se terminant par une borne sous tension d'anode. Enfin, il existe un enroulement basse tension qui est utilisé pour chauffer la bobine du tube cathodique. Cet ordre est choisi pour éviter une panne entre les enroulements haute et basse tension. Cela dit, j'ai réfléchi à cette topologie et je trouverai peut-être le temps de l'affiner.

Unité HT et dispositif de déviation
Je n'ai pas utilisé de noyau d'armure de ferrite depuis si longtemps que j'ai complètement oublié sa conductivité électrique. Cela a créé des arcs électroniques entre le haut du secondaire et la ferrite mise à la terre, provoquant la défaillance de plusieurs paires de pilotes de transistor côté primaire STN3NF06L. Au cours de la recherche de la raison, je les ai remplacés par une paire de TO252 plus stables (100A / 8mΩ), capables de résister même à l'alimentation de 12V, 1A et de démarrer un transformateur avec des spires court-circuitées.
J'ai été quelque peu confus de constater que le SG3525 est disponible dans des packages SOIC larges et étroits. En conséquence, l'empreinte du PCB s'est avérée inappropriée et la partie étroite a dû être commandée au Royaume-Uni.
Amplificateur de déflexion
La conception de ce sous-système s'est avérée être une tâche ardue et il a fallu beaucoup de temps pour travailler avec le simulateur SPICE, ce qui a permis de comprendre toutes les nuances.
Voici une petite spécification:
- entrée asymétrique 0..5V
- sortie différentielle avec une oscillation> 80V par bras
- à 210V consommation de courant inférieure à 2mA
- possibilité d'alimentation à partir de 12V
- pas de pneus négatifs
- largeur de bande> 500 kHz avec un déphasage inférieur à 5 ° par rapport au
Au cours de plusieurs jours, j'ai appris plusieurs topologies, à commencer par un circuit push-pull cascode avec une source de courant. Au départ, seul le mode stationnaire a été testé et optimisé. Après avoir atteint les valeurs DC de base, j'ai repris les paramètres AC. Le condensateur reliant les émetteurs du circuit push-pull affecte (sans surprise) de manière significative le gain AC, la fréquence, les caractéristiques de phase et, apparemment, interagit fortement avec les résistances d'émetteur, ainsi que les drains qui leur sont associés.
Ici, à titre d'amélioration, vous pouvez appliquer une stabilisation thermique par collage thermique des périphériques de sortie (si vous considérez qu'il s'agit maintenant de SOT-233, la tâche n'est pas facile). Alternativement, bien sûr, vous pouvez passer à leurs homologues qui sont montés dans des trous, ce qui simplifiera grandement la tâche.
Ce serait bien d'utiliser un circuit dans lequel le déphasage et le gain sont moins dépendants. Mais l'option simple actuelle a donc surmonté de nombreux obstacles techniques difficiles, de sorte que l'exigence supplémentaire serait trop lourde.
Carte contrôleur et DAC
Étant donné que la tâche principale du microcontrôleur est le calcul répété d'une chaîne de paires de vecteurs toutes les quelques dizaines de millisecondes, il m'a semblé raisonnable d'utiliser une option simple et peu coûteuse pour cela.
Les ATmega328P et ST micro STM32F103C8T6 étaient des candidats évidents. En conséquence, le premier a été choisi uniquement pour ses possibilités plus larges et (une fois) sa popularité. Au cours du processus d'assemblage de la carte, il a été étonnamment découvert que j'avais accidentellement acheté un contrôleur de version «B», mais j'y reviendrai plus tard.
Dans l'ensemble, sa carte est simple et comprend un convertisseur USB FT232RL, un DAC 8 bits à double canal, une interface joystick et bouton, une interface I2C en option et un régulateur 5V. Il était possible d'utiliser l'Arduino Nano avec une carte mère, mais la solution actuelle était simple et facile à connecter.

La carte contrôleur et les
exigences du système DAC impliquent un fonctionnement avec un bus, ce qui limite le choix du DAC. Au départ, j'ai pris le TLC7528, qui semble avoir une sortie de courant, mais en y regardant de plus près, il s'est avéré qu'il pouvait être configuré pour fonctionner en mode de sortie de tension. Combiné avec les amplificateurs opérationnels TSH82, cela s'est avéré être un mauvais choix, car la distorsion, même aux niveaux de signal les plus bas, était de quelques pour cent. J'ai résolu ce problème en remplaçant le DAC par l'AD7302, qui implémente deux sorties de tension et un temps de stabilisation de 2 μs.

Quelques pourcentages de distorsion peuvent gâcher les choses
Avec le recul, il semble que la distorsion du TLC7528 soit peut-être due à la plage d'entrée en mode commun limitée du TSH82 associé. Ceci est facilement vérifié en retirant ces amplis-op et en dessinant un cercle de Lissajous sur l'oscilloscope directement avec les sondes.
En conséquence, un certain nombre d'erreurs de conception m'ont incité à reconstruire cette carte apparemment simple: choisir un DAC, utiliser le FT232RL pour la première fois et ne pas attacher la broche TST correspondante à la terre. J'ai également commis une erreur dans le schéma de connexion du connecteur USB sur la carte (j'ai mélangé les fils de signal), que j'ai temporairement corrigée à l'aide d'un câble fait maison.
Nouveau microcontrôleur, boîte à outils et chargeur de démarrage
Comme je l'ai dit, étonnamment, il s'est avéré que l'ATmega328P que j'avais commandé plus tôt, de manière incompréhensible, s'est avéré être une version moins populaire de "B". Ils sont entièrement compatibles binaires avec leurs frères et sœurs plus jeunes, à l'exception de la signature de la puce. Cependant, la nouvelle version a un certain nombre de fonctions supplémentaires utiles, y compris la prise en charge d'un deuxième USART.
Arduino fournit la dernière boîte à outils qui, curieusement, n'était pas disponible sur le site Atmel. Ces outils devaient être extraits et assemblés dans un package portable, et ne reposaient donc plus sur le framework Arduino. J'ai ensuite mis à jour le makefile du projet correspondant pour référencer le nouveau contrôleur et les nouveaux outils.
Compte tenu de la compatibilité des puces, le chargeur de démarrage Arduino standard a été programmé sur un chargeur plus récent en utilisant le relativement petit AVR Studio 4 IDE, que j'ai choisi pour la simplicité de l'interface. Le fichier de description XML du nouveau contrôleur a dû être créé sur la base de l'ancienne version. En conséquence, les principales différences étaient son numéro et la signature correspondante.
L'utilitaire make a été utilisé pour flasher le projet et, par conséquent, le makefile. Avec cette approche, l'ensemble d'outils ne prenait que 30 Mo environ, et non des centaines, comme c'est le cas avec l'utilisation d'EDI intégrés «modernes».

Les vrais programmeurs n'utilisent pas d'IDE
Micrologiciel
Le système est conçu pour dessiner environ 10 000 paires de vecteurs par seconde. Avec un taux de rafraîchissement de 50 Hz, cela signifie que 200 vecteurs peuvent être dessinés. Tous les 200 vecteurs (20 ms), le premier plan reçoit un signal pour mettre à jour sa liste afin que le jeu puisse fonctionner correctement.
Plusieurs processus du système nécessitent la possibilité de faire pivoter les vecteurs. Dans le même temps, malgré le caractère raisonnable évident de l'utilisation d'une valeur décimale dans la plage de 0 à 359 degrés, une telle solution nécessitera d'utiliser U16 et sera inutilement lourde. Après quelques délibérations, j'ai décidé qu'il serait approprié de traiter autant de données que possible avec le S8 (+127 à –128). Il convient également pour représenter les coordonnées X / Y (en supposant un CNA 8 bits) pour exprimer un angle (environ ± 180 degrés).
L'actualisation de l'écran se fait via une interruption de la minuterie et constitue le seul moyen de contrôler les DAC. Les vecteurs sont lus à partir du tampon ping ou pong et répétés jusqu'à ce que la tâche de premier plan change le tampon. Chaque tampon commence au compteur U8 et continue jusqu'au prochain point d'écriture disponible suivi d'un point de lecture. Après cela, il contient une liste de valeurs X et Y stockées au format U8.
La direction de l'engin spatial est modifiée en déplaçant le joystick vers la gauche / droite. Le navire lui-même est présenté sous la forme de quatre points à la chevron de la série Star Trek, tournant autour de son centre. Chaque vecteur nécessite une recherche sin et cos, 4 multiplications et deux additions. Au total, 37 calculs par rotation sont obtenus, soit au total environ 200 instructions. Le vaisseau spatial sera toujours dessiné en premier et le nez sera toujours la première paire de vecteurs, donc dans le tampon de sortie, cette paire de vecteurs sera le point de départ pour le lancement de fusées.
Les missiles sont lancés en appuyant sur le bouton correspondant. Ils volent hors de la proue du navire et continuent sur sa route actuelle. La destruction d'une fusée, dont pas plus de 16 peuvent être lancées simultanément, se produit lorsqu'elle entre en collision avec un astéroïde ou lorsqu'elle atteint le rayon visible de l'espace. Ce modèle de vol est basé sur le dessin de lignes entre la proue du navire et le bord du rayon visible, où le delta X et le delta Y sont calculés au lancement. Delta X / Y est un point fixe de 8,8, tout comme la vitesse.

Navire au centre, un astéroïde sous les
objets astéroïdes apparaît dans un endroit aléatoire avec un rayon et survole directement à un angle compris entre 80 et 140 degrés. Lorsqu'elles apparaissent, une position aléatoire de début et de fin est générée, qui sont ensuite converties en coordonnées cartésiennes, et la question d'une ligne droite est résolue à peu près de la même manière qu'avec les missiles.
Lorsqu'une fusée touche un astéroïde, les deux entités sont détruites et le compteur de score actuel est augmenté. Les objets d'affichage numériques sont extraits de la table de consultation "7 segments".
Tout le gameplay "lourd" se fait avec la fonction "spin", qui est utilisée pour ajouter un objet d'entrée (astéroïde, vaisseau spatial, valeur à 7 segments, etc.) au tampon de sortie. En outre, il permet à l'objet d'entrée de pivoter, ainsi que d'appliquer un décalage le long des axes X et Y. En même temps, rien ne vous empêche d'ajouter un peloton 2x2 de vaisseaux extraterrestres au tampon d'entrée, puis de les prendre en groupe et de les déployer avant de dessiner.
Partie mécanique
Donner une esthétique à cet appareil spatial demandait déjà beaucoup plus d'efforts, bien que le processus lui-même se soit avéré beaucoup plus divertissant que ce à quoi je m'attendais. Initialement, la pente du corps CRT était sensiblement plus faible que prévu, et à la fin, il a fallu plusieurs heures pour trouver un moyen de couper le segment de rétention coulissant afin que les parties supérieure et inférieure puissent être connectées de manière appropriée.

Conception primaire
Quelle grande différence, littéralement, quelques degrés peuvent faire. J'ai été étonné de voir à quel point l'esthétique avait changé à la fin et à quel point la première version semblait tordue.

Ensemble: module CRT, le segment inférieur du boîtier et le couvercle avant du
CRT est fixé avec des supports ronds en MDF collés sur le haut du compartiment. De l'intérieur, ces supports sont gainés de caoutchouc mousse élastique sur une base adhésive.

Façade CRT vide avec un verrou de boîtier et des marquages pour une carte de circuit imprimé
Il est difficile de voir sur les photos que le panneau de commande avec un joystick et des boutons fixe solidement le module CRT, l'empêchant d'être tiré vers l'arrière.
Paquets utilisés pour la conception de la coque
Pour la conception initiale des segments supérieur et inférieur du corps, l'éditeur Inkscape avec l'extension «The Laser Cut Box» a été utilisé. Seules des encoches dentelées ont servi de paquet de ces segments. Je viens de copier et coller le modèle final d'Inkscape dans Autosketch, dans lequel j'ai apporté toutes les améliorations nécessaires.
J'ai utilisé un cutter laser 70W pour découper des ébauches MDF. Le cycle de travail s'est avéré assez rapide, ce qui a permis d'essayer simultanément des idées de conception alternatives.
Conclusion
Comme je m'y attendais, sur ce projet, j'ai beaucoup appris, car tout, sauf peut-être le microcontrôleur intégré, s'est avéré être au-delà de mon expérience ordinaire.
Évidemment, de nombreux jeux et applications différents peuvent être développés sur la base de ce dispositif de rendu vectoriel. Jusqu'à présent, je souhaite absolument ajouter un module de synchronisation à la carte (via I2C), mettant en œuvre mon idée de longue date d'afficher une horloge analogique. Le reste des améliorations possibles sera introduit progressivement.
Une erreur indécente, bien sûr, était une erreur avec le circuit USB mini B et la première tentative infructueuse d'utiliser un DAC avec une sortie de courant en mode de sortie de tension. Mais sinon, je ne sais même pas ce que je réparerais en cas de remontage d'une telle unité.
Dans le projet actuel, tous les objectifs ont été atteints, y compris l'élargissement des horizons, au cours duquel, comme cela arrive souvent, il y a eu quelques surprises.
Contactez l'auteur Mark Atherton par mail markaren1@xtra.co.nz

