2021年02月08日

高精度病 再び!

C9BBD531-D43A-4A48-AC6E-29474D0E2F8B.JPG

前に高精度病に掛かったのは2014年ころだったようです。
この病から解放されるのに1年ほどかかりましたが、実はこの直近の1年ほど再びお付き合いをさせていただいてました。と、言っても完全にはまったわけではなくあくまでもお付き合いです。
前回の様子は、このブログで紹介していましたが、

http://blog.toshnet.com/article/102455817.html
http://blog.toshnet.com/article/104543388.html
http://blog.toshnet.com/article/109203991.html
http://blog.toshnet.com/article/170983229.html
http://blog.toshnet.com/article/171220100.html
http://blog.toshnet.com/article/171729612.html
http://blog.toshnet.com/article/173628397.html

実は、当局の前の会社の後輩がこのブログをきっかけに自分もやってみたい、但し同じことをやるのではなく自分の知恵を入れた形で実現したいとやり始めたようで、ある程度形になってから、こんなの作ってみたけど性能の評価できませんか?!と突然申し入れがあったのです。
彼は、現役のエンジニアで組み込みマイコンのプロなのですが、コンセプトを聞かせてもらって面白そうだと思い自分もやってみることにしました。ちょうど1年ほど前です。
一応、やるのはいいけど、どんどん深みにはまるし、基準器が欲しくなるし、測る道具も欲しくなるし、奥は深いよ!と忠告をしたうえでスタートしました。引越しもしましたし、間は空きましたが、結局1年経過しています。

結果としては、とても素晴らしいものができたと思います。
しかし、彼は、
@ ダブルオーブンのOCXOとして、評判のいい当局も使用しているMORIONのMV89を入手
A 結果としてHP 53132(高性能周波数カウンタ)を入手
B 開発の手助けに200MHz帯域4cHデジタルオシロを購入
C ルビジウムも入手
という結果になってしまっております。
10mHzを追っかけるのならそこそこでできると思いますが、無謀にも100μHzを追っかけたかったようで、結果としてはまってしまったようです。

肝心のコンセプトですが
@ 通常100μHzを制御しようとすると周波数をカウントするのに10000秒(約2時間47分)かかるところを
  1/10の1000秒(約17分)で制御する
A @を実現するのに、最新式の32bitマイコンSTM32F411を使用する(動作クロック100MHz)
B GPSのPPS信号のカウントのみならず、位相情報も比較して制御する(よく理解できていません)
C 制御した結果として推定周波数を表示する
というものです。
ダブルオーブンのOCXOやルビジウムであっても外気温の変化などによって周波数は動きます。
3時間近くも、100μも動かないことはあり得ません。
従って制御周期が短くなれば、それらの補正制御も緻密になるだろうと考えました。
それによく理解できていないのですが、位相も見て制御するというのも面白いなと思いました。
また、推定発振周波数が表示できるのも面白いと思いました。
この推定周波数表示の妥当性が確認できれば、いちいち基準クロックを持った周波数カウンタで測定する必要もありませんし。
唯一気になったのは、1/10の時間で制御する手段として、マイコンの中に入っているPLLによって制御された100MHzのクロックを基準にするというところでした。
つまり、このPLLのジッターで100μHzの制御には無理があるのではないかということです。
半信半疑の部分もありましたが、とりあえずやってみることにしました。

回路図をもらって、それを蛇の目基板に組んで、ソフトも送ってもらって自分で焼いてとりあえず動かせる状態を作って、毎日毎日、吐き出されるログをTeraTermで読み込んでsのデータを送り返して、まず彼と当局の試験機が同じようなレベルになるように追い込んでいくところからのスタートでした。
理解しようという意識が低かったこともありますが、吐き出されるログデータの数値の意味は今もわかっていません。勿論、推定周波数とDACデータくらいはわかりますが。

2021/2/7 15:32:14, 43.86, 2048, 10000000.00010, 241330, 3935, -105, -378, 1604, 4,11, 43.82, 43.87,
2021/2/7 16:06:23, 43.84, 2048, 10000000.00006, 241326, 3919, -65, -357, 1046, 1,18, 43.84, 43.89,
2021/2/7 16:40:30, 43.56, 2048, 9999999.99998, 241326, 3891, 11, 72, 912, 1,18, 43.56, 43.85,
2021/2/7 17:14:38, 43.25, 2048, 10000000.00003, 241326, 3888, -35, -304, 663, -1,21, 43.24, 43.56,
2021/2/7 17:48:47, 42.73, 2048, 10000000.00004, 241326, 3887, -48, -324, 858, 0,20, 42.73, 43.25,
2021/2/7 18:22:56, 42.55, 2048, 10000000.00002, 241325, 3871, -28, -205, 785, 2,22, 42.55, 42.73,
2021/2/7 18:57:05, 42.35, 2048, 10000000.00006, 241323, 3863, -65, -602, 620, 1,20, 42.35, 42.55,
2021/2/7 19:31:14, 42.27, 2048, 10000000.00001, 241323, 3846, -18, -170, 636, -2,20, 42.26, 42.35,
2021/2/7 20:05:23, 42.11, 2048, 10000000.00006, 241319, 3852, -64, -558, 662, 2,22, 42.10, 42.27,
2021/2/7 20:39:34, 41.88, 2048, 10000000.00003, 241311, 3834, -34, -239, 836, 2,19, 41.88, 42.11,
2021/2/7 21:13:41, 42.08, 2048, 10000000.00017, 241295, 3817, -171, -751, 1311, 2,22, 41.86, 42.09,
2021/2/7 23:30:20, 42.33, 2048, 10000000.00005, 241275, 3752, -54, -481, 654, 3,19, 42.33, 42.62,

