Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Controlador de display fluorescente a vácuo

Componentes e suprimentos

Arduino UNO
... ou qualquer outro Arduino de 8 bits
× 1
Tela VFD
nosso amigo
× 1
CD4094
Circuito integrado DIP
× 2
CD4017
Circuito integrado DIP
× 2
BC557
... ou transistor equivalente (2N3906, 2SA733, ecc) ou PNP de voltagem superior
× 17
BC547
... ou transistor equivalente (2N3904, 2SC945, ecc)
× 2
PC817
optoacoplador onipresente encontrado na maioria das PSUs de comutação, parte da linha de fundo
× 1
1N4007 - Alta tensão, diodo nominal de alta corrente
× 4
Capacitores eletrolíticos
veja o esquema para valores e tensões
× 4
Capacitor 470nF
qualquer tipo é bom
× 1
Perfboard
também conhecido como:placa de papel, protoboard ou, no caso, sua solução de montagem preferida
× 1
Resistores 1 / 4W
veja o esquema para valores
× 24
Jumpers Dupont
... ou suas conexões e postagens preferidas
× 1
Wire
fios finos para a parte traseira do circuito e também para conectar a tela, não use conectores lá porque pino o espaçamento é variável e uma soldagem rápida é apenas mais fácil
× 1

Ferramentas e máquinas necessárias

Ferro de soldar (genérico)
Arame de solda
compre em uma loja local, sem produtos baratos para isso, 0,5 mm é o preferido
Wire Clipper

Sobre este projeto





Qual é a utilidade?


Os visores VFD não são mais tendências por alguns motivos óbvios, eles são feitos de vidro ("uh legal!"), Têm um filamento incandescente ("sério ??"), são basicamente tubos de vácuo ("interessante!"), Eles fazem uma luz tão brilhante, às vezes colorida, que precisa de um plástico escuro por cima ("uh, legal de novo!").

Normalmente você precisa de um chip dedicado para acioná-los, a maioria dos módulos / aparelhos vem com este chip que você pode controlar de forma independente via I2C ou SPI (que é muito melhor em termos de facilidade), no caso de você comprar ou ter um desses monitores e falta tal chip não é tão fácil de "ligar e ir", o ideal seria comprar aquele chip (que normalmente vem no formato SMD). Este circuito oferece uma interface bastante decente como um Arduino e pode acionar qualquer VFD, incluindo os volumosos "valvulados" vintage, mas monitores de matriz com muitos segmentos não são uma boa ideia, a propósito, você pode expandir o circuito mas MILHARES ... mhhh, talvez não.





Prós e contras


Prós
  • custo quase zero (espero)
  • peças fáceis de encontrar
  • capacidade de alta tensão (até centenas de Volts nos ânodos)
  • grades independentes e tensões anódicas
  • apenas 3 linhas de dados digitais necessárias
  • expansível (requer mais trabalho de CPU no caso)
  • o código está pronto para cada Arduino de 8 bits

Contras
  • requer um monte de tensões e suprimentos diferentes (nada estranho para VFDs)
  • sem função de escurecimento (exceto de unidade de tensão)
  • usa dois recursos do Arduino, o SPI e o timer1
  • você não pode travar o microcontrolador, caso contrário, a varredura congela em uma grade
  • não é um par de resistores e leds, requer um pouco de trabalho





Princípio de operação


Um VFD geralmente funciona de forma multiplexada, como uma matriz 2D com eixos X e Y, você precisa aquecer o filamento (o cátodo, você vê aqueles fios finos na frente dele), conecte o aterramento nesse filamento também, uma tensão positiva em uma grade (grade de controle, um ponto do eixo X) e novamente uma tensão positiva em um pino de segmento (o ânodo, um ponto do eixo Y), neste ponto um segmento (apenas um) acende. Para iluminar qualquer segmento e qualquer combinação, e tendo "poucos" fios ao redor, a multiplexação seleciona uma grade por vez e ao mesmo tempo configura os ânodos para iluminar os segmentos correspondentes sob aquela grade, um momento depois, ele seleciona outra grade e configura os ânodos desta vez para que os segmentos correspondentes estejam corretamente iluminados sob aquela segunda grade. Acelerar essa varredura de repetição contínua resulta em um movimento tão rápido que sob nossos olhos não seleciona uma grade por vez, mas parece direcionado ao mesmo tempo, esse é o chamado POV (Persistence Of Vision).

