PIC18F14K50 (6)

PIC による VCO を Pakurino (Arduino) につないで、CV と出力周波数の特性を自動測定してみました。
PIC 側と Pakurino 側とは 20 cm 程度のフラット・ケーブルで接続します。
のこぎり波のバッファを設けていないので、周波数の測定は「SRQ」端子のパルス波で行うのですが、パルス幅が 300 ns と狭く、「負荷容量」や「信号の減衰」が心配になります。
そこで、SRQ 出力を 2 分周して、1/2 の周波数の「方形波」として Pakurino 側に送ることにしました。
この目的にはタイマ/カウンタは使いづらいので、EUSART の同期モード、あるいは ESSP の SPI モードで、スレーブ動作とし、外部クロック入力に SRQ 出力をつなぎ、データとして 0x55 あるいは 0xAA を送り続けることで、「2 分周」として機能させました。
実際には、EUSART 側には LED を接続してあって低インピーダンスとなっており、「BOOT」スイッチ回路の機能も持っている SRQ 端子と接続すると「BOOT」回路に影響するため、外部回路を接続していない ESSP の方を使っています。
測定結果のグラフを下に示します。

横軸がアンチログ回路の 15 kΩ に加える CV の電圧値で、縦軸が理想特性からの誤差を「セント」単位で表示したものです。
CV = 0 〜 1.5 V の範囲のデータを元に回帰直線を求め、それを理想特性としました。
出力周波数は CV = 1 V で 220 Hz 程度、CV = 3V で 20 kHz 程度です。 Oct/V の値は特に調整していません。
ちょっと見づらいのですが、赤い線が測定結果で、4 回連続して測定を繰り返したものを重ねて表示してあります。
青い線は、リセット期間を 5 μs とした場合の理論的な誤差を示すグラフで、測定結果になるべく合うように値を選んだものです。
実際のリニア VCO としてのリセット期間は約 300 ns ですから、5 μs の大部分はアンチログ回路のベース電流誤差に起因するものと考えられます。
この条件で、Franco の補償に必要な抵抗値を計算すると約 220 Ω になります。
4 回の測定結果をバラしてプロットしたのが下のグラフです。

縦軸に数字を入れてありませんが、グリッドの間隔は 200 セントで、それぞれのプロットを 200 セントずつオフセットを付けて表示してあります。
3 回目の測定では CV が 2.5 V 以上の範囲でデコボコが少なく、4 回目の測定では CV が 2.5 V 以下の範囲でデコボコが少なくなっています。
リセット用の PMOS のために電源電圧依存性が大きくなり、温度補償も十分には行えていないので、測定精度は、こんなものかも知れません。