工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

真空蛍光表示管コントローラー

コンポーネントと消耗品

>
Arduino UNO
...または8ビットArduino
× 1
VFDディスプレイ
バディ
× 1
CD4094
DIP集積回路
× 2
CD4017
DIP集積回路
× 2
>
BC557
...または同等のトランジスタ(2N3906、2SA733、ecc)またはより高い電圧のPNPトランジスタ
× 17
BC547
...または同等のトランジスタ(2N3904、2SC945、ecc)
× 2
PC817
ほとんどのスイッチングPSUに見られるユビキタスオプトカプラー、最終的な部分
× 1
1N4007 –高電圧、高電流定格ダイオード
× 4
電解コンデンサ
値と電圧については回路図を参照してください
× 4
470nFコンデンサ
どんなタイプでも良い
× 1
Perfboard
別名:板紙、プロトボード、またはお好みの組み立てソリューション
× 1
1 / 4W抵抗器
値については回路図を参照
× 24
デュポンジャンパー
...またはお好みの接続と投稿
× 1
ワイヤー
回路の裏側とディスプレイを接続するための細いワイヤは、ピンがあるため、コネクタを使用しないでください。間隔は可変で、高速はんだ付けが簡単です
× 1

必要なツールとマシン

>
はんだごて(汎用)
はんだワイヤー
地元の店で購入してください。安いものはありません。0.5mmをお勧めします
ワイヤークリッパー

このプロジェクトについて

用途は何ですか?

VFDディスプレイは、いくつかの明らかな理由でもはやトレンドではありません。ガラス製( "uh cool!")、白熱フィラメント( "really ??")、基本的に真空管( "interesting!")です。とても鮮やかで、時には色が付いているので、上に暗いプラスチックが必要です(「ええと、またかっこいい!」)。

通常、emを駆動するための専用チップが必要です。ほとんどのモジュール/アプライアンスにはこのチップが付属しており、これらのディスプレイの1つを購入または所有していて不足している場合に備えて、I2CまたはSPIを介して独立して制御できます(これは使いやすさの点ではるかに優れています)。このようなチップは「接続して移動」するのはそれほど簡単ではありません。理想的なのは、そのチップ(通常はSMD形式で提供されます)を購入することです。この回路はArduinoのようにかなりまともなインターフェースを提供し、かさばる「チューブ」ヴィンテージのものを含むあらゆるVFDを駆動できる可能性が非常に高いですが、多くのセグメントを持つマトリックスディスプレイは良い考えではありません、回路を拡張することができますしかし、数千...うーん、多分そうではない。

長所と短所

長所

  • ほぼゼロのコスト(うまくいけば)
  • 部品を見つけるのは簡単
  • 高電圧機能(アノードで最大数百ボルト)
  • 独立したグリッドとアノードの電圧
  • 必要なデジタルデータラインは3本のみ
  • 拡張可能(万が一の場合、より多くのCPU作業が必要になります)
  • コードはすべての8ビットArduino用に用意されています

短所

  • さまざまな電圧と電源が必要です(VFDでは奇妙ではありません)
  • 調光機能なし(電圧駆動を除く)
  • SPIとtimer1の2つのArduinoリソースを使用します
  • マイクロコントローラーを吊るすことはできません。吊るさないと、スキャンがグリッド上でフリーズします
  • 抵抗とLEDのペアではなく、少し作業が必要です

動作原理

VFDは通常、X軸とY軸を持つ2Dマトリックスのように多重化された方法で機能します。フィラメントを加熱し(カソード、その前に細いワイヤーがあります)、そのフィラメントのアースも接続する必要があります。グリッド(制御グリッド、X軸の1点)への正の電圧と、セグメントピン(アノード、Y軸の1点)への正の電圧、この時点でセグメント(1つだけ)が点灯します。あらゆるセグメントとあらゆる組み合わせを照らし、周りに「少数の」ワイヤーを配置するために、多重化は一度に1つのグリッドを選択し、同時にそのグリッドの下の対応するセグメントを照らすようにアノードを構成します。その直後に、別のグリッドを選択します。今回は、対応するセグメントがその2番目のグリッドの下で正しく点灯するようにアノードを構成します。この連続的な繰り返しスキャンを高速化すると、動きが非常に速くなるため、目の下では一度に1つのグリッドが選択されませんが、一度に駆動されているように見えます。これはいわゆるPOV(Persistence Of Vision)です。

