エントリー

カテゴリー「make:」の検索結果は以下のとおりです。

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の世界を探求してみることにします。

 製作編に続きます。

ポケコンGo!

20160725151846.jpg

 前回までのあらすじ~

 満身創痍でやってきたPC-1500の命を「神の手」を持つ天才外科医G-SHOESが救う。とても30年を経過したとは思えない美しい肢体に心を奪われたG-SHOESは,その中身をみて戦慄する。

 むしばまれた内臓はすぐに手術が必要だった。

 長時間にわたる手術は驚くほど順調に進んだ。終盤を迎え,いよいよ縫合と言うとき,「神の手」がほんの少しぶれてしまった。G-SHOESに悪い予感が走るが,立ち止まらないのが天才外科医だ。

 やがて何事もなく手術室を出るPC-1500。誰もが手術の成功を疑わなかった。

 しかし,麻酔から目覚めたPC-1500は,もはや元のPC-1500ではなかった。それまで動いていた,キーが動かなくなっていたのだ。

 緊急再検査。結果はCPUと同じくらい大事なPIO,LH-5811の破損とわかった。そう,手元が狂った時に,LH-5811を傷つけてしまったのだ。

 痛恨の失敗に悔やむG-SHOES。そして無邪気に微笑むPC-1500。一体どうすれば・・・彼女の命を救うには,もはや臓器移植しかない。

 しかし,非常に特殊なLH-5811はほぼ入手不可能。かといってすでに存在自身が貴重となったPC-1500を,別のPC-1500を生かすために壊すなど,許されることではない。

 知り合いのエージェントからもたらされた情報によると,LH-5811はなぜかオーストラリアに存在することが分かった。だが,費用や支払い条件など,その高い壁に断念せざるを得なかった。

 どうする,G-SHOES?

 そんなある日,LH-5811の機能の一部を肩代わりする,人工臓器の開発のアイデアを持ち込んだ男がいた。彼との共同開発に一条の光を見いだしたG-SHOESは,家族を顧みず,寝食を忘れて開発に没頭した。

 G-SHOESの体力が限界を迎えるその直前,ようやくプロトタイプが完成,PC-1500は組み込み手術を待つ。

 翌日の手術を控え「死にたくない」とつぶやくPC-1500。

 しかし,神の手は彼女の命に届かなかった。目覚めたPC-1500を待っていたのは,相変わらずキーが効かないという,残酷で正直な現実である。

 G-SHOESは病院を追われ,地位も名誉も家族も捨てた。

 あきらめられない・・・隣で寝息を立てる美しいPC-1500を見ては,いつか復活させると心に誓うのであった。

 そんなとき,突然ドナーが現れた。専用のプリンタCE-150である。CE-150はLH-5811を搭載するプリンタであるが,内蔵の充電池の液漏れにより,最後は壮絶な死を遂げることで知られている。

 幸か不幸か,こうして電解液まみれで,すでに復活不可能なCE-150が目の前にいる。

 手術開始・・・

 直ちに緊急手術が行われた。CE-150から基板が取り出された。すでに腐食が進み,どうしても復活させる手段はない。LH-5811を慎重に取り外す。手が震える。

 次にPC-1500のLH-5811を外す。すでに壊れたチップには未練はない。基板だけとにかく壊さないように,細心の注意を払って作業する。

 そして,いよいよLH-5811の移植。寸分の狂いもなく,もとの場所に収まったLH5811を見て,G-SHOESは安堵した。電源の投入,よし,キーボードは正常だ。

 そして,このCE-150に抱きかかえられた,もはや動かないPC-1500からLCDも移植され,長きにわたる手術は終了した。

 病室で目覚めたPC-1500は,それまでの故障がウソのように,元の姿を取り戻したのだった。

 ----

 なんかあらすじが長くなってしまったわけですが,PC-1500の分解掃除とLCDの修理を行った終盤に,不注意でLH-5811を壊してしまい,外部に同じ働きをする回路を考えて取り付けてみるも見事に失敗,結局壊れたCE-150からLH-5811を取り出して交換し,どうにか元の状態まで戻しました,というのが,前回までのお話です。

 さて,PC-1500はPC-1501と違い,搭載メモリが非常に少ない機種です。内蔵されているRAMは,16kビットのSRAMが1つと,4kビットのSRAMが2つ,これに加えてLCDドライバ内蔵のVRAMが512バイトのみで,合計は3584バイトに過ぎません。

 ここからVRAMやワークエリアとして1734バイトを差し引いた1850バイトがフリーエリアです。「MEM」と打ち込んで出てくる数字がこれです。

 わずか1.8kバイトというのは,もうどうにもならないくらい少ないように思うわけですが,そうはいってもPC-1245など1486バイトですし,割り切ればなんとかなる容量ではあります。

 ただ,PC-1245と違い,PC-1500は高機能,多機能な上位機種ですから,メモリがネックになってその性能が生かせないという事になってしまうと,残念な商品になります。

 しかし,当時16kビットのSRAMというのは非常に高価で,私の記憶でもZ80の2倍ほどの値段で売られていたと思います。SRAMの4倍の容量が同じ世代のDRAMなので,当時超LSIと畏敬の念を持って奉られた64kビットのDRAMと同じ最先端だったことを考えると,さもありなんというところでしょう。

 ですから,16kビットのSRAMを複数搭載することはどうしても出来ず,旧世代の4kビットを搭載することでなんとかしたのがPC-1500でしょう。メモリ拡張用のスロットも用意したので,あとはこっちでよろしくね,と言うことなんでしょう。

 しかし後年16kビットのSRAMを4つ搭載したPC-1501が登場していることを考えると,いくらなんでもこの性能のコンピュータで1850バイトは少なすぎたという事です。

 PC-1500のメモリスロットは1つだけです。ここに増設出来るRAMは16kバイトまでですので,合計19.5kバイトというのが公式の最大メモリです。

 しかし,そこはもうちょっとシンプルに考えてみましょう。PC-1500のCPUであるLH-5801は8ビットCPUで,16ビットのアドレスバスを持ちます。ゆえに直接扱えるメモリは64kバイトです。Z80なんかと同じで,I/O空間には別の16ビットが割り当てられますので,最大128kバイトまで直接扱う事が出来ます。

 メモリマップを見ていると,7600hから77FFhまでの512バイトがLCDドライバに割り当てられている以外は,特に他に割り当てられているデバイスもなく,RAMのエリアとして扱われているようです。

 なら,0000hから7FFFhまでの32kバイトをとりあえず256kビットのSRAMで埋め尽くし,LCDドライバだけアクセスを分けるようにすれば,面倒な事を考えないでメモリを最大に出来るんじゃないか,そう考えたのです。

 こうすれば,アドレスのデコードも簡単にできそうです。

 考えた回路は,HC139を使い,2つ目のデコーダでスタンバイモードを示すBFOをGに,AとBにはA15とME0を入れて,0000hから7FFFhのデコード信号を作ります。

 そして,これをもう1つのデコーダのGに入れ,AとBにはLCDドライバのCSをいれて,25kビットSRAMのCEを作ります。これならデコーダもワンチップで済みます。

 あとは,4kビットと16kビットのSRAMを基板から外してしまい,16kビットの代わりに256kビットのSRAMを取り付けて,配線を少々変更するだけです。

 作業はそんなに大変でもなかったのですが,4kビットのSRAMがDIPの大きなパッケージを強引に緬実装にしたものなので,作業はなかなか難しいものでした。

 ドキドキしながら電源を入れますが,電流は動作時最大の電流で流れています。画面には何も出ませんし,動いている様子もありません。失敗です。

 回路図と配線を再度確認すると,ミスが1つ見つかったのでこれを修正。しかしやっぱり状況は変わりません。ただ,アドレスバスの波形を見ると,明らかに変化があります。なんだか動きそうな波形です。

 とはいえ,回路にも配線にもミスはなく,案外簡単に万策尽きてしまいました。

 ということは,元々の考え方にミスがあったのかも知れません。あるいは,すでにどこか別の場所を壊してしまったのかも・・・嫌な想像がグルグルまわります。

 しんどいなあと思いながら,,もう一度配線ミスを確認しようとテスターを当てていくと,なにやらA5がVCCとくっついています。もしやと思いよく見ると,やはりA5がショートしています。

 ショートしているように思えた部分を綺麗にしてやると,ありがたいことにA5のショートがなくなりました。電源を入れると無事に起動します。やったー!

 早速NEW0,MEMと入力すると,28474と返ってきます。

 おお,27.8kバイトです。どうやらうまくいったようです。

 簡単なメモリテストを走らせて,多分大丈夫という所まで来て,この数字が妥当かどうかを考えてみました。

 まず,PC-1500が使うワークエリアとLCDのVRAMは,前述のように3584-1850で1734バイトです。これが必ず差し引かれます。なお,7C01hの1バイトもBASICのワークエリアになっているので,この1734バイトのうちに含まれています)

 さらに,7C00hから7FFFhまではBASICでは使用できないエリアです。ここが1024バイト。そして7000hから75FFhの1536バイトも使用できないエリアとなっています。

 ということで,32768-1024-1536-1734=28474バイトです。

 逆算してみましょう。0000hから6FFFhまでは4096*7で28762バイト。これにVRAMの512バイトを加え,さらに7800hから7C00hまでの1024バイトを足して,ここから1734バイトを引けば,28474バイトです。当たり前ですが,一致しています。

 実質的に,これ以上のフリーエリアを確保することは無理なはずで,BASICがそのまま扱えるエリアとして最大拡張したと言ってよいと思いますので,これで増設は成功したと考えてよいです。

 
 さて,このCE-150にはPC-1500本体も一緒に付いてきたのですが,電源を入れても動きませんでした。正確に言うと,画面にゴミが出たり,おかしなビープがなり続けたりと,正常に動作しなかったのです。

 見れば,CE-150から漏れ出た電解液がPC-1500の基板にも派手に染み込んでおり,パターンの腐食も出ている有様です。これはなかなか大変です。

 幸いLCDは無傷でしたので,この個体からLCDを取り出し,メモリ増設を行った綺麗な個体に移植しました。

 これでまず1台,綺麗なPC-1500が完成しました。

 で,LCDが取り出された,壊れているPC-1500に目をやると,これを放置しておくのも可愛そうです。とりあえずLCDを取り付けて,電源を入れてみますが,やっぱり動きません。

 基板の汚れを拭き取り,パターン切れを確かめようとテスターであたっているうちに,導通が復活したようで,電源を入れると動いてくれました。

 なんか気持ち悪い復活ですが,主立ったICの足をハンダでなめてスルーホールにもハンダを流し込みます。

 これで動くはずと電源を再度入れると,動かなくなっていました。悲しくなってきましたが,冷静になって顔を上げると,4kビットのSRAMの足にハンダのクズが付着していました。これを拭うと,ちゃんと動作するようになりました。

 基板の腐食が原因ですから,たぶんそのうち動かなくなってくると思います。断線した部分が見つかれば,ここをジャンパで補修するので確実に治るんですが,こうして動き出してしまった以上,どこが切れていたのかもうわかりませんから,仕方がありません。

 これで,PC-1500をめぐる顛末はおしまいです。

 なかなか大変で,うまく動かず凹んでしまったこともありますが,うまく行き始めるとトントンと進むのも,またこの手の修理だったりします。どっちにしても,簡単にあきらめないで,その時々の自分のスキルで出来る事をコツコツやれば,最終的にはどうにかなるものだと思います。

 それにしてもPC-1500,なかなかいいマシンです。大きいとか重たいとかありますが,この時代のマシンとしては高速で,メモリも多く搭載出来るし,キーも大きく使いやすいです。電源を入れればすぐに復帰しますし,当時このマシンを持っていれば,それなりに楽しかったろうなあと思います。

 さて,もうポケコンはおしまいです。まだ持っていないマシンもありますけど,これ以上はもう切りがないし,言ってみれば派生機種みたいなもんですから,PC-1260やPC-1350なんかを手に入れる必要は,あまり感じていません。

 ああ,でも,パソピアminiやJR-800があると,面白いかなあ。


