製作モジュール一覧

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

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月25日金曜日

DASS01のCV入力


MIDI_CV_CONVが安定して動いているようなので、足りないハードウェアを追加しようと思います。

全体のブロック図

DASS01のCV入力


MIDI_CV_CONVから出力されるCV信号は3.3V系です。DASS01はアナログ構成で±9Vを電源としています。3.3V系の信号では振幅が少し足りないので増幅しつつ、CutoffとEnvelope(VCA)にかける深さを調節できるようにします。

オーソドックスにCV信号をPOTで分圧して非反転増幅回路で3倍に増幅してやります。0~3.3Vの信号が0~9.9Vに増幅されます。増幅率はオーバードライブの効き方を見ながら決めるつもりです。

シミュレーション回路図

過渡解析

Nucleo_DCOのCV


Nucleo_DCOに入力されるCV信号にアナログ的にバイアスを掛けてやってピッチを微調整しようと思っていましたが、Nucleo_DCOは9Vの単電源で動作していて負電源がありません。ピッチを上にずらすことはできそうですが、下にずらすことが無理そうです。

なので、CVとは別に、POTの値をADCで読み取ってプログラムで計算してピッチを微調整しようかな~と思います。

と言っても他の音源と合奏するまではそんなに必要でもないので、しばらく保留します。

Nucleo_DCOのブロック図(現状)

Nucleo_DCOの操作パネルのデザイン(現状)

メモ:


Nucleo_DCOはLFOやEGなどで周波数変調できるようにもう少し考える?

2018年12月18日火曜日

Nucleo DCO 出音のチェック

1kHzサイン波


ADC On

ADC Off

ADC読み取りを抑止した場合(ADC Off)特に低域の歪が改善されます。ADC読み取りを行うとPOTによる分圧の読み取り値がふらつくためだろうと思います。以降ADC Offで測定しました。

ADC読み取りを抑止した場合、可聴帯域ではTHD≒0.04%、THD+N≒0.17%程度です。整数倍以外の細かな歪がいろいろ出ていますが、12bit DACのためでしょうか。

POTで周波数を設定するため、きっちりした周波数は指定できませんが、まずまずきれいな波形が出力されていると思います。

10kHzサイン波


30kHz付近に2つのピークがあります。上の方はナイキスト周波数(62.5kHz / 2 = 31.25kHz)で、下の方は3次高調波歪(10kHz * 3 = 30kHz)でしょうか。

オシロで測定


1kHzサイン波

FFT (~10kHz)

FFT (~1.25MHz)

1.25MHzまで目立ったピークは出ていません。

10kHzサイン波

FFT (~100kHz)

サンプリングレートの62.5kHz付近に歪が残っていますが、-40dB程度です。

<追記:2019.01.20>

よく見るとピークは52kHz付近です。サンプリング周波数が62.5kHzで基本波が10kHzなので、62.5kHz - 10kHz = 52.5kHzの折り返し歪でしょうか。

D/A変換して使える帯域は、サンプリング周波数の1/2(ナイキスト周波数)以下なので、オーディオ的に考えると31.25kHz以下は十分に減衰させる必要がありそうです。

まあ、でも今回は12bit DACなので可聴帯域外の歪は、「味」として深く考えないことにします。

</追記>

FFT (~1.25MHz)

各種波形


100Hzサイン波

100Hz三角波

100Hzノコギリ波(上昇)

100Hzノコギリ波(下降)

100Hz矩形波(デューティ50%)

矩形波のTop / Bottomが斜めになっているのは、Audio I/Fの入力のACカップリングの影響だと思います。

100Hz矩形波(デューティ10%)

100Hz矩形波(デューティ90%)

矩形波のデューティ比を変えると、スペクトルがコム・フィルターをかけたみたいになるんですね~。

ノイズ

そのうちに基本波形以外の波形も増やしてみようと思います。

2018年11月27日火曜日

Nucleo DCO 一旦できたことにする。

筐体を作りました。

今回は枠組みに奮発してヒノキを使いました。スギでもいいんですが、ホムセンで売ってるスギだと板厚が12mmが最薄で、ヒノキは9mmからあったのでヒノキにしました。


910x9x90mmで400円でした。組み上げは木工用ボンドだけにしました。

天板も奮発してアルミ板にしました。200mmx300mmx1mmで513円でした。アルミ板の切断はこの動画を参考にしました。


上下に当てる板はホムセンの端材(大きくても100円もしない)を買ってきて、実際やってみるとペコリときれいに切断できました。カッターもこの際奮発してでかいサイズのH型を購入して使いました。



丸穴の穿孔はドリルで一発ですが、OLEDの表示窓の角穴はまたもや妥協しました(^q^;



量産することがあればその時は、専門の業者さんに頼もうと思います。


パーツをあてがって木工用ボンドで張り合わせて、パンツのゴムで圧をかけたのですが、アルミ板の寸法が少し大きかったようで背面のハリのパーツが接着できませんでした。


裏側のハリのパーツだけクランプで圧をかけて再度接着。板材を傷めないためにはクランプの間に当て板を入れたほうがいいと思いますが、クランプの広げる幅が限界だったので養生テープのみの保護となりました。

基板の配置(底板)

操作パネル(天板)

操作パネル(天板裏側)

正直空中配線は地獄です。老眼で対象物にピントが合わないので(老眼鏡やルーペを駆使してますが)ほぼほぼ勘にたよってはんだ付けするしかありません。




配線

ケーブルの長さはマチマチですが、なんとか結合できました。


メモ:


入出力端子をつける裏板を製作。←プラだとベコベコするので薄いベニア板?

ヒノキの木枠を塗装する。

メンテしやすい範囲で配線材の長さを揃える。

天板につけてる木ネジは皿ネジはおさまりが悪いので、普通の丸頭のタイプがあるかな?

天板のアルミが傷だらけ。研磨する?