
Como engenheiro, sempre fiquei impressionado com o estilo russo pragmático de nomear novos produtos. Enquanto alguns comerciantes ocidentais podem chamar um pequeno dispositivo de jogo baseado em CRT de Vectormatic Score-Master 3000, os russos tendem a usar nomes mais significativos. E como a terceira tentativa de criar um sistema de renderização vetorial está sendo considerada, eles o chamariam de "Máquina de desenho vetorial nº 3". Pontuação dos engenheiros - profissionais de marketing (15: 0).
Muitos anos atrás, fiquei fascinado com a ideia de usar um pequeno tubo de raios catódicos de osciloscópio para exibir um relógio analógico. Esse empreendimento, é claro, prometia prazer estético, mas ao mesmo tempo parecia ridículo. A ideia de substituir a cadeia de conexões mecânicas por um microcontrolador que aciona dois amplificadores diferenciais de alta tensão e uma fonte de alimentação independente de alta tensão apenas para, grosso modo, dizer as horas parecia um pouco boba.
Se, ao mesmo tempo, levarmos em conta todo o trabalho de implementação de cada etapa do processo, como resultado do qual um dispositivo de aparência decente deve ser obtido, e adicionarmos um estudo detalhado do projeto, então todo o projeto já sugeria sua monumentalidade.
Nenhuma das muitas tarefas propostas apresentou dificuldades particulares em si, mas se a tomarmos como um todo, é a fase de integração de tudo em tais projetos que revela as complexidades das interconexões dos componentes individuais.
Este artigo discute a montagem de um jogo espacial simples baseado em um CRT. Este projeto descreve a arquitetura, fornece notas de projeto, comentários sobre o equipamento utilizado, a eletrônica, a implementação da fonte de alimentação de alta tensão e o processo de corte a laser do gabinete.
Informação geral
O corpo é montado a partir de duas partes principais feitas de placa de MDF com corte a laser. A parte superior abriga um display CRT, uma fonte de alimentação de alta tensão, canais de deflexão e calibradores correspondentes. Na parte inferior há um joystick, botões, um microcontrolador e uma fonte de alimentação de baixa tensão. Na parte traseira há um conector de força e um soquete USB mini B. O segmento superior do case é colocado no inferior, e toda a estrutura é fixada por um painel de controle plano, no qual há um joystick e botões.
CRT
O CRT usado é o D7-16G, que tem pouco mais de 76 mm de diâmetro, 160 mm de comprimento e funciona com bateria. Comprei três desses CRTs há muitos anos apenas para projetos semelhantes.

CRT D7-16G
Ele usa um conector de 11 pinos tipo 30-232, que é muito problemático de encontrar. Depois de alguma deliberação, tive a ideia de montar o meu, cortando uma peça em branco com um laser de uma folha de acrílico e pegando os pinos de contato apropriados da base do painel da lâmpada.

Conector de montagem 30-232
Para fazer isso, projetei dois blanks compostos em Autocketch para que os contatos CRT sejam posicionados ao longo do contorno “D” da parte esquerda. Em seguida, cada peça foi cortada de uma folha de acrílico de 3 mm e colada. Tirei os contatos do novo painel da lâmpada B9A, inseri-os na placa colada e ligeiramente dobrei para fixá-los, depois soldei os fios em seus terminais, isolando as conexões com contração térmica.
Fonte de alimentação de alta tensão
Esta unidade é baseada no regulador de comutação SG3525 conduzindo um estágio push-pull N-FET seguido por um pequeno transformador de ferrite com bobinas secundárias de alta e baixa tensão. O lado de alta tensão é passado por um retificador de meia onda positiva, gerando cerca de 240 VCC e, em seguida, reduzido por um regulador paralelo para 210 V. A tensão retificada é alimentada para os amplificadores de deflexão e consome cerca de 7mA. A tensão secundária HV também é duplicada, gerando aproximadamente -600V, 1mA para polarizar o feixe do canhão de elétrons. O equilíbrio de qualquer enrolamento secundário CC capaz de saturar o núcleo ou causar deslocamento magnético é realizado por retificadores positivos e negativos.
A estrutura do transformador inicia com um enrolamento primário no meio, após o qual há um início aterrado do enrolamento secundário de AT, finalizando com um terminal sob tensão anódica. Finalmente, existe um enrolamento de baixa tensão que é usado para aquecer a bobina do tubo de raios catódicos. Esta ordem é escolhida para evitar quebra entre os enrolamentos de alta e baixa tensão. Dito tudo isso, pensei nesta topologia e, talvez, encontre tempo para refiná-la.

