シグマデルタ変調 PWM (7)

これまで ΣDM PWM のリニアリティの測定をしていなかったので、整数部 1 LSB の間の小数部 32 レベルについて実測してみました。
結果のグラフを下に示します。 赤の線が 2 次で、青の線が 1 次です。

DAC データとして、3072 (16 進で 0x0C00) から 3328 (16 進で 0x0D00) の、PWM 整数部 1 LSB の間の 32 レベルについて 1 次と 2 次の ΣDM 出力電圧について測定しました。
小数部 f = 0、つまり DAC データ 0x0C00 と 0x0D00 の点は誤差ゼロとみなし、その2点を結ぶ直線を理想変換特性として、測定結果との誤差を求めてプロットしたのが上の図です。
整数部 1 LSB は半音の 1/2 で、音程では 50 セントに相当しますから、上の図では誤差電圧値そのものではなく、セント値で誤差を表示しています。
誤差は 0.05 セント以内におさまっており、これは、ほぼ測定誤差だと思われます。
電圧測定は2重積分型の電圧計で行っており、小数部 f = 1 の 1 次 ΣDM のように特定の周波数の成分が重畳している場合でも平均化されて影響は目立たなくなっています。

MIDI2CV

MIDI2CV プログラムは ATmega168 用の FM 音源プログラム「TGmega」を改造して作ることにしました。
Pakurino (Arduino) 用のスケッチとするのが目標ですが、まずは、従来の AVRstudio + WinAVR の環境で作成してから、Arduino 用の変更を加えます。
Arduino 用のブートローダー領域を消さないように、出来上がった HEX ファイルを avrdude を利用して書き込みます。
プログラムの改造は、すでにある機能を「削除」する方向なので、それほどの手間が掛からずにできましたが、エンベロープ出力サポートおよび LCD 表示 / キー入力サポートありの状態では、ブートローダー領域を除いたプログラム領域 14 K バイトをほぼ全部使い切るサイズとなりました。
Arduino 用としては、もっと機能を絞ることになるでしょう。