見出し画像

電子工作キット時計の精度を上げたい

いわゆる電子工作のメジャーなRTCはDS1302のようだ。中華キットで搭載されているものが正規品であるかどうかは不明だが、まあコピー品にしろ同等の動作はしている。精度が低いというのはつけている円筒型の水晶の話だ、およそ50ppm程度の偏差は当たり前ということになっている。月差でいえば2分ほどだ、これはなんだか情けない。今時は電波時計やインターネット接続でNTPで同期させる、あるいはGPSに合わせるといったこともありこうした誤差が気になってしまう息苦しい感じもする世の中でもある。正確な運行で名高い日本の鉄道では1分遅れても間に合ったはずと言い切る欧米人がいたりもするのは事実だ。脱線してしまったが、時間と分表示までの時計だとしても時刻合わせは半年程度にしたいというのが本音だ。

今は工場でのトリミングと温度補償とで精度の高い発振モジュールが作られる世の中でもあり電池駆動でセンサー端末をスリーピング制御するために高精度な時計モジュールも出来ていると知人からは聞いている。ともあれ、電子工作のデファクトになってしまっているDS1302にまつわるレガシイな電子キットを改善したいというのがお題目なのである。

餅は、餅やでありRTCを作っているメーカー自体(アナログデバイセズ社)にも、その認識はあるはずで温度補償を行った水晶発振チップ(TCXO)を出されていた。DS32KHZで、名前の通り32.768KHzを発振するRTC用と思われるTCXOだ。オープンハードになっている作例がキットになっているのが中国でのキット事情には多い。実際に大本の設計者の方が公開したのかどうかは不明だが、版権無視で作ってしまうのが大陸の感性だ。そんな大陸にモノ作りを預けてしまったのには我が国にも責任の一旦はあるし、生産だけを教えてきたのが禍いしてか彼らが自発的に作った品物にはとんでもない感性で出来ている物も有るので注意は必要だ。電源配線などはそうした事例だが色別などに規約があるなどとは思わないほうが良い。彼らの国では220-240Vの範疇で動作している機器が多いので、その国で開発された国外向け仕様の機器などは電源のリレー接点の電流容量などもよく見ないと危険である。また脱線してしまった。

DS32KHZというTCXOが見つかったので、適用方法を考えた。幸い、多くのキットはRTCをDIP8ピンのソケットで実装しているので、このTCXOチップを抱いた子亀基板にDS1302を載せてるソケットとキット側にさすリードが伸びる形にしておくことにした。基板はもう安い早いの大陸工場に依頼するのが最近では通例にしているのが趣味の世界でもある。ライブラリの確かさなどには課題もあるが確認しながら使うというスタイルが求められるオープンソースなCADを用いて回路を描き、確認をして基板を発注すると1週間後にはDHLで送られてくる。屋号にしている「くみこみのさと」という名前で発注しても大陸にはひらがなが無いのでローマ字にして「KUMIKOMINOSATO」となる。やがて基板が小箱に入って自宅の方にDHLが配送にくると、こちらの住所あてに「ミノサト クミコ」さんあての荷物が届くといった塩梅になったりもする。そうなるのか・・・。

そうして出来たモジュールはこのような形で、知人のショップ(秋葉原)で、時計キットと共に扱ってもらっている。チップメーカーの謳い文句どうりに書いてしまうと2ppmの精度があるのだという。確かに試作をしてしばらく運転していると時計のずれが気にならなくなった。半年に一回程度で良いような気がする。

2ppmのモジュール

そんなモジュールを作ったのだが、最初はホットプレートで焼いたりして表面実装半田付けをしたり、手付けで半田付けをしたりしていた。手付けをしたときのモノが手抜きをしたのか全部のピンを半田付けせずに、更にDIPのピン配置とは違う結線の図を参照して半田付けをしていたものがあったようだ。本体側の基板にある水晶が動作してしまう形になってしまい動作確認が出来ていたとは言い難かった、恥ずかしい失敗だ。この指摘をしていただいたのは、メーカーで半田付けの品質検査などをされていたという方からのご連絡からだった。以前に時計キットはメルカリで求めていただいた方だった。ご自身で水晶に抱かせるコンデンサを調整して温度補償も含めて苦労して精度を上げるようにされてきたという凄い方だった。メールのやり取りの中でこちらでの検査体制に問題があったこともあり発振精度がめちゃくちゃだというご指摘のお知らせだった。何度かのやり取りでこちらのロットでアース端子の半田付けが出来ておらず発振チップが動作していなかったことが判明した。お詫びの連絡をして、知人に預けていたモジュールも回収して発振周波数の確認も含めて体制を整えようということにした。

