AliExpressで購入したGPSモジュール、液晶キャラクタディスプレイモジュール、そしてSTM32を使ってGPSDOと呼ばれる基準周波数を自作してみました。
GPSDOとは、 GPS Disciplined Oscillatorの略で、要するにGPSを使って制御された発振器ということですね。今時はGPSというよりGNSSと言うべきなのでしょうか、GNSSDOですね。
私は、特に10MHzの基準を必要としているわけでは無いのですが、どれぐらいの精度の10MHzを作れるのか試してみようと思い、これを作りました。GPSDOはもう10年以上前に流行ったみたいで市販品もありますので、よほどの物好きでなければ市販品を購入されるのが近道だと思います。腕に覚えがある人はジャンクを入手されても良いと思います。
基準周波数としては、一昔前までJJYが10MHz,5MHzなど短波で送信していました。日本だけではなく、他の国も標準周波数として送信していて、周波数がピッタリと合っている為変なビートもなく、世界各局のコールが同時に聞こえていたことを覚えています。(周波数がずれていると、その差がビートとなってピー音など聞きづらい音になる) 現在ではJJYが送信している標準電波は40kHz,60kHzの長波に移行しています。電波時計はこの信号を受信しています。でも、自宅で電波時計を使っているとなかなか受信できなことは無いですか? 少なくとも我が家ではさっぱり受信できません。家の中には様々な電気製品が溢れています。最近の機器はデジタルで妨害を出しやすいし、スイッチング電源を使用しているものがほとんどで、40kHz,60kHzの電波を安定して受信するのは難しくなっています。これは電子機器が多い我が家だけの問題では無いと思います。世の中は汚い電波に溢れているのです。
一方、スマホなどのモバイル機器の進化はめざましく、内蔵されているGPS受信機の性能は飛躍的に向上し、部屋の中でも十分にGPS信号を受信できるようになっています。そしてGPS受信モジュールも安くなっているので、電波時計を作るのであればGPSを使った時計にするのが一番かも知れません。(もちろん、商品としては価格や消費電力の課題があり電波時計が一般的でしょうが)
さて、GPSDO(GNSSDO)に必要な部品は何が必要かと言うと、最低必要なものは、
(1) GPSモジュール
(2) VCO(Voltage Controlled Oscillator)
(3) 電源とその他周辺部品
です。
U-Blox社のNeo 6Mや Neo 8MなどのGPSモジュールは、PCから設定を変更すれば10MHzの信号を直接出力することができます。簡単なフィルタを挿入すれば0.1Hz以内の精度で10MHz基準を得ることができるでしょう。この基準信号の作成例も検索すればたくさん見つかります。ほとんどの用途ではこれで十分だと思います。
0.1Hz精度では面白くありませんので、今回は10MHzに対して偏差±1mHz以内の信号出力を目標にしました。つまり、誤差と変動をあわせて±1E-10以内、±0.1ppb以下を目標としました。できれば ±0.5E-10以内です。
もちろん、自前でこの精度を確認できる信号源も測定器も持っていませんので、理論値です。
因みに、オシロも持ってません(笑)
あるのは、とAmazonで購入した¥2880のテスターと¥1150のロジアナだけです。あ、ADALM2000は持ってました…Buggyですが。
さて、これぐらいの精度を求めるには、GPSモジュールからの出力信号だけでは不十分で、GPSからのPPS信号を基準に、周波数を制御できる発振器VCO(Voltage Controlled Oscillator)と組み合わせて周波数を合わせ込むことが必要になります。そして、このVCOの安定度が悪いと目標を達成することはできません。
VCOにはダブルオーブンタイプの水晶発振器を使います。正確に書けばVC-DOCXO(Voltage Controlled – Double Oven Controlled X’tal Oscillator)でしょうかね。長ったらしいのでOCXOと略します。
普通のデジタル機器には、水晶(クリスタル)発振子を使ったX’tal発振器が使われています。安定している水晶発振器ですが、温度等により周波数が少し変化してしまいます。普通の機器ではこれでも十分なのですが、より精度を求められるものには温度補償されたTCXO(Temperature Compensated X’tal Oscillator)が使われています。普通私たちが手にする電子機器で使われている発振器は、せいぜいTCXOまでです。OCXOと言うのは、温度変化の影響をより抑えるために、オーブンを使って水晶振動子の温度を一定にしようと言うものです。オーブンとは名前の通り「かまど」のことです。つまり、OCXOの周囲の温度(雰囲気温度といいます)の影響によりOCXOの温度が設定値より低いときはオーブンを加熱して、逆に温度が高いときはオーブンの加熱を抑えて温度を一定にすると言う力技です。小さな恒温槽ですね。そして更に温度変化の影響を抑えるためにオーブンを二重にしたものがダブルオーブンといわれるものです。計測器や通信機器などのより周波数安定度が要求される機器に使われていますが、一般にはなかなかお目にかかれません。周波数カウンタなど正確な周波数を測定する必要がある機器でもダブルオーブンのOCXOはオプションになっていることが多いです。そして、新品は非常に高価でおいそれと趣味で購入できるものではありません。今回はおそらく廃棄された計測器か通信機器から取り外されたと思われる中古品(ジャンク)を使います。Morion MV89Aというものでロシア製です。(中古品でも5000円以上はします) カタログ特性(工場出荷時)は、非常に安定し優れているOCXOです。
比較的容易に入手できるOCXOの中でも性能はピカイチだと思います。(中古品ジャンクですので個体差は大きいと思われます) これ以上を目指すのであればルビジウム発振器があります。OCXOの代わりに電圧で発振周波数を可変できるルビジウム発振器があればより安定した10MHzを得ることができます。ただし短期安定性は廉価なルビジウム発振器よりMV89Aの方が優れているようです。ルビジウム発振器といえども経年ドリフトはありますので、GPSにより周波数を校正できるようにしておけば安心です。
もちろん、更に上を目指すのであればセシウム発振器も水素メーザあります。まぁセシウム発振器を持っているのであれば、わざわざこんなものを作る必要はありませんが。(ルビジウムも然り)
10.000000000MHzを計測するための基準信号にはGPSモジュールから出力される1HzのPPS(Pulse Per Second)信号を使います。PPS信号はGPS衛星に搭載されている原子時計(ルビジウムやセシウム発振器で地上から制御されている)に同期しているため非常に高精度です。また、このPPS信号に時計の秒針を同期させる事により正確なGPS時計にもなります。
OCXOの周波数は10MHz、PPS信号はデフォルト1Hzですので、そのまま比較することはできません。
やり方は色々あって
(1) PPS(1Hz)を基準にOCXO周波数を計測し、10MHzになるように制御する FLL方式。
つまり、PPS期間(1秒)内にOCXOのパルスが10,000,000個(10×10^6 = 10^7)入るようにOCXOを制御する方法です。
(2) PPS(1Hz)をOCXOを分周して作った1Hzの位相が一定になるように制御する PLL方式
つまり、基準のPPS信号(1Hz)とOCXOの10MHzを10,000,000分周して作った1Hzの信号の位相が変化しないようにOCXOの発振周波数を制御する方式です。基準のPPS信号を10kHzとかに高くしてOCXOの分周比を少なくするやり方もあります。
(1)の方式は、カウンターで計測した値(パルスの数)に対してOCXOを制御するので、マイコンを使ってソフトウェア(S/W)で処理するのが簡単です。
(2)の方式は、位相を一定にするだけであれば、位相比較用のICを使ってアナログ回路でも処理できます。
逆に、マイコンを使ってS/Wで制御するのは少し大変です。
今回は、(1),(2)両方の方法を使いS/Wで制御しました。
マイコンはAliExpressで購入可能なSTM32F411CEU6のマイコンが搭載されたモジュールを使用しました。
このマイコンモジュールは¥500〜600程度で購入できますが、最大クロック周波数100MHz,プログラムフラッシュ 512KB, RAM 128kBと非常にリッチなマイコンです。32bitタイマーも2本あります。
このマイコンを採用しようと考えた最大の理由は「最大クロック周波数100MHz」と「32bitタイマーがある」いうことです。
つまり、マイコンの水晶発振器の代わりにOCXOの10MHzを入れてマイコンを100MHzで動作させれば、色々な処理が簡単にできると考えたからです。
マイコンとその周辺部品からなる制御部です。
中央の大き目の基板がSTM32F411CEU6マイコンモジュールです。
そのほかは標準ロジックICの74HCU04と電源生成用のOP-AMP, OCXOの周波数を制御するD/Aコンバータ(DAC)です。D/Aコンバータ(DAC)には、手持ちのオーディオ用の16bit DAC NEC UPD6372CXを使用しました。1mHz以内の追い込みであれば16bitでも足りるのですが、L-ch, R-chを組み合わせてビット拡張し19bit相当で使用しています。また、写真には写っていませんが32bitのPCM5102Aと切り替えて使うことができます。
マイコンに白黒のリード線がつながっていますが、マイコンモジュールについていた25MHzの水晶発振子を外して代わりにOCXOからの10MHzを入力しています。
実際に作ったGPSDOの詳細は、以下にあります。
GPSDO 10.0MHz基準周波数発振器を作る(4) 〜Aliもので作るGPSDO〜
GPSDO 10.0MHz基準周波数発振器を作る(5) 〜Aliもので作るGPSDO〜
GPSDO 10.0MHz基準周波数発振器を作る(7) 〜性能はどうかな?
GPSDO 10.0MHz基準周波数発振器を作る(8) 〜アラン分散を測ってみた
GPSDO 10.0MHz基準周波数発振器を作る(9) 〜DMTDでAllan deviationを測ってみた
プリント基板もつくってみました。GPSDO 10.0MHz基準周波数発振器を作る(番外編) 〜基板を作って見た1回目