エントリー

2016年08月の記事は以下のとおりです。

AG1022をGPSDOで動かしたい

  • 2016/08/17 12:57
  • カテゴリー:make:

20160819140050.JPG

 

 さて,先日作ったGPSDOで,高精度な10MHzが手に入りました,11桁の周波数カウンタHP53131Aも,この10MHzを基準にすればその実力を発揮できます。

 こうなると,他にもこの10MHzを入れて,測定環境全体を高精度化したいと思う物です。

 特に,周波数を測定する機械の精度を上げたなら,周波数を作る機械の精度も上げたいと思う物で,私が珍しく新品で買った測定器,OWONのAG1022というファンクションジェネレータを,この10MHzで動かせないか考えてみました。

 幸いなことに,AG1022は廉価版のファンクションジェネレータにもかかわらず,外部クロック入力端子が用意されています。しかし残念な事にここに入れられる周波数は20MHzのみ。10MHzでは動いてくれません。

 そこで,10MHzを20MHzに逓倍する回路をSi5351Aを使って作り,これをGPSDOに内蔵して,20MHz出力を装備することにしました。

 すでに私は,SI5351AをATtiny13Aと併用することで,好きな周波数を自由に作る事が出来るようになっていますから,なにも難しい事はありません。

 さっさと回路を組んで,ATtiny13Aにプログラムを書き込んで,テスト開始です。ところが,どういうわけだか電源がショートしています。

 あれ,おかしいな・・・

 調べて見ると,Si5351Aがショートしていました。悲しい事ですが,SI5351Aを壊してしまったようです。出力バッファの電源ラインがショートしていましたので,出力端子をGNDに落としたとか,そういうことかも知れません。

 気を取り直して,新しいSi5351Aに交換し,電源がショートしていないことを確認してから電源を入れます。

 あれ,またショートしました。

 一度ショートしてしまうと,その後もずっとショートの状態が続いてしまいます。永久破壊にいたってしまうようです。

 私も長年電子工作をやってますが,これほど簡単に永久破壊が続けて起きてしまったことは,あまり記憶にありません。

 早速原因の調査をしますが,どこも悪いところが見当たりません。簡単な回路ですし,すべての信号をあたってみても,間違いはないのです。

 なにも手を打つことが出来ず,若干の配線の整理をしたにとどまった基板のSi5351Aを再度交換し,おそるおそる電圧を上げていきます。今度はショートしません。
1.8Vを越えたあたりから,20MHzが出力出てくるようになりました。

 その後は全く問題なし。なぜだかよくわかりません。もう現象が出なくなってしまったので,原因の追及も出来なくなってしまいました。

 気持ち悪いのですが,このまま作業を続行です。

 作った20MHzは,周波数カウンタでみても非常に正確で,揺らぎも見られません。かなり良い質の周波数です。

 これなら大丈夫だろうと,AG1022に突っ込んで外部クロックに切り替えてみます。

 うまくいったように見えたのですが,なぜだかちらちらと周波数が大きく変動するときがあります。最初はDDSによるジッタかと思いましたが,内蔵クロックではこういったおおきな変動は見られません。

 波形を見れば,時々波形が大きく崩れています。周波数カウンタで最大と最小の値を見てみれば,もはや誤差とは言えない大きさの変動がつかまっています。これはダメです。

 しかも,AG1022の電源投入時には必ず外部クロックをつかまえ損ねて,内蔵クロックに切り替わってしまいます。些細なことですが面倒です。

 これでは使い物になりません。なんとか次の一手を考えないと。

 実はこのAG1022,少しまえに内部を見たときに,とんでもない状況である事に腰を抜かしました。

 電源トランスがいい加減にネジ止めされていて,トランスのフレームが変形し,グラグラと動いてしまうほどネジが緩んでいました。そのせいで基板は傷つき,よくこれで動いているなあと思ったほどのひどさでした。

 結局,トランスのフレームを元に戻し,筐体に別に穴を開けてしっかり固定して今も使っているのですが,その際にDDSの心臓部に基準クロックを供給していると思われる,水晶発振器を見つけてありました。表示から周波数はおそらく20MHzです。

 なら話は早いです。

 まずこの水晶発振子の波形を見ます。4ピンですので,電源とGNDが繋がっていれば発振子ではなく発振器です。

 そして出力の波形を見れば,周波数がわかります。さらに波形が矩形波なら,Si5351で作った20MHzをそのまま入れることが可能です。

 結果,これは発振器で3.3Vが供給され,出力は3Vの矩形波であることがわかりました。

 出力から繋がるチップ抵抗(22Ω)をはずし,ここにSi5351Aで作った20MHzを入れてみると,めでたくAG1022は綺麗に動作し,mHzオーダーで周波数を設定可能になりました。もちろんおかしな周波数変動もありません。

