Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Vacuüm TL-beeldschermcontroller

Componenten en benodigdheden

Arduino UNO
...of welke 8 bits Arduino dan ook
× 1
VFD-weergave
onze vriend
× 1
CD4094
DIP-geïntegreerd circuit
× 2
CD4017
DIP-geïntegreerd circuit
× 2
BC557
...of gelijkwaardige transistor (2N3906, 2SA733, ecc) of PNP-transistors met een hoger voltage
× 17
BC547
...of gelijkwaardige transistor (2N3904, 2SC945, ecc)
× 2
PC817
alomtegenwoordige optocoupler gevonden in de meeste schakelende PSU's, onderste regel
× 1
1N4007 – Diode voor hoge spanning, hoge stroomsterkte
× 4
Elektrolitische condensatoren
zie schema voor waarden en spanningen
× 4
470nF-condensator
wat voor type ook goed is
× 1
Perfboard
ook bekend als:karton, protoboard, of in het geval dat uw voorkeursmontageoplossing is
× 1
1/4W-weerstanden
zie schema voor waarden
× 24
Dupont-jumpers
...of je favoriete connecties en posts
× 1
Draad
dunne draden voor de achterkant van het circuit en ook om het scherm aan te sluiten, gebruik daar geen connectoren omdat pin tussenruimte is variabel en snel solderen is gewoon makkelijker
× 1

Benodigde gereedschappen en machines

Soldeerbout (algemeen)
Soldeerdraad
koop het in een plaatselijke winkel, geen goedkope spullen hiervoor, 0,5 mm heeft de voorkeur
Draadklipper

Over dit project

Wat is het nut?

VFD-schermen zijn om een ​​aantal voor de hand liggende redenen niet meer populair, ze zijn gemaakt van glas ("uh cool!"), hebben een gloeilamp ("echt??"), Ze zijn in feite vacuümbuizen ("interessant!"), Ze maken een licht dat zo briljant is, soms gekleurd, dat er een donker plastic bovenop nodig is ("uh, cool weer!").

Meestal heb je een speciale chip nodig om em aan te drijven, de meeste modules/apparaten worden geleverd met deze chip die je onafhankelijk kunt aansturen via I2C of SPI (dat is veel beter qua gemak), voor het geval je een van die displays koopt of hebt en niet zo'n chip is het niet zo eenvoudig om "aan te sluiten en te gaan", het ideaal zou zijn om die chip te kopen (die meestal in SMD-formaat wordt geleverd). Dit circuit geeft een behoorlijk behoorlijke interface voor zoals een Arduino en kan vrijwel elke VFD aansturen, inclusief de omvangrijke "tube" vintage exemplaren, maar matrixdisplays met veel segmenten zijn trouwens geen goed idee, je kunt het circuit uitbreiden maar DUIZENDEN... mhhh, misschien niet.

Voors en tegens

Pluspunten

  • bijna geen kosten (hopelijk)
  • gemakkelijk te vinden onderdelen
  • hoogspanningsvermogen (tot honderden volt op de anodes)
  • onafhankelijke net- en anodespanningen
  • slechts 3 digitale datalijnen nodig
  • uitbreidbaar (het vereist meer CPU-werk voor het geval dat)
  • code is klaar voor elke 8-bit Arduino