この回路は、同じファミリの2種類の集積回路(2つのCD4094と2つのCD4017)を使用し、4094はアノードを駆動し、4017は代わりにグリッドを駆動します。4094は出力に高/低構成を保存でき、アノードに適しています。サイドでは、4017はグリッドに最適な10個のシーケンス出力を備えたクラシックチップです。 4094にモーメントアノード構成がロードされると、「ok」信号(ストロボ)がこの設定を適用し、同時に4017を1ステップずつ切り替えて、自動シーケンスを可能にします。

これらのディスプレイはArduinoの5Vよりも高い電圧を必要とするため、電源部分は基本的に一部のBC557トランジスタ(または同等のもの)のみであり、アノードでより広い電圧振幅を可能にします。グリッドは4017によって直接駆動され、PC817オプトカプラーは4017の周囲で5Vよりも高い電圧を可能にし、CD4094とは異なる電圧レベルを可能にします。これにより、全体の多くが簡素化されます。

Arduinoはすべてのオーケストレーションを提供する必要があります。つまり、すべてのセグメント構成を保存し、すべてのグリッドスイッチでアノード設定を回路にロードする必要があります。つまり、ユーザーの操作を超えてそれを行うには、巧妙なコードが本当に必要です。私が作成したコードは、すべてのステップで4094チップを再ロードするタイマーベースの割り込みを設定します。実際には1秒間に約1000回なので、10グリッドの場合、リフレッシュレートは100Hzになります。これは良好です。セグメント構成を格納し、コード内で変更できるデータの配列があります。特定の手順や後続のアクションなしで、割り込みルーチンが独自にデータをアップロードします。

電源

4017チップのグリッド電圧は5Vdcから18Vdcで、少なくとも50mAの電流である可能性があり、調整する必要はありません。通常(私が見た限りでは)12Vですべての状況に対応できますが、12Vを上げても明るさはそれほど上がらないようです(真空管の場合、グリッドに大きな電圧は必要ありません)。

アノード電圧は、文字通り0Vからトランジスタが耐えられるもの(BC557の場合は50Vdc)までです。通常、ディスプレイが完全であれば、20-30Vdcで完全に機能しますが、レギュレートされていない場合は問題ありません。通常のセットアップでは、50mAの電源で十分です。

これらのタイプのArduinoまたはMCU(まだ試されていない)の場合、デジタル電力は5Vdcまたは3.3Vdcにすることができます。これには、100mAの電力(できればそれ以下)が必要です。CD4094が遅くなった場合は、コードのSPIクロックを減らすことができます。および/または最初の4094からの「Q'S」出力を使用して、より一貫性のある通信を行います。

フィラメント電源は、少なくとも5V 200〜300mAの電流を供給する必要があります。すでにDC電源がある場合は、ブリッジ整流器と1000uFコンデンサを回避できますが、Arduinoから同じデジタル電源を使用することはできません。それほど大きくないアプライアンスディスプレイの場合の実際のフィラメントは、3Vのように動作し、150mAを引き出すことができます。

<図>

<図>

<図>

<図>

<図>

