最近では、正確さを謳う時計は電波時計が主流になっています。
一方、一昔前は商用電源の周波数から時間情報を取得する時計がありまして、意外と正確に動作していたとの話を聞きます。
そこで、商用電源の周波数はどのくらい正確なのか見てみたくなりました。
測定は商用電源の周波数をPCで観測する方法にしてみました。
周波数を扱うマイコン部とPCの接続はシリアルポートを使用します。
PICは12F629、12F675、12F683のいづれでも構いません。
商用電源のパルスをフォトカプラ経由でマイコンに入力します。
マイコンは50Hz/60Hzの周波数を1Hz(1PPS)に変換するだけのものです。
これらの回路はシリアルポートから電源を取りますので、特に外部電源は必要ありません。
ACトランスは要らなくなったトランス式のACアダプタを改造し、整流回路を外して純粋なトランスだけ使用しています。
その後はPICに50または60パルスが入力されるたびにPCへ1パルスを通知します。
PIC12F629,675,683用ソースとHexファイル
freqconv.zip 4.7Kbytes
Windowsには高分解能パフォーマンスカウンタというものがありまして、これを利用して精度の高い計測を行います。
計測している間はソフトと同じ場所にログファイルを出力します。
ログは下記のように項目をカンマで区切ったCSV形式で出力します。
2017/04/27 13:28:52,8:20:00,+10
1つ目の項目はその時点の日時、2つ目は計測時間、3つ目はその時点の誤差です。
Windows用の計測ソフト
最新 FreqMon101.zip 7.4Kbytes
旧 FreqMon.zip 7.4Kbytes
回路の動きが問題なければ下図のようになると思います。
AC Frequency
商用電源の周波数
Elapsed time
計測時間
1PPS width
1PPS信号の幅
Total Difference
計測開始時からの誤差
重要なのは Total Difference の項目です。
商用電源の周波数は、短期的に見ると多少の誤差があります。
しかし電力会社が周波数を調整していて、長期的に見ると誤差がとても少なくなるようです。
これは、計測を始めたころはTotal Differenceが大きな値になっていますが、数時間たつと小さな値に落ち着いてくることから分かります。
当方の実験では6時間ほど経過すると+50usec未満の誤差で落ち着きました。
1日の誤差が+50usecですと、時計を作った場合は単純計算で54年間に1秒ズレるというかなり精度の高いものになりそうです。
そこで1秒当たりにどれだけカウントアップしているか見てみると、私のPCでは1秒に25,000,000回となっていました。
Webでは2.xGHzや3.xGHzなどのCPUクロックではないかとの推測もあるものの、どうやら上の結果を見ると(少なくとも私の環境では)違いました。
25Mならマザーボードの原発かもしれません。
でも最近のマザーボードは分かりませんが、原発は14.31818MHzだったような記憶もあるので結局は良く分からない状況です。
それはともかく高分解能パフォーマンスカウンタの値は符号あり64bit変数で取得し、これがいつオーバフローするのか計算すると、PCを立ち上げてから約1万年後です。
1秒ごとに25,000,000回もカウントアップされていくのにオーバフローするのが1万年後ですから、どれだけ64bit変数ってデカいのかと(汗