Unidade HV e dispositivo de deflexão
Não uso um núcleo de armadura de ferrite há tanto tempo que me esqueci completamente de sua condutividade elétrica. Isso criou arcos eletrônicos entre o topo do secundário e a ferrita aterrada, causando a falha de vários pares de drivers de transistor do lado primário STN3NF06L. No decorrer da descoberta do motivo, substituí-os por um par de TO252 mais estável (100A / 8mΩ), capaz de suportar até a alimentação de 12V, 1A e dar partida em um transformador com espiras em curto-circuito.
Fiquei um pouco confuso ao descobrir que o SG3525 está disponível em pacotes SOIC largos e estreitos. Como resultado, a pegada do PCB foi considerada inadequada e a parte estreita teve que ser encomendada ao Reino Unido.
Amplificador de deflexão
O design desse subsistema acabou sendo uma tarefa difícil e, portanto, demorou muito para trabalhar com o simulador SPICE, que ajudou a entender todas as nuances.
Aqui está uma especificação rápida:
- entrada não balanceada 0..5V
- saída diferencial com uma oscilação> 80 V por braço
- em 210 V, o consumo de corrente é inferior a 2 mA
- possibilidade de alimentação de 12V
- sem pneus negativos
- largura de banda> 500 kHz com deslocamento de fase inferior a 5 ° em relação ao
Ao longo de vários dias, aprendi várias topologias, começando com um circuito push-pull cascode com uma fonte de corrente. Inicialmente, apenas o modo estacionário foi testado e otimizado. Depois de atingir os valores de DC de linha de base, retomei os parâmetros de AC. O capacitor que conecta os emissores do circuito push-pull (o que não é surpreendente) afeta significativamente o ganho CA, a frequência, as características de fase e, aparentemente, interage fortemente com os resistores do emissor, bem como com os drenos associados a eles.
Aqui, como uma melhoria, a estabilização térmica pode ser aplicada por ligação térmica dos dispositivos de saída (se considerarmos que agora é SOT-233, então a tarefa não é fácil). Como alternativa, é claro, você pode alternar para suas contrapartes montadas em orifícios, o que simplifica muito a tarefa.
Seria bom usar um circuito em que a mudança de fase e o ganho sejam menos dependentes. Mas a opção simples atual, portanto, superou muitas barreiras técnicas difíceis, de modo que a exigência adicional seria muito pesada.
Placa controladora e DAC
Considerando que a principal tarefa do microcontrolador é o cálculo repetido de uma linha de pares de vetores a cada poucas dezenas de milissegundos, pareceu-me razoável usar uma opção simples e barata para isso.
O ATmega328P e o ST micro STM32F103C8T6 eram candidatos óbvios. Como resultado, o primeiro foi escolhido apenas por suas oportunidades mais amplas e (uma vez) popularidade. No processo de montagem da placa, foi surpreendentemente descoberto que eu comprei acidentalmente um controlador da versão “B”, mas mais sobre isso depois.
No geral, sua placa é simples e inclui um conversor USB FT232RL, um DAC de 8 bits de canal duplo, um joystick e interface de botão, uma interface I2C opcional e um regulador de 5V. Era possível usar o Arduino Nano com placa-mãe, mas a solução atual era simples e fácil de conectar.

Os
requisitos da placa controladora e do sistema DAC implicam em operação com um barramento, o que limita a escolha do DAC. Inicialmente, peguei o TLC7528, que parece ter uma saída de corrente, mas em um exame mais atento descobri que pode ser configurado para funcionar no modo de saída de tensão. Combinado com os amplificadores operacionais TSH82, isso acabou sendo uma escolha ruim, já que a distorção mesmo nos níveis de sinal mais baixos era de poucos por cento. Resolvi esse problema substituindo o DAC pelo AD7302, que implementa duas saídas de tensão e um tempo de acomodação de 2 μs.