ヒントと注意事項

  • ワイヤーを接続する前に、どのピンが何をするのかわからない場合は、最初にディスプレイを試してみることをお勧めします。通常、直列の単三電池のペアでフィラメントに問題はありません(通常はサイドコンタクトです)。一方、直列の9V電池のペアは、グリッドとアノードの両方に正の分極を提供します。グリッドとアノードはグループ化されることがよくあります。実際の「アノードゼロ」を見つけることをお勧めします。これは、数値または英数字の部分の最初のセグメントである可能性が非常に高いためです。多くの場合、すべてのグリッドで同じ順序で、ワイヤを配置します。誤って逆の順序にすると、ソフトウェアは最後に不器用になり、代わりにグリッドは明らかにピンの順序に従います
  • フィラメントの供給を簡単にし、電流を少しずつ増やし、暗闇にとどまり、フィラメントがわずかに白熱するのを見始めた瞬間に少し減らして完了です。パワーポテンショメータは完璧です。古いテレビですが、最近は難しいです
  • グリッドとアノードの電圧を適切な方法で上げると、リン光物質が修復不能に燃焼する可能性があり、回路もスキャンを実行するため、システムがハングした場合、単一のグリッドセクションに継続的に供給しすぎる電力が発生します
  • グリッド\アノード電圧の妥協点を試してみてください。グリッドは電流を消費する可能性があることに注意してください。それをプッシュする価値はありません。アノードに注意してください。
  • プロジェクト全体に単一の変圧器を使用するのが理想的です\セットアップ、いくつかの混合ソリューションも使用できますが、PSUと特に接地されたものを切り替えると、悪ふざけをする可能性があります。そのため、実験には常にクラシックを使用することをお勧めします変圧器の供給
  • このドライバーを拡張してCD4094やCD4017を追加できます。もちろん、8個以下のアノードが必要な場合は、4017と同じシナリオである2番目の4094を取り除くことができますが、ドライバーを手元に用意したい場合は、ビルドするだけです。可能な限り完全に
  • ご覧のとおり、アノードトランジスタのベースには抵抗がありません。これにより、超高速ドライブが可能になり、パーツリストが絞り込まれますが、CD4094はある程度の電力を消費します。ほとんど熱くなりませんが、チップの一部の標本は出力が強すぎる場合は、消費電流を確認してください。消費電力が最大許容範囲内であるため、チップがブローしない場合があります。電流は、5V電源でピンあたり4mAの範囲になる可能性があります。
  • 古い疲れたディスプレイは、フィラメントへの電流ショックによって更新される可能性があります。ディスプレイ全体が薄暗く、焼けた部分だけではない場合、ワイヤーを5回続けて目に見える白熱灯(黄色)にするように言われます。毎回2秒間、試したことはありませんが、フィラメントの定格電圧の2倍が必要になる場合があります。これにより、emがクリーンになりますが、非常に古い\アンティークのものには明らかに便利です...危険です。電球ではありません。ワイヤーをスナップすることができます

コード

  • 作業ルーチンを備えたArduinoコード