入れ替え実施したルビジウムGPSDOのログサンプル



途中で、OCXOの温度データも取るようにして温度変化の影響を見たりしながら追っかけて行きました。
だいぶ変動が少なくなってきましたが、時々数mHzほど表示周波数が飛びます。
しかし、ルビジウム基準の周波数カウンタで見ていてもそんな飛びはありません。
推定周波数の算出のところに問題というか、課題があるのではという議論をしてきました。

そうこうしているうちに、GPSモジュールの性能によってこの辺りに違いが出るのではないかということになり、それまではU-BLOXのM6を使用していましたが、秋月で販売されているみちびき対応のがいいということになり入手したのですが、当局はなぜか2個もつぶしてしまいずっとM6で評価していました。
そのうちM8がいいのではなり、Aliに頼んだら中華製互換品のATGM332Dというのが到着し、これが意外とよくて今までM6だと衛星が5,6個だったのが10個以上場合によっては15個も捕捉でき飛び現象も一気によくなったとのこと、当局にも送ってもらい、またDACも当初は手持ちにあったNEC製の16bit版を使用していましたがBBのPCM5102 32bit版も送ってもらい入れ替えました。
確かに安定度は増しましたが、当局の場合はまだ少し飛びの現象が残っていました。
同時に、当局はATGM336Hという百斗も受信できるというGPSモジュールを手配していて、到着して入れ替えてみるとなんと、20以上普通に25個くらい、最大30個の衛星を捕捉できているではありませんか。
更に安定度が増したのは言うまでもありません。

ここまできたら、これまで基準器として使用していたルビジウムを信号源として制御していた前に作ったルビジウムGPSDOの制御を入れ替えてみたくなりました。
基準をいじることに懸念はありますが、基準の性能が上げられそうならぜひやってみたいと一気に組み立ててみました。勿論、今までの制御基板にすぐ戻せるようにI/Fは合わせて作りました。
実験の様子です。この状態でログを取ってみると実に安定しています。

F7B90C7F-5C06-497D-ABB7-3C2CB9EE1F11.JPG

これは入れ替えるしかないと考え、これまで16文字2行だった液晶が20文字4行になるのでケース加工も必要となりますが、入れ替えを実施しました。

C0478EFF-678A-4344-84DC-11F66CAACC8F.JPG
入れ替えて実装した内部

IMG_3597.JPG
これまでの制御基板 8bitマイコンでDACはPWM方式
GPSモジュールも当時aitendoで仕入れた初期の物

こうしてダブルオーブンのOCXO、ルビジウム 両方動かしているのが最初の写真です。
写真では、ルビジウム信号源GPSDOを基準クロックとして、ダブルオーブンOCXOGPSDOの周波数をカウントしています。
この推定周波数表示は、10μHzまで表示しています。確からしさは知る由もないですが慣れてくるとこの桁が気になり始めます。完全に高精度病です。測る手段はセシウム信号源しかありません。

中華製を含め、雑誌の製作記事など多くのGPSDOがありますが、JA9TTT 加藤さんが製作されたトラ技のGPSDOを除いて1mHzレベルの安定度を評価した結果を掲載したものはなかなか見当たりません。
勿論、そのレベルの必要性がどこにあるのかという点においては、おそらくないと思いますが、当局を含め一般的に中古レベルで手に入れられる測定器、ルビジウム、ダブルオーブンのOCXOなどで実現できる限界と思われる性能(周波数精度と安定度)が得られる、この方式は素晴らしいと思いました。
回路は簡単ですし、ALIで手に入るGPSモジュール、DAC基板、マイコンボードで再現性は高いと思います。
残念ながら、信号源であるダブルオーブンのOCXO、もしくはルビジウムは結構高価ですし、なかなか手に入らなくなっていますが。

まだまだ評価は続くと思いますが、懸念されたPLLの問題も心配することもなかったようで、十分実用になる、この素晴らしい方式を考え作ってくれた後輩に感謝したいと思います。

最初に書きましたように、当局はいまだに原理を理解できておりません。いわれるがままに模倣して作って評価しただけです。
あまり表にしていないようですが、本人の許可をもらいましたので、詳細(まだ纏めがないですが)は作者のサイトをご参照ください。

http://triode.dip.jp/honkytonk/2020/06/electronicworks/gpsdo10mhz_1.html



