usb midi - dmx bridge
TRANSCRIPT
USB MIDI - DMX bridge@toyoshim
照明機材に手を出そう
● DMX-512A照明制御のデファクト規格、EIA-485上を通す
USB標準規格がなく、独自アダプタが乱立
Amazonで対応照明機材が数千円から入手可能
● MIDI楽器制御の標準規格、現在はUSB-MIDIがデファクト
最近はブラウザ上からJavaScriptで制御可能
USB-MIDIとDMXを繋げると幸せ
自作すればいいじゃない
PC変換器USB-MIDI
照明 照明DMX DMX
ChromeWeb MIDI
DMX-512A
● 最大512chのデバイスをデイジーチェイン接続● 各チャンネル8-bitの値(0-255)で制御
- ch1で赤の明るさを256段階で制御、ch2は緑、など
● 250kbps差動非同期シルアル伝送● 全chデータを繰り返し送信し続けるプロトコル
- 512chでは40fps程度が限界
- 最大ch数を減らすことで高fps化も可能
● Amazonにて対応照明が数千円から入手可能
USB-MIDI
● ポート毎16ch、各ch128種類のノートを持つ- ポート(システム)全体の制御、チャンネル個別の制御
- さらにチャンネル内でノート別の制御もある
● 各種情報は基本7-bitの値(0-127)で制御● USB - FS(12Mbps) バルク転送
- LS(1.5Mbps) インタラプト転送も事実上動作(Win/Mac)- LSならV-USB/AVRを使って安価に自作可能
MIDI → DMXの対応を考える
● DMX 512chに対応するにはMIDI 16chは役不足- MIDIノートに割り当てればDMX 128chがMIDI 1chに対応
- ノート毎の制御はノートオン・オフ、キープレッシャーの3種- MIDIは7-bit、DMXは8-bit、残り1-bitは制御種別で対応
● 制御方式の変換- MIDIはイベント方式、DMXはフレームバッファ方式
- MIDIイベントで内部のDMX 512ch分のバッファ値を更新
- DMX送信側はバッファから常時データ送出
イメージ図
MIDI DMX
MIDIノートをDMXのチャンネルに対応させる
DMX ch.1
DMX ch.2
DMX ch.3・・・
DMX ch.512
全チャンネルのデータを連続して繰り返し送信し続ける
Ch.1 / Note 0 ONVelocity 127
Ch.1 / Note 2 ONVelocity 30
イベントが届くタイミングで対応chのバッファ値を更新
高fps対応のため、最大chを128/256/384/512から選べるようにする
ハードウェア構成・資料
● USB-MIDI (USB MIDI Devices)- 自作USBの定番AVR (TINY2313/150円) + V-USB- DMX側の電圧振幅を確保するためVcc=5Vで回路を組む
● DMX-512A (プロトコル資料)- ATMEGA88-20PU/170円
512Bバッファが用意でき、USARTがあれば何でも良い
マイコン間はUSARTで接続 (DMX出力側と同じモード)- 74*04 (inverter): 差動信号用
ブロック図
物理層、論理層それぞれのプロトコル
TINY2313 MEGA88
非同期シリアル
USB
74*04非同期シリアル
差動非同期シリアル
250kpbs/パリティなし /Data 8-bits/Stop bit 2-bitsLS インタラプト転送
USB-MIDI raw MIDI DMX DMX
回路図
試作中の様子
ブレッドボードで実験
最近は部品の足でほとんど配線しちゃう
珍しくケースも自作
(コネクタが不安だったので)
表側はこんな感じ(これでもISPは可能)
製作例
MIDI to DMX 変換仕様
MIDI mapped DMX spec● DMX 128/256/384/512モード変更
Ch.1-4に対してプログラムチェンジでモードを変更
例)Ch.1 プログラム1、Ch.2-4 プログラム0でDMX 128ch.モード
プログラム番号に応じて有効になるイベントが切り替わる(演奏向け、DAW向け)
● ノートオフ / キープレッシャーノート番号のDMX ch.にベロシティ×2の値をセット
● ノートオンノート番号のDMX ch.にベロシティ×2+1の値をセット
さらなる改善点
● シングルマイコン化DMX側の物理層タイミングはUSARTモジュールに任せられるので、割り込みを駆使すればMEGA88単体でUSBとDMXの両方が安定駆動できそう
● Vcc=3.3V化(部品点数削減)EIA-485的には5V推奨みたいだけど+12Vから-7Vの間で0.2Vの電位差が作れれば良いので3.3Vでも十分なはず
● FS バルク転送化(標準準拠)
FS バルク転送 vs LS インタラプト転送
● FS バルク転送- V-USBはソフトウェア制御の限界でLSモードのみサポート
- PIC18F14K50/170円(今見つけた)を使えば解決?
● LS インタラプト転送- AVRマイコンを使いソフトウェア制御のみで自作可能
個人的には慣れた環境なので製作時トラブルも少ない
- 超低スループット(オリジナルMIDI以下)
- 仕様への非準拠
回路まわりの応援希望
● 保護回路をまじめに入れてない● 電気的に仕様準拠していない部分がありそう● セラロック駆動なのでクロック精度が悪い● USBドライバ周りのコンデンサ値が怪しい
この辺が理由で、認識しないホストがあったりHubを通せば認識したり、といった相性問題あり
Fork me
https://github.com/toyoshim/usb-midi-dmx/