Uma distorção de alguns por cento pode bagunçar as coisas.
Em retrospecto, parece que a distorção com o TLC7528 pode ter sido devido à faixa de modo comum de entrada limitada do TSH82 associado. Isso pode ser facilmente verificado removendo esses amplificadores operacionais e desenhando um círculo de Lissajous no osciloscópio diretamente com as pontas de prova.
Como resultado, vários erros de projeto me levaram a reconstruir esta placa aparentemente simples: escolher um DAC, usar o FT232RL pela primeira vez e não amarrar o pino TST correspondente ao solo. Também cometi um erro no circuito de conectar o conector USB na placa (confundi os fios de sinal), que corrigi temporariamente usando um cabo caseiro.
Novo microcontrolador, caixa de ferramentas e carregador de inicialização
Como eu disse, surpreendentemente, descobri que o ATmega328P que eu havia encomendado antes, de uma forma incompreensível, acabou sendo uma versão menos popular de "B". Eles são totalmente binários compatíveis com seus irmãos mais novos, exceto pela assinatura do chip. No entanto, a versão mais recente tem várias funções adicionais úteis, incluindo suporte para um segundo USART.
O Arduino fornece o kit de ferramentas mais recente que, estranhamente, não estava disponível no site da Atmel. Essas ferramentas tiveram que ser extraídas e montadas em um pacote portátil e, portanto, não dependiam mais da estrutura do Arduino. Em seguida, atualizei o makefile do projeto correspondente para fazer referência ao novo controlador e às novas ferramentas.
Considerando a compatibilidade dos chips, o bootloader padrão do Arduino foi programado em um mais recente usando um IDE AVR Studio 4 relativamente pequeno, que escolhi pela simplicidade da interface. O arquivo XML para descrever o novo controlador teve que ser criado a partir da versão antiga. Como resultado, as principais diferenças eram o seu número e a assinatura correspondente.
O utilitário make foi usado para atualizar o projeto e, consequentemente, o makefile. Com essa abordagem, o kit de ferramentas ocupou apenas cerca de 30 MB, e não centenas, como é o caso com o uso de IDEs integrados "modernos".

Os verdadeiros programadores não usam IDEs
Firmware
O sistema é projetado para desenhar cerca de 10K pares de vetores por segundo. Com uma taxa de atualização de 50 Hz, isso significa que 200 vetores podem ser desenhados. A cada 200 vetores (20ms), o primeiro plano recebe um sinal para atualizar sua lista para que o jogo possa ser executado sem problemas.
Vários processos no sistema requerem a capacidade de girar vetores. Ao mesmo tempo, apesar da óbvia razoabilidade de usar um valor decimal na faixa de 0 a 359 graus, tal solução exigirá o uso de U16 e será desnecessariamente complicada. Depois de pensar um pouco, decidi que seria apropriado processar o máximo de dados possível com o S8 (+127 a –128). Também é adequado para representar coordenadas X / Y (assumindo que um DAC de 8 bits seja usado) para expressar um ângulo (aproximadamente ± 180 graus).
A atualização da tela é feita por meio de uma interrupção do cronômetro e é a única maneira de controlar os DACs. Os vetores são lidos no buffer de ping ou pong e repetidos até que a tarefa de primeiro plano troque o buffer. Cada buffer começa no contador U8 e continua até o próximo ponto de gravação disponível, seguido por um ponto de leitura. Depois disso, ele contém uma lista de valores X e Y armazenados no formato U8.
A direção da nave é alterada movendo o joystick para a esquerda / direita. A nave em si é exibida na forma de quatro pontos a la chevron da série Star Trek, girando em torno de seu centro. Cada vetor requer uma pesquisa de sen e cos, 4 multiplicações e duas adições. No total, são obtidos 37 cálculos por rotação, que no total são cerca de 200 instruções. A nave espacial sempre será desenhada primeiro, e o nariz sempre será o primeiro par de vetores, portanto, no buffer de saída, esse par de vetores será o ponto de partida para o lançamento de foguetes.
Os mísseis são lançados pressionando o botão correspondente. Eles voam para fora da proa do navio e continuam em seu curso atual. A destruição de um foguete, do qual não mais de 16 podem ser lançados simultaneamente, ocorre quando ele colide com um asteróide ou quando atinge o raio visível do espaço. Este modelo de vôo é baseado no desenho de linhas entre a proa do navio e a borda do raio visível, onde o delta X e o delta Y são calculados no lançamento. Delta X / Y é um ponto fixo de 8,8, assim como a velocidade.