Este circuito usa dois tipos de circuitos integrados da mesma família, dois CD4094 e dois CD4017, o 4094 aciona os ânodos e o 4017 aciona as grades, o 4094 pode armazenar uma configuração alto / baixo em suas saídas e são bons para os ânodos lado, os 4017 são os chips clássicos com 10 saídas de sequenciamento, perfeitos para as grades. Uma vez que o 4094 é carregado com a configuração dos ânodos de momento, o sinal "ok" (strobe) aplica esta configuração e ao mesmo tempo muda o 4017 em um passo, permitindo um sequenciamento automático.

A parte de alimentação é basicamente apenas alguns transistores BC557 (ou equivalente) que permitem uma oscilação de tensão mais ampla nos anodos, porque esses monitores requerem uma tensão maior do que os 5V do Arduino. As grades são acionadas diretamente pelo 4017, um optoacoplador PC817 permite uma tensão maior do que 5V em torno do 4017 e também um nível de tensão diferente do CD4094, isso simplifica MUITO o todo.

O Arduino deve fornecer toda a orquestração, isso significa que deve armazenar toda a configuração dos segmentos e carregar o circuito com a configuração do ânodo em cada switch de grade, isso significa que realmente requer um código inteligente para fazê-lo além da ação do usuário. O código que criei configura uma interrupção baseada em cronômetro que recarrega os chips 4094 a cada etapa, na verdade cerca de 1000 vezes por segundo, então para 10 grades dá uma taxa de atualização de 100 Hz, o que é bom. Há uma matriz de dados que armazena a configuração dos segmentos e podem ser modificados no código, sem procedimentos específicos ou ações subsequentes, a rotina de interrupção fará o upload dos dados por conta própria.





Fontes de alimentação


A tensão da rede nos chips 4017 pode ser de 5Vdc a 18Vdc e pelo menos 50mA de corrente, não precisa ser regulada. Normalmente (pelo que eu vi) 12V são suficientes para todas as situações, aumentando-o não parece aumentar muito o brilho (se for uma válvula de vácuo, a grade não requer grandes tensões).

A tensão dos ânodos pode ser literalmente de 0 V até o que quer que seus transistores possam suportar (50 Vcc para o BC557), normalmente se a tela for perfeita, 20-30 Vcc fará o trabalho perfeitamente, não regulado é bom. Para uma configuração normal, 50mA de alimentação é mais do que suficiente.

A potência digital pode ser 5Vdc ou também 3,3Vdc no caso desses tipos de Arduinos ou MCUs (ainda não tentei), isto requer cerca de 100mA de potência (esperançosamente menos), caso o CD4094 fique lento você pode reduzir o clock do SPI no código e \ ou use a saída "Q'S" do primeiro 4094 para uma comunicação mais consistente.

A alimentação do filamento deve fornecer pelo menos 5V 200-300mA de corrente, se você já tiver uma fonte DC pode evitar a ponte retificadora e o capacitor 1000uF, mas NÃO PODE usar a mesma alimentação digital para \ do Arduino. O filamento real, no caso de uma tela de aparelho não tão grande, funciona como 3V e pode consumir 150mA.