Nadelen

  • vereist een heleboel verschillende spanningen en voedingen (niet raar voor VFD's)
  • geen dimfunctie (behalve van spanningsaandrijving)
  • gebruikt twee Arduino-bronnen, de SPI en timer1
  • je kunt de microcontroller niet ophangen, anders bevriest de scan op een rooster
  • het is geen paar weerstanden en leds, het vereist wat werk

Werkingsprincipe

Een VFD werkt meestal op een multiplex manier, zoals een 2D-matrix met X- en Y-as, je moet de gloeidraad opwarmen (de kathode, je ziet die dunne draden ervoor), sluit ook de grond op die gloeidraad aan, een positieve spanning op een rooster (stuurrooster, één punt van de X-as) en weer een positieve spanning op een segmentpen (de anode, één punt van de Y-as), op dit punt licht een segment (slechts één) op. Om welk segment en welke combinatie dan ook te verlichten, en met "weinig" draden in de buurt, selecteert de multiplexing één raster per keer en configureert tegelijkertijd de anodes om de corresponderende segmenten onder dat raster te verlichten, een moment daarna selecteert het een ander raster en configureert de anodes deze keer om de corresponderende segmenten correct te laten oplichten onder dat tweede raster. Het versnellen van deze continu herhalende scan resulteert in een beweging die zo snel gaat dat het onder onze ogen niet één raster per keer selecteert, maar er in één keer gedreven uitziet, dit is de zogenaamde POV (Persistence Of Vision).

Dit circuit maakt gebruik van twee soorten geïntegreerde schakelingen van dezelfde familie, twee CD4094 en twee CD4017, de 4094 stuurt de anodes aan en de 4017 stuurt de roosters aan. kant, de 4017 zijn de klassieke chips met 10 sequencing-uitgangen, perfect voor de rasters. Zodra de 4094 zijn geladen met de momentane anodeconfiguratie, past het "ok"-signaal (stroboscoop) deze opstelling toe en schakelt tegelijkertijd de 4017 met één stap, waardoor een automatische volgordebepaling mogelijk is.

Het vermogensgedeelte bestaat in feite uit slechts enkele BC557-transistoren (of equivalent) die een grotere spanningszwaai op de anodes mogelijk maken, omdat deze displays een hogere spanning vereisen dan de 5V van de Arduino. De roosters worden rechtstreeks door de 4017 aangestuurd, een PC817 optocoupler zorgt voor een hogere spanning dan 5V rond de 4017 en ook een ander spanningsniveau dan de CD4094, dit vereenvoudigt VEEL het geheel.

De Arduino moet alle orkestratie bieden, het betekent dat alle segmentconfiguratie moet worden opgeslagen en het circuit moet worden geladen met de anode-instelling bij elke rasterschakelaar, dit betekent dat er echt een slimme code nodig is om het buiten de gebruikersactie te doen. De code die ik heb gemaakt, stelt een op timer gebaseerde interrupt in die de 4094-chips bij elke stap opnieuw laadt, eigenlijk ongeveer 1000 keer per seconde, dus voor 10 rasters geeft het een verversingssnelheid van 100 Hz, dat is goed. Er is een reeks gegevens die de configuratie van de segmenten opslaat en in-code kan worden gewijzigd, zonder speciale procedures of daaropvolgende acties, zal de interruptroutine de gegevens zelf uploaden.

Voedingen

De netspanning op de 4017-chips kan van 5Vdc tot 18Vdc zijn en minimaal 50mA stroom, het hoeft niet te worden geregeld. Meestal (voor zover ik heb gezien) is 12V voldoende voor elke situatie, het verhogen ervan lijkt de helderheid niet veel te verhogen (als het een vacuümbuis is, heeft het rooster geen enorme spanningen nodig).

De anodespanning kan letterlijk 0V zijn tot wat je transistors ook kunnen weerstaan ​​(50Vdc voor de BC557), meestal als het display perfect is, zal een 20-30Vdc het werk perfect doen, niet gereguleerd is goed. Voor een normale opstelling is 50mA voeding meer dan genoeg.

De digitale stroom kan 5Vdc zijn of ook 3,3Vdc in het geval van dat soort Arduino's of MCU's (nog niet geprobeerd), dit vereist 100mA stroom (hopelijk minder), in het geval dat de CD4094 traag wordt, kunt u de SPI-klok in code verminderen en\of gebruik de "Q'S"-uitvoer van de eerste 4094 voor een meer consistente communicatie.

De filamentvoeding moet minimaal 5V 200-300mA stroom leveren, als je al een DC-bron hebt, kun je de bruggelijkrichter en 1000uF-condensator vermijden, maar je KUNT NIET dezelfde digitale voeding gebruiken voor\van de Arduino. De eigenlijke gloeidraad in het geval van een niet zo groot apparaatdisplay werkt op 3V en kan 150mA trekken.

Tips en opmerkingen

  • voordat je de draden aansluit, is het beter om, als je niet weet welke pin wat doet, eerst het scherm te proberen, meestal is een paar AA-batterijen in serie goed voor de gloeidraad (meestal zijn het de zijcontacten), terwijl een paar 9V-batts in serie de positieve polarisatie voor zowel roosters als anodes zal bieden; roosters en anodes zijn vaak gegroepeerd, het is een goed idee om de werkelijke "anode-nul" te vinden, omdat dit vrij waarschijnlijk het eerste segment op het numerieke of alfanumerieke deel is, vaak hetzelfde en met dezelfde volgorde voor alle roosters, waarbij de draden worden geplaatst per ongeluk omgekeerde volgorde maakt de software onhandiger aan het einde, in plaats daarvan volgen rasters blijkbaar de pinvolgorde
  • doe rustig aan met de filamenttoevoer, verhoog de stroom beetje bij beetje, blijf in het donker en op het moment dat je begint te zien dat de filamenten licht gloeien, gewoon een beetje verminderen en je bent klaar, een vermogenspotentiometer is perfect, je vindt deze soms in oude tv's, maar tegenwoordig is het moeilijk
  • verhoog de spanningen op roosters en anodes op een gezonde manier, de fosforen kunnen onherstelbaar verbranden, het circuit werkt ook scannend, dus als het systeem vastloopt, levert u continu te veel stroom op een enkel rastergedeelte
  • speel met een compromis over de spanningen van de roosters\anodes, denk eraan dat de roosters wat stroom kunnen verbruiken, het is niet de moeite waard om daarop te drukken, let maar op de anodes
  • het gebruik van een enkele transformator voor je hele project\setup is ideaal, ook sommige gemengde oplossingen kunnen worden gebruikt, maar het wisselen van PSU's en vooral geaarde kan je een slechte grap uithalen, daarom is het voor experimenteren ALTIJD een goed idee om klassiek te gebruiken transformator benodigdheden
  • je kunt deze driver uitbreiden door wat CD4094 en/of CD4017 toe te voegen, natuurlijk als je 8 anodes of minder nodig hebt, kun je de tweede 4094 verwijderen, hetzelfde scenario voor de 4017, maar als je de driver bij de hand wilt hebben, bouw dan gewoon het zo volledig mogelijk maken
  • er zijn geen weerstanden op de bases van de anodetransistors zoals je kunt zien, dit geeft een supersnelle drive en verkleint de onderdelenlijst, maar zorgt ervoor dat de CD4094 wat stroom verbruikt, ze zullen bijna helemaal niet opwarmen, maar sommige exemplaren van chips kunnen een te sterke output hebben, controleer het stroomverbruik voor het geval dat de chips niet doorslaan, omdat het gedissipeerde vermogen BINNEN de maximaal toegestane stroom is, de stroom kan in het bereik van 4 mA per pin zijn bij 5V voeding
  • oude, vermoeide displays kunnen worden vernieuwd door enkele stroomschokken op de filamenten, als het hele display zwak is en niet alleen een verbrand segment, zeggen ze dat je de draden vijf keer achter elkaar zichtbaar gloeiend (geel) brengt elke keer een paar seconden, nooit geprobeerd, maar het kan twee keer de nominale spanning van de gloeidraad vereisen, dit reinigt ze, maar blijkbaar is het nuttiger voor zeer oude\antieke... en het is riskant, dat zijn geen gloeilampen, je zou de draden kunnen breken

Code

  • Arduino-code met werkroutine
Arduino-code met werkroutineArduino
/* Veelzijdige VFD-weergave Hrdware-interface Arduino-programma Copyright (C) 2019 Genny A. Carogna Dit programma is gratis software:u kunt het herdistribueren en/of wijzigen onder de voorwaarden van de GNU General Public License zoals gepubliceerd door de Free Software Foundation, ofwel versie 3 van de Licentie, of (naar uw keuze) een latere versie. Dit programma wordt verspreid in de hoop dat het nuttig zal zijn, maar ZONDER ENIGE GARANTIE; zonder zelfs de impliciete garantie van VERKOOPBAARHEID of GESCHIKTHEID VOOR EEN BEPAALD DOEL. Zie de GNU General Public License voor meer details. U zou samen met dit programma een kopie van de GNU General Public License moeten hebben ontvangen. Als dat niet het geval is, zie .*//* deze code gebruikt bronnen van de Arduino op een "achter de gordijnen" manier, de timer1- en SPI-modules zijn beide gebruikt en bezet * , dus u kunt grote problemen hebben met het gebruik van SPI, SPI-pinnen en sommige functionaliteiten op basis van timer1 ... het voorgestelde circuit * heeft geen ingebouwd geheugen, dus de segmentconfiguratie moet continu worden "gescand", elk raster, 100 keer per seconde * , van de Arduino-segmentenarray, vertaalt dit zich ook naar het zogenaamde "overhaed" CPU-werk, dat, voor u weet, het * niet meer is dan normaal gebruik van een micro aan het einde, het kan rond de 3 raken % van CPU-werk in termen van bezette tijd, je kunt ook proberen * de reguliere SPI-tools van Arduino te gebruiken, maar het vereist een diepgaande analyse van de outtake en procedure * * deze code werkt met elke 8 bit Arduino, ook 3.3V zou moeten werken ok, verlaag misschien de SCK-frequentie, aangezien de CD4094 er * langs wordt aangedreven en kan "ondervolten" (ja, precies de overklokprincipes om je geliefde te braden PC) */#define ledLed 13 // het is de led-pin die leds een led aan om led je weet dat een led aan led-gerelateerde dingen betekent (wetenschapper mumbojumbo natuurlijk)#define strobePin 4 // de Arduino-pin om aan te wijden de "stroboscoop" lijn#define strobeHold 10 // microseconden // houdtijd om de optocoupler te schakelen... niet megahertz-snel maar acceptabel// data voor mijn beeldschermen (een videocassetterecorder, een audiofoolery cd-lezer en een compacte stereo) ... let niet op, verwijder en definieer gewoon "gridAmount" en "anodeAmount"#define JVC#define mitsubishiGrids 10#define mitsubishiAnodes 9#define marantzGrids 9#define marantzAnodes 14#define JVCGrids 11#define JVCAnodes 19#if defined mitsubishi# definieer gridAmount mitsubishiGrids#define anodeAmount mitsubishiAnodes#elif gedefinieerd marantz#define gridAmount marantzGrids#define anodeAmount marantzAnodes#elif gedefinieerd JVC#define gridAmount JVCGrids#define anodeAmount JVCAnodes#endif// deze array, slaat segmenten op [x] [0] betekent raster nul, an d het minst significante bit is segment nul in dat raster// u kunt deze array openen en wijzigen zoals u wilt, van waar dan ook, zonder iets anders te doen, het effect is onmiddellijk zichtbaar op// het scherm en blijft aan zolang u niet verander de bits niet, voor meer dan 8 segmenten per rasterweergave heb je een// 16 of 32 bit container per raster nodig, dit wordt automatisch beheerd vanuit de #define(s) hierboven#if anodeAmount> 16volatile uint32_t segments[gridAmount] ={0}; // meer dan 16 segmenten per raster (32 bit nodig) #elif anodeAmount> 8volatile uint16_t segments[gridAmount] ={0}; // meer dan 8 segmenten per raster (16 bit, dubbele overdracht)#elsevolatile uint8_t segments[gridAmount] ={0}; // 8 of minder segmenten per raster (8 bit)#endifvoid setup(){ // zet SPI-pinnen en enkele functionele pinnen als output op een snelle \directe manier *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); // zet het laag *portModeRegister(digitalPinToPort(ledLed)) |=digitalPinToBitMask(ledLed); *portOutputRegister(digitalPinToPort(ledLed)) &=~digitalPinToBitMask(ledLed); // zet het lage vertraging (800); // enige vertraging om te wachten tot de CD4017-reset is voltooid (je moet de code uitvoeren NA het opstarten van de 4017s, dit maakt het automatisch als je alles in één keer inschakelt) cli(); // schakelt interrupts uit om ons wat dingen te laten tweaken zonder dat katten en honden overal ontsnappen // timer1 configuratie, het laat een interrupt gebeuren "rasters maal 100" per seconde... dit geeft een totale verversing van 100 Hz die oké is TCCR1A =0; TCCR1B =0; TCNT1 =0; OCR1A =160000 / rasterbedrag; TCCR1B |=(1 < 24 SPDR =~uint8_t(segments[turn]>> 24); // we hebben negated bits nodig op de CD4094 (cos van de transistors-rangschikking) while (!(SPSR &(1 < 16 SPDR =~uint8_t(segments[turn]>> 16); // we hebben negated bits nodig op de CD4094 (cos van de transistors-rangschikking) while (!(SPSR &(1 < 8 SPDR =~uint8_t(segments[turn]>> 8); // we hebben negated bits nodig op de CD4094 (cos van de transistors-rangschikking) while (!(SPSR &(1 < 2) pos ++; uint16_t masker =0xFF80; uint8_t-nummers [] ={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:segmenten[pos] &=mask; segmenten[pos] |=getallen[val]; pauze; geval 2:if (val ==1) segmenten[1] |=(1 <<8); else-segmenten[1] &=~(uint16_t(1) <<8); pauze; geval 9:segmenten[9] &=0xFFF0; if (val ==1) segmenten[9] |=3; anders if (val ==2) segmenten[9] |=B1101; }}// easy peasy zeven segmentnummer visualisatievoid marantzPrintNum(uint8_t val, uint8_t pos) { if (pos> 5) return; pos ++; pos ++; uint16_t masker =0xFF80; // bitmasker om het cijfer te verwijderen uint8_t-nummers [] ={B00111111, B00000110, B01011011, B01001111, B01100110, B01101101, B01111101, B00100111, B01111111, B01101111, B00000000}; segmenten[pos] &=masker; // verwijder alle cijfersegmenten [pos] |=numbers [val]; // set digit}// easy peasy zeven segmentnummer visualisatievoid JVCPrintNum (uint8_t val, uint8_t pos) { // om te komen (het kan je echt niet schelen)}//

Schema's

Ik heb vermeden om ALLE BC557-transistoren te tekenen omdat ze gewoon zijn aangesloten op alle CD4094-uitgangen, allemaal hetzelfde.

Er is een jumper-selector (die op de rode lijn loopt) die u moet configureren op de 4017-chips, deze reset de twee 4017 bij de voltooiing van het scannen van de rasters, u moet de vliegende jumper op de uitgangspin aansluiten (of solderen) NA het laatste raster , dus als uw display 10 rasters heeft, gaat de jumper op de 11e uitgang.

De Arduino-aansluitingen zijn rood omlijnd, je kunt de USB-voeding ervoor gebruiken, maar het wordt sterk aangeraden om een ​​gewone ouderwetse transformator te gebruiken voor de overige benodigdheden als je al een geaarde voeding hebt zoals je pc. Deze voedingen moeten allemaal gelijkstroom zijn, behalve misschien de filamenttoevoer, ik heb wat diodes toegevoegd omdat je waarschijnlijk een aparte transformator nodig hebt met een secundaire laagspanning. Het filamentvermogen ligt meestal rond de 3V 150mA, een 5V AC-transformator is voldoende. Het "ballast"-ding is mogelijk een draadgevonden vermogenspotentiometer van ongeveer 100 ohm, of een vaste weerstand, of ook enkele 1N4007-diodes om de spanning te verminderen.

De BC557-transistoren trekken de anodes omhoog tot anodespanning en de 100kohm-weerstanden laten de spanningsaandrijving vallen wanneer het segment uit is, terwijl de CD4094 normaal op 5V blijft.

De CD4017's worden gevoed met netspanning en hebben geen extra transistoren nodig. Er is een "getto"-resetcircuit voor de 4017 dat ongeveer een tiende van een seconde duurt, je moet wachten tot het is opgelost voordat je de code uitvoert.
Het "originele" schema voor het cascaderen van sommige CD4017 vereiste andere logische poortchips, ik gebruikte in plaats daarvan een NPN-transistor en de optocoupler zelf om een ​​EN-poort te repliceren, het is snel genoeg bij het sluiten, dus het is perfect voor de taak, bij het loslaten is het in plaats daarvan een beetje langzamer maar dat maakt ons niet uit, vooral omdat de klokingangen op de 4017 schmitt-getriggerd zijn en de vereiste snelheid daar niet "eng" is.

Er zijn verschillende gronden voor de chips en zo zoals je kunt zien, kijk goed.

Productieproces

  1. Squid Games Doll gebouwd met Arduino UNO
  2. Bitmap-animatie op ILI9341 TFT Touchscreen Display Shield
  3. Web-gestuurde DMX-controller
  4. Arduino Pong Game - OLED-scherm
  5. Arduino-gamecontroller
  6. Unopad - Arduino MIDI-controller met Ableton
  7. Arduino Temp. Monitor en realtimeklok met 3.2-weergave
  8. Spelen met Nextion Display
  9. DIY voltmeter met Arduino en een Nokia 5110-display
  10. BME280 temperatuur, vochtigheid en druk op Nextion-display
  11. Sonar met arduino en weergave op verwerkings-IDE