DMX の波形を、オシロで実測する
USB-DMX-PRO 互換機の BREAK・MAB・出力周波数 — 結果と、測り方の手順
USB-DMX-PRO 互換機(ESP32-S3)が出す DMX512 の信号が、規格どおりの波形になっているかを PicoScope で測りました。 ソフトが「設定した」と返す値(読み戻し)ではなく、実際の波形で確かめるのが目的です。この頁は、結果・波形の読み方・誰でも再現できる測定手順をまとめた記録です。
資料: この頁の PDF 版(10 ページ・1.2MB) / 関連: DmxWaveObserver 使い方と AI 利用(この測り方をアプリにしたもの・スタッフ限定)
1. 結論(先に)
| 項目 | 規格(DMX512-A) | 実測(既定設定) | 判定 |
|---|---|---|---|
| BREAK(フレーム頭の Low) | 92µs 以上 | 99.8µs(設定 100µs) | 合格 |
| MAB(BREAK のあとの High) | 12µs 以上 | 15.4µs(設定 16µs) | 合格 |
| ビット幅(通信速度) | 4µs ±1%(250kbps) | 3.98µs(約 251kbps) | 合格 |
| 出力周波数(10〜40Hz、最速) | 設定どおり | 10.0 / 20.0 / 30.3 / 40.0Hz | 合格 |
| 40Hz 時のフレーム間の隙間(IDLE) | 次のフレームと重ならない | 2.3ms | 合格 |
| 設定値と実測値の差 | — | ±1µs 以内 | オシロの分解能(1.28µs)内 |
2. DMX の信号と、波形の読み方
DMX512 の 1 フレームは「BREAK → MAB → スロット 0(スタートコード)→ スロット 1〜512(各チャンネルの値)」の順です。 信号は普段 High(アイドル)。BREAK で長く Low に落として「ここから新しいフレーム」と知らせ、MAB で High に戻り、続いて 1 スロットずつ送ります。 1 スロット = スタートビット(Low 1)+ データ 8 ビット + ストップビット(High 2)= 11 ビット = 44µs(1 ビット = 4µs、250kbps)。
3. 結果 1 — BREAK と MAB を変えても、設定どおりに出る
ファーム 2.6 では、BREAK・MAB・スロット数・スタートコードをホストから変えられます(検査・調整用。再起動で既定に戻る)。 設定値を変えて実波形を測り、設定どおりに出ているかを確認しました(COM61、PicoScope 2205A、1.28µs 刻み)。
| 設定 BREAK µs | 設定 MAB µs | 実測 BREAK µs | 実測 MAB µs | 規格判定 |
|---|---|---|---|---|
| 100 | 16(既定) | 99.8 | 15.4 | 合格 |
| 100 | 40 | 99.8 | 39.7 | 合格 |
| 100 | 100 | 99.8 | 99.8 | 合格 |
| 150 | 100 | 149.8 | 99.8 | 合格 |
| 300 | 200 | 299.5 | 199.7 | 合格 |
| 500 | 50 | 500.5 | 48.6 | 合格 |
| 200 | 12 | 201.0 | 11.5 | 不合格(MAB が 12µs を 0.5µs 下回る。設定が下限ぎりぎりのため。分解能 ±1.3µs 内) |
| 92 | 12 | 92.2 | 11.5 | 不合格(同上) |
| 88 | 12 | 87.0〜88.3 | 11.5 | 不合格(BREAK 92µs 未満。規格外を意図した試験) |
| 100 | 0 | 99.8 | 3.8 | 不合格(MAB をほぼ無くした極端な試験) |
不合格の行は、規格を外した波形を意図して作り、きちんと「不合格」と判定できることの確認です(検査装置として、悪い波形を見逃さないための試験)。
4. 結果 2 — 出力周波数(rate)と、フレームの隙間
出力周波数(rate)を変えたときの実際のフレーム周期を、BREAK の間隔から測りました。
| rate 設定 | 期待周期 | 実測周期 | 実測周波数 | IDLE(隙間) | 判定 |
|---|---|---|---|---|---|
| 10 | 100ms | 99.99ms | 10.0Hz | 77.3ms | 合格 |
| 20 | 50ms | 50.0ms | 20.0Hz | 27.3ms | 合格 |
| 30 | 33.3ms | 33.0ms | 30.3Hz | 10.3ms | 合格(周期は整数ミリ秒に丸め) |
| 40 | 25ms | 25.0ms | 40.0Hz | 2.3ms | 合格 |
| 0(最速) | 25ms | 25.0ms | 40.0Hz | 2.3ms | 合格(上限 40Hz) |
1 フレームは約 22.7ms(BREAK 100 + MAB 16 + 513 スロット × 44µs)なので、40Hz(周期 25ms)でも約 2.3ms の隙間が残り、次のフレームと重なりません。
5. PicoScope 7 の画面の見方
- 左のフラットな部分 = アイドル(High)。そこから落ち込む部分 = BREAK(この画面で約 0.1ms)。そのあとの細かい矩形がスロット(データ)です。
- 画面右下の測定結果「周波数 22.56kHz」は、スロット内のビット変化の速さ(0x00 を連続で送ったときの 44µs 周期 ≒ 22.7kHz)で、フレーム周波数ではありません。
- 点線の縦線 2 本はルーラー(時間の差を測る道具)です。BREAK を測るときは、落ち込みの始まりと終わりに合わせます。
- 差動(A と B を逆相で見る)ときは、A−B の演算チャンネルを使うと、ノイズが相殺されて見やすくなります。
6. 測り方の手順(再現用)
6-1. 準備
- オシロ: PicoScope 2204A / 2205A(旧ドライバ ps2000 系)。USB で PC に接続。
- プローブ: 測る機器の DMX OUT の信号線(pin 2 = DMX−、pin 3 = DMX+)と GND(pin 1)に接続。まず片側(DMX+)だけで始めてよい。 レンジは ±5V(RS-485 は数 V)から。
- 測る機器の DMX OUT には他の DMX 機器をつながない(他の信号が混ざり、周期が正しく測れません)。終端 120Ω は付けた状態で測る。
- PicoScope 7(画面ソフト)と、同じ COM ポートを使うソフト(照明制御ソフト・モニター類)は閉じる。開いたままだと、オシロや COM ポートを開けず失敗します。
6-2. 手で測る(PicoScope 7 の画面)
- 時間軸を 200µs/div、トリガーを ch A の立下り(しきい値 約 0.2V)に設定。
- 図 5 のような波形が出たら、ルーラーを BREAK の落ち込みの始まりと終わりに合わせて長さを読む。
- MAB は、BREAK が終わって High に戻ってから、最初のスロットのスタートビット(Low)が始まるまで。
- 波形を残すときは「保存」から CSV で書き出す。
6-3. 自動で測る(コマンド)
スコープの取得ツール(PicoScopeBridge)と、解析スクリプトを使います。結果は規格の合否つきで出ます。
# 1. 取得 (BREAK/MAB/ビット幅向け: 1µs 刻み・約 20ms) PicoScopeBridge.exe capture --ch A --range 5V --coupling DC --samples 16000 --interval-us 1 # → cap_<日時>.csv (t_us, mV) # 2. 解析 (BREAK / MAB / ビット幅 / スロット数 / 規格の合否 を JSON で出力) python scripts/analyze_dmx.py --latest # 3. BREAK/MAB を順に変えて、設定値と実測値を比較 (対象の COM を指定) python scripts/wave_check.py COM61 # 4. 配布用のデータ一式と図を作る python scripts/collect_waveform_set.py COM61 <出力フォルダ> python scripts/make_figures.py <データフォルダ> <図フォルダ>
6-4. 連続で測る(スコープを開きっぱなしにする常駐ツール)
取得ツールは、実行のたびにスコープを開閉するため、「PicoScope」の起動画面が毎回出て、スコープ内部のリレーも毎回 ON/OFF します(カチッと音がする・接点の寿命にも良くない)。 連続で測るときは、1 回だけ開いて開きっぱなしにする常駐ツールを使います(チャンネル設定も最初の 1 回だけ)。
python scripts/pico_session.py serve # 常駐 (起動時の 1 回だけ画面とリレー動作) curl "http://127.0.0.1:8766/capture?interval_us=1&samples=16000" # 1 回取得して解析 curl "http://127.0.0.1:8766/watch?sec=60&interval_us=1" # 60 秒の連続計測 (統計と規格外の回数) curl "http://127.0.0.1:8766/period?interval_us=10&windows=6" # フレーム周期 / IDLE curl "http://127.0.0.1:8766/quit" # 閉じる
実測(20 秒の連続): 451 窓を開閉なしで取得。BREAK 99.84〜101.12µs、MAB 15.36〜16.64µs、規格外 0 回、周期 32.99ms(30.3Hz)。 常駐中は PicoScope 7 の画面と取得ツールを使えません(スコープを占有)。画面で見たいときは、常駐を閉じてから使います。
6-5. 判定の目安
| 項目 | 合格の目安 |
|---|---|
| BREAK | 92µs 以上(多くの機器は 100〜200µs) |
| MAB | 12µs 以上(上限は 1 秒未満) |
| ビット幅 | 4µs ±1%(3.96〜4.04µs) |
| スロット | スタートビット 1 + データ 8(LSB 先頭)+ ストップビット 2 = 44µs |
| 周期 | 設定した周波数どおり(1 フレーム 約 22.7ms より短くならない) |
| プローブ位置の確認 | ビット幅が 4µs 付近、周波数が理論値と一致していれば、正しい場所を測れている |
7. できないこと・注意(正直に)
- 測定したのは StampS3 の 1 台(COM61)だけです。SuperMiniS3(3 台)は同じソースのファームですが、オシロでの個別測定は未実施です。
- 信号の振幅が小さく(約 ±0.5V)、細かいノイズが乗っています。プローブの倍率設定・終端・測定位置(ドライバ IC の出力側か)を今後確かめる必要があります。 解析ソフトはノイズ対策(しきい値の自動推定・細かいグリッチの併合)を入れて合否を出していますが、実際の RS-485 の電圧波形(リンギング・立上り時間)の評価は未実施です。
- オシロの分解能は 1.28µs(1µs 刻み設定時)なので、±1µs 程度は誤差です。MAB 12µs の設定が「11.5µs」と出て不合格になるのは、この限界のためです。実運用の既定は余裕を持たせて MAB 16µs にしています。
- rate 1Hz(周期 1 秒)は、オシロでの実測が未確認です(自機の出力を自機の入力に戻す試験では 1.0Hz を確認済み)。
- 差動(A−B)の自動解析は未対応です(現在は片側 1 チャンネル)。
- 測定中、出力に他の DMX 機器が接続されていると周期が正しく測れません(他の信号のフレームが混ざる)。
- 波形の設定(BREAK・MAB・スロット数・スタートコード)は、再起動すると規格どおりの既定に戻る(保存されません)。検査用の機能で、通常運用では使いません。
8. 用語
| 用語 | 意味 |
|---|---|
| BREAK | フレームの頭で、長く Low にする区間。「ここから新しいフレーム」の合図。 |
| MAB | Mark After Break。BREAK のあと、High に戻っている短い区間。 |
| スロット | 1 バイト分(スタートビット + 8 ビット + ストップビット 2)。0 番がスタートコード、1〜512 が各チャンネルの値。 |
| IDLE | 1 フレームが終わってから、次の BREAK までの High の区間(隙間)。 |
| rate | USB-DMX-PRO の「出力周波数」設定(1〜40Hz、0 = 最速)。 |
| 差動 | DMX の +線 と −線の電圧差。RS-485 は差動で信号を伝える。 |