Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Contrôleur d'affichage fluorescent à vide

Composants et fournitures

Arduino UNO
...ou n'importe quel Arduino 8 bits
× 1
Affichage VFD
notre copain
× 1
CD4094
Circuit intégré DIP
× 2
CD4017
Circuit intégré DIP
× 2
BC557
...ou transistor équivalent (2N3906, 2SA733, ecc) ou PNP à tension supérieure
× 17
BC547
...ou transistor équivalent (2N3904, 2SC945, ecc)
× 2
PC817
optocoupleur omniprésent trouvé dans la plupart des blocs d'alimentation de commutation, partie de résultat
× 1
1N4007 – Diode haute tension et courant nominal élevé
× 4
Condensateurs électriques
voir le schéma pour les valeurs et les tensions
× 4
Condensateur 470nF
quel que soit le type qui convient
× 1
Perfboard
aka :paper board, protoboard, ou au cas où votre solution d'assemblage préférée
× 1
Résistances 1/4W
voir le schéma pour les valeurs
× 24
Cavaliers Dupont
...ou vos connexions et publications préférées
× 1
Fil
des fils fins pour l'arrière du circuit et aussi pour brancher l'écran, n'utilisez pas de connecteurs là-bas car la broche l'espacement est variable et une soudure rapide est juste plus facile
× 1

Outils et machines nécessaires

Fer à souder (générique)
Fil à souder
achetez-le dans un magasin local, pas de trucs bon marché pour cela, 0,5 mm est préférable
Coupe-fil

À propos de ce projet

À quoi ça sert ?

Les écrans VFD ne sont plus à la mode pour des raisons évidentes, ils sont en verre ("euh cool!"), ont un filament incandescent ("vraiment ??"), ce sont essentiellement des tubes à vide ("intéressant!"), ils font une lumière si brillante, parfois colorée, qu'elle a besoin d'un plastique foncé sur le dessus ("euh, encore cool!").

Habituellement, vous avez besoin d'une puce dédiée pour les piloter, la plupart des modules/appareils sont livrés avec cette puce que vous pouvez contrôler indépendamment via I2C ou SPI (c'est bien mieux en termes de facilité), au cas où vous achèteriez ou possédez l'un de ces écrans et manquez une telle puce, il n'est pas si facile de "se connecter et de partir", l'idéal serait d'acheter cette puce (qui se présente généralement au format SMD). Ce circuit donne une interface assez décente comme un Arduino et peut très probablement piloter n'importe quel VFD, y compris les volumineux "tubes" vintage, mais les affichages matriciels avec beaucoup de segments ne sont pas une bonne idée d'ailleurs, vous pouvez étendre le circuit mais des MILLIERS... mhhh, peut-être pas.

Avantages et inconvénients