20160819140051.JPG


 リファレンスをカウンタとファンクションジェネレータで共通にしたのですから,周波数はもちろん,揺らぎも同期するはずですので,理屈の上ではピタッと正確な値が測定されるはずです。

 ですが,DDSで作った波形ですので,周波数によってはずれてしまったり,波形が乱れてしまったりすることもあるでしょう。しかし,試したところそういう問題は見つからず,基本的な動作としてAG1022はなかなかちゃんと作られているような印象です。

 ただ,AG1022の電源OFFの時に10MHzが供給される続けるのですから,AG1022を壊してしまうかも知れません。そこで,AG1022とSi5351Aの間にバッファを1ついれて,保護することしました。

 そうして完成したSi5351Aの基板を取り付け,配線をします。幸いなことに,BNCコネクタは,上位機種ように用意された穴をそのまま使って,増設しました。これまでの20MHz入力と20MHz出力は温存します。

 

20160819140053.JPG


 さて,改造を終えて動作させてみると,面白いほど安定しています。

 

 冒頭の写真はその様子で,AG1022を1.234567890MHzと設定し,周波数カウンタでその周波数を測定した結果が1.234567890MHzとなっているのがおわかりでしょう。

 

 値はフラフラと変動することもなく,びしっと値がこの細かさで出るのです。ただ周波数カウンタに好きな数字を表示させることが出来るだけの話ではありますが,実はこれはなかなか大変なことです。


 いい話ばかりではなく,この改造の結果10MHzを外から入れないと全く動かなくなってしまいました。内蔵クロックとの切り替え機構を付けようかと思いましたが,そもそも面倒ですし,遅延による影響がどれくらいあるかが不明なので,切り替え機構はやめました。

 持ち出すときには不便ですが,他の場所で使うことはないでしょうし,どうしてもと言うならTCXOで10MHzを作って供給する治具を用意します。

 というわけで,周波数カウンタとファンクションジェネレータが,高精度で同期して動くようになりました。作る側と測る側,どちらも正確な基準で動作することの気持ちよさたるや。

 残念ながら,これ以上外部クロックで動作する測定器を持っていないので,ここ止まりになってしまいますが,正確なだけの10MHzが,任意の周波数,任意の振幅,任意の波形に変形できる出来るのですから,大したものです。

 これで,うちの時間軸は,一元化されました。いやー,男のロマンです。

GPSDOで手に入れる高精度クロック[結果編]

  • 2016/08/16 15:31
  • カテゴリー:make:

 今回は,GPSDOを作った,その結果です。


 まず,衛星内蔵の原子時計に同期しているのですから,GPSモジュールから出てくる周波数の精度,つまり長時間の平均で収束する周波数は,10kHzで間違いないでしょう。

 そして,この10kHzに高安定なOCXOから出てくる10MHzを1/1000して作った10kHzをPLLでロックさせますので,10KHzを中心にして前後にゆっくりとした揺らぎが,起動直後には出てくることになります。

 そして,OCXOの安定と,GPSの長周期の揺らぎの収束が丸一日かかって終わり,24時間後には,OCXOの周波数は10MHzに限りなく近い周波数に整えられているはずです。

 GPS補足後24時間の経過し,PLL Lockメータを中央に調整します。これは,PLLの制御電圧を指示するメーターですが,PLLがロックしたときには中央を示すようにしておきますので,もしロックが外れるとセンターからずれていきます。

 出力の周波数を見てみると,ちゃんと10MHzがでています。周波数の変動もありません。波形も振幅も問題なしです。

 GPSが補足されると,LCDに日時が表示されます。もちろんステータスも表示されています。

 消費電流は,起動時に600mA近い電流が流れます。最初,大きめの電解コンデンサをACアダプタに並列に入れていたんですが,そのせいで突入電流が大きくなり,ACアダプタの安全回路が働いてしまい,電圧が出てこなくなってしまいました。

 そこで,電解コンデンサは外して,今は動くようになっています。

 OCXOが安定してくると電流は300mAくらいまで減ります。消費電力は5Wくらいでしょうから,これくらいなら24時間運転しても大丈夫でしょう。

 では,ここで,なぜGPSモジュールの出力がそのままでは使えないのか,そしてOCXOの周波数をPLLでロックしてやるとどのくらい揺らぎがなくなるのかを,ちょっと見て頂きましょう。

 周波数カウンタのリファレンスに,別の安定したOCXOの10MHzを入れます。これで1E-9くらいの安定度が出るはずです。(ただし10MHzそのものはわずかにずれています)

 ゲートタイムは0.1秒に設定し,この周期で値が更新されていきます。このゲートタイムだと9桁は出なくて,おそらく8桁くらいの精度かでないと思います。

 さて,最初は,このGPSDOのGPSモジュールの10kHz出力です。

20160816153236.mp4

 0.035mHzから0.051mHzの間で,値が揺らいでいるのがよく分かります。0.016mHzの周波数で揺らぎがあるという事ですので,100000秒で1.6回の変動,言い換えると62500秒で1回の変動があります。24時間は86400秒ですので,17時間で1周期のゆっくりとした揺らぎが出ているということになります。

 また,0.016mHzという周波数の変動は,10kHzに対しては1.6E-9ということです。やはりGPSモジュールから出てくる周波数には,1E-8から1E-9くらいの変動が存在するというのは,本当のようです。

 では,次にこのGPSの10kHzにロックしたOCXOの出力を見てみます。OCXOの出力は本来は10MHzですが,これを1/1000して10kHzにしてGPSの10kHzとロックしてあるというのは,これまで何度も書きました。

