ラベル MIDI_CV_CONV の投稿を表示しています。 すべての投稿を表示
ラベル MIDI_CV_CONV の投稿を表示しています。 すべての投稿を表示

2019年10月4日金曜日

MIDI CV Converter MIDI_CV_CONVのノイズを探る

自作のMIDI-CVコンバーターのMIDI_CV_CONV と自作のオーディオミキサーのMIX0401 の電源を、自作のACアダプター分配器を使って電源を共有すると激しいノイズが発生します。


赤色の⇒が電源供給の方向です。

MIX0401とMIDI_CV_CONVの電源をACアダプター分配器 で共有せずに、MIX0401のみ単独の電源を使うとノイズがなくなります。

WaveSpectaraで測定


耳で聞こえるレベルのノイズなので、無音の状態にしてWaveSpectraでFFTしてもノイズがはっきりと測定できました。

MIDI信号をMIDI_CV_CONVに入力してMIX0401の入力レベルはすべて0、出力レベルは中点に設定して測定です。

Audio I/F: TASCAM US-144MKII

MIX0401とMIDI_CV_CONVでACアダプター分配器を使って電源(DC9V)を共有

激しくノイズが乗っている状態です。

MIX0401のみ単独のACアダプター(DC12V)を使用

個別のACアダプターを使うといやなノイズは聞こえなくなります。

MIX0401の内蔵電池電源を使用

バッテリー駆動だと、ノイズはさらに低減されます。

電源ラインにフィルター的なものを入れてみる。


MIX0401とMIDI_CV_CONVで電源を共有しつつ、電源ラインに「ノイズ低減」効果が期待できそうなものを入れて測定してみました。


画像の上が普通のDC-DCケーブルで、下側が経路中にインダクタやフィルタを入れられるようにしたものです。


左上から右下に

1) コモンモードチョーク EV20-1,0-02-3M9
2) EMIフィル BMX016-70
3) インダクタ 1mH
4) インダクタ 100mH

インダクタは秋月で購入した太陽誘電のアキシャルリードインダクタで、1mHより100mHのほうが外形が小さい。

効果があったのは100mHのインダクタでした。

1) コモンモードチョーク EV20-1,0-02-3M9

2) EMIフィル BMX016-70 

3) インダクタ 1mH

4) インダクタ 100mH

電源ラインの可聴帯域のノイズなので純粋にインダクタンスが高い方がノイズが減るのだと思います。

メモ:


MIDI_CVコンバーターはどうやらノイズ源。

2019年5月17日金曜日

MIDI CV Converter MIDI_CV_CONV プラケースに収めた。

むき出しのまま使っていたMIDI_CV_CONVをプラケース(秋月の大型ポリカーボネート・ケース 140)に収めました。

DASS01と合わせてラックマウントで使うかどうか迷っていたのですが、DASS01でやらかしてしまったので一旦整理することにしました。

中の配線

GATE信号表示用のLEDは、すべてプラス・マイナスの2線で配線したので、線材の本数が増えて大変でした。

上面

LEDは対応するGATE出力のミニジャックの直上に来るように配置しました。LEDの固定方法はグルーガンです。ケースが透明なのでグルーが透けて見えてカッコ悪いです。

背面

MIDI-THRUはDIN-5のコネクタの手持ちがないので、穴だけ開けておきました。

ケースに高さがもう少しあれば収納するのも楽なんですが。

2019年3月9日土曜日

MIDI CV Converter MIDI_CV_CONV Pitch Bend対応

MIDI_CV_CONVのファームウェアを改修して、MIDIのPitch Bendコマンドに対応しました。

ファームウェア
https://github.com/ryood/MIDI_CV_CONV/tree/master/Arduino/MIDI_CV_CONV

Pitch Bendの-8192~+8191の値で、ピッチを±2半音揺らせます。

CV1の出力電圧の測定値