Avantages

  • coût presque nul (espérons-le)
  • pièces faciles à trouver
  • capacité haute tension (jusqu'à des centaines de volts sur les anodes)
  • tensions indépendantes des réseaux et des anodes
  • seulement 3 lignes de données numériques nécessaires
  • extensible (il nécessite plus de travail CPU au cas où)
  • le code est prêt à l'emploi pour chaque Arduino 8 bits

Inconvénients

  • nécessite un tas de tensions et d'alimentations différentes (pas bizarre pour les VFD)
  • pas de fonction de gradation (sauf à partir du variateur de tension)
  • utilise deux ressources Arduino, le SPI et timer1
  • vous ne pouvez pas accrocher le microcontrôleur, sinon le scan se fige sur une grille
  • ce n'est pas une paire de résistances et de Leds, ça demande un peu de travail

Principe de fonctionnement

Un VFD fonctionne généralement de manière multiplexée, comme une matrice 2D avec les axes X et Y, vous devez chauffer le filament (la cathode, vous voyez ces fils minces devant), connecter également la terre sur ce filament, une tension positive sur une grille (grille de contrôle, un point de l'axe X) et à nouveau une tension positive sur une broche de segment (l'anode, un point de l'axe Y), à ce stade un segment (un seul) s'allume. Pour éclairer n'importe quel segment et n'importe quelle combinaison, et ayant « peu » de fils autour, le multiplexage sélectionne une grille à la fois et configure en même temps les anodes pour éclairer les segments correspondants sous cette grille, un instant après, il sélectionne une autre grille et configure les anodes cette fois pour avoir les segments correspondants correctement éclairés sous cette deuxième grille. L'accélération de ce balayage répété en continu entraîne un mouvement si rapide que sous nos yeux, il ne sélectionne pas une grille à la fois, mais semble entraîné à la fois, c'est ce qu'on appelle le POV (Persistence Of Vision).

Ce circuit utilise deux types de circuits intégrés de la même famille, deux CD4094 et deux CD4017, le 4094 pilote les anodes et le 4017 pilote les grilles à la place, le 4094 peut stocker une configuration high\low sur leurs sorties et est bon pour les anodes Côté, les 4017 sont les puces classiques avec 10 sorties séquenceurs, parfaites pour les grilles. Une fois que le 4094 est chargé avec le moment de la configuration des anodes, le signal "ok" (stroboscope) applique cette configuration et en même temps commute le 4017 d'un pas, permettant un séquencement automatique.

La partie puissance ne comprend essentiellement que quelques transistors BC557 (ou équivalents) qui permettent une oscillation de tension plus large sur les anodes, car ces affichages nécessitent une tension plus élevée que le 5V de l'Arduino. Les grilles sont pilotées directement par le 4017, un optocoupleur PC817 permet une tension supérieure à 5V autour du 4017 et également un niveau de tension différent du CD4094, cela simplifie BEAUCOUP l'ensemble.

L'Arduino doit fournir toute l'orchestration, cela signifie qu'il doit stocker toute la configuration des segments et charger le circuit avec la configuration de l'anode à chaque commutateur de grille, cela signifie qu'il nécessite vraiment un code intelligent pour le faire au-delà de l'action de l'utilisateur. Le code que j'ai créé configure une interruption basée sur une minuterie qui recharge les puces 4094 à chaque étape, en fait environ 1000 fois par seconde, donc pour 10 grilles, cela donne un taux de rafraîchissement de 100 Hz, c'est bien. Il existe un tableau de données qui stocke la configuration des segments et peut être modifié dans le code, sans procédures particulières ni actions ultérieures, la routine d'interruption téléchargera les données par elle-même.

Alimentations

La tension des grilles sur les puces 4017 peut aller de 5Vdc à 18Vdc et au moins 50mA de courant, elle n'a pas besoin d'être régulée. Habituellement (d'après ce que j'ai vu) 12V suffiront pour chaque situation, l'augmenter ne semble pas augmenter beaucoup la luminosité (s'il s'agit d'un tube à vide, la grille ne nécessite pas de tensions énormes).

La tension des anodes peut aller de littéralement 0V à tout ce que vos transistors peuvent supporter (50Vdc pour le BC557), généralement si l'affichage est parfait, un 20-30Vdc fera parfaitement l'affaire, non régulé est bon. Pour une configuration normale, 50 mA d'alimentation sont plus que suffisants.

L'alimentation numérique peut être de 5Vdc ou également de 3,3Vdc dans le cas de ces types d'Arduinos ou de MCU (pas encore essayé), cela nécessite environ 100mA de puissance (espérons-le moins), au cas où le CD4094 deviendrait lent, vous pouvez réduire l'horloge SPI dans le code et/ou utilisez la sortie "Q'S" du premier 4094 pour une communication plus cohérente.

L'alimentation du filament doit fournir au moins 5V 200-300mA de courant, si vous avez déjà une source CC, vous pouvez éviter le pont redresseur et le condensateur 1000uF, mais vous NE POUVEZ PAS utiliser la même alimentation numérique pour\de l'Arduino. Le filament réel dans le cas d'un écran d'appareil pas si grand fonctionne comme 3V et peut tirer 150mA.

Conseils et remarques

  • avant de brancher les fils, si vous ne savez pas quelle broche fait quoi, il est préférable d'essayer d'abord l'affichage, généralement une paire de piles AA en série ira bien pour le filament (généralement ce sont les contacts latéraux), tandis qu'une paire de piles 9V en série fournira la polarisation positive pour les grilles et les anodes ; les grilles et les anodes sont souvent regroupées, une bonne idée est de trouver le "zéro anode" réel car c'est très probablement le premier segment sur la partie numérique ou alphanumérique, souvent le même et avec le même ordre pour toutes les grilles, en mettant les fils dans l'ordre inverse par accident rend le logiciel plus maladroit à la fin, les grilles à la place, apparemment, suivent l'ordre des broches
  • allez doucement sur l'alimentation en filament, augmentez le courant petit à petit, restez dans l'obscurité et au moment où vous commencez à voir les filaments devenir légèrement incandescents réduisez un peu et vous avez terminé, un potentiomètre de puissance est parfait, vous les trouvez parfois dans vieilles télés mais c'est difficile de nos jours
  • augmenter les tensions sur les grilles et les anodes de manière saine, les luminophores peuvent brûler de manière irréparable, le circuit fonctionne également en scannant, donc si le système se bloque, vous fournirez trop de puissance sur une seule section de grille en continu
  • jouer avec un compromis sur les tensions des grilles\anodes, attention que les grilles pourraient consommer du courant, cela ne vaut pas la peine de pousser là-dessus, mieux vaut faire attention aux anodes
  • l'utilisation d'un seul transformateur pour l'ensemble de votre projet\la configuration est idéale, certaines solutions mixtes peuvent également être utilisées, mais le fait de changer de bloc d'alimentation et en particulier de ceux mis à la terre peut vous jouer une mauvaise blague, c'est pourquoi pour expérimenter, c'est TOUJOURS une bonne idée d'utiliser le classique fournitures de transformateur
  • vous pouvez étendre ce pilote en ajoutant quelques CD4094 et/ou CD4017, bien sûr si vous avez besoin de 8 anodes ou moins vous pouvez vous débarrasser du deuxième 4094, même scénario pour le 4017, mais si vous voulez le pilote prêt à portée de main il suffit de construire le plus complet possible
  • il n'y a pas de résistances sur les bases des transistors d'anodes comme vous pouvez le voir, cela donne un entraînement ultra-rapide et réduit la liste des pièces mais fait que le CD4094 consomme de l'énergie, ils ne chaufferont presque pas du tout mais certains spécimens de puces peuvent avoir une sortie trop forte, vérifiez la consommation de courant au cas où les puces ne exploseraient pas, car la puissance dissipée est À L'INTÉRIEUR du maximum autorisé, le courant peut être de l'ordre de 4 mA par broche à une alimentation de 5 V
  • les vieux écrans fatigués peuvent être renouvelés par quelques chocs de courant sur les filaments, si c'est tout l'écran qui est sombre et pas seulement un segment brûlé, ils disent que vous apportez les fils visiblement incandescents (jaunes) genre cinq fois de suite pendant une paire de secondes à chaque fois, je ne l'ai jamais essayé mais cela peut nécessiter le double de la tension nominale du filament, cela les nettoie mais apparemment c'est plus utile pour les très anciens/antiquités... et c'est risqué, ce ne sont pas des ampoules, vous pouvez casser les fils

Code

  • Code Arduino avec routine de travail
Code Arduino avec routine de travailArduino
/* Versatile VFD Display Hrdware Interface Arduino Program Copyright (C) 2019 Genny A. Carogna Ce programme est un logiciel libre :vous pouvez le redistribuer et/ou le modifier selon les termes de la licence publique générale GNU telle que publiée par le Free Software Foundation, soit la version 3 de la Licence, soit (à votre choix) toute version ultérieure. Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE; sans même la garantie implicite de QUALITÉ MARCHANDE ou D'ADAPTATION À UN USAGE PARTICULIER. Voir la licence publique générale GNU pour plus de détails. Vous devriez avoir reçu une copie de la licence publique générale GNU avec ce programme. Sinon, voir .*//* ce code utilise les ressources de l'Arduino d'une manière "derrière les rideaux", les modules timer1 et SPI sont à la fois utilisés et occupés * , vous pouvez donc avoir de gros problèmes avec SPI, les broches SPI et certaines fonctionnalités basées sur timer1... par seconde * , à partir du tableau de segments Arduino, cela se traduit également sur le travail CPU dit "surchargé", que, pour que vous sachiez, ce n'est * que l'utilisation régulière d'un micro à la fin, cela peut atteindre environ 3 % de travail du processeur en termes de temps occupé, vous pouvez également essayer * d'utiliser les outils SPI réguliers d'Arduino mais cela nécessite une analyse approfondie de la sortie et de la procédure * * ce code fonctionne avec n'importe quel Arduino 8 bits, également 3,3 V devrait fonctionner ok, réduisez peut-être la fréquence SCK, étant donné que les CD4094 sont * alimentés par lui et peuvent "sous-volter" (oui, exactement les principes d'overclocking pour faire frire votre bien-aimé PC) */#define ledLed 13 // c'est la broche led qui conduit une led sur led vous savez qu'une led allumée signifie des trucs liés à la led (mumbojumbo scientifique bien sûr) #define strobePin 4 // la broche Arduino à dédier à la ligne "strobe" #define strobeHold 10 // microsecondes // temps de maintien pour commuter l'optocoupleur... pas rapide en mégahertz mais acceptable // données pour mes écrans (un magnétoscope, un lecteur de CD audio et une chaîne stéréo compacte) ... ne vous en faites pas, supprimez et définissez simplement "gridAmount" et "anodeAmount"#define JVC#define mitsubishiGrids 10#define mitsubishiAnodes 9#define marantzGrids 9#define marantzAnodes 14#define JVCGrids 11#define JVCAnodes 19#if défini mitsubishi# define gridAmount mitsubishiGrids#define anodeAmount mitsubishiAnodes#elifdefined marantz#define gridAmount marantzGrids#define anodeAmount marantzAnodes#elifdefined JVC#define gridAmount JVCGrids#define anodeAmount JVCAnodes#endif//]/ ce tableau, les segments[segment] [0] signifie grille zéro, un d le bit le moins significatif est le segment zéro dans cette grille// vous pouvez accéder et modifier ce tableau à votre guise, d'où, sans rien faire d'autre, l'effet est immédiatement visible sur // l'affichage, et reste allumé tant que vous ne ne changez pas les bits, pour plus de 8 segments par grille s'affiche, vous avez besoin d'un// conteneur 16 ou 32 bits par grille, cela est géré automatiquement à partir des #define(s) ci-dessus#if anodeAmount> 16volatile uint32_t segments[gridAmount] ={0} ; // plus de 16 segments par grille (32 bits nécessaires)#elif anodeAmount> 8volatile uint16_t segments[gridAmount] ={0}; // plus de 8 segments par grille (16 bits, transfert double)#elsevolatile uint8_t segments[gridAmount] ={0}; // 8 segments ou moins par grille (8 bits)#endifvoid setup(){ // transforme les broches SPI et certaines broches fonctionnelles en sortie de manière rapide\directe *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); // le mettre bas *portModeRegister(digitalPinToPort(ledLed)) |=digitalPinToBitMask(ledLed); *portOutputRegister(digitalPinToPort(ledLed)) &=~digitalPinToBitMask(ledLed); // met le délai bas (800); // un certain délai pour attendre la fin de la réinitialisation du CD4017 (vous devez exécuter le code APRÈS avoir allumé les 4017, cela le rend automatique au cas où vous allumeriez tout en une fois) cli(); // désactive les interruptions pour nous permettre de modifier certaines choses sans que les chats et les chiens ne s'échappent partout // configuration de timer1, cela provoque une interruption "grilles fois 100" par seconde... cela donne un rafraîchissement total de 100 Hz qui est ok TCCR1A =0; TCCR1B =0 ; TCNT1 =0 ; OCR1A =160000 / gridAmount ; TCCR1B |=(1 < 24 SPDR =~uint8_t(segments[turn]>> 24); // nous avons besoin de bits inversés sur le CD4094 (cos du montage des transistors) while (!(SPSR &(1 < 16 SPDR =~uint8_t(segments[turn]>> 16); // nous avons besoin de bits inversés sur le CD4094 (cos du montage des transistors) while (!(SPSR &(1 < 8 SPDR =~uint8_t(segments[turn]>> 8); // nous avons besoin de bits inversés sur le CD4094 (cos du montage des transistors) while (!(SPSR &(1 < 2) pos ++; masque uint16_t =0xFF80; uint8_t numéros[] ={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 :segments[pos] &=mask; segments[pos] |=nombres[val] ; Pause; cas 2 :si (val ==1) segments[1] |=(1 <<8); else segments[1] &=~(uint16_t(1) <<8); Pause; cas 9 :segments[9] &=0xFFF0; si (val ==1) segments[9] |=3; sinon si (val ==2) segments[9] |=B1101; }}// visualisation facile du numéro de sept segments marantzPrintNum(uint8_t val, uint8_t pos) { if (pos> 5) return; pos ++; pos ++; masque uint16_t =0xFF80; // masque de bits pour supprimer le chiffre uint8_t numéros[] ={B00111111, B00000110, B01011011, B01001111, B01100110, B01101101, B01111101, B00100111, B01111111, B01101111, B00000000} ; segments[pos] &=masque; // supprime tous les segments de chiffres[pos] |=nombres[val]; // set digit}// easy peasy sept segments visualizationvoid JVCPrintNum(uint8_t val, uint8_t pos) { // à venir (vous vous en fichez vraiment)}//

Schémas

J'ai évité de dessiner TOUS les transistors BC557 car ils sont juste là connectés sur toutes les sorties du CD4094, tout de même.

Il y a un sélecteur de cavalier (passant sur la ligne rouge) que vous devez configurer sur les puces 4017, il réinitialise les deux 4017 à la fin du balayage des grilles, vous devez connecter (ou souder) le cavalier volant sur la broche de sortie APRÈS la dernière grille , donc si votre écran a 10 grilles, le cavalier passe sur la 11ème sortie.

Les connexions Arduino sont encadrées en rouge, vous pouvez utiliser l'alimentation USB pour cela, mais il est fortement conseillé d'utiliser un transformateur classique à l'ancienne pour les alimentations restantes si vous disposez déjà d'une alimentation mise à la terre comme votre PC. Ces alimentations doivent être toutes en courant continu sauf peut-être l'alimentation en filament, j'ai ajouté des diodes car il est probable que vous ayez besoin d'un transformateur séparé avec un secondaire basse tension. La puissance du filament se situe généralement autour de 3V 150mA, un transformateur 5V AC suffira. Le "ballast" sera peut-être un potentiomètre de puissance filaire d'environ 100 ohms, ou une résistance fixe, ou encore des diodes 1N4007 pour réduire la tension.

Les transistors BC557 tirent les anodes jusqu'à la tension anodique et les résistances de 100kohm laisseront la tension chuter lorsque le segment est éteint, tandis que le CD4094 reste à 5V normalement.

Les CD4017 seront alimentés par la tension du réseau et ne nécessitent pas de transistors supplémentaires. Il existe un circuit de réinitialisation "ghetto" pour le 4017 qui dure environ un dixième de seconde, vous devez attendre qu'il se règle avant d'exécuter le code.
Le schéma "original" pour la mise en cascade de certains CD4017 nécessitait d'autres puces de portes logiques, j'ai utilisé à la place un transistor NPN et l'optocoupleur lui-même pour répliquer une porte ET, c'est assez rapide à la fermeture donc c'est parfait pour la tâche, à la libération c'est plutôt un peu plus lent mais on s'en fiche, surtout parce que les entrées d'horloge du 4017 sont déclenchées par schmitt et que la vitesse requise n'y est pas "effrayante".

Il existe différents motifs pour les chips et autres, comme vous pouvez le voir, regardez bien.

Processus de fabrication

  1. Construire une poupée Squid Games avec Arduino UNO
  2. Animation bitmap sur le bouclier d'affichage à écran tactile TFT ILI9341
  3. Contrôleur DMX Web
  4. Jeu Arduino Pong - Écran OLED
  5. Contrôleur de jeu Arduino
  6. Unopad - Contrôleur MIDI Arduino avec Ableton
  7. Arduino Temp. Moniteur et horloge en temps réel avec affichage 3.2
  8. Jouer avec Nextion Display
  9. Voltmètre DIY avec Arduino et un écran Nokia 5110