20160816153325.mp4

 どうですか。0.039mHzからほとんど動いていません。一瞬0.041mHzになっていますが,それも含めて変動を0.002mHzと厳しく見てみれば,変動は2E-10です。この揺らぎ方ならそれ以下でしょうから,1E-10に近い精度が出ている事がわかります。

 それに,リファレンスのOCXOの精度も1E-9程度であることを考慮すると,もはやこの揺らぎがGPSDOの揺らぎなのか,周波数カウンタの揺らぎなのか,区別出来ません。ですから,正確なところはわからないにせよ,1E-9から1E-10くらいの精度は出ている物とみなしてよいと思います。

 最初の動画にあった揺らぎがほぼなくなっていること,そしてGPSモジュールの変動周波数の中心付近で安定していることがわかります。

 ですので,GPSDOを使った周波数測定では,その測定値が正確であることも当然ですが,1E-8程度の揺らぎくらいまでは,可視できるようになったということがいえます。

 ここでは詳しくは触れませんが,通常の水晶発振子ではもっと大きく値が変動していることがわかりますし,TCXOになればもう一桁,OCXOならさらのもう一桁,変動が少なくなっていることを,目で見ることが可能です。

 さて,ここまでくると,10MHzもどのくらいの精度が出ているのかを調べてみたい気がしますが,仮に1E-11の精度を見たければ1E-12のリファレンスクロックを持った周波数カウンタを使わないとわからないですから,もう私だけの力ではどうにもなりません。

 とはいえ,周波数が時間と共にドリフトせず「常に正確な10MHzに調整され続けるOCXO」と言い換えることのできるGPSDOは,この動画を見ただけでも,その価値が分かって頂けるでしょう。


 さて,ここで原点に戻って,TCXOで作った時計の精度を確認します。先に言い訳をしておくと,気温が31度もあるのであまりいい数字が取れませんでした。

 念のため時計の構成を書いておくと,源発に26MHzのOCXOを搭載し,Si5351Aによってこの周波数で32.768kHzを作ります。そしてこの32.768kHzで1秒を作ってカウントして時計を作ってあります。

 TCXOのスペックは1ppmですのでもしプラスかマイナスか,どちらか目一杯1ppmずれると,10日で1秒くらいの遅れか進みが出る計算です。

 また,別の機会にちょっといい周波数カウンタを借りて測定してみたら,-0.5ppmくらいの実力となっていました。0.5ppmだと1ヶ月に1秒くらいのズレが出てきそうなものです。

 しかし,この時計はなかなか優秀で,半年で1秒くらいしかずれません。

 大変気になったところで,測定結果です。

 源発の26MHzのTCXOは,25.9999941MHz(-0.2288ppm)となりました。

 そして,Si5351Aで作った32.768kHzは,32767.9924kHz(-0.2335ppm)となりました。

 多少のズレはありますが,どちらの値も-0.23ppmとすれば,Si5351Aを通したことでズレが増えることも減ることもないことがわかります。

 パラメータ設定ツールでも,周波数の誤差はないと出ていましたからこの結果は当然なのですが,なかなか感激するものがあります。

 ところで,-0.23ppmということは,約50日で1秒遅れるという計算です。2ヶ月で1秒となると,実機よりも悪いという結果になるので残念なのですが,測定時の気温が31度を超えていたこと,そして測定中にSi5351を一度壊してしまい,新しい物に交換してから値が変わってしまったことを考えると,測定の条件がよくなかったなあと,反省することしきりです。

 Si5351Aを交換してからの長期精度を確認し。少し涼しくなってきたところでもう一度測定をしようと思います。


・まとめ

 GPSDOはそんなに大規模な回路ではありませんが,なにぶん,ちょっとしたことで変動が起きてしまうようなデリケートな機械です。私が作ったこのGPSDOも,筐体を盾にすれば値がパラパラと動き,長い時間をかけて元の値に戻って行きます。

 にもかかわらず,随分ラフに作ったものだと思いますが,それでもこのくらいの制度と安定度が手に入ったんですから,とても満足です。

 仮に1E-11の精度が手に入ったとすれば3000年に1秒の精度です。通常これだけの精度の周波数を維持するには,相応のコストをかけないといけませんが,私は5W程度の電力だけで維持できることになります。

 また,今回こうして,周波数の「精度が高い」というこはどういうことなのかを,きちんと把握できたことは大きいと思います。10MHzが10.1MHzになってしまうことも精度の問題ですが,10MHzを中心にして変動する揺らぎも,また精度の問題です。

 しかしこの2つの「精度」は,使い方によって大きな違いを生みます。これまで,私はこの2つをあまり意識しないでいたのですが,それは精度が低く2つを区別出来なかったからだとわかりました。

 特に後者はジッタとか,位相雑音などと呼ばれます。そういうものがあることは分かっていても,きちんと理解していないことがわかったわけです。

 PLLの性格はループフィルタで決まるということも発見でした。PLLの心臓部はループフィルタであるという意見をよく耳にしてきましたが,それは設計や実装が難しく,トラブルの種になっているからだと思っていたのですが,それだけではなく本当にPLLの性格を決定する,文字通りの心臓部でした。

 周波数の世界は奥が深く,かつ幅が広いです。10nsの時間は極端に短いように思えますが,周波数でいえばたかだか100MHzです。そしてその10nsも,時計を作れば積み重なって,たった1000日で1秒という大きなズレになってしまいます。

 だから,実用上無視してよい,という人間の尺度による割り切りが難しい世界です。精度の高い周波数が欲しいと思った時,そして実際に手に入れた時,その事をつくづく感じました。

