PIC16F145x (1) --- クロックの周波数変動

PIC16F1454/1455/1459 (以下 PIC16F145x と略記) は、Enhanced Mid-Range (14 ビット・コア) に属するマイコンで、USB (デバイス) モジュールを内蔵していることが特長です。
それぞれ、

  • PIC16F1454 — 14 ピン、アナログ・モジュールなし
  • PIC16F1455 — 14 ピン
  • PIC16F1459 — 20 ピン

となっており、20 ピンの PIC16F1459 は同じく 20 ピンの PIC18F14K50 と I/O ポートなどのピン配置で互換性があります。
PIC16F145x には ACT (Active Clock Tuning) と称する、外部のクロック周波数を基準として内部の 16 MHz クロックの周波数を調整する機能が搭載されています。
外部基準クロックとしては、32.768 kHz の水晶発振、あるいは、フルスピード (12 Mbps) の USB のいずれかを選ぶことができます。
ACT の機能を使えば、外部の水晶振動子なしに内蔵クロックだけで USB デバイスの機能を実現できます。
専用の測定器を使わずに、ACT あり/なし、および水晶振動子を使った場合の周波数変動についてソフト的に測定してみました。
まず、方針としては、USB モジュールおよび CPU コアのクロックである FOSC の 48 MHz をタイマ 2 モジュールと PWM モジュールを使ってオーディオ帯域まで分周し、サンプリング周波数 48 kHz で「録音」して wave ファイルにします。
そのあと、プログラムでその wave ファイルを読み込み、ソフトウェア的に実現した PLL で周波数変動を求めます。
録音の対象とする分周後の波形として、デューティー 50 % の 12 kHz 方形波を選びました。
これは、当初は「遅延検波」により周波数変動を求めようとしていたためで、48 kHz サンプリングでは、12 kHz に対しては 1 サンプル遅延で位相差 90° に相当するためです。
また、「方形波」を選んだのは偶数次高調波がなく、最も下の 3 次高調波でも周波数は 36 kHz となり帯域外なので、基本波の 12 kHz の正弦波だけを録音することができるからです。
処理方式を PLL に変更したので、周波数を 12 kHz にする必然性はなくなりましたが、そのまま特に変えていません。
PIC16F1455 に対して実験した結果のグラフを下に示します。

緑色のトレースが ACT なしで内部 16 MHz クロックが「フリーラン」状態の場合、青色のトレースが ACT ありで USB に同期している場合、赤色のトレースが外部 12 MHz 水晶振動子を使用した場合です。
周波数誤差の平均値と標準偏差を表にすると下のようになります。

 平均値
(ppm)
標準偏差
(ppm)
ACT なし 368 249
ACT あり -27 177
水晶発振 36 6

赤色のトレースの水晶発振では、標準偏差が約 6 ppm であり、ほとんど直線のように見えています。
平均値が 36 ppm で、「ゼロ」でないのは、12 kHz 出力をキャプチャしている PC のサンプリング・クロックと、PIC16F1455 の水晶発振とは全く独立であり、相対的な周波数偏差がそのまま表れているからです。
内部 16 MHz クロックに ACT を作用させることにより、フリーランでは約 300 ppm あった周波数誤差の平均が約 30 ppm のオーダーに減少しています。
周波数誤差の標準偏差も約 250 ppm から約 180 ppm に減少していますが、めざましい改善というほどではありません。