Dicas e notas

  • antes de conectar os fios, se você não sabe que pino faz o quê, é melhor tentar o visor primeiro, geralmente um par de pilhas AA em série funciona bem para o filamento (geralmente são os contatos laterais), enquanto um par de baterias de 9 V em série fornecerá a polarização positiva para grades e ânodos; grades e ânodos são frequentemente agrupados, uma boa ideia é encontrar o "ânodo zero" real porque é muito provável que seja o primeiro segmento na parte numérica ou alfanumérica, muitas vezes o mesmo e com a mesma ordem para todas as grades, colocando os fios em a ordem reversa acidentalmente torna o software mais desajeitado no final, as grades, aparentemente, seguem a ordem dos pinos
  • vá devagar no fornecimento de filamentos, aumente a corrente aos poucos, fique no escuro e no momento em que começar a ver os filamentos ficando ligeiramente incandescentes, reduza um pouco e pronto, um potenciômetro de potência é perfeito, você encontra isso às vezes em TVs antigas, mas hoje em dia é difícil
  • aumente as tensões nas grades e ânodos de maneira sã, os fósforos podem queimar irreparavelmente, o circuito também faz a varredura, portanto, se o sistema travar, você fornecerá energia demais em uma única seção da grade continuamente
  • brinque com um compromisso nas tensões das grades \ anodos, lembre-se de que as grades podem consumir alguma corrente, não vale a pena forçar isso, é melhor cuidar dos ânodos
  • usar um único transformador para todo o projeto \ configuração é ideal, também algumas soluções mistas podem ser usadas, mas trocar PSUs e especialmente as aterradas pode pregar uma peça ruim, é por isso que para experimentar é SEMPRE uma boa ideia usar o clássico suprimentos para transformadores
  • você pode expandir este driver adicionando alguns CD4094 e \ ou CD4017, claro se você precisa de 8 ânodos ou menos você pode se livrar do segundo 4094, mesmo cenário para o 4017, mas se você quiser o driver pronto à mão, basta construir tanto quanto possível
  • não há resistores nas bases dos transistores anodos como você pode ver, isso dá um drive super rápido e restringe a lista de peças, mas faz com que o CD4094 consuma um pouco de energia, eles não esquentam quase nada, mas algumas amostras de chips podem tem uma saída muito forte, verifique o consumo de corrente caso os chips não explodam, porque a potência dissipada está DENTRO do máximo permitido, a corrente pode estar na faixa de 4mA por pino com alimentação de 5V
  • telas velhas e cansadas podem ser renovadas por alguns choques de corrente nos filamentos, se é a tela inteira que está escurecida e não apenas um segmento queimado, dizem que você traz os fios visivelmente incandescentes (amarelos) como cinco vezes seguidas por um par de segundos de cada vez, nunca tentei mas pode exigir o dobro da voltagem nominal do filamento, isso limpa mas aparentemente é mais útil para os muito antigos \ antigos ... e é arriscado, não são lâmpadas, você poderia quebrar os fios

Código

  • código Arduino com rotina de trabalho