GPSDOで手に入れる高精度クロック[製作編]

  • 2016/08/10 16:17
  • カテゴリー:make:

20160816092655.JPG

 GPSDOの続き,今回は回路の検討から製作までです。 

 基本的な話はトラ技に書いてあるとしても,やっぱり実際に作って見て,動かしてみないと,どうもイメージが掴めません。

 周波数のズレというのは,欲しい周波数からどれだけずれているかというものと,経年変化で徐々にずれていくものは想像しやすいのですが,ある周波数を中心にしてゆらゆらと揺らいでいるものもあり,これらがちゃんと区別出来るようになるのは,それが実際の測定結果の違いであるとか,実際に怒る現象のどう反映されるのかが頭の中で繋がっていないとダメだと思います。

 周波数のズレ,経年変化,ゆらぎはそれぞれ別の物ですので,排他ではなく,すべて同時に独立して起きるものです。そして,それぞれが引き起こす現象も異なります。

 例えば,時計を動かす基準クロックの周波数を考えてみます。基準クロックを使って1秒を作り,これを数えて時計は動いています。

 この基準クロックの周波数ズレは,時計の狂いとして表面化し,しかもそれは一定の割合で蓄積していきます。一日1秒の遅れがある時計は,10日で10秒遅れるわけです。

 では経年変化はどうでしょう。これは言葉通り,時計の経年変化による狂いの変動をに現れます。一日1秒の送れがある時計が,10日で100秒遅れたり,逆に10秒進んだりします。

 最後の揺らぎですが,これがなかなか気付きにくいです。揺らぎですので,フラフラと周波数が変動するのですが,揺らぐ範囲が規定されていれば,ある瞬間は進んでいるけどある瞬間は遅れている,そして長い時間で平均すればある値に収束するというものです。

 きちんと合わせた時計が,12時間後に見ると10秒遅れていました。さらに12時間後に見ると,ぴったり狂っていませんでした。この場合,1時間ごとに時計を見るともっと細かく,ゆらいだ状況がわかる訳ですが,逆に24時間に一度しか時計を見ないなら,なんと正確な時計か!と腰を抜かすことになるわけです。

 これ,長い範囲で考えれば揺らぎはないことになるし,短い範囲で見れば揺らぎは大きく見えてきます。範囲をどんどん短くし,限りなくゼロにして・・・なんてことを言い出すと,どっかで聞き覚えのある微分の考え方になってきますし,人によってはサンプリング定理を思い出す人もいたりするかも知れません。

 なにせ,短時間では減ったり増えたりを小刻みにしていても,平均を取れば,そしてその平均もたくさん(長時間)取れば取るほど,ある値に収れんしていきます。

 一番わかりやすいのは,家庭に来ているAC100の周波数でしょう。西では60Hz,東では50Hzですが,これはいつもぴったり50Hzになっているわけではなく,ある瞬間は49.95Hzかもしれないし,50.02Hzかもしれないんですが,一日平均でちょうど50Hzになるように,調整をしています。

 一日の平均としては非常に高い精度を持っているそうで,こうした商用電源周波数を基準に持つ時計がちっとも狂わないという経験は,この種の時計が全盛期だった40年ほど前を知る方には,よく記憶がおありでしょう。

 長くなりましたが,こういう話も実際に作って見ればはっきり区別出来るようになります。うん,これはとりあえず作って見ましょう。


・回路検討

 マイコンやDSPを使わずに,アナログのPLLで構成された回路は一見するとややこしそうで,実は簡単です。でも簡単なようで,1つ1つの常数に深い深い意味があり,実装によって性能が左右するのも,またアナログの世界です。

 私は,設計者の意図を尊重し,まずは素直にモノマネすることにしました。ただし,回路も常数も「そうなっているから」ではなく,どうしてそうなっているかを考えた上で,モノマネさせて頂く事にします。


