PSOC4を使った周波数カウンタ(OCXO自作) その2 特性確認

前回、ハードウエアの試作まで実施しましたが、マイコンファームウエアの作成がまだでした。今回作成が完了し、動作確認を行いましたので、状況を記載します。

今回ファームウエアで実装したのは以下の項目です。
一応①~⑦まで実装しましたが、OCXOに内蔵した周波数制御用の分圧抵抗の分圧比が間違っていたので、再チューニングが必要なのがわかりましたが、それ以外は期待通りうごきました。(後述)

①GPSからのシリアル通信データを受信し、時間、受信衛星数を取得する。
②もともと付属していたUSBシリアルを再接続して、PCへの計測データ送信とPCからのコマンド受信。
③GPSの1pps信号を使ってVCTCXO(VM39GS5 12.8MHZ)の周波数を連続測定して、12.8MHZとの周波数偏差を計算する。そして、1秒、10秒、100秒の合計値を計算してそれぞれの周波数偏差を用意する。タイマーは外部キャプチャーで動作させて、タイマーを止めないで周波数をカウント測定し、前回のタイマー値と差分をとることで12.8MHZの1秒毎の偏差を積算していきます。この方法なら、10秒合計すれば10秒間の、100秒合計すれば100秒間の周波数を測定したことと同じです。
④VCTCXOの周波数制御用電圧をPSOC4のPWMタイマー出力を平滑することでDA変換する。
⑤DA変換後、PSOC4のオペアンプでバッファし、VCTCXOの電圧を制御する。この制御は③の周波数偏差が最小になるように制御する。
⑥VCTCXO(VM39GS5 12.8MHZ)をOCXO改造して、内蔵させた温度センサーの値をPSOC4の12ビットADコンバータで読み込む。
⑦OCXOのヒーターをPSOC4のPWMタイマーを使って一定の温度になるように制御する。

結局、これらの実装で800行程度(自動生成部除く)のコーディングとなりました。

まず、火入れして、温度変化と、制御電圧、周波数偏差の特性を測定しグラフにしました。
画像















このグラフの説明をすると、まず、青はDA電圧で0V~5V(14ビットの分解能)。赤はGPSの1ppsで測定した12.8MHZの周波数偏差を1秒計測でしめしました。緑はOCXOの温度でグラフの1あたり10℃となります。グラフでは70℃まで測定しています。(それ以上上げると断熱材が溶け始める)
■DA電圧を見るとわかりますが、40℃でDA電圧が5V最大値になってしまっています。VM39GS5 12.8MHZの制御電圧の分圧抵抗の比率が悪いためです。最低10HZ程度はあらかじめ高くしておく必要があります。
■DA電圧が最大値5Vで保持されていますが、だいたい60℃で周波数偏差の変化がなだらかになります。OCXOの温度をこの温度にすると変動が少なくなりそうなので、温度の設定は60℃をねらうようにします。
■設計上5V 24Ωで約1Wの電力で加熱していますが、十分に70℃までは加熱できることがわかりました。ここまで約10分かかります。

次に、今度は加熱を止め、温度が降下していくときの特性を取得しました。
同様にグラフにしました。
画像

















画像















グラフの見方は1枚目のグラフと同じですが、2枚目のグラフでは10秒毎の測定データも一緒に示しています。さらに3枚目のグラフには100秒の偏差のグラフも記載しました。3枚目のグラフをみると0.02HZ前後まで調整できていることがわかります。さらにアルゴリズムを修正して0.01HZを目指します。
さらに1000秒の偏差データも用意して0.001HZ台を目指すこともやってみると面白いかも。
0.02HZまで行けば、200MHZを測定したときに0.2HZ偏差までは行けると思うのでOCXOの分圧抵抗の修正が終わったら、測定してみます。
ためしに、NWT4000の200MHZを測定してみたのですが、NWT4000が自己発熱の温度ドリフトで周波数が低い方にずれていくのが測定できました。これは安定したSGを探すのが大変そう。1日放置したら安定するかな。

さて、現時点でのファームウエアの占有率ですが以下のようになっています。
まだ若干余裕はあります。Psoc4はなかなか使えますね。
各モジュールの設定は
PCシリアル部は送信バッファを128バイト、GPSシリアル部は受信バッファを128バイト。ADコンバータは12ビットで16回の足し算での平均化設定。周波数制御用のPWMは14ビット。ヒーター用PWMも現時点では14ビットとしています。

■OCXO自作編 その3につづきます。(3ではソース公開します)
 OCXO自作編(その3) 

この記事へのコメント

この記事へのトラックバック