Código Arduino com rotina de trabalho Arduino
 / * Versátil VFD Display Hrdware Interface Programa Arduino Copyright (C) 2019 Genny A. Carogna Este programa é um software livre:você pode redistribuí-lo e / ou modificá-lo sob os termos da GNU General Public License publicada pela Free Software Foundation, seja a versão 3 da Licença ou (conforme sua opção) qualquer versão posterior. Este programa é distribuído na esperança de que seja útil, mas SEM NENHUMA GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou ADEQUAÇÃO A UM DETERMINADO FIM. Veja a GNU General Public License para mais detalhes. Você deve ter recebido uma cópia da GNU General Public License junto com este programa. Caso contrário, consulte . * // * este código usa recursos do Arduino de uma forma "por trás das cortinas", os módulos timer1 e SPI estão ambos usados ​​e ocupados * , então você pode ter grandes problemas usando SPI, pinos SPI e algumas funcionalidades baseadas no timer1 ... o circuito proposto * não tem uma memória onboard, então a configuração do segmento deve ser "escaneada" continuamente, a cada grade, 100 vezes por segundo *, da matriz de segmentos do Arduino, isso se traduz também no chamado trabalho de CPU "reformado", que, para você saber, é * não mais do que o uso regular de um micro no final, pode chegar a cerca de 3 % do trabalho da CPU em termos de tempo ocupado, você também pode tentar * usar as ferramentas normais de SPI do Arduino, mas isso precisa de uma análise aprofundada da saída e do procedimento * * este código funciona com qualquer Arduino de 8 bits, também 3.3V deve funcionar ok, talvez reduza a frequência SCK, considerando que os CD4094 são * alimentados ao longo dele e podem "subtensão" (sim, exatamente os princípios do overclock para fritar sua amada PC) * / # define ledLed 13 // é o pino de led que acende um led para led você sabe que um led aceso significa alguma coisa relacionada a led (cientista mumbojumbo, é claro) #define strobePin 4 // o pino do Arduino a ser dedicado a linha "strobe" # define strobeHold 10 // microssegundos // tempo de espera para alternar o optoacoplador ... não megahertz-rápido, mas aceitável // dados para meus monitores (um gravador de videocassete, um leitor de CD audiofolery e um estéreo compacto) ... não se preocupe, exclua e apenas defina "gridAmount" e "anodeAmount" #define JVC # define mitsubishiGrids 10 # define mitsubishiAnodes 9 # define marantzGrids 9 # define marantzAnodes 14 # define JVCGrids 11 # define JVCAnodes 19 # se definido mitsubishi # define gridAmount mitsubishiGrids # define anodeAmount mitsubishiAnodes # elif definido marantz # define gridAmount marantzGrids # define anodeAmount marantzAnodes # elif definido JVC # define gridAmount JVCGrids # define anodeAmount JVCAnodes # endif // esta matriz, segmentos [x] [0] significa grade zero, um d o bit menos significativo é o segmento zero nessa grade // você pode acessar e modificar este array como quiser, de qualquer lugar, sem fazer mais nada, o efeito é imediatamente visível // na tela, e permanece enquanto você não para não alterar os bits, para mais de 8 segmentos por exibição de grade, você precisa de // um contêiner de 16 ou 32 bits por grade, isso é gerenciado automaticamente a partir dos #define (s) acima # if anodeAmount> 16volatile uint32_t segmentos [gridAmount] ={0}; // mais de 16 segmentos por grade (32 bits necessários) #elif anodeAmount> 8volatile uint16_t segmentos [gridAmount] ={0}; // mais de 8 segmentos por grade (16 bits, transferência dupla) #elsevolatile uint8_t segmentos [gridAmount] ={0}; // 8 ou menos segmentos por grade (8 bits) #endifvoid setup () {// transforma os pinos SPI e alguns funcionais como saída de forma rápida \ direta * portModeRegister (digitalPinToPort (PIN_SPI_SS)) | =digitalPinToBitMask (PIN_SPI_SS); * portModeRegister (digitalPinToPort (PIN_SPI_MOSI)) | =digitalPinToBitMask (PIN_SPI_MOSI); * portModeRegister (digitalPinToPort (PIN_SPI_SCK)) | =digitalPinToBitMask (PIN_SPI_SCK); * portModeRegister (digitalPinToPort (strobePin)) | =digitalPinToBitMask (strobePin); * portOutputRegister (digitalPinToPort (strobePin)) &=~ digitalPinToBitMask (strobePin); // coloque-o baixo * portModeRegister (digitalPinToPort (ledLed)) | =digitalPinToBitMask (ledLed); * portOutputRegister (digitalPinToPort (ledLed)) &=~ digitalPinToBitMask (ledLed); // colocá-lo baixo delay (800); // algum atraso para esperar a redefinição do CD4017 ser concluída (você precisa executar o código DEPOIS de ligar o 4017s, isso o torna automático no caso de você ligar tudo de uma vez) cli (); // desativa interrupções para que possamos ajustar algumas coisas sem gatos e cachorros escapando de todos os lugares // configuração do timer1, faz uma interrupção acontecer "grids vezes 100" por segundo ... isso dá uma atualização total de 100 Hz que está ok TCCR1A =0; TCCR1B =0; TCNT1 =0; OCR1A =160000 / gridAmount; TCCR1B | =(1 < 24 SPDR =~ uint8_t (segmentos [turn]>> 24); // precisamos de bits negados no CD4094 (cos do arranjo dos transistores) while (! (SPSR &(1 < 16 SPDR =~ uint8_t (segmentos [turn]>> 16); // precisamos de bits negados no CD4094 (cos do arranjo dos transistores) while (! (SPSR &(1 < 8 SPDR =~ uint8_t (segmentos [turn]>> 8); // precisamos de bits negados no CD4094 (cos do arranjo dos transistores) while (! (SPSR &(1 < 2) pos ++; máscara uint16_t =0xFF80; números uint8_t [] ={B00111111, B00000110, B01011011, B01001111, B01100110, B01101101, B01111101, B00100111, B01111111, B01101111, B00000000}; switch (pos) {case 0:case 1:case 4:case 5:case 6:case 7:case 8:segmentos [pos] &=mask; segmentos [pos] | =números [val]; pausa; caso 2:if (val ==1) segmentos [1] | =(1 <<8); else segmentos [1] &=~ (uint16_t (1) <<8); pausa; caso 9:segmentos [9] &=0xFFF0; if (val ==1) segmentos [9] | =3; else if (val ==2) segmentos [9] | =B1101; }} // visualização fácil do número de sete segmentos evita marantzPrintNum (uint8_t val, uint8_t pos) {if (pos> 5) return; pos ++; pos ++; máscara uint16_t =0xFF80; // bitmask para excluir os números uint8_t dos dígitos [] ={B00111111, B00000110, B01011011, B01001111, B01100110, B01101101, B01111101, B00100111, B01111111, B01101111, B00000000}; segmentos [pos] &=máscara; // deleta quaisquer segmentos de dígito [pos] | =números [val]; // definir dígitos} // fácil visualização do número de sete segmentos evite JVCPrintNum (uint8_t val, uint8_t pos) {// por vir (você realmente não se importa)} // 