・部品集め

 この回路はアナログですが,アナログ回路というのは得てして部品の性能に依存して設計を行うものであり,部品が手に入らないとモノマネすら出来ないという難しさがあります。

 まずGPSモジュールですが,1PPSではなく10kHzが高精度で出てくるものであり,かつ高感度,高精度なものである必要があります。加えて安価でなければ手が出ません。記事にあるように,u-bloxのNEO-6Mを使ったGPSモジュールが,aitendoで安価に売られていましたので,これを買って使うことにしました。

 アンテナは屋外に出さないと厳しいのですが,本格的な物は高価ですし,そもそも設置が大変です。そこで,カーナビようのアンテナを中古で数百円で入試し,コネクタをSMAに交換して使うことにしました。一応トヨタ純正です。

 次のキーパーツは,OCXOです。これまで書いたように,OCXOは揺らぎ成分を担保する最重要部品であり,はっきり言えばGPSDOの揺らぎは,このOCXOの性能がそんまま出てくるといってもよいです。

 ですから,非常に高価なダブルオーブンのOCXOを使う物なのですが,私は偶然,以前購入した電圧制御可能なOCXOが,実力でなかなか揺らぎがないことを確かめたあったので,これを使うことにしました。

 購入先の話を聞くと,もともとメーカー製のGPSDOに使われていたOCXOを外したものらしく,それならGPSDOにぴったりじゃないかと,そういうお話です。でも素性がはっきりしなかったこともあり,4000円弱で手に入りました。GPSDOに使える電圧生業OCXOとしては半額以下だと思いますが,うまくいくかどうかは試して見ないとわかりません。

 幸い,1.6Hz/1Vくらいの周波数変化率でもありますので,今回の記事で使われているものとほぼ一致しています。回路変更も必要ありません。

 難しい部品はこのくらいです。500uAのラジケーターなんてのはどこでも買えますし,使っているICも一般的で安価な汎用品です。

 出力波形を正弦波にし,しかも接続機器と絶縁するための回路の規模が結構大きく,部品もトランスやFETに入手が難しいものがあり,いろいろ検討してみましたが,私の用途ですと矩形波でも絶縁していなくてもあまり関係なさそうだったので,そのまな出力することにしました。

 電源は,本当はトランスで作ったリニアレギュレータがベスト何でしょうが,ずっと通電して機器ですのでちょっとした効率がきいてきます。そこで15VのスイッチングACアダプタを使い,基板ごとにローカルで用意したLDOを通して,電源の質を維持するようにしています。


・オリジナルな要素

 GPSモジュールが衛星をきちんと補足し,常に精度が維持されていれば,出力もPLLでじっくり時間をかけて,高精度で出てくるでしょう。しかし,衛星を補足し損ねた,あるいは停電があった等で精度が出ていない10kHzがGPSモジュールから出力されることは十分に考えられます。

 しかし,そうした精度が落ちた事実はGPSモジュールからのログを見ないと分からず,しかも24時間以上の時間をかけて,ゆっくりゆっくり揺らぎを除去していくのですから,現在出ている10MHzのクロックの精度がどの状態にあるのか,分からないことになります。

 さすがにそれは不安ですし,いい勉強なりますので,GPS時計を作った経験を生かし,GPSモジュールのステータスモニタをAVRtiny2313で作ります。LCDはグラフィックタイプのAQM1248Aを使って,小さな画面にたくさんの情報を出せるようにしましょう。

 NMEAセンテンスをデコードし,現在の日時と衛星の補足数,測距モード(無効,2D/3D,DGPS),そして衛星を補足し損ねてモードが無効となった回数を数えたカウンタを表示します。

 また,初回起動時には,画面右上に*を表示ししました,これは停電の検出です。停電をすれば,復帰しても衛星の再補足後から24時間以上経過しないと,所定の精度が得られません。

 ですので,この*が表示されていれば,停電が起きたことがわかります。

 そして,このマークを消し,かつ衛星を補足し損ねた回数のカウンタをリセットするボタンを1つ用意します。起動後,衛星を補足してからこのボタンをおしてやれば,画面に*が出ていれば停電を,カウンタの数が0以外になっていれば衛星を補足し損ねたと,分かります。そこから24時間経てば,悪くとも精度が出ていると考えていいわけです。

 あと,場合によっては出力の周波数に1MHzが欲しい時があるかも知れません。そこでデューティが50%になるように,HC390の配線を変更しました。10進カウンタとしてどうさせるのではなく,5進カウンタにバイナリカウンタをカスケードして,バイナリカウンタで50%デューティにするという回路です。

 ここから1MHzを引っ張り出すことができます。

 もう1つ,実は私が持っているAG1022というファンクションジェネレータは,供給する外部クロックとして20MHzが指定されています。10MHzではダメなんですね。

 そこで,Si5351Aを使って,20MHzに逓倍する回路を追加しました。実は,通電直後に電源とGNDがショートし,それがSi5351Aの破損によって起こるという大問題が発生し,SI5351Aを2つも壊してしまったのですが,原因が分からず,3回目の交換で正常動作するようになってしまったので,謎のままです。

 こういうのって本当に気持ちが悪いのですが,動いてしまったので確かめようがありませんし,ICの交換も大変,しかも安いとは言え1つ150円しますので,もう結果オーライにします。ああ,こういうあきらめ方って。何年ぶりだろう。

・PLLの考察

 GPSからの10kHzには、数mHz以下の揺らぎが入ってきます。これをローパスフィルタで除去(つまり積分器で平均化)することで,PLLが揺らぎに追従しないようにするのが,GPSDOのミソです。

 では,その揺らぎはどこで防ぐかというと,前述のようにOCXOというもともと揺らぎの少ない部品の力で確保します。

 なら,このローパスフィルタのカットオフはどうなっているのでしょう。LTSpiceでシミュレーションしてみると,10mHzで-3dBでした。また,リークの対策として,100mHz以上の周波数をさらにカットするフィルタも入っています。