2ppmの発振ユニットの精度確認をするには、すくなくとも1ppm程度のTCXOで動作するカウンタが必要になるし、また32768Hzの発振で2ppmというと32768.06Hzから32767.94Hzを計測する必要がある。更に計測誤差も加わる。手持ちの古い周波数カウンタでは外部クロックを設定で与えてもゲートタイム1sではそこまでは測れないのだ。昔でいえばHPの周波数カウンタのようにレシプロカルなカウンタが必要になり周期を高速に測り逆算するという方法だ。購入したDS32KHZ自体も、大陸から購入する限りは販売サイトに正規品と書かれていても怪しさは払拭できないので計測体制を作ることにもした。

とりあえず精度の高いTCXOを入手すること。あとは、マイコンのカウンタ機能を使って対象の32.768KHzを分周した形でゲートタイム相当の時間を高精度のTCXOでカウントすることからの逆算をしてみることにした。いつも仕事やセミナーで使っているSTM社のマイコンだ。いろいろ調べてマイコンの発振源として与えないとそのTCXOをカウントする事が出来ないようで使用する評価基板NUCLEOの半田ブリッジを変更する必要がある。32ビットのカウンターがあるF4クラスのNucleoF303K8が小さくてよかったのだが、オンボードのデバッガの更新でおかしくなり使えなくなってしまった。先日セミナーで使っていたNucleoF446REに移し替えることにした。高精度かどうかは別にして1ppmだというTCXOを秋月電子で購入したところ、実はVTCXOで安定性は1ppmになるというものだったので、こちらの意図とは異なるものだった。確認不足だった。毒食らわば皿までではないが、大陸の部品市場に0.1ppmで周波数調整されたTCXOが売られていたのでこちらを手に入れた。20MHz 0.1ppmという品物だった。

20MHz 0.1ppm 1300円

当初描いたシナリオで試作したのが崩れたので。次の写真中段のNucleoF303K8は現在使えない状態に陥ったが、このような仕上がりにするつもりだった。表示は、PC側のTeraTermに表示する、上段は作ったRTC亀の子基板、下段は入手した20MHzのTCXOである。

当初の予定構成
NucleoF446REに接続してオシロで分周確認しつつの実験となった。

計測対象の32キロヘルツをタイマ1で外部入力から5000カウントしてアウトプットコンペア端子の一つをトグルする事で1/10000にした。3.2ヘルツ程度になったこの信号をまた、タイマー2に入れてそのインプットキャプチャー機能で周期を測定する。これでマイコンのシステムクロックに与えた高精度な20MHzの精度で周期を、測定出来る。このカウント数をクロック周波数で除することで周期になる。その逆数が求める周波数だ。計算順序を直すとクロック周波数をカウント数で除することになる。倍精度フローティング形式にすることで下3桁位まで表示すれば良い。


測定結果はこんな形に

この測定系での計測結果では5ppm程度の誤差だということはわかった。実験用に手配していた70MHzまでの2信号発生できる発振器(大陸製)に周波数カウンタ機能が付いていることが分かり、ちなみに100Sゲートにまで拡大してじっくりとの大陸製の発振器での計測結果では、最初のサンプルは32768.28Hzだった。写真の例では32768.1429Hzと出たものとの差異はある。この測定器にもそれなりのTCXOは、入っているはずなので、この測定器を用いてモジュールがそこそこの精度で発振していることは検証できたとわかった。高精度の確認を経ないと2ppmはカタログスペックは・・・ということにしかなっていないのも確かなのだが、課題としている。計測方法としては確立できた気がする。

いいなと思ったら応援しよう!