Note Pitch Bend CV1電圧 CV1差
A3(#57) -8912 1.813V -162mV
A3(#57) 0 1.975V 0V
A3(#57) +8191 2.142V 167mV

<半音2つの電圧> = 2 * ( 1[V] / 12 ) ≒ 167[mV]

メモ:


「pitch bend sensitivity」はいずれ対応予定。

2019年2月25日月曜日

KIK01のSyncInをKIKとNOSの2系統に分離

久しぶりにKIK01のファームウェアをいじりました。本体のKick音とゴーストとして使うNoise音を同期して出力していたのを、それぞれ別のGATE信号で出音できるようにしました。


mbed Repository
https://os.mbed.com/users/ryood/code/KIK01/ (Files at revision 41:ac576c48eace)

接続図

MIDI信号をMIDI_CV_CONVでGATE信号に変換してKIK01に入力しています。KIKとNOSは、TR-808/909のBDとOH/CHみたいな感じです。

32kHz付近のピークが気になるので、サンプリングレートを上げたかったのですが不可でした。

操作できるパラメータが多すぎて、自分で作っておきながら使い方がよくわかっていません(^q^;

NOS01はWhite/Pink/Blue Noise(PinkとBlueは疑似)を出力していますが、KIK01の箱の中の配線を変えないといけないのでリアルタイムに変更するのは無理です。

2019年2月6日水曜日

MIDI-CV Converter MIDI_CV_CONVとNucleo_DCOで音階の周波数を測定

MIDI_CV_CONVにパソコン上のDominoから特定の音階をMIDIで送出し、MIDI_CV_CONVでCV値に変換後、Nucleo_DCOに入力してWaveSpectraで出力周波数を測定しました。

Nucleo_DCOは3OSCですが、OSC1のみSine波に設定して測定しました。OSC2、OSC3はLevel POTを最小にしてMIXされないようにしました。

Nucleo_DCOはADCを無効化できるようにしていますが、これは有効化して測定しました。(参考「DASS01のCV入力」)

ブロック図

Nucleo_DCOのRange


DominoからA2(NoteNuber:45)を出力し、Nucleo_DCOのRangeを切り替えてオクターブごとのA音をWaveSpectraで測定しました。

Nucleo_DCOでRangeの設定は以下の通りプログラミングしています。frequencyBaseは出力できる最低周波数です。

const double frequencyBase[FREQUENCY_RANGE_MAX] = {
//  A-1    A0    A1    A2     A3     A4     A5     A6      A7      A8
13.75, 27.5, 55.0, 110.0, 220.0, 440.0, 880.0, 1760.0, 3520.0, 7040.0
}

DominoでA2を出力

Nucleo_DCO Range:A-1

Nucleo_DCO Range:A0

Nucleo_DCO Range:A1

Nucleo_DCO Range:A2

Nucleo_DCO Range:A3

Nucleo_DCO Range:A4

Nucleo_DCO Range:A5

Nucleo_DCO Range:A6

Nucleo_DCO Range:A7

Nucleo_DCO Range:A8

Range 周波数(Hz) 測定値(Hz) 差(Hz) 誤差(%)
A-1 27.5 26.4 -1.1 -4.00%
A0 55 55.7 0.7 1.27%
A1 110 111.3 1.3 1.18%
A2 220 219.7 -0.3 -0.14%
A3 440 442.4 2.4 0.55%
A4 880 881.8 1.8 0.20%
A5 1760 1769.5 9.5 0.54%
A6 3520 3536.1 16.1 0.46%
A7 7040 7072.3 32.3 0.46%
A8 14080 14150.4 70.4 0.50%

測定値

誤差

MIDIノートナンバー


Nucleo_DCOのRangeをA3(220Hz~)に固定して、Dominoから送出するMIDIノートナンバーを1オクターブ分測定しました。

note # 周波数(Hz) 測定値(Hz) 差(Hz) 誤差(%)
A2 45 440 442.4 2.4 0.55%
A#2 46 466.1637615 468.8 2.636238482 0.57%
B2 47 493.8833013 495.1 1.216698744 0.25%
C3 48 523.2511306 524.4 1.148869399 0.22%
C#3 49 554.365262 556.6 2.234738046 0.40%
D3 50 587.3295358 591.8 4.470464165 0.76%
D#3 51 622.2539674 624 1.746032556 0.28%
E3 52 659.2551138 662.1 2.844886174 0.43%
F3 53 698.4564629 700.2 1.743537134 0.25%
F#3 54 739.9888454 744.1 4.111154577 0.56%
G3 55 783.990872 788.1 4.109128037 0.52%
G#3 56 830.6093952 832 1.39060484 0.17%
A3 57 880 884.8 4.8 0.55%

測定値

誤差

メモ:


純粋に楽器として見るとチューニングが怪しい感じです。詳しくはわかりませんが、A音が440Hzか442Hzかで問題になる業界もあるようです。

MIDI_CV_CONVで出力電圧の調整に使っているトリムのR5を多回転タイプのものにすればMIDI_CV_CONVの出力電圧の精度は上げられそうですが。

今回のテストでは、MIDIノートナンバーをMIDI_CV_CONVの12bitDACでCV(アナログ信号)に変換して、Nucleo_DCOでは12bitADCでCVをプログラムで扱えるように再びデジタル化しています。

DAC/ADCの精度や信号路のノイズなどを考えると、全体として調律の精度を上げるのは難しそうです。

きっちり精度を出すなら、MIDI信号をデジタル信号のままNucleo_DCOに渡せば良くなると思います。

Nucleo_DCOで直接MIDIのRXを処理するとか、MIDI→SPIのDigital to Digital Converterとか。

2019年1月20日日曜日

MIDI-CV Converter MIDI_CV_CONV 動作チェック

回路図

ファームウェア
https://github.com/ryood/MIDI_CV_CONV/tree/master/Arduino/MIDI_CV_CONV_Test06

電源 単3電池×6 8.15V
VCC 5.022V
VREF 3.298V(回路図のR5のトリムで調整)
電源電流 32mA~40mA程度

出力波形の測定


パソコンのDominoでMIDIデーターを作って測定しました。ch1はNoteOn/OffをGate1から出力し、ノートナンバーをCV値に変換してCV1から出力しました。音階はA1(#33)~C5(#72)で出力しました。これはMIDI_CV_CONVでCV変換できる最大幅です。

Modulation(CC:1)をCV2から出力しました。ch2~ch6もタイミングをずらして出力し、Gate2~Gate6から出力しています。


CV出力

ch1:CV1 ch2:CV2

Modulationは細かく出力しているので、ch2:CV2の線が一部乱れています。データーの送出が重なったとき処理落ちしてるためだと思います。

<追記:2019.01.23>

よく見るとch1の音階が最大になった後に、最小になるまでの間が引き伸ばされてます。

Dominoでループして出力しているのが原因かもしれませんが、要調査。

360ms程度の遅れ。

</追記>

Gate出力

ch1:CV1 ch2:GATE1

CV信号は3.3V系、GATE信号は5V系です。

出力振幅の測定


A1(#33)とC5(#72)を出力して、CV1の電圧を測定しました。

A1(#33) 1.3mV
C5(#72) 3.243V

C5のCV値のは
(NoteNumber - BaseNoteNumber) / 12 = (72 - 33) / 12 = 3.25V
なので誤差は約0.22%です。

メインループの処理速度


メインループの最初と最後でCheckPin1(D8)をH/Lさせています。


ch1:D8

処理時間は揺れがあり、オシロの表示値の目視で8kHz~15kHz程度です。

2019年1月17日木曜日

MIDI-CV Converter MIDI_CV_CONV はんだ付け完了

根気が続かないので、1日の実働2~3時間以内にしてはんだ付けしました。

部品面(ICなし)

部品面(ICあり

ハンダ面

動いてるところ

スマホで何枚か撮ったら、「Googleフォト」がアニメーションしてくれました。いつもは余計なお世話ですが、今回はまあまあいい出来だと思います。

2019年1月8日火曜日

MIDI-CV Converter MIDI_CV_CONVの設計 その2

回路図

ArduinoからのGATE出力の配線が込み入っているので、作図にBUSを使いました。

基板図

部品並べ(ICなし)

部品並べ(IC挿入)

今回はKiCADを使ってみようかと「KiCADことはじめ」を見ながら少し触ってみたのですが、ドキュメントが現行バージョンと違っていたりして手こずりました。

もっと小規模の回路で試用したほうがよさそうです(^q^;

2019年1月4日金曜日

MIDI-CV Converter MIDI_CV_CONVの設計

あけましておめでとうございます。今年も音源を中心として、いろいろと実験&製作していきたいと思います。

今年一発目は、去年からやっているArduinoを使ったMIDI-CVコンバーター「MIDI_CV_CONV」です。

年初にNative Instrumentsから「Track-01 PLAY」の無料ダウンロードの案内メールが来ました。

まだダウンロードはしてませんが、KICK+BASSって、まさにここ1~2年ハードウェアでやっていたことではないですか。デモ・サウンドを聴くとさすがNative Instrumentsらしい過激な出音です。

基本的にアナログ回路で構成しているKIK01Nucleo_DCODASS01TLF01+Dual_OTA_VCA)とは方向性はまるで違いますが、なんとなく元気が出てきました。

わしゃ音楽を作りたいんじゃなくて、音楽を作るもんを作りたいんじゃ!という「メタ作りたい」欲望を沸き立てつつ今年を始めたいと思います。

MIDI_CV_CONV仕様案


CV出力 2系統
ch1のNoteNumberをCV1、Moduration(CC:1)かCutoff(CC:74)をCV2に出力。0~3.3V。

PichBendでCV1をモジュレーション(予定)。

GATE出力 6系統
ch1~ch6のNoteon/NoteoffをGATEに出力。5V/0V。

MIDI入出力
MIDI-IN端子、MIDI-THRU端子。

電源
DC9V 内蔵単3×6または外部9V AC-DCアダプタ。

外形
なりゆきですが、Arduino_LFOArduino_EGと同じ外観にできればと思います。

ブロック図

回路図

Arduinoは実装面積を節約するために、Arduino Pro Mini 16MHz/5V(中華製)を使用。

CV出力はMCP4922の出力そのままです。GATE信号は3-State Bufferの74HC541でバッファリングして出力、LEDはトランジスタアレイのTD62003でドライブします。

MIDI-THRUはMIDI-IN信号を74HC541でバッファリングして出力します。(MIDI-THRUはテスト環境が作れないので未テストです。)

テスト用ブレッドボード配線


2018年12月28日金曜日

MIDI-CV Converter MIDI_CV_CONVの構想 その3

下図のように接続してMIDI_CV_CONVをテストしました。


ありあわせのケーブルで途中で変換コネクタを使ったりして接続すると、おそらくグランドループに起因すると思われるノイズが出て途方にくれていましたが、専用にケーブルを作り直したりしているうちにノイズが気にならなくなりました。

やったことは、「ケーブルの途中で変換コネクタを使わなくする」ことと「オーディオ信号が通るケーブルは短くする」ことぐらいです。短くすると言っても2~3メーターのケーブルもあります。

ケーブルのグランド線を切ったりしてグランド線のループを切ると改善することもあるらしいですが、そういうことはやっていません。

このあたりのノイズは、苦手な電磁誘導が原因らしいので、後々経験を積んで理屈と照らし合わせて行きたいと思います。

CV/GATE信号を同期させるラッチ


MIDIチャンネルごとのGATEのずれを、Dフリップフロップで吸収することを考えて実験しました。

接続図


同期の方法として

1) ArduinoからGATE信号を出力してDフリップフロップが4回路入っている74HC175に入力

2) ArduinoからCV値をSPI経由で出力してDACのMCP4922に入力

3) Arduinoからラッチ信号を出力して(接続図のArduinoのD9から出ている青色のケーブル)、74HC175とMCP4922を同期させて出力

という手順を考えたのですが、うまくいきませんでした。

スッキリと説明できないのですが、MIDIの通信速度が遅すぎてチャンネルごとのGATE/CVを同期させようと思うと数ミリ~数10ミリ秒キザミの精度になってしまいます。

メリットがはっきりしないので、Dフリップフロップによる同期は今回は保留します。

CV信号にかけるLPF


接続図のようにMCP4922の出力にパッシブのRLCローパスフィルタ(2次)をかけました。出力をドライブするために単電源OPAMPのNJM3404のボルテージフォロワを後段に入れています。

コンデンサーの容量を大きくすると波形がなめらかになってポルタメントがかかっているようになるのですが、定数を決めるのが難しいのでLPFも保留します。

トランジスタアレイによるLEDのドライブ


GATE信号を使ってLEDを発光させるためにトランジスタアレイのTD62003を使いました。これは入れておいた方が良さそうです。

メモ:


ノイズの改善と今回実験した回路の因果関係がはっきりしないので、もう少しテストする予定です。