ちょっとTea Time!? 水晶発振器の絶対値をあわせたい!(後編) 2021.6.21
GNSSをつかって水晶発振器の校正ができることをブレッドボードで確認しました。
でも、このままブレッドボードで使用するわけにはいきません。ちゃんと、基板に実装して
使えるようにしておいて、ドキュメントも残しておかないと、いままで色々と検討したものが
忘れ去られて、結局はゴミになってしまいます。そうやってゴミと化したものは数知れず.
でも、できることが分かったら、そのとたんに興味を失ってしまって、気が移っちゃうんですよね〜.
ここは、ちょっと心を入れ替えて、頑張って仕上げましょう(笑。
すこし、手を加えます
基板に実装するにあたり、すこし手を加えることにしました。
1)GNSS基板のバッファーの入れ替え
GNSS基板のロジックバッファーは74HC04がつかってあります。74HCシリーズは消費電力も少なくていいのですが、
これを3.3Vで使っているので、すこし速度的に不満があります。といっても、別に問題になることはないのですが、気分的に
もっと早い素子に置き換えたいです。それと、74HCシリーズの入力電圧は電源電圧を超えることができません。そのため、
5V動作ロジックの素子と接続するには、レベル変換が必要です。
ということで、手持ちにちょうど74LVC04のSSOPパッケージがあったので、それに乗せ換えることにしました。
これはメモリーバッファーにつかっている部品の中にありました。74LVC04は3.3Vで動作させた場合でも、5Vの電圧入力を許容できます。
そして、74ロジックの中ではかなり早い部類にはいります。
取り替えるICの回りはマスキングテープで養生し、ICの足にたんまり半田を盛ります。
交互に半田を溶かしている内に、自然とICが動いて取れてくれます。
取れたあとは、半田吸い取り線をつかって余分な半田を取り除きます。
半田のフラクスで基板がベタベタになっているので、
一度綿棒とアルコールで洗浄しておきましょう。
乗せ換え完了です。LC04の表示が見えます。
2)回路の見直し
主な変更は下記の通り
・USB-RS232モジュール追加
GNSS基板は本来の使い方もできるように、USB-RS232モジュールを搭載してPCと接続できるようにしました。そうなると、PICとPC間の通信もできるようにしたいので、
切り替え用のロジックも追加しておいて、PCとGNSS間あるいはPCとPIC間のどちらでも通信できるようにしました。
PICとPC間の通信ができるようにしておけば、周波数のデータ等を転送することができるので安定性などの評価がより詳細にできるでしょう。
・温度センサの追加
水晶発振器を使う上での誤差の最大要因は温度変化です。一応恒温槽付にはなっていますが、それでも環境温度が誤差要因になります。
ということで、恒温槽ならびに環境温度が両方測定できようにしておきました。うまくいけば、これらの温度計の値をつかって、周波数の安定化時間を短くすることができるかもしれません。
・PICの変更
いままでPIC18F26K22をつかっていましたが内蔵のADCが10ビットです。そのため温度計を接続しても、測定分解能は0.5℃程度です。これではすこし寂しいので12ビットADCを搭載している
PIC18F25K80に交換です(これも秋月で売っています)。
ただしPIC18F25K80は28PinのPICの中ではすこしピンの機能が異なっているので注意が必要です。
たとええばI/O端子のA4がVCAPとなっていてコンデンサを接続するようになっている。また、TIMER1の入力端子が他のPICはI/OのC0だが、25K80ではI/O端子のA5である・・・等等。
あとは細かいところもすこし変更しました。
基板に実装するときの回路図です。
microUSBで接続するRS232モジュールです。
力が加わるとUSBコネクタがもげる場合もあるので、
リード線で縛っておきます。
温度センサ(MCP9700)の1個を水晶発振器の恒温槽のケースに放熱テープで貼り付けます。その上から銅箔テープで固定です。
これで恒温槽の外壁の温度を測定します。
もう1個の温度センサは基板の端に配置です。これで環境温度を測定します。
基板完成!
配線もさほど多くないので、わりと短時間で完成しました。手早く作るコツは、最初に回路図をきちんと書いておくことです。
そうすれば、一筆書きするための配線ルートが見えてくるので、半田付けの回数が減ります。
それと、基板を常に裏返した状態で配線できるようにICのピン番号を書いたシールを貼っておきます。こうすれば、いちいち
基板を裏返して素子番号を確かめる必要がありませんし、ピンの位置をいちいち端から数える必要もありません。間違いも減りますし、
作業効率がグッとあがります。
よくいわれるように「段取り8分」ということですね。
こんな形でWIDE基板に実装が終わりました。
裏側の配線です。あまり心がこもっていないなあ〜。
ピン番号シールをはっておけば作業効は格段にあがります。黄色になっているのは、耐熱絶縁テープを
貼っているためです。そうしないと半田の熱で紙が焦げてしまいます。
あああ、ソフトが・・・・・
さてさて、ここからが本番です。ソフトが完成しないと、ゴミになってしまいます。
でも、ちょっと疲れました・・・・。すこし気力を満たしてから作業しましょう。
#そういえば、週末にはHDMI基板等が納品される予定なので、それまでに完成しておかないと、忘れ去られるだろうな・・・・
ためしに・・ 2021.6.22
予備の冷蔵庫に入れて冷やしてみました。環境温度が下がると、どのくらい周波数が変わるのかのテストです。
冷蔵庫に入れてスイッチONです。
最初に適当なVCO電圧で固定しておいて、冷蔵庫のスイッチをONです。冷えるのに時間がかかりますが、
そのほうが平衡状態を保てるのでいいでしょう。
結果は・・・・周波数変わらずです。こりゃ、温度を計る意味がなかったかな?
ちなみに、周波数は10秒でのカウント値なので、0.1Hz以下の誤差はわかりません。
温度計はMCP9700Aなので、結構誤差があるでしょう。
水晶発振器の 恒温槽の外壁温度 (℃) |
環境温度 (℃) |
発振周波数 (Hz) |
46.35 | 31.88 | 10000000.2 |
43.04 | 27.47 | 変化なし |
38.38 | 21.59 | 変化なし |
33.11 | 16.32 | 変化なし |
31.88 | 12.76 | 変化なし |
29.80 | 11.66 | 変化なし |
30.66 | 10.19 | 変化なし |
恒温槽の外壁温度が46℃くらいになるということは、
内部の温度は50℃あたりで均一になるようにしているのでしょうね。
ほぼ完成!2021.6.25
とりいそぎ、あとで放置しても大丈夫な程度にはソフトを仕上げました。
これで、うちの周波数標準の出来上がりです。
とりあえず完成しました。
課題と対策
今回の回路でも課題がみえてきました。周波数の積算時間を1秒、10秒、100秒に変えられるようにしているのですが、
いづれにおいても、たまに1カウントのプラス誤差がでるようです。回路上は誤差のプラスカウントを検出するようにはしていますが、
あくまでも原理的な話であり、もとの周波数10MHzの信号エッジを完全に識別するのはむずかしかったようです。すなわち、
クロックのエッジと、ゲートのエッジがほぼ重なるような状態であれば、どちらに転ぶか分からないということです。
そりゃ、10MHzだとパルス幅は50nsしかありませんからね、数nsの差であれば十分に分離できるでしょうが、1ns以下になれば
怪しいものです。
そこで、最終的には1プラス誤差をなくすために、積算時間を2秒、20秒、200秒と倍にしました。そして積算したあとで、
値を1/2にします。そうすれば1プラス誤差は消えてしまいます。これで、ほぼ周波数の値的にはジャスト10MHzから動かなくなりました。
あとは、早くケースにいれるかなんとかしないとですね。
電源供給はクリップでおこなっていますが、誤って逆接しようものなら今までの苦労が飛んでいってしまいますからね。
なぜだろう?
安定して動作している発振器ですが、基板を縦にしたり横にしたりすると周波数ば微妙に変化するようです。
考えられる原因は、恒温槽内部の対流が変化することで水晶発振子の温度が変わり周波数が変わったのかもしれません。
あるいは、水晶は機械式振動子ですから重力の影響が変化したのかもしれません。
時間あるときにネットで色々と調べてみましょう。
というか、こういったものって普通は固定してつかうものなんでしょうね。
こんな情報いただきました。 2021.6.26
水晶発振器の向きで周波数が変わったのはなぜかといことですが、重力方向に対し水晶片の振動方向 |
やはり重力の影響でしたか。変化といっても10MHzに対して1/100Hzのオーダでしたが、あれ?と思いました。
HPで勉強不足を露呈してしまいましたね。
エージング中? 2021.6.29
完成してから、づっと電源を入れています。周波数カウントは10 000 000.00 Hz
で落ち着いていますが、たまに10 000 000.01 Hzと
なっていますが、GNSSによる1PPSに基づいてVCOの制御をかけているので、しばらくすると10
000 000.00 Hzに戻ります。
周波数自体は安定していますが、3日ほど通電して分かったことは、VCOの電圧が最初に電源を投入したときから約70mV程度低下
しています。すなわち、VCOを何も調整しなかったら、周波数は約0.26Hz増えていることになります。この誤差の発生は、
おそらく20年近く通電していなかった発振器の慣らし運転中の変化とみています。したがって、本調子になるには、まだまだ
通電してやらねばならないでしょう。
誤差修正の勘違い 2021.7.2
計測して周波数カウントをもとにVCOの値を修正するのですが、単純に
f > 10000000 ならば VCO低減
f = 10000000 ならば VCO変化なし
f < 10000000 ならば VCO増加
というようにしていましたが、大きな勘違いをしていました。ディジタルですのでカウント値は基本的には切り捨てです。
そのため、たとえカウント値f=10000000ということは、fは10000000以上で10000001未満の範囲にあります。
片やf=9999999であった場合にはfは9999999以上で10000000未満ということです。すなわちカウント値が
10000000であっても9999999であっても、同じ量の誤差を抱えていることになります。そのため、
制御の判定は
f > 10000000 ならば VCO低減
f = 10000000 ならば VCO変化なし
f < 9999999 ならば VCO増加
というようにしなければなりません。基本的なことを間違えていました。
まあ、気分的には10000000となっているほうが9999999となっているより誤差が小さいように見えるのですけれどね。
制御ソフトを見直して0.001Hzオーダでフィードバックをかけるようにしました。
このとき制御ループは2000秒に1回です。ここまで
最終的な実力は・・・・ 2021.7.3
発振周波数の偏差修正の分解能を0.001Hzまであげましたが、結局のところそこまで安定するのは至難のようです。
恒温槽に扇風機の風があたったり、ちょと動かしたりすると微妙に変化します。散発的に観測していますが、
安定した実力値としてはおよそ±0.015Hz以内といったところです。それでも10MHzに対しては1.5x10-9ですから
当初の目標の10-8はクリアできました。
次は、目的である8桁の周波数カウンタをつくりましょう!
まあ、いつになるやら・・・ですが。
とりあえず 2021.7.27
基板のままだと、そのままジャンクになる可能性があるので箱に入れることにしました。
箱といってもアクリルを適当に切っただけのものです。 安くかったアクリル端材を切ってつかいます。
もともと、別用途に作った箱でしたが、流用です。使わないと勿体ないですからね。
必要なコネクタもつけました。
これで水晶発振器に風もあたらないでしょうから、さらに安定性がますはずです。
とりあえず、これでしばらく通電してみましょう。
常時通電して動かしています。 中にいつでもアクセスできるように上蓋は養生テープで押さえています。
さて、次は周波数カウンタにかかりましょう。
もともとも周波数カウンタを作るために、この発振器をつくったのですから、
これからが本題です。
(おしまい)