HP53131Aにプリスケーラを作って内蔵

  • 2016/06/30 14:52
  • カテゴリー:make:

 先日手に入れたHP53131Aに,3GHzのプリスケーラを作って内蔵してみました。

 HP53131Aは2ch入力で,約200MHzまでカウント可能な高性能なユニバーサルカウンタですが,プリスケーラをch3として増設することで,入力端子が1つ増えると共に想定範囲が大きく拡大します。

 純正品は高価ですので,互換品を安く売る業者もあるし,個人で自作する人も多いです。調べて見ると簡単そうですし,特殊な部品も使わないようなので,私も作ってみたというわけです。

 HP53131Aのプリスケーラは1/128の分周比を持つもののようです。純正品は広帯域アンプを4段重ねて合計30dBのゲインを持たせてあり,その出力を1/128の分周器に突っ込んであるだけです。

 CH3が使えるかどうかは,本体のCPUのGPIOがHighなのかLowなのかで判定します。

 回路は確かに簡単かもしれませんが,なにせ3GHzという高周波を扱う上に,小さな信号を結構なゲインで増幅しますので,きちんと動作する物が出来るかどうかは,実装次第なところがあります。

 今手に入る部品で作ろうと思いましたので,とりあえずこういう時の秋月にGo。するとちょうどいい部品がありました。

 まず,広帯域アンプのICは,なんとちょっと前まで最先端だった夢のSiGe,SGA-6386が2個200円で売っていました。帯域はDCから3GHz,ゲインは2GHzで13.3dBということです。

 単電源で動き,50Ωで終端されているのでとても使いやすそうです。まあ,この手のICはみなそうなのですが,私は以前ミニサーキットのMAR-6を使った広帯域アンプを使って,アンプではなく発振器を作ってしまった苦い思い出があり,苦手意識が根付いてしまいました。

 この時は1.5GHzくらいのアンプだったと思うのですが,それが今後は3GHzですから,さらに難しいでしょう。むむ,大丈夫か?

 ところで,SGA-6386のゲインは先程書いたように2GHzで13dBあります。1GHzで15dBもありますので,30dBを実現するには2つで十分ということになるのですが,あんまりゲインを上げるとこわいし,消費電流も多くなるので,私は1段だけにしました。純正品の30dBに対し,15dBで妥協します。

 プリスケーラICは手持ちのMB508を使ってみるかと思いましたが,入手が難しいこともあり,保守を考えて秋月で変えるuPB1507GVを使うことにします。uPB1507はいいICですが,低い周波数での感度が悪いらしく,ここはMB50xシリーズの方が良い感触のようです。

 ですが,もともとHP53131Aは200MHz以上の帯域をプリスケーラなしで実現しているカウンタですので,200MHz以上で動いてくれれば,それでいいんじゃないかと割り切ります。

 あとは手持ちの部品箱から,チップのコンデンサと5Vのレギュレータを探してきます。アンプは12Vで動かしますが,プリスケーラICは5Vでないといけませんので,このレギュレータは必須です。チップ部品を使う予定でしたが,あいにく手持ちがなかったことと,最大入力電圧が案外低いものしかないので,昔ながらの78L05を使いました。

 そうそう,保護用のダイオードも欲しい所ですが,これも秋月で1SS154が安価に売られていますから,つかってみます。実は,HSMS-2822の方が1パッケージに2つ入っているので便利だったのですが,なんとなく1SS154にしました。


 基板はわざわざ作る事はしませんでしたが,かといって蛇の目基板ではさすがにダメだろうという事で,ガラエポの両面生基板をカットしました。どういう経緯だか忘れましましたが,うちにはたくさんあるんですよ,ガラエポの生基板が。

 両面ベタGNDで,必要に応じてリューターでパターンを作ります。結構楽ちんで作る事ができました。

 さて,手持ちの部品がなくて,結局新しく買うことになったのが,コネクタ類です。まずはBNCコネクタですが,パネル取り付けタイプのBNCコネクタがたくさんあるのでこれを使おうと思ったところ,本体の穴が大きすぎてうまく取り付けられません。仕方がないので基板取り付けタイプを買うことになりました。

 また,本体のメイン基板との接続には,10ピンx2列のコネクタが必要なのですが,これも手持ちがなく,フラットケーブルもありませんので,秋月に売っている100円のケーブル付きのコネクタを買いました。

 さて,部品が揃ったところで,組み立てです。

 部品点数に対して基板がかなり大きいので,そんなに気を遣うことはありませんが,あまり大きい実装をすると動作が心配です。出来るだけ小さく作ります。

 まずuPB1507GVをハンダ付けです。入力端子にコンデンサとダイオードをハンダ付けしてから,SGA-6386をとりつけます。基板を削ったりしてすべての部品をハンダ付けするのに,1時間ほどで出来ました。

 ケーブルとコネクタが届く前に,基板での動作確認をします。まず消費電流は規定値内です。とりあえずへんな発振はしてないようです。

 入力にSGの128MHzを入れ,出力は53131AのCH1に繋ぎます。これで1MHzと出てくれば動作しています。ですが,23MHzあたりのでたらめな数字を示しています。オシロで波形を確認しても,それらしい波形は出てきていません。

 アンプICの前後を調べると,入力にはちゃんと波形が見られるのに,出力にはほとんど波形が出ていません。苦手意識のある高周波増幅回路が動いていないという現実は,なかなか重たい物があります。

 ふとSGA-6386を触ってみると,かなりの発熱です。こりゃやばい,配線ミスか発振だと,あわてて電源を落とします。改めて仕様書を確認すると,電源電圧の最大定格が5Vとあるじゃありませんか。

 12Vで使ったらだめなのかよー,とがっかりしたのですが,過電圧で発熱したICは壊れているか,性能が著しく劣化しているものなので,もったいないですが交換です。

 交換して,今度は電源を78L05の出力から入れてみます。電源を投入しますが,やっぱり状況は変わらず。発熱はなくなりましたが,波形は全然です。

 ここでちょっと頭を冷やしましょう。

 ・・・

 改めて仕様書を見てみると,確かに電源電圧の最大定格は5Vですが,このICは電源端子があるわけではなく,出力端子にバイアス抵抗を介して電源を供給します。仕様書には12V時のバイアス抵抗の値が書かれており,私はこれを見てバイアス抵抗である91Ωを取り付けていました。

 ということは,電源は12Vでいいんですよ。あー,交換しなくて良かったのに!

 まあ,済んだ事は仕方がありません。電源のミスではないなら,なにが原因なのか,考え直さないといけません。

 もう一度基板を眺めてみます。回路図と確認すると,あったあった,間違いがありました。SGA-6386の電源に入れるバイパスコンデンサですが,私はなんと勘違いをして,SGA-6386の出力端子とGND間に入れていました。

 これじゃ,出力端子が交流的にGNDに落ちてしまい,せっかくの出力がでてこなくなります。

 このコンデンサを正しい場所に取り付け直して確認すると,ちゃんと動きました。128MHzを入れると,カウンタは1MHzを表示します。

 波形を確認したのですが,電圧ゲインは50Ωで5倍でした。電力のゲインが25倍になるとすれば13.9dBです。大体設計値通りですね。波形はあまり綺麗ではないのですが,一応動いているという事で,53131Aに取り付け作業を行うことにしましょう。

 こんな感じです。