・製作

 私はどんな回路でも,自分で一度書き直します。自分の流儀に出来るので,製作中にさっと見るときの読解力に差が出ますし,一度書き直すことで回路の隅々まで理解するチャンスが得られます。

 今回もそうしました。また,ケースは小さい物にしましたので,基板もギリギリの高密度実装です。大きめの基板にはOCXOと4046,そしてOP-AMPをのせました。もう1枚の小さい基板にはGPSモジュールと分周器をのせました。

20160816153545.JPG

20160816153546.JPG


 LCDとマイコンはフロントパネルに取り付けるので別基板にしました。
20160816153547.JPG
 製作そのものはあんがすんなり出来ました。バラックで動かしてみると,あっさり動いてしまいました。1E-9くらい出ていると思われる別のOCXOをリファレンスに入れた53131Aで測定してみれば,その安定度はよく分かります。

 ケースに穴を開け,ギリギリのレイアウトで押し込みます。フロントパネルはいつものようにステッカー自作キットを使いプリンタで印刷して用意します。今回は手に入ったラジケータがVUメータでしたしので,このままでは格好が悪く,シンプルなセンターメータの目盛板も印刷することにしました。なかなか綺麗に仕上がりました。



 長くなりました。結果は後日。

GPSDOで手に入れる高精度クロック[考察編]

  • 2016/08/09 16:19
  • カテゴリー:make:

20160816092537.JPG

 GPSDOを作りました。

 GPSDOとはGPS Disciplined Oscillatorの略でして,GPSによって統制された発振器,GPSを基準に常に調整される発振器のことを言います。

 GPSの衛星には原子時計が搭載されています。すべての衛星の原子時計は完全に同期していることが前提で,複数の衛星を受信機が地上でとらえた場合の,各々の衛星の時刻のズレから,地上での位置を特定するのがGPSの仕組みです。

 当然,時刻の精度が位置を特定する精度に直結するわけで,例えば時計が僅か100nsずれただけでも,測距誤差は30mにもなり,これでは役には立ちません。

 ですから,実用上数mの誤差でなければならず,そうなると時計の精度は10nsくらいのズレに押さえないと厳しいのです。

 衛星に搭載されている原子時計にもいろいろありますが,概ね10-12くらいの精度があるとされています。すべての衛星がこの精度で,完全に同期しているというのもすごい話だと改めて思うのですが,残念な事にこの時刻情報が衛星から電波で届く途中で電波が揺らいでしまい,10-8程度の精度に落ちてしまうと言われています。

 みなさんも,スマートフォンのGPSで,現在地を表示させたことがあると思いますが,その時,現在地の表示がふらふらと数メートルの範囲で動いているのを見たことがあるかも知れません。

 この,フラフラと動いてしまう揺らぎが,宇宙空間を飛んで来る間に生じた揺らぎだと思って間違いないです。電波は光の速度と同じ30万km/秒の速度ですから,10ns程度のゆらぎがあると,3mくらいフラフラ動いて見えると言うわけです。

 さて,私は先日,HP53131Aという周波数カウンタを手に入れました。非常に高性能で,さすが定番と思わせるカウンタゆえに,自作の8桁カウンタは愛着があったにもかかわらず引退を余儀なくされたのですが,レシプロカル方式の高速性と,桁数の多さから,リファレンスクロックの精度が問題になってきました。

 リファレンスクロックが例えば10-6のTCXOとすれば,7桁目から下は値が信用出来ませんし,フラフラと変動してしまいます。ゲートタイムが1秒とか10秒ならそうした変動も丸め込まれるので表面化しませんが,0.1秒くらいのゲートタイムで8桁が表示出来るカウンタだと,本当にフラフラ動くのがわかります。

 そこでOCXOのような,10-9くらいのリファレンスを用意することになるのですが,揺らぎはこれでそれなりに押さえられるとしても,そもそもの周波数が正確な物になっているは限りません。10MHzのリファレンスが欲しいのに,11MHzで安定されても全く意味がありません。

 なので,正確な周波数であり続けること,そしてその周波数から変動しないこと,が高精度な発振器には求められるというわけです。

 こうした高精度な発振器が必要なシーンは,例に挙げた測定器の基準として欲しくなることがありますね。

 他には正確な時計です。1ppmという聞けばとても高精度な発振器のように聞こえますが,これを使って時計を作っても11日で1秒もずれてしまいます。3年で1秒という今は普通の時計の精度を出そうとすると,実に0.01ppmという精度が必要になるのです。

 ちょっと変わったところで,オーディオの高音質化があります。デジタルオーディオは,一定の時間間隔で音を数値化て録音と再生をしていますから,その時間間隔がずれたり揺らいだりすれば,元の音を再現出来ません。これがオーディオで発振器の精度を高める動機になっているのですが,マニアには原子時計を導入している人もあると聞きます。すごいですね。

 波形が変化することは間違いないので,それが分かるほどの高精度なアンプやスピーカーがあり,聞き分ける耳があるなら,間違いなく高音質化に貢献する物です。このあたり,わかりにくい事でもあるのでオカルトっぽく聞こえると思いますが,ある程度は事実として認めてもいいんじゃないかと私は思います。

 さて,こうした精度の話を急にしても,なかなかピンと来ないものです。そこで,わかりやすい「不確かさの目安」を書いておきます。

