USB MIDI - DMX bridge
@toyoshim
照明機材に手を出そう
● DMX-512A
照明制御のデファクト規格、EIA-485上を通す
USB標準規格がなく、独自アダプタが乱立
Amazonで対応照明機材が数千円から入手可能

● MIDI
楽器制御の標準規格、現在はUSB-MIDIがデファクト
最近はブラウザ上からJavaScriptで制御可能
USB-MIDIとDMXを繋げると幸せ
自作すればいいじゃない

Chrome
Web MIDI

PC
USB-MIDI

変
換
器

照明
DMX

照明
DMX
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

Ch.1 / Note 0 ON
Velocity 127

DMX ch.1
DMX ch.2

Ch.1 / Note 2 ON
Velocity 30

イベントが届くタイミン
グで対応chのバッファ
値を更新

DMX
高fps対応のため、最大
chを128/256/384/512
から選べるようにする

DMX ch.3
・
・
・

DMX ch.512
MIDIノートをDMXのチャンネルに対応させる

全チャンネルのデータ
を連続して繰り返し送
信し続ける
ハードウェア構成・資料
● 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
USB-MIDI

USB
LS インタラプト転送

MEGA88
raw MIDI

非同期
シリアル

DMX

74*04

非同期
シリアル

250kpbs/パリティなし/Data 8-bits/Stop bit 2-bits

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.2
Vの電位差が作れれば良いので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/

More Related Content

PDF
第2回html5jゲーム部勉強会 Oh! JavaScript 夢の続きを語ろうよ〜emscriptenの逆襲 - html5編
PDF
ニコラウディーSUITE2 クイックスタートガイド
PDF
Web MIDI API - the paster, the present, and the future -
PPTX
MIDI フィジカルコントローラー
PDF
Web MIDI API update
PDF
楽しいロリコン
PDF
z-music.js - AudioProcessorNode can do it
PDF
Oh! java script 夢の続きを語ろうよ〜emscriptenの逆襲
第2回html5jゲーム部勉強会 Oh! JavaScript 夢の続きを語ろうよ〜emscriptenの逆襲 - html5編
ニコラウディーSUITE2 クイックスタートガイド
Web MIDI API - the paster, the present, and the future -
MIDI フィジカルコントローラー
Web MIDI API update
楽しいロリコン
z-music.js - AudioProcessorNode can do it
Oh! java script 夢の続きを語ろうよ〜emscriptenの逆襲
Ad

USB MIDI - DMX bridge