作業ルーチンを備えたArduinoコード Arduino
 / *汎用性の高いVFDディスプレイハードウェアインターフェイスArduinoプログラムCopyright(C)2019 Genny A. Carognaこのプログラムは無料ソフトウェアです。無料で公開されているGNUGeneral Public Licenseの条件に基づいて、再配布および/または変更できます。 Software Foundation、ライセンスのバージョン3、または(オプションで)それ以降のバージョン。このプログラムは、役立つことを期待して配布されていますが、いかなる保証もありません。商品性または特定目的への適合性の黙示の保証もありません。詳細については、GNU General PublicLicenseを参照してください。このプログラムと一緒にGNUGeneral PublicLicenseのコピーを受け取っているはずです。そうでない場合は、を参照してください。* // *このコードはArduinoのリソースを「カーテンの裏側」で使用し、timer1モジュールとSPIモジュールの両方が使用されてビジーです* 、したがって、SPI、SPIピン、およびtimer1に基づくいくつかの機能の使用で大きな問題が発生する可能性があります...提案された回路にはオンボードメモリがないため、セグメント設定をグリッドごとに100回継続的に「スキャン」する必要があります1秒あたり*、Arduinoセグメント配列から、これはいわゆる「オーバーヘード」CPU作業にも変換されます。ご存知のとおり、これは*最後にマイクロを通常使用するだけで、約3に達する可能性があります。占有時間の観点からCPUの動作率、Arduinoの通常のSPIツールを使用することもできますが、アウトテイクと手順の詳細な分析が必要です* *このコードは8ビットのArduinoで動作し、3.3Vも動作するはずですわかりました、CD4094がそれに沿って電力を供給され、「アンダーボルト」になる可能性があることを考慮して、SCK周波数を下げる可能性があります(はい、あなたの最愛の人を揚げるためのオーバークロックの原則PC)* /#define ledLed 13 //これはledonをledするledピンです。ledonはいくつかのled関連のものを意味することを知っています(もちろん科学者のmumbojumbo)#define strobePin 4 //専用のArduinoピン"strobe" line#define strobeHold 10 //マイクロ秒//オプトカプラーを切り替えるための保持時間...メガヘルツではありませんが、許容範囲内です//ディスプレイ(ビデオカセットレコーダー、オーディオフォトーリーCDリーダー、コンパクトステレオ)のデータ...気にせず、削除して、「gridAmount」と「anodeAmount」を定義するだけです。定義gridAmountmitsubishiGrids#defineアノードアマウントmitsubishiAnodes#elif定義されたmarantz#define gridAmount marantzGrids#defineアノードアマウントmarantzAnodes#elif定義されたJVC#define gridAmount JVCGrids#defineアノードアマウントJVCAnodes#endif //この配列、segments [x]、セグメントビットを格納します[0]はグリッドゼロを意味し、最下位ビットはそのグリッドのセグメントゼロです//この配列に好きなようにアクセスして変更できます。どこからでも、何もしなくても、効果はディスプレイにすぐに表示されます。ビットを変更しないでください。グリッド表示ごとに8セグメントを超える場合は、グリッドごとに16ビットまたは32ビットのコンテナが必要です。これは上記の#define(s)から自動的に管理されます。 ={0}; //グリッドあたり16セグメント以上(32ビットが必要)#elifアノード量> 8volatile uint16_tsegments [gridAmount] ={0}; //グリッドあたり8セグメント以上(16ビット、ツイン転送)#elsevolatile uint8_t segment [gridAmount] ={0}; //グリッドあたり8以下のセグメント(8ビット)#endifvoid setup(){// SPIピンと一部の機能ピンを高速\直接の方法で出力として回転* 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); //低くします* portModeRegister(digitalPinToPort(ledLed))| =digitalPinToBitMask(ledLed); * portOutputRegister(digitalPinToPort(ledLed))&=〜digitalPinToBitMask(ledLed); //低くしますdelay(800); // CD4017のリセットが完了するのを待つための遅延(4017の電源を入れた後にコードを実行する必要があります。これにより、一度電源を入れた場合に自動的になります)cli(); //割り込みを無効にして、猫や犬がどこにでも逃げることなく、いくつかのものを微調整できるようにします// timer1構成では、割り込みが1秒あたり「グリッド×100」で発生します...これにより、100Hzの合計リフレッシュが可能になります。 TCCR1B =0; TCNT1 =0; OCR1A =160000 / gridAmount; TCCR1B | =(1 < 24 SPDR =〜uint8_t(segments [turn]>> 24); // CD4094(トランジスタ配置のcos)に否定ビットが必要while(!(SPSR&(1 < 16 SPDR =〜uint8_t(segments [turn]>> 16); // CD4094(トランジスタ配置のcos)に否定ビットが必要while(!(SPSR&(1 < 8 SPDR =〜uint8_t(segments [turn]>> 8); // CD4094(トランジスタ配置のcos)に否定ビットが必要while(!(SPSR&(1 < 2)pos ++; uint16_tマスク=0xFF80; uint8_t numbers [] ={B00111111、B00000110、B01011011、B01001111、B01100110、B01101101、B01111101、B00100111、B01111111、B01101111、B00000000}; switch(pos){ケース0:ケース1:ケース4:ケース5:ケース6:ケース7:ケース8:セグメント[pos]&=マスク;セグメント[pos] | =数値[val];壊す;ケース2:if(val ==1)segments [1] | =(1 <<8); else segment [1]&=〜(uint16_t(1)<<8);壊す;ケース9:セグメント[9]&=0xFFF0; if(val ==1)segments [9] | =3; else if(val ==2)segments [9] | =B1101; }} //簡単な7セグメント番号の視覚化voidmarantzPrintNum(uint8_t val、uint8_t pos){if(pos> 5)return; pos ++; pos ++; uint16_tマスク=0xFF80; //数字を削除するビットマスクuint8_tnumbers [] ={B00111111、B00000110、B01011011、B01001111、B01100110、B01101101、B01111101、B00100111、B01111111、B01101111、B00000000};セグメント[pos]&=マスク; //数字セグメントを削除します[pos] | =numbers [val]; //数字を設定} //簡単な7セグメント番号の視覚化voidJVCPrintNum(uint8_t val、uint8_t pos){//来る(本当に気にしない)} // 

回路図

すべてのCD4094出力に接続されているだけなので、すべてのBC557トランジスタを描画することは避けました。

4017チップ上で構成する必要のあるジャンパーセレクター(赤い線上で実行)があり、グリッドスキャンの完了時に2つの4017をリセットし、最後のグリッドの後に出力ピンにフライングジャンパーを接続(またははんだ付け)する必要がありますしたがって、ディスプレイに10グリッドがある場合、ジャンパーは11番目の出力に移動します。

Arduinoの接続は赤で囲まれています。USB電源を使用できますが、PCのようにすでに接地された電源がある場合は、残りの電源に通常の古いスタイルの変圧器を使用することを強くお勧めします。これらの電源は、フィラメント電源を除いてすべてDCである必要があります。低電圧の二次側を備えた別のトランスが必要になる可能性があるため、ダイオードをいくつか追加しました。フィラメントの電力は通常約3V150mAの範囲であり、5VACトランスで十分です。 「バラスト」のものは、おそらく100オームのような有線の電力ポテンショメータ、または固定抵抗器、あるいは電圧を下げるためのいくつかの1N4007ダイオードです。

BC557トランジスタはアノードをアノード電圧まで引き上げ、100kΩの抵抗はセグメ​​ントがオフのときに電圧ドライブを低下させますが、CD4094は通常5Vのままです。

CD4017はグリッド電圧で給電され、追加のトランジスタを必要としません。 4017には、10分の1秒ほど続く「ゲットー」リセット回路があります。コードを実行する前に、それが落ち着くのを待つ必要があります。
一部のCD4017をカスケード接続するための「元の」回路図には、他の論理ゲートチップが必要でした。代わりに、NPNトランジスタとオプトカプラー自体を使用してANDゲートを複製しました。閉じるのに十分な速さなので、タスクに最適です。リリースするのは少し遅くなります。ただし、特に4017のクロック入力はシュミットトリガーであり、必要な速度は「怖い」ものではないため、気にしません。

ご覧のとおり、チップなどにはさまざまな理由がありますので、よく見てください。

製造プロセス

  1. ArduinoUNOを使用したイカゲーム人形のビルド
  2. ILI9341TFTタッチスクリーンディスプレイシールドのビットマップアニメーション
  3. Web操作のDMXコントローラー
  4. ArduinoPongゲーム-OLEDディスプレイ
  5. Arduinoゲームコントローラー
  6. Unopad-Abletonを搭載したArduinoMIDIコントローラー
  7. ArduinoTemp。 3.2ディスプレイを備えたモニターとリアルタイムクロック
  8. Nextionディスプレイで遊ぶ
  9. ArduinoとNokia5110ディスプレイを備えたDIY電圧計
  10. NextionディスプレイのBME280温度、湿度、および圧力
  11. arduinoを使用したソナーと処理IDEでの表示