10-5        0.003年(1日)で1秒 普通の水晶発振子,10ppm
10-6        0.03年(11日)で1秒 TCXO,1ppm
10-7        0.3年(3.6ヶ月)で1秒 OCXO,0.1ppm
10-8        3年で1秒 地球の自転周期
10-9        30年で1秒
10-10        300年で1秒 地球の公転周期
10-11        3000で1秒
10-12        3万年で1秒
10-13        30万年1秒 ルビジウム原子時計
10-14        300万年1秒 セシウム原子時計
10-15        3000万年1秒 一次周波数標準の原子時計

 3万年に1秒といわれてしまうと「なんかわからんがすごい」となってしまいますが,こうして冷静に数字を並べてみると,割に現実味が出てくると思いませんか。また,1ppmというと「百万分の一」で,これも慣れていないとイメージが沸かないものですが,前述のように10日ほどで1秒狂ってしまうほど,いい加減な物だとわかると思います。

 意外なところで,地球の自転周期が10-8,公転周期は10-10と,なかなか高精度なことに驚かれたかも知れません。私は驚きました。やはり地球は大きいし,宇宙は大きいのです。我々人間がいかにちっぽけな存在か,思い知りました。

 こんな感じで,高精度なクロックが欲しいなあと考え出すと,そこらへんのTCXOやOCXOなんかでは全然物足らず,目指すは原子時計ってな話になるのですが,初期投資も維持費も(普通は)個人でまかなえるものではありませんし,しかも寿命が避けられず,いずれダメになってしまいます。

 これらを個人で持つのはやはり非現実だとわかったところで,やっぱり正確な時刻を維持して,かつ揺らぎのない時計が欲しいことには変わりません。

 そうだ,GPSがあるじゃないか。

 GPSは冒頭に書いたように,すべての衛星に原子時計が搭載されており,すべての衛星が同じ時刻で同期しています。これを使えば手元に原子時計などなくとも,原子時計レベルの精度が手に入るじゃありませんか。

 ところが,これには問題が2つあります。

 1つは,GPSで得られる情報は基本的には時刻であり,得られる周波数は1秒に一度,つまり1Hzのパルスだということです。

 もう1つは前述の通り,宇宙空間を飛んでくるときに精度が落ちてしまい,10-8くらいになってしまうという問題です。せっかく10-12レベルなのに,4桁も落ちるなんて・・・

 しかし,この2つを解決すれば,どこでも原子時計が実現します。それがGPSDOなのです。

 GPSDOを実現するには,こんな風にします。

(1)1Hzを変換する

 基準クロックとして測定器やオーディオ機器に供給する周波数が,1Hzであることはほとんどありません。多くは10MHzや1MHzですから,1Hzを10MHzに逓倍することになります。逓倍と言えばPLLです。

(2)揺らぎを押さえる

 揺らいでいるとはいえ,ある周波数を中心に揺らいでいると言うことですので,長い時間の平均を取れば,ある周波数に収束します。別の考え方をすると,1秒に対して10nsの揺らぎがあると,パルスの出るタイミングが少し早かったり少し遅かったりするので,1Hzのパルスの数は1秒に1個かも0個かもしれませんが,100000000秒のパルスの数は100000000個です。長い時間をかけて数えるほど,どんどんタイミングのズレが薄まっていくのです。

 もうちょっと計算すると,1秒のパルスの精度が10-8だとしても,1000秒なら単純に10-11にまで精度があがります。

 しかし,これでもまだ問題はあります。

 PLLを使えば確かに1Hzを10MHzにすることが出来ますけど,基準周波数とVCOの発振周波数を比較するチャンスが1秒に1度になってしまうので,なかなか精度が出ません。それに,GPSで作った基準周波数は揺らいでいますので,この揺らぎに追従してしまうと,10MHzにも同じ程度の揺らぎが入ってきてしまいます。

 そこで,数Hzから数mHzの揺らぎをカットし,これには追従しないようにPLLのロープフィルタを作ります。でも,そうしてしまうと,揺らぎ成分がPLLでロックされなくなりますから,VCOの揺らぎがそのまま出てきてしまいます。

 なら,VCOに揺らぎが少ないものを選べばいいわけです。長い周期の揺らぎはVCOの性能でカバーするという作戦です。

 比較するチャンスが1秒に1度になってしまう問題は,GPSモジュールの性能に頼りましょう。少々ずるいのですが,市販のGPSモジュールには,外部へのタイムパルスの周波数をユーザーが設定出来る物がたくさんあります。

 どんな周波数でも出力出来るようなのですが,基本的に1秒に一度のタイムパルスしか飛んでこないGPSで,他の周波数を作って出すのですから,周波数によっては精度が悪い物もあります。

 先人達は,u-bloxのNEO-6MというGPSモジュールにおいて,10kHzの出力なら非常に高精度であることを突き止めてくれました。10kHzを基準にするのであれば,PLLで10MHzを作る事はそんなに難しいわけではありません。

 この話,既にお気づきの通り,トランジスタ技術2016年2月号に掲載されたGPSDOの製作記事そのままです。これをお書きになった加藤OMはデジタルからRFまで高い技術をお持ちの方で,GPSDOのシステム全体のまとめ方には,思わず唸ってしまう程の見事さがあります。

 私がオリジナル回路で勝負したり,はたまたオリジナル要素を組み込んだりしても,このシステムに並ぶことは無理でしょう。素直にトレースして,GPSDOの世界を探求してみることにします。

 製作編に続きます。

