ここしばらく、Analog3 に使うマイクロコントローラに STM32 は使えるか検討していて、ペリフェラルへの応答の遅さからやめようかなと思っていましたが、考えを少し変えてやっぱり検討は継続してます。
ということで STM32 を使っての次の検討項目は DAC には何ビットのものを使えば良いかです。今まで DAC は PWM で代用していましたが、応答が遅くてこの方法でいくのはもう限界。現在製作中のMIDI/CV は DAC 出力のものでやり直す予定ですがここで問題になるのは、何ビットのものを使えば良いかということ。もう少し正確には、安価に手に入る DAC は 12bit までで、12bit はピッチ CV の使用に耐えられるかが懸念点で、本日はその検討をしました。
候補は 12bit DAC の MCP4726 です。制御は I2C で行うので、実験用の STM32C011F6P6 コントローラを設定して繋いでみます。ついでに 10bit 版の MCP4716 も手配してあったので一緒に繋げます。

さて、設定ができたところで実際に DA 変換した電圧を VCO に入れて、最小単位の出力変更で音程の変化がわかるか試してみました。DAC の出力レンジは 6V ぐらいを想定して設定。少し狭すぎたかもしれません。実用では 10 オクターブぐらいほしい。ということで、12bit 出力を丸めて 11bit 精度相当の変化も調べてみました。この精度だと 12bit で 12 オクターブぐらい網羅できる計算です。
12 bit : わからない – 電圧変化 1mV
11 bit 相当:少しわかる – 電圧変化 2mV
10 bit: はっきりわかる – 電圧変化 5 mV
でした。10 bit の刻みは 12bit の4倍のはずなので変化の数値が変なように見えますが、テスタの測定精度ギリギリで誤差を結構含んでいるのでやむを得ないです。2mV というと、Oct/CV から換算して 2.4 セントです。僕の耳の性能を公開しているようでちょっと嫌でありますけれどもこの辺の誤差が自分的には許すか許さないか迷うギリギリのところです。このデータ、ビット数よりも電圧の方が大事だったかもしれません。
ちなみに STM32C011 からの I2C 使用では SPI で見られたようなひどい遅延は見られませんでした。I2C クロック 400 kHz で DAC 値更新は一回につき 0.1 ms 程度かかるようです。