20160629161452.jpg

 本当は,基板が完成した所で写真を撮るつもりだったのですが,すっかり忘れていました。見肉ですが,取り付け後の写真です。基板上に黒い大きな部品がいますが,これは78L05です。主役たるプリスケーラも,広帯域アンプも小さすぎて良く見えません。

 数日後,コネクタ類が届きました。回路図通りにコネクタを取り付けて内蔵してから,電源を入れます。お,ちゃんとCH3が選べるようになっていますよ。

 SGから128MHzを入れてやると,ちゃんと128MHzと出ています。よしよし。

 しかし,さすがに100MHz程度の周波数では,感度が低くてダメですね。CH1やCH2に比べると,感度が低くてどうしようもないです。

 ということで,一応トラブルもなく,プリスケーラを自作して内蔵することができました。よかったよかった。

 え,これで終わり?動作確認は?

 そうなのです。実は私,130MHzを越える周波数の信号源を持っていないのです。ははは。プリスケーラなんて,全く必要のない世界の住人だったのです。

 動くかどうかも,感度がどれくらいかもわからないのは気持ち悪いですが,いつかGHzオーダーの信号が手に入ったら,動作の確認をしてみたいと思います。


GPSのステータス表示をしてみよう

  • 2016/06/29 16:11
  • カテゴリー:make:

 GPSDOを作ってみようという計画をちょっとずつ進めているのですが,先に手軽に出来る事として,GPSモジュールのステータスを表示するマイコンとLCDの準備をしてみました。

 なにも大げさな話ではなく,かつて作ったGPS時計そのものです。シリアルで流れてくるNMEAをデコードし,LCDに表示するだけのものなので,Tiny2313で十分でしょう。

 表示したいデータは,日付,時刻,捕捉した衛星数,ステータスですが,これに加えてステータスがInvalidになった回数と,停電を示すマークを表示させたいと思っています。

 ステータスも,単なる数字と言うよりは,ちゃんとInvalid,2D/3D,DGNSSくらいは表示させたいですし,日付も時刻もなかなか桁数が多いですから,16桁x2行くらいのキャラクタ液晶では厳しいです。

 うーん,仕方がないから,グラフィック液晶を試してみますか。

 グラフィック液晶は,かつて低消費電力目当てで入手したノキアの3310という液晶が手元にあります。その後このプロジェクトは頓挫したので,全く使わずじまいになっていますが,もったいないので使ってみましょう。

 このLCDは,84ドットx48ドットというものですが,コマンドも扱いやすく,消費電流も低いので,世界中のホビーストが遊んでいます。

 基本的にはSPIにコマンドとデータを示す端子があるだけのものですから,そんなに難しくはないはずです。aitendoの液晶LCD8812K-04で作ったプログラムの大部分が流用出来ます。

 そうやってさっさと作って,GPSモジュールに繋いでみました。