posted by ja6irk at 00:17| Comment(3) | TrackBack(0) | QRP-HomeBrew
この記事へのコメント
初めてコメントさせていただきます。
私も精度病を患い、同じようにルビジウムまで手を出した者です。
QRPさん(すみません、何てお呼びしたらよいかわからないので、QRPさんと呼ばせてください)の高精度病の記事は一通り読ませていただいて、とても勉強になっております。といいますか、同じ道を通ってきております。

さて、
私はいま、無謀にも1μHzに挑戦しています。
初めは同じように10MHzをカウントして10Mカウントになるように制御する方式をとりましたが、おっしゃるように測定にかなり時間がかかります。
そこでAgilent 53132Aを購入しました。(おなじみ12桁/sのカウンタですね)
53132AにはRS232C出力があり、それを使用してパソコンにて計算し、DA変換器にデータを送ってルビジウムのCfieldを制御する方式をとりました。
これでもμHz台は可能でしたが、基準がずれているのか、被測定物がずれているのか、はたまた測定器の誤差か…本当にあっているかわからなくなりました。

そこで、GPSモジュールのパルスエッジはシッターはあれど誤差は蓄積しないことを前提に位相差を測定し、その逆数でもって周波数とする方式にしました。何秒で何μs位相がずれるか(10MHzですので0.1μsですね)を測定する方式ですね。これでカウンタの誤差は無視できます。
はじめは期間内(例えば10秒)で何μs位相がずれるかを計測し、線形近似を計算し、周波数に変換してDA変換器に送る方式をとりました。この時点で、10μHzを切るくらいになりました。
現在は位相差を0.05μsになるように制御しており、かれこれ1週間程度ずっと0.05μs±1nsをキープしています。

同じような考えをされている方が同じタイミングでいると知ってとても驚きました。そしてとても共感いたしました。何かの参考になればと思います。応援しております。
Posted by わいわい at 2021年02月20日 15:06
わいわいさん、こんにちは。
コメントありがとうございます。
凄いですね!0.05μHz制御ですか?
理屈上は、その単位で制御されておられるのでしょうが、その確からしさを確認する手段はありませんよね!?
セシウム基準でもその桁は測定できない!?
その手段を実現されているということに敬服いたします。
高精度病は、持っている測定器の最高限度の桁が動いているとさらなる追求をしたくなってしまう病気だと思います。
ここまでやられたら次はセシウムを入手されるしかないですね!
もうお持ちとか?!
GPSのPPSは切り替え時に飛ぶことがいろいろ言われています。(よく理屈はわかっていませんが)
これへの対応処理はどうされているのでしょうか?
また、経験的に短期安定度はダブルオーブンのOCXOの方がルビジウムより優れているのではないかと思っております。
モジュレーションドメインアナライザでの測定結果でも分散はOCXOの方が良い値の傾向でした。
その意味では、実際はもう少し変動しているのではないかと思います。
それがなんだ! というレベルですが。

今回の、位相を見た制御は当局の会社の後輩がやってくれたものなので実際の制御プリグラムはよくわかっていませんので、後輩が書込みしてくれないかな!と思っております。
面白い検討是非進めてください。
くれぐれも大病にならないようにお気をつけて!

Posted by ja6irk/1 岩永 at 2021年02月21日 12:22
わいわいさん
はじめまして、私はこのブログのオーナ 岩永さんの後輩で、
このGPSDOを作っております。

1uHzでの制御とは素晴らしいですね。
コメントを読ませていただいた感じでは、
私の制御方法とわいわいさんの制御方法は同様な方法だと思います。
実は、私も53132A(or 53131A)で計測すれば精度を上げられるかなと考え、53132Aも53131Aも入手しましたが、実際にシステムにするのは思い留まりました(笑)
正しいかどうかを判断する手段も持ちあわせていませんので。

わいわいさんは53132Aの測定値をPCで処理されているのでしょうか。
差し支えなければシステム構成等教えていただけませんでしょうか?
また、GPSモジュールのPPSジッタをどのように処理されているかも興味があります。

こちら方式は、こちらのブログでもご紹介いただいていますが、
STM32F411CEU6というマイコンを使用し、外部クロックとして
OCXO(Morion MV89A)の10MHzを入力しています。
これをマイコン内蔵のPLLで100MHzに逓倍して動作させています。
タイマーのインプットチャプチャを使用して、GPSからのPPS(1Hz)とマイコンの100MHzを分周した1Hzのエッジ間隔(=位相)が一定になるように制御しています。
エッジ間隔の分解能は10ns(とカウント誤差)になります。
ただし、GPSのPPSジッタの影響を抑えるために最大2048秒(=ポイント)のデータから回帰分析により傾き(=位相変動=周波数偏差)を判断し、周波数が目的より高いか低いかだけを判断しOCXOにフィードバックしています。

また、この時の傾きを使って周波数を表示しています。
この周波数表示が時折大きくずれると指摘されています。
これに関係していると考えているのが時々発生するPPSの大きなズレです。(周波数制御のフィードバックには大きな影響はありませんが)
これは、最小二乗法による線形近似を使っても取りきれないようです。(デジタルフィルタも検討しましたが)
どのような処理にされているのかとても興味があります。

Posted by honkytonk at 2021年02月21日 14:01
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/188382708

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