2018年12月13日木曜日

マイコンの非同期出力をデジタル回路でラッチして同期させるシミュレーション(メモ)

MIDI_CV_CONVの実験でArduinoからCV、GATE信号を出力していますが、チャンネルごとに1ms以上のずれがあります。

MIDIの通信速度は「31.25Kbps (±1%) の非同期方式 https://ja.wikipedia.org/wiki/MIDI」ということなので、1バイト(8bit)送受信するのに最低でも256usかかります。(1 / 31.25Kbps = 32us/bit で 32us/bit * 8bit = 256us)

→なんで「31.25Kbps」という中途半端な通信レートにしたのかも逆数をとると256という切りの良い数値になるのでわかる?

Arduinoなどマイコンで逐次処理すると、MIDIメッセージを解釈してCVやGATEとして出力すると、1処理ごとに、どうしても256us以上のずれが発生することになります。

1MHz駆動のマイコンなら1クロックで1usかかるので、大雑把に考えてMIDI->GATE変換に1ms以上のずれが発生するのはしかたないと思います。

1msというと短い時間のようですが、逆数をとると1kHzでもろに可聴帯域なのでそれほど気軽には考えられません。

実際にやるかどうかはわかりませんが、CV/GATEのチャンネルごとの時間的なずれをデジタル回路で同期させることを考え、LTSpiceでシミュレーションしました。

デジタル回路なら素子の特性によるので、マイクロ秒~ナノ秒(1MHz~1GHz)オーダーに抑えられると思います。

CV信号を発生させるDACのMCP4922は「LDAC」というラッチ端子があるので、GATE信号とまとめて同期できると思います。

シミュレーション回路図




Dフリップフロップを4つ並べて単一のクロック信号(CLK)で同期させる回路です。パラレル入力・パラレル出力のシフトレジスタということでPIPO Shift Registerというそうです。

参考「The Shift Register https://www.electronics-tutorials.ws/sequential/seq_5.html

この回路でマイコンの出力の時間的なズレを吸収し、CV/GATE信号を同期できます。

メモ:


CLK信号(黄色)がL->Hするとき入力(水色)が評価され、出力(緑色)される。

CLKがLの間にCV/GATE信号をマイコンから出力し、CLKをHにすると同期して信号が出力される。

レイテンシー(同期させるまでの待ち時間)が発生するので要注意。

周波数として考えると、CLKは信号本体の周波数の2倍以上は必要。

CLKが遅い場合はまともに出力されない↓



0 件のコメント:

コメントを投稿