Nave no centro, asteróide abaixo Os
objetos asteróides aparecem em um ponto aleatório de raio e voam sobre ele diretamente em um ângulo entre 80 e 140 graus. Quando eles aparecem, uma posição inicial e final aleatória é gerada, que é então convertida em coordenadas cartesianas, e a questão de uma linha reta é resolvida da mesma forma que com os mísseis.
Quando um foguete atinge um asteróide, ambas as entidades são destruídas e o contador de pontuação atual é aumentado. Os objetos de exibição numéricos são obtidos da tabela de pesquisa "7 segmentos".
Toda a jogabilidade "pesada" é feita com a função "spin", que é usada para adicionar um objeto de entrada (asteróide, nave espacial, valor de 7 segmentos, etc.) ao buffer de saída. Além disso, permite que o objeto de entrada gire, bem como aplique um deslocamento ao longo dos eixos X e Y. Ao mesmo tempo, não há nada que o impeça de adicionar um pelotão 2x2 de naves alienígenas ao buffer de entrada, em seguida, pegue-os como um grupo e implante-os antes de desenhar.
Parte mecânica
Fornecer a esse dispositivo espacial uma estética já exigia muito mais esforço, embora o processo em si tenha se revelado muito mais divertido do que eu esperava. Inicialmente, a inclinação do corpo do CRT era visivelmente menor do que o planejado e, no final, demorou várias horas para encontrar uma maneira de cortar o segmento de retenção deslizante de forma que as partes superior e inferior pudessem ser conectadas de forma adequada.

Projeto Primário
Que grande diferença literalmente alguns graus podem fazer. Fiquei surpreso com o quanto da mudança estética no final, e como a primeira versão parecia torta com o ângulo mais aberto.

Conjunto: módulo CRT, segmento inferior da caixa e tampa frontal do
CRT fixados com suportes redondos de MDF colados na parte superior do compartimento. Por dentro, esses suportes são revestidos com espuma de borracha elástica em base adesiva.

Frente CRT vazia com fechadura de alojamento e marcações para placa de circuito impresso
É difícil perceber pelas fotos que o painel de controle com joystick e botões fixa com segurança o módulo CRT, evitando que seja puxado para trás.
Pacotes usados para o projeto do casco
Para o projeto inicial dos segmentos superior e inferior do corpo, foi usado o editor Inkscape com a extensão “The Laser Cut Box”. Apenas entalhes serrilhados serviram como um pacote desses segmentos. Acabei de copiar e colar o modelo final do Inkscape no Autosketch, no qual fiz todas as melhorias necessárias.
Usei um cortador a laser de 70 W para cortar blocos de MDF. O ciclo de trabalho acabou sendo rápido o suficiente, o que possibilitou a experimentação simultânea de alternativas de design.
Conclusão
Como era de se esperar, neste projeto consegui aprender muito, já que tudo, exceto talvez o microcontrolador embutido, acabou ficando além da minha experiência normal.
Obviamente, muitos jogos e aplicativos diferentes podem ser desenvolvidos com base neste dispositivo de renderização vetorial. Até agora, eu definitivamente quero adicionar um módulo de sincronização à placa (via I2C), tendo percebido minha ideia de longa data de exibir um relógio analógico. O resto das melhorias possíveis serão introduzidas gradualmente.
Um erro indecente, é claro, foi com o circuito USB mini B e a primeira tentativa malsucedida de usar um DAC com saída de corrente no modo de saída de tensão. Mas, caso contrário, nem sei o que mais eu consertaria no caso de remontar tal unidade.
No projeto atual, todos os objetivos foram alcançados, inclusive a ampliação de horizontes, durante a qual, como costuma acontecer, surgiram algumas surpresas.
Contate o autor Mark Atherton pelo e-mail markaren1@xtra.co.nz

