88µs のブレークに同期をかける | USBオシロスコープでの実測手順
DMX の信号をオシロにつないでも、普通のトリガ設定では波形は読めません。画面が流れるだけです。DMX は同じような見た目のビット列を毎秒数十回送り続けているので、立ち上がりエッジでは毎回違う場所に引っかかるからです。
正解は 「88µs 以上の Low」に同期をかけることです。フレームの先頭にあるブレークという長い Low で、これはデータ部には絶対に現れません。オシロのパルス幅トリガで「50µs より長い負パルス」を指定すれば、毎回きっちり同じ位置に止まります。
このページは、その理由と設定値、サンプリング間隔の決め方、そして非絶縁のUSBオシロを DMX ラインに当てるときの安全境界までを図でまとめたものです。
DMX512 は 250 kbit/s、つまり 1 ビットが 4µs のシリアル信号です。1 チャンネル分(1 スロット)は スタートビット 1 + データ 8 + ストップ 2 の 11 ビット=44µs。これが最大 513 個並んで 約 23ms のパケットになり、それを毎秒 40 回前後、延々と繰り返しています。
ここでオシロを「立ち上がりエッジでトリガ」に設定すると、どうなるか。エッジは 1 パケットの中に数千個あります。どのエッジで止まるかは毎回変わるので、画面上では波形が横に流れ続けます。止まって見えないものは読めません。
そこで、1 パケットに 1 回しか現れない、他と見間違えようのない目印を探します。それがブレークです。
「ブレークで引く」と言われても、データ部にたまたま長い Low が現れないのかが気になります。ここは計算で確定できます。
1 スロットは スタートビット(必ず Low)+ データ 8 ビット + ストップビット 2 個(必ず High)です。つまり Low が続くのは、スタートビットとデータ 8 ビットが全部 0 のときが最長で、その次は必ず High のストップビットが 2 個来ます。
つまり データ部の Low は、どんな値を送っても 36µs を超えません。対してブレークは 88µs 以上。この 2 つの間には 52µs もの余裕があります。
使う機能は パルス幅トリガ(Pulse Width / Advanced Trigger)です。単純なレベルトリガしか無い機種では、この方法は使えません。
| 項目 | 設定値 | 理由 |
|---|---|---|
| トリガ種別 | パルス幅(Pulse Width) | エッジトリガでは位置が定まらない |
| 極性 | 負パルス(Low の幅) | ブレークは Low 側 |
| 条件 | 「より長い」(Greater Than) | ブレークは 88µs 以上で上限が無い |
| 幅 | 50µs | データ部 36µs とブレーク 88µs の中間 |
| トリガ位置 | 画面の左端寄り(10% 前後) | ブレークの後ろ=データ側を長く見たい |
| 結合 | DC | 直流分を含めて見る |
| レンジ | ±5V 前後 | EIA-485 の差動振幅は数 V |
ブレークの長さは 88µs 以上 1 秒以下と規格の幅が非常に広く、実際の長さは送信側の機器によってまちまちです。卓が変われば長さも変わります。
そしてこの「幅が広すぎる」ことこそが、DMX でメーカー間の相性問題が起きる代表的な原因でした。ブレークと MAB の解釈が送信側と受信側で食い違うと、受信側がパケットの先頭を見失います。規格が DMX512-A に改められた際、推奨値が設定されたのはこのためです。
同期がかかっても、次にバッファの壁に当たります。安価な USB オシロは取り込み点数が限られており、「全部を細かく」は物理的に無理です。何を見たいかで間隔を決めます。
下表はバッファ 8,000 点の機種の場合です。1 ビットが 4µs なので、ビットを読むには最低でも 1µs 間隔(1 ビットあたり 4 点)が要ります。
| 見たいもの | 間隔 | 取り込める時間 | 実際に見えるもの |
|---|---|---|---|
| エッジの品質・反射 | 10ns | 約 82µs | 立ち上がりの鈍り、リンギング。ブレーク 1 個も入らない |
| ビットを読む | 1µs | 約 8.2ms | ブレーク+MAB+先頭 180 ch 前後。実用上いちばん使う |
| パケット全体の形 | 2.8µs | 約 23ms | パケット 1 個分ちょうど。ビットは読めないが長さは測れる |
| パケットの繰り返し | 10µs | 約 82ms | 3〜4 パケット分。送出周期・欠落の確認に使う |
DMX は EIA-485 の平衡伝送です。信号は 2 本の線の差で表されます。XLR のピン配置は次のとおりです。
「信号が来ているか」「ブレークが出ているか」を見るだけなら、3番と 1番の 2 本で足ります。2 チャンネル機なら 2番も測って A−B の演算を出すと、実際に受信側が見ている差動波形になります。片線が死んでいるトラブルは、この A と B を並べて見ると一目で分かります。
安価な USB オシロは非絶縁です。プローブの GND クリップは、USB ケーブル経由でパソコンのグランドに直結しています。
ここでの説明は PicoScope 2000 系(2ch・USB接続の PC オシロ)を前提にしています。当方の実機は 2205A ですが、下記の 2204A も同系統で、パルス幅トリガを含む付属ソフトは共通です。
| 項目 | 内容 |
|---|---|
| 機種 | PicoScope 2204A(Pico Technology) |
| 入手先 | 秋月電子通商 — USBオシロスコープ Picoscope2204A |
| チャンネル | 2ch(差動を演算で出せる) |
| 帯域 / 最高レート | 10MHz / 100MS/s |
| バッファ | 8k サンプル(§4 の表はこの値で計算) |
| 接続 | USB(PC で波形を見る形式) |
なお当方では、同じオシロを DMX 線の波形を見るのにも、その先の LED 駆動波形を測るのにも使っています。後者は自動化してあります(次章)。
波形観測でいちばん時間を食うのは、「値を変えて、撮って、読んで、記録する」の繰り返しです。ここは機械にやらせられます。当方では PC オシロを C# のプログラムから直接叩いて、DMX 値を振りながら駆動波形を無人で採る仕組みを作ってあります。
やっていることは単純です。
これで 32 点のスイープが、人の手を介さずに 1 本の CSV になります。実測の精度は次のとおりでした。
| 項目 | 結果 | 照合対象 |
|---|---|---|
| 周波数の誤差 | 約 0.07% | マイコンの分周設定から算出した理論値 |
| デューティ比の線形性 | 全点 ±0.4pt 以内 | 調光カーブを Linear にしたときの理論値 |
| 連続実行の安定性 | 120 回で失敗 0 | — |
| 長時間の連続取得 | 16 秒 / 53 万点 / 取りこぼし 0 | フェード中の波形をそのまま記録 |
同じことをやろうとする方のために、実際に引っかかった点を挙げておきます。
| 症状 | 原因 | 対処 |
|---|---|---|
| プログラムから機器が見つからない | 付属の GUI ソフトが起動しているとデバイスを占有する。「未接続」と同じエラーになり区別が付かない | GUI を終了してから実行する |
| 周波数が数十億 Hz と表示される | サンプリング間隔を指定せず自動任せにすると、間隔 0 という異常値が返ることがある | 間隔は必ず明示的に指定する |
| 取り込みが失敗する | 要求点数が機体のバッファ上限(実測 1〜2 万点)を超えている | 点数を減らすか、連続転送モードに切り替える |
| レンジ設定が拒否される | 最小レンジ(10mV・20mV)に非対応の機体だった | 50mV 以上を使う |
| デューティ比が暴れる | 単一しきい値でエッジ判定するとノイズで誤検出する | ヒステリシス付きのしきい値にし、周期は中央値を取る |
ここに書いた数値の出どころです。現場判断で迷ったら原典に戻ってください。
| 項目 | 値 | 備考 |
|---|---|---|
| ビットレート | 250 kbit/s | 1 ビット=4µs |
| ブレーク | 88µs 以上 1 秒以下 | 送信側の推奨は 92µs 以上。上限が広いのでトリガは「〜より長い」で引く |
| MAB(ブレーク後のマーク) | 8µs 以上 1 秒以下 | 送信側の推奨は 12µs 以上 |
| スタートビット | 4µs | 必ず Low |
| データ | 4µs × 8 ビット | LSB から送る |
| ストップビット | 4µs × 2 ビット | 必ず High |
| 1 スロット(フレームタイム) | 44µs | スタート 1 + データ 8 + ストップ 2 = 11 ビット |
| スロット間の間隔 | 0 秒以上 1 秒以下 | 詰めて送るとは限らない |
| 最大パケット | 513 スロット=約 23ms | スタートコード+512 チャンネル |
| 最大リフレッシュ | 約 44 Hz | フル 512 チャンネル送出時 |
| アイドル時 | MARK(High) | 無信号と区別が付かない点に注意 |