アナログシンセの VCO ブロック (57) -- マルチ出力アンチログ回路の測定 (7)

前回の測定後も測定は続行しており、計 56 時間 (2 日と 8 時間) に渡るデータを収集しました。
温度変化の幅は、最低 23.9 °C から最高 33.6 °C までの 9.7 °C となりました。
9 月 22 日 09 時ごろに測定開始した以降の経過時間と室温とのグラフを下に示します。

開始後 6 時間付近 (9/22 午後) のピークが最高温度 33.6 °C で、開始後 47 時間付近 (9/24 午前) の谷が最低温度 23.9 °C です。
温度センサとしては、絶対温度出力型の LM335Z (NS 製) を使い、TO-92 パッケージの「平面」の部分をトランジスタ・アレイ TD62501 の DIP パッケージ上面に密着させています。
LM335Z は絶対温度 300.0 K に対して公称 3000 mV の電圧を出力し、その変換特性は +10 [mV/K] となっています。
当初は、この電圧を ATmega168/328 の内蔵 10 ビット ADC で読んでいましたが、10 ビットでは分解能が十分ではなく、後から SPI インターフェースの 12 ビット ADC である MCP3208 (Microchip 製) を外付けして使用するように変えました。
ATmega 内蔵のハードウェア SPI の端子と、PWM CV に使っている Timer2 の出力端子とが重なっているため、他のピンを使ってソフトウェア SPI でインターフェースしています。
読み取った電圧値と温度との関係については較正していませんが、必要なのは温度そのものの精度ではなく、温度変化に対する周波数の変動の測定なので、特に気にしていません。
アンチログ回路の Vbe(max) と Vbe(min) の差を取れば原理的に絶対温度に比例するはずであり、それを確かめるためにそれぞれの Vbe も測定しています。
具体的な値としては、Vbe(max) が 0.6 V 程度、Vbe(min) が 0.4 V 程度になります。
これを 3.3 V フルスケールの 12 ビット ADC で読むのと、1.1 V フルスケールの 10 ビット ADC で読むのとでは分解能に大差ないので、ATmega 内蔵の 10 ビット ADC を 1.1 V バンドギャップ・リファレンスの設定にして読み取っています。
LM335Z 出力から求めた温度と、Vbe の電位差との間のグラフを下に示します。

青い線は回帰直線です。
赤い線 (実は「点」) は測定データの「散布図」です。
振動しているように見えるのは、ADC の分解能が十分でないのと、ノイズの影響です。
分解能が十分でない場合の量子化誤差は、理想的な場合には「階段状」になるはずですが、AD で複数回変換したデータの平均を取っているのでノイズの影響により階段の直線部分が「誤差関数」のような曲線状になります。
温度と Vbe 電位差との関係は、きれいに直線に乗っており、トランジスタ・アレイと温度センサとの間の熱結合も良好であると言ってよいでしょう。
ちなみに、回帰直線で絶対温度 0 K まで外挿すると、Vbe 電位差が理論上 0 mV となるところ約 8 mV となり、実験の精度を考えると十分と言えると思います。
オクターブ・スパン誤差のグラフを下に示します。

青い線は 2 次曲線にフィッティングしたものです。
前回の場合と違って、2 次と言っても直線に非常に近い形になっています。
結果としては、前回同様にオクターブ・スパン誤差の変動は 0.05 セント以下になっています。
220 Hz のピッチ誤差のグラフを下に示します。

ピッチ誤差の変動は 24 °C から 34 °C までの 10 °C 幅で約 3 セントとなっています。