Arduino DRSSTC インタラプタ

 

半導体で駆動するDRSSTCと呼ばれるタイプのテスラコイルはインタラプタと言われるパルス発生装置で制御を行います。

DRSSTCはパルスのON時間の間だけ動作するようになっています。

今回はArduinoを使用してMIDIに対応するインタラプタを簡単に製作してみます。

MIDIで操作することによって、音程を表現することが可能になり、コンピュータから音楽を演奏することが出来ます。

 

参考ページ

 

プログラムの基本動作

Arduino上に実装されているAVRのタイマーを使用します。

16bitタイマーを使用し、タイマ割り込みでポート操作をすることによって、任意の周波数、ON時間のパルスを作り出します。

Arduino Unoでは16bitタイマが1つしかありませんので、出力は1つとなります。

Arduino Microまたは Arduino Leonardoであれば16bitタイマは2つあるため出力も2つとなります。

 

部品の準備

  • Arduino (Leonardo / Microを推奨。Unoでも動作可能)
  • TLP250(出力の絶縁に使用)
  • MAU104(出力側の絶縁電源として使用)

 

回路の製作

Arduinoのデジタルピン8が出力1、ピン9が出力2となります。

抵抗を経由し、TLP250に接続し、絶縁を行います。

TLP250の出力側の電源は、MAU104などの絶縁型DCDCコンバーターにて生成します。

TLP250の動作電圧は10V以上のため、12Vまたは15VのDCDCコンバーターを使用します。

パルスの出力電圧もその電圧になるため、5Vロジックのテスラコイルに接続する際は注意が必要です。

TLP250の出力に抵抗をつなぎ、ツェナーダイオードで5Vにクランプするか、テスラコイル側を15V入力に対応させる必要があります。

ノイズマージンを稼ぐためには、電圧は高めの方が好ましいと思います。

 

ファームウェアのダウンロード

現状のファームウェアは以下で公開しています。

https://github.com/htlabnet/HTLAB.NET_Arduino_DRSSTC_Interrupter

(商用利用は不可です。詳細はお問い合わせください。)

 

GitHub上に公開しているため、ダウンロードの際は以下の画像の通りにクリックします。

ZIPアーカイブ形式にてダウンロード出来ます。

ZIPファイルは解凍しておきます。

解凍したフォルダ内にある、「HTLAB.NET_Arduino_DRSSTC_Interrupter.ino」というファイルがメインプログラムです。

 

Arduino IDEにライブラリを追加

Arduino IDEはすでにインストール済みとします。

現状のファームウェアでは、以下のライブラリが必要です。

  • MIDI Library 4.3
  • MIDIUSB Library 1.0.3 (Arduino Leonardo / MicroでUSB-MIDIを使用する場合)

 

Arduino IDEにはライブラリの管理機能があります。

上部メニューより「スケッチ」→「ライブラリをインクルード」→「ライブラリを管理」という順でクリックすることにより、ライブラリマネージャが表示されます。

検索欄に「MIDI」などと入力して、必要なライブラリを探してインストールします。

これで、ファームウェアがビルド出来るようになります。

Arduinoへの書き込み方など基本的なことは、様々なサイトで解説されているので省略します。

 

ファームウェアの設定を行う

現状のファームウェアでは、設定を「settings.h」というファイルにまとめています。

このファイルの内容を書き換えることによって、設定を変更することが可能です。

 

ON時間の設定

パルスのON時間を設定します。

この場合、出力1と2が共に10usecのパルスを出力する設定となります。

基本的にマイクロ秒単位での指定となります。

 

Fixedモードの使用

MIDI経由にて周波数を可変させる場合、ON時間が固定であると周波数によって音圧が異なるといった現象が起こります。

これを解決するために「Fixedモード」という機能を用意しました。

周波数によってON時間が可変になるモードです。

falseの場合は、ON時間は固定のままです。

Fixedモードを有効にする場合は、trueに変更します。

この場合、1秒間の合計ON時間(On-time Per Sec : OPS)という単位にて時間指定を行います。

この場合、出力1と2が共に、10000uOPSの設定となっています。

1秒間の合計ON時間が10000マイクロ秒=10ミリ秒になるということは、

100Hzのパルス出力の場合、ON時間は100マイクロ秒。

1000Hzのパルス出力の場合、ON時間は10マイクロ秒。

周波数によってON時間が可変していきます。

1秒間の合計ON時間は変わりません。

 

MIDIUSBライブラリを使用

Arduino Leonardo / MicroにてUSB-MIDI機能を使用する場合に宣言します。

MIDIインターフェースを必要とせずに、MIDIインタラプタを実現できます。

有効にしている場合、コンピュータからはUSB-Serialと、USB-MIDIが同時に見えます。

USB-MIDIが有効の場合は、Arduinoの名称でMIDIデバイスとして認識されます。

USBのDescriptor書き換えについては複雑なため割愛させていただきます。

他の種類のArduinoを使用する場合や、USB-MIDI機能を使用しない場合は以下のように頭に「//」を付けてコメントアウトします。

Arduino UnoにてUSB-MIDI機能を使用したい場合は、morecat_labさんのmocoLUFAを使用する方法があります。

 

MIDI経由でのON時間コントロール

falseの場合は、MIDI経由でのノートONベロシティ、CC#7、CC#11には反応せず、設定したON時間での動作となります。

ノートONベロシティ、CC#7、CC#11にて音量を制御する場合にtrueに変更します。

この場合、ノートONベロシティ、CC#7、CC#11が全て127の場合に、設定したON時間となります。

 

使用方法

MIDI出力で使用する場合は、チャンネル1が出力1、チャンネル2が出力2となっています。