PC-1500のRTCが動かない

 PC-1500のレストアが終わって,ここしばらく様子を見ていたのですが,どうもリアルタイムクロックの調子がおかしいようです。

 恥ずかしながら,私はPC-1500にRTCが入っていることを,手に入れるまで知りませんでした。それも,NECのuPD1990という,本物のRTCです。

 まだクオーツ時計がそれなりに高価でだったあの時代に,ポケコンの中身にそれと同じ(カレンダーまで入っているのだからそれ以上かも)ものがひっそりと入っているのですから,私は正直驚きました。

 これが,ディスクベースのマシンなら,タイムスタンプを記録するためにRTCは必須とも言えるわけですが,CMOSのSRAMによるバックアップで,電源ONですぐに動作するというポケコンの特性から考えると,RTCなんかどこで使うのよ,と思ったりします。

 1981年に発売になった機種で,同じ時期にPC-8801やMZ-80Bが登場しているわけですが,ちゃんとした8ビットのCPUに大容量メモリ搭載可能,フルスペックに近いBASICを装備し,狭いとはいえグラフィック可能なディスプレイも内蔵し,電池で長時間動き,プログラムはバックアップされている,RTCまで持っていて,オプションで4色のプロッタプリンタまで用意されている,そんなマシンが当時59800円で売られていたというのは,かなりお買い得だったのではないかと思います。

 もっとも,当時の私は子供でしたから,59800円あれば一生遊んで暮らせると思う以外,想像する事すら不可能な大金でしたので,PC-1500も全くリアリティがなく,自動車や家と同じレベルで見えていました。

 実際PC-1500を使ってみると,ポケットには入らないだろうと思われる大きさもそんなに悪いものではなく,キーボードも使いやすく,ディスプレイも1行とはいえ,十分な情報量を持っています。単三電池で動くというのもなかなかよいです。

 これがPC-1600KやPC-E200なんかになると,画面が大きすぎて,ちょっと私は慣れないです。ポケコンはやっぱり1行表示に限る。

 まあ,そんなことはどうでもいいんですが,そのレストアしたPC-1500,壊れていないか気になって電源を入れ,「TIME」と入力してRTCを読み出すことをやるんですが,ある日ゼロを返してきました。

 PC-1500のRTCは,TIMEという変数を介してやりとりされます。書式は,MMDDHH.MMSSというちょっと変則的なものです。マイクロソフト系のBASICだと,TIME$という文字変数を介することになるのですが,これは日付の区切りである/や,時刻の区切りである:を含んでいるからで,.を1つだけ使って区切ってあるなら,文字変数である必要はありません。

 ですが,返ってくる数字は0。おかしいです。しまいになにも表示されず,ダンマリになることも出てきました。リセットをすると治ることがあるのですが,それも駄目になってきました。

 ダイレクトモード(RUNモード)ではダンマリになる場合,プログラムでTIMEを使うとエラーで止まってしまいます。これはいよいよおかしいです。

 面倒でしたが,早速原因を確かめるために分解です。時々0を返すという症状から,常に0しか返ってこない,と言う深刻な状況になっていましたので,とりあえず目視で配線を確認します。

 以前交換したPIOの足に浮きのようなものがあったのでこれを修正しますが治りません。波形を見ますが,中間電位も出ていませんし,TIMEと打ち込んだときにはパラパラと波形に変化も出ています。おかしい。

 こうなってくると,uPD1990の破損という話も視野に入れねばなりません。あれこれ考えるのも面倒ですので,もう1台のPC-1500のuPD1990と入れ替えてみます。

 交換作業を手早く終え,電源を入れてみると治っています。日時のセットも出来ますし,読み出しも問題ありません。もし,RTCが壊れていたというのであれば,もう1台のPC-1500はRTCを読み出せないことになりますが,やってみたらちゃんと動きます。しかも前のPC-1500で設定した日時がそのまま残っていました。

 短期間で判断するのは難しいですが,おそらく基板のパターンか,ハンダ付けの不良などがあったのではないかと思います。ICの交換でそれがうまくおさまったということだとすると,またいずれ同じようなことがおきるのではないかと思います。

 どっちにしても,35年も前のものですので,なかなか厳しいなあと改めて思いました。特に程度のいい方のPC-1500はROMのバージョンから最初期型と判明しましたし,壊れても仕方がないというか,後どれくらいつかえるものか,さっぱり見当も付きません。

 まあ,またしばらく様子を見ることにしましょう。


 

ページ移動

  • ページ
  • 1
  • 2

ユーティリティ

2016年08月

- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -

検索

エントリー検索フォーム
キーワード

ユーザー

新着画像

新着エントリー

過去ログ

Feed