20160628145122.jpg

 グラフィック液晶は任意の図形を表示出来ますが,キャラクタジェネレータを内蔵していませんので,キャラクタのビットマップデータは当然マイコン側に用意しないといけません。

 しかし,2kBのtiny2313でキャラクタのデータはかなり負担が大きくて,まともなプログラムなんか組めないと思っていたのです。

 キャラクタは横6ドットx縦8ドットで,キャラクタ液晶のフォントを参考に作りました。1キャラクタあたり6バイトですので,仮に100文字用意したら600バイトです。大きいような,小さいような・・・

 これを定数として書き込みました。キャラクタコードと一致させれば処理が簡単なのですが,使わない文字も出てきますので,キャラクタコードが変わってしまうこともやむなし,使わないキャラクタは削除しプログラムを小さくします。

 表示をしてみると,同じ大きさの文字がずらずらと表示されて,見にくくて仕方がありません。そこで時刻表示は懐かしの倍角にしてみました。縦1列のデータを2回書くだけで倍角になるので,コードもほとんど増えません。

 しかし,やっぱり間延びした感じが不細工ですし,やっぱり見にくいままです。そこで倍角にする時には2行使い,上下に4ドットのスペースを入れてみることにしましょう。お,なかなか見やすくなりました。

 とまあ,LCD3310は簡単にできました。

 うーん,でも,表示がメインの危機ではなく,ちゃんと動作しているかどう見るためにモニターですから,こんなに大きい表示である必要はありません。

 それに,LCD3310は今や貴重です。消費電流がわずか0.3mAというのは,ちょっと他にはありませんから,今でも入手できるLCDを考えたいところです。

 ふと思い出したのは,先日秋月で,ichigoJamポケット用に,超小型のグラフィック液晶AQM1248Aを買ってあったのでした。データシートを見ていると,電気的にはLCD3310とほぼ同じです。

 LCD3310よりも小さい液晶ですが,128ドットx48ドットと画素数はずっと上です。この大きさでこの画素数ですから,結局大きな文字を表示するしかなくて,文字数は少ないままに終わるんじゃないかと不安もあります。

 VRAMの構造もLCD3310に似ていますが,表示位置の指定は上位4ビットと下位4ビットを2つのコマンドで指定するので,ちょっと面倒です。

 とかなんとかいいつつ,AQM1248A用にプログラムを修正しました。

 同じ内容を表示してみると・・・見にくくて苦痛です。横幅が広いことでバランスが崩れていることもありますし,小さいという事もあって,じっくり目をこらさないと読み取れないレベルです。これは厳しい。

 まあモニター用途ですのでこれでもいいんですが,時刻くらいはぱっと見ただけで読み取れるようにしたいです。

 そこで例によって倍角にしたのですが,文字が小さいせいでやっぱり見にくいです。こういう場合,ピクセルサイズも小さいので,横倍角ではなく縦倍角との併用で4倍角にするのが最適なんですが・・・

 読み出したデータを4ビットごとに分割し,これを8ビットに拡張して1行目に二度打ちします。改行して残った4ビットを8ビットに拡張して二度打ちして終わり,なんですが,この段階ですでにメモリがギリギリです。

 かけ算ではなくシフトを多用し,出来るだけループでまとめて,それでも足りない分は仕方がないので,キャラクタのビットマップデータを削りました。キャラクターコードも変わってしまうので手間ですが,仕方がありません。

 そんなこんなで,一応完成しました。 実機にはAQM1248Aを使う事にします。

20160628145121.jpg


 1行目は日付です。JSTに変換していますので,それも表示しています。右端にある*ですが,これは起動後リセットボタンを押すまで表示された状態になります。リセットボタンを押すと,このマークが消えて,後述するUnlockもゼロになります。

 なんの意味があるのか,と思われるでしょうが,停電したことを示す表示として使います。ご承知の通り,GPSDOはGPSからの信号が受信出来なかったり,電源が落ちてOCXOが止まってしまったら,精度が出ません。そしてもとの精度に戻るまで,数日かかります。

 停電したり,衛星をつかみ損ねたことを知らせてくれないと,今出ている周波数が信用出来るかどうかが分からないのです。

 そこで,起動してから衛星をつかまえたことを確認したら,リセットボタンを押して*を消します。このまま*が消えている間は,少なくとも停電は起きていないといえるわけですね。

 次の行は時計です。4倍角で表示しているので見やすいです。ただし,1PPSに同期していないので,1秒以内の誤差は存在します。

 次はつかまえている衛星の数です。GPSでは最低4つの衛星をつかまえると位置情報が得られるのですが,常に位置情報を得るには4つでは不足で,時間の経過によっても安定した時刻情報を得るには,10個程度の衛星をつかまえてくれると安心です。

 受信状態の目安にもなりますし,衛星の数の表示というのは非常に重要です。

 次の行はステータスです。その時の位置情報,つまり時間の情報が信用出来るのかどうかを示しています。Invalidが信用出来ない状態です。そして4つ以上をつかまえて位置情報が得られた場合には2D/3Dと表示します。

 さらに,NEO-6MはSBAS(MTSAT)を受信してDGNSSが可能になっているので,このモードになっているときにはDGNSSと表示します。これ,確かに測距精度が一桁上がるといわれていて,大変ありがたいものなのですが,今回私があてにしている1PPS(10kHz)の精度にどう影響するのか,はっきりわかりません。

 時刻情報の精度が上がるのはあきらかです。そしてその時刻情報の精度は,電離層などを通過する際の誤差などを相殺することで向上させているという事ですから,単純に考えれば1PPSも精度が上がりそうなものです。

 ですが,絶対時刻ではなく,1PPSはあくまで周期の話です。これをわざわざ長時間積分して誤差をなくして使うわけですから,DGNSSになってもあまり意味がないように思うのですが・・・

 10E-8で3mの誤差と言われています。これが一桁改善すると10E-9です。やっぱり長時間の積分では,収束時間が短くなるだけで,最終的な精度にはあまり差が出ないのかも知れません。

 Invalid,2D/3D,DGNSS以外のステータスになったときには---と表示されるのですが,そういうことはおそらくないでしょう。

 そして最後の行はUnlockです。これは,ステータスがInvalidになり,衛星の原子時計とOCXOがロックしない状態になったとき,カウントされます。

 なんでこんな物が必要かというと・・・ある瞬間に衛星がつかまえられずに時間情報が信用出来なくなり,数秒後に再度つかまえたとしましょう。現時点ではGPSモジュールからのデータは信用出来るのですが,あいにくOCXOがその周波数にロックするには数日かかりますから,実はこの段階で出力される基準周波数は,まだ信用出来ないものということになるのです。

 けど,過去にInvalidになったことを表示してくれないと,そんなことは分からないわけです。

 そこで,これまでにInvalidになった回数を数えておくことにしました,数が多い場合には設置場所が悪いか,アンテナに異常があるか等で,基準周波数の精度が低いという事になります。

 逆に,Unlockのカウンタがゼロのままなら,電源投入から一度も精度の低い状態に陥っていない事になりますから,前回リセットボタンを押してから経過した時間の間,ずっと衛星をつかまえてくれていて,OCXOがゆっくり時間をかけてその時間情報にロックしていることになります。

 ただし,電源投入時は当然衛星を全くつかまえていませんので,この状態でInvalidであることはカウントしません。一度2D/3DかDGNSSになってからInvalidになった回数を数えています。

 で,先程のリセットボタンですが,Unlockの状態をゼロにする方法がないと不便だからということで,停電表示マークのリセットと兼ねてみました。衛星をきちんとつかまえてからリセットし,その後カウントが増えなければ,そこから先は制度が崩れていないことが明確にになります。

 本当は,2D/3DもしくはDGNSSになった時刻を表示して,いつからGPSモジュールが信用出来る状態かを確かめることが出来るようにしようと思ったのですが,メモリ不足であきらめました。まあ,そこまではいいでしょう。

 ということで,GPSモジュールの状態を表示するソフトが先に出来てしまいました。

 自動車用のGPSアンテナは先に購入してあり,コネクタをSMAに交換して,すでにGPSモジュールに繋がって動作しています。さすがに屋外にアンテナを出すと安定して11個から12個の衛星を常に掴んでくれます。

 あとはPLLを作って,OCXOをロックさせればいいんですが,回路規模が小さいとはいえ,それでも時間はかかります。あいた時間でコツコツやろうと思います。

HP53131Aを使ってみる

  • 2016/06/23 08:19
  • カテゴリー:make:

 さて,HP53131Aの続きです。

 53131Aには高精度オプションが用意されていて,これを使うと内蔵発振器の精度を10E-9まで高める事が出来ます。

 OCXOになっているのは当然のことなのですが,このOCXOは電圧制御で周波数を動かす事が出来るもので,その制御電圧はDAコンバータでカウンタ本体から生成されます。

 どうも,正確な10MHzを入れて校正スイッチを入れると,OCXOを調整して10MHzになるようにしてくれるようです。電子校正と取説に書かれているのはこれの事のようです。確かにこれは便利ですね。

 しかし,このDAコンバータがなかなか高価で入手が難しいらしく,自作する場合の最大のネックがこれなんだそうです。高精度なOCXOの入手がそんなに難しくないというのが,今どきの話だなあと思います。

 OCXOにしてもTCXOにしても,どのみち校正が必要なものである以上は,調整方法に外側からアクセス出来ないといけません。電子校正はその手段の1つではありますが,それが難しいなら,手動で合わせる事になります。

 幸い,私が持っているOCXOの1つは,なかなか高精度な実力を持っている上に,電源電圧は5V,電圧制御は出来ないですが,トリマで微調整が出来ます。しかも出力は5Vの矩形波です。

 これを内蔵しようかと思ったわけですが,やっぱり校正が面倒だという理由で,外に置くことにしました。電源だけは53131Aからもらうことにし,24時間通電をすることとしますが,クロックは外部クロック入力に突っ込みます。

 そしてGPSの8MHzで校正をかけます。丸2日微調整を繰り返しましたが,3日後以降は9桁目が±1しかずれなくなりました。なかなかいいです。

 ただ,やっぱりGPSですから,短期的な揺らぎが結構あるのがわかります。これを使って基準クロックを調整出来ても,うまくいって10E-8くらいでしょうから,9桁は全然信用出来ないんですけどね。

 ところで,なんでこんなことをやっているかという話に戻るのですが,TCXOで作った時計が,予想よりも狂わないのが不思議で,ちゃんと測定しないとなあと思った事が理由です。

 TCXOって、1ppmくらいの精度です。1ppmといえば10E-6ですが,これは100万秒に1秒ずれる計算になります。100万秒と言えばすごい数字ですが,一日が86400秒だと考えると,わずか11日で1秒も狂うんです。これは時計としては今ひとつです。

 ですが,実査に作って見たものは,11日どころか,半年くらいでようやく1秒狂うかどうか,という感じなのです。計算間違いか,私の勘違いか・・・

 測定すれば一発でわかると思いきや,10E-6程度の周波数カウンタでは意味がありません。それで,10E-9くらいの精度は最低必要という話になっています。

 そこでGPSです。GPSはそのままでも1秒ごとに10nsくらいのゆらぎであり,これは10E-8くらいの精度を持っていることになります。

 この周波数を基準にして,時計のTCXOをざっくり測定すると,32.768kHzは32.7680020kHzとなりました。精度は6.1E-8となるわけで,1秒ずれるのにざっと190日かかる計算となります。うん,半年くらいで1秒という現実に,概ねあっていますね。

 とまあ,自分がここまで高精度な時間軸を本当に必要とするとは夢にも思わなかったのですが,時計というのは小さな誤差でも積み重なって大きな狂いを膿みますので,やはりこのくらいの精度が必要なんでしょうね。

 しかも,一桁改善した時の効果が大きくて,3年に1秒のズレを一桁改善すると,30年に1秒しか狂わなくなります。当たり前の事ですが,人間の一生なんて本当に短く,我々は長い長い時間の流れを,ほんの一瞬だけ生きているんだなあと思いました。

 ここらでちょっとまとめてみます。1秒ずれるのにかかる時間と,精度の関係です。

1E-5 0.003年(1日)
1E-6 0.03年(11日) 1ppm
1E-7 0.3年(3.6ヶ月)
1E-8 3年
1E-9 30年 1ppb
1E-10 300年
1E-11 3000年
1E-12 3万年
1E-13 30万年
1E-14 300万年
1E-15 3000万年

 ちなみに,普通の水晶発振子が1E-5くらい,TCXOで1E-6程度,OCXOだと1E-7から1E-8と言われています。また地球の自転周期が1E-8,公転周期が1E-10だそうです。

 そして,ルビジウム原子時計が10E-13,セシウム原子時計が10E-14くらい,そして一次標準器という一番精度の高いセシウム原子時計で10E-15くらいという話です。さらに,光格子時計という最新のものだと,なんとまあ10E-18まで見えているそうで,こうなると300億年に1秒のズレになります。さすがにこれくらいになると,もう非現実な世界になってきます。

 なにやら,こういう高精度な時間標準のために,底なしの戦いに身を投じることを,高精度病というらしいのですが,残念ながら私は原子時計に手を出していないので,罹患していないと断言出来ます。

 でも,せっかくの53131Aを意味のある測定器にするためにも,やはり10E-11くらいの精度は,手に入れたいものです。


 さて,話を戻すと,TCXOの時計を10E-9レベルの基準クロックで測定してみました。

 源発の26MHzは26.0000020MHzでした。CLK0からの出力は32.7680020kHzでした。精度を計算すると,源発は26MHzに対し-7.69E-8,CLK0は32.768kHzに対し-6.10E-8です。

 これは,それぞれざっくり150日で1秒のズレと,190日で1秒のズレということになります。

 TCXOのい時計は,2ヶ月動作させて0.3秒くらいのズレだったので,おおよそこの測定結果とあっています。

 しかし,源発のずれと32.768kHzのズレは一致していないといけないはずで,そうなっていないというのは,やはり基準クロックの精度が低く,そのせいでそれぞれのクロックを正しく測定出来ていないんだろうと思います。

 もう一桁,さらにもう一桁精度が上がると,もう少し測定結果が揃ってくるんじゃないかと思います。

 そうなってくると,高精度の周波数基準が欲しくなってきますね。せっかく桁数の多い周波数カウンタを手に入れても,ウソの表示が出ているだけというのは寂しい物です。

 でも原子時計は個人では持ちたくないし・・・GPSDOを作ってみましょうか。


ページ移動

ユーティリティ

2020年05月

- - - - - 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