Esquemas

Evitei desenhar TODOS os transistores BC557 porque eles estão lá conectados em todas as saídas CD4094, todos iguais.

Há um seletor de jumper (rodando na linha vermelha) que você deve configurar nos chips 4017, ele reinicia os dois 4017 na conclusão da varredura das grades, você deve conectar (ou soldar) o jumper voador no pino de saída APÓS a última grade , então, se o seu monitor tiver 10 grades, o jumper vai para a 11ª saída.

As conexões do Arduino são destacadas em vermelho, você pode usar a alimentação USB para isso, mas é altamente recomendável usar um transformador regular antigo para as fontes restantes se você já tiver uma fonte de alimentação aterrada como o seu PC. Essas fontes devem ser todas DC, exceto talvez a fonte de filamento. Eu adicionei alguns diodos porque é provável que você precise de um transformador separado com um secundário de baixa tensão. A potência do filamento geralmente varia em torno de 3 V 150 mA, um transformador de 5 V CA será suficiente. O "lastro" possivelmente será um potenciômetro de potência de fio em torno de 100 ohms, ou um resistor fixo, ou também alguns diodos 1N4007 para reduzir a voltagem.

Os transistores BC557 puxam os anodos até a voltagem anódica e os resistores de 100kohm vão deixar a voltagem cair quando o segmento está desligado, enquanto o CD4094 permanece em 5V normalmente.

Os CD4017s serão alimentados com tensão de rede e não requerem transistores adicionais. Há um circuito de reinicialização do "gueto" para o 4017 que dura cerca de um décimo de segundo, você tem que esperar que ele se estabilize antes de executar o código.
O esquema "original" para cascatear alguns CD4017 exigiu outros chips de portas lógicas, usei, em vez disso, um transistor NPN e o próprio optoacoplador para replicar uma porta AND, é rápido o suficiente para fechar, então é perfeito para a tarefa, mas liberá-lo é um pouco mais lento mas não nos importamos, especialmente porque as entradas de clock no 4017 são acionadas por schmitt e a velocidade necessária não é "assustadora" aqui.

Existem vários motivos para os chips e outras coisas, como você pode ver, dê uma boa olhada.

Processo de manufatura

  1. Compilação de boneca Squid Games usando Arduino UNO
  2. Animação de bitmap em ILI9341 TFT Touchscreen Display Shield
  3. Controlador DMX operado pela web
  4. Jogo Arduino Pong - Tela OLED
  5. Controlador de jogo Arduino
  6. Unopad - Controlador Arduino MIDI com Ableton
  7. Arduino Temp. Monitor e relógio em tempo real com tela 3.2
  8. Brincando com Nextion Display
  9. Voltímetro DIY com Arduino e um visor Nokia 5110
  10. BME280 Temperatura, Umidade e Pressão na Tela Nextion