ネオン管用の高電圧電源モジュールNeonDCDCを作ったので、ネオン管を使って電飾を作ってみました。
NeonDCDC
基板はJLCPCBで作ってもらいました。データの作成と注文方法はこちらを参考にしてください。
NeonDCDCは5Vから80V〜200Vの高電圧を生成する電源モジュールです。80Vで16mA程度まで電流を出力することができます。
NeonDCDCは、こちら👇👇👇でも販売しております。
HV5812
HV5812はMicrochip社の、80VまでドライブできるドライバICです。出力は20チャンネルあります。シフトレジスタを内蔵しているので、SPIで制御できます。
ネオン管をドライブするのにとても好都合なICです。以前透明で美しいVFD管、IV-27MのドライバICとして使いました。
今回は、このドライバICを使って、ネオン管で電飾を作ります。
回路
全体の回路
回路図は上記のようになっています。マイコンにはESP32-DevKitCを使っています。HV5812は5Vで動作するために、ESP32とHV5812の間には3.3Vから5Vへ変換するレベルシフターが入っています。
ネオン管の電源のために、ESP32の5V出力をNeonDCDCを使って80Vに昇圧しています。
HV5812の出力ピンに47kΩの抵抗を接続して、ネオン管を接続しています。これで、ネオン管1個あたり0.5mA程度流れます。HV5812の出力ピン20チャンネルありますが、ブレットボードのサイズの制限からネオン管の数を15個にしました。
レベルシフター
3.3Vから5Vへのロジックレベルの変換には、上の図のような回路を使っています。MOS-FETのゲートが3.3Vに接続されていて、不思議な感じに見えますね。
動作は以下のようになっています。
3.3V Logic INがHiで3.3Vの時、ゲートとソースが同じ電圧なので、MOS-FETはOFFしています。そのため、5Vの電圧がLogic OUTに出力されます。
3.3V Logic INがLowで0の時、ゲートがソースよりも3.3V高いのでMOS-FETはONします。ドレイン電流がソースへ流れるため、ドレインの電圧は0Vになります。
この様に、Logic INが3.3Vの時はLogic OUTが5Vに、Logic INが0Vの時はLogic OUTが0となり、レベルシフトが実現します。実はとてもシンプルな動作でした。
プルアップ抵抗が1kΩとちょっと小さめですが、これは今回使っているクロックが3.3MHzと高速なためです。抵抗値が大きいと立ち上がりが鈍ってしまうため、実験の結果1kΩに決定しました。I2C通信のプルアップ抵抗と同様に考えると、クロックが1MHz程度でしたら2.2kΩ、400kHz程度でしたら10kΩでもいいかもしれません。
プログラム
#include <SPI.h>#define SPI_FREQ 3300000 #define STROBE_PIN 5 void setup() { // put your setup code here, to run once: Serial.begin(115200); delay(100); Serial.println("start"); initHV5812(); } long temp = 0x0; void loop() { // put your main code here, to run repeatedly: int wait = 20; for ( int j = 0 ; j < 5 ; j++ ) { temp = 1; for ( int i = 0 ; i < 15 ; i++ ) { sendData( temp ); temp = temp << 1; delay(wait); } } for ( int j = 0 ; j < 5 ; j++ ) { temp = 1; temp = temp << 14; for ( int i = 0 ; i < 15 ; i++ ) { sendData( temp ); temp = temp >> 1; delay(wait); } } wait = 30; temp = 0; for ( int i = 0 ; i < 15 * 3 ; i++ ) { if ( i % 5 == 0 ) temp |= 1; sendData( temp ); temp = temp << 1; delay(wait); } for ( int i = 0 ; i < 15 ; i++ ) { sendData( temp ); temp = temp << 1; delay(wait); } for ( int i = 0 ; i < 15 * 3 ; i++ ) { temp &= (long)0x000FFFFF; if ( i % 5 == 0 ) temp |= (long)(1 << 14); sendData( temp ); temp = temp >> 1; delay(wait); } for ( int i = 0 ; i < 15 ; i++ ) { sendData( temp ); temp = temp >> 1; delay(wait); } wait = 10; for ( int k = 0 ; k < 2 ; k++ ) { for ( int j = 0 ; j < 3 ; j++ ) { temp = (long)1 << 14; for ( int i = 0 ; i < 15 ; i++ ) { sendData( temp ); temp |= temp >> 1; delay(wait); } for ( int i = 0 ; i < 15 ; i++ ) { temp = temp << 1; sendData( temp ); delay(wait); } } for ( int j = 0 ; j < 3 ; j++ ) { temp = 1; for ( int i = 0 ; i < 15 ; i++ ) { sendData( temp ); temp |= temp << 1; delay(wait); } for ( int i = 0 ; i < 15 ; i++ ) { temp = temp >> 1; temp &= (long)0x000FFFFF; sendData( temp ); delay(wait); } } } } //init HV5812 bool initHV5812() { SPI.begin(); SPI.setFrequency(SPI_FREQ); SPI.setDataMode(SPI_MODE0); SPI.setBitOrder(MSBFIRST); pinMode( STROBE_PIN, OUTPUT ); digitalWrite( STROBE_PIN, LOW ); long data = 0; sendData( data ); } //send data to HV5812 bool sendData( long data ) { uint8_t transfarData[4]; transfarData[0] = ( data & 0xFF000000 ) >> 24; transfarData[1] = ( data & 0x00FF0000 ) >> 16; transfarData[2] = ( data & 000000FF00 ) >> 8; transfarData[3] = ( data & 0x000000FF ); SPI.writeBytes(transfarData, sizeof(transfarData)); digitalWrite( STROBE_PIN, HIGH ); delayMicroseconds(1); digitalWrite( STROBE_PIN, LOW ); }
プログラムはシンプルすぎて不要かもしれませんが、載せておきます。sendData関数で引数のDataの内容がHV5812へ転送されます。
ブレッドボードに実装
左からESP32-DevKitC、中央がNeonDCDCとHV5812、右がネオン管です。
ネオン管が流れるように点灯しています。
ネオン管で電飾って、あまり見ないですね。昔はあったのでしょうか。
ネオン管の光って、ニキシー管もそうですが、暖かい感じのオレンジ色で、とても美しいです。見ていて飽きないですね。
ネオン管用高電圧発生モジュールNeonDCDCで遊んでみました。もっとたくさん光らせてみたいですね。
コメント