ただの時計にTCXO
- 2015/08/21 08:04
- カテゴリー:make:
夏休みの仕事,第2弾は時計です。
昨年の9月に,aitendoの時計キットを大幅に改造して,大型LED表示の時計にしました。あれも夏休みに始めたことでしたので,ちょうど1年ぶりという事になります。
この時計の誤差は,マイコンに与える12MHzのクロックの精度そのものですので,私はここにトリマコンデンサを付けて,周波数カウンタで調整をして精度追い込んでいました。
水晶の温度変化は実はそんなに大きくないはずで,一度合わせれば問題ないと思っていたのですが,夏と冬で大幅に時計が狂い,3ヶ月もすると1分くらいずれるようになります。これではさすがに悔しいです。
よくよく考えてみると,水晶発振子の温度特性よりもむしろ,トリマコンデンサの温度特性の方がはるかに大きいのではないかと。これと水晶発振子の誤差とが掛け合わされると,そりゃ100ppmくらいずれることもあるでしょう。
この問題を根本的に解決するには,電波時計やGPS時計のように誤差を自動補正する仕組みを入れるか,もっと温度特性の良い発振回路を用意するかのどちらかです。
前者はマイコンを作り替えることになりますし,それだともうこのキットを使った理由はなくなりますので,あまりうれしくありません。後者は12MHzというクロックをどうやって高精度で用意するかが最大の問題です。
手持ちの12.8MHzのTCXOから,12MHzを作ることも考えました。PLLで10MHzを作ることはできていますので,分周比を変えるだけで出来ることは分かっていましたが,これも何だか面倒くさいです。
で,探してみると,あるものですね。大阪の共立電子に12MHzのTCXOがありました。オーディオの原クロック用に用意されたものですが,TCXOでも700円ほどと,そんなに高価ではありません。
このTCXOは,TCXOのくせにちゃんとしたCMOSレベルの出力があるというありがたいもので,電源電圧として3.3Vの電源を入れてやれば,正確な12MHzを吐き出し続けてくれます。精度はざっと2.5ppm。
ということで,3.3VのLDOも一緒に注文してありましたが,夏休み中にちょこちょこと基板にまとめました。
注意点ですが,1ピンはNCとなっているのでオープンにしていたところ,たまたま指でこの端子を触った時に周波数が変動することがわかりました。オープンの時には12.0000004MHzくらいだったのですが,ここをGNDにすると,11.9999998MHzになりました。
まあどっちも大した差ではないし,そもそも周波数カウンタのTCXOも同じくらいの精度しかないので,最終桁など信用出来ないんですが,それでも値が変わることは事実で,オープンにして不安定なのも嫌なので,しっかりGNDに落とす事にしました。
これを時計に組み込みます。
昨年改造した箇所を忘れていて動かなかったりしたのですが,それもちょこっと直して,ちゃんと動くようになりました。ちょっと失敗したのは,TCXOに3.3Vを供給するLDOの電源を,マイコンのVccから取らなかったために,停電時のバックアップ電池からTCXOに電源が供給されず,この間マイコンが完全停止してしまうことです。
これも修正をすれば済んだ話なのですが,時計合わせがものすごく面倒な時計で,せっかく正確に合わせた時計をもう一度止めるのも気が滅入ってしまい,このままにしてあります。
まあ,停電したら停電したと分かる状態になっている方がうれしく,これはこれでいいかなと思います。
それで1週間ほど経過しましたが,少なくとも私が意識出来る程のズレは出ていません。長期的にはズレが溜まっていくでしょうが,この夏の過酷な暑さとエアコン使用時の温度差にもめげずに,期待通りに動きをしてくれています。
TCXOですから,一応ちょっとした計測器に入っているタイムベースと同じレベルのものです。長期的な誤差は蓄積するから仕方がないとしても,温度安定性に加え,絶対精度がすでに調整済みという気楽さもあり,難易度が非常に低い解像でも,高価は絶大という,ちょっと拍子抜けな改造となりました。
成功したかどうかは,もっと長く様子を見ないといけません。引き続き検討していきます。