2020年10月03日

RTC水晶発振子

多くのSTM32マイコンではRTC機能を備えており、VBATにリチウム電池と32.768kHzの水晶発振子を接続することでVCC電源断でも時刻を保持することが容易に実現できます。一方で設計によっては精度20ppm前後の一般的な水晶発振子を使用したにも関わらず、20ppmよりも時刻が経時でずれるといった場合があります。

時刻が経時でずれるといった場合、環境温度や周辺ノイズ、不安定な電源を除くと、多くは水晶発振子の外部負荷容量が適切でないことが原因です。安物の時計で時刻が進む、遅れるということが生じる原因も多くはこれが原因です。安物の時計の場合、水晶発振子の外部負荷容量のコンデンサ自体のばらつきが大きい部品を使用していることも一因です。


水晶発振子をRTCで使用する場合には水晶発振子と外部負荷容量の調整としてコンデンサを回路に入れます。一部のRTC ICでは外部負荷容量のコンデンサを内蔵しているものもありますが、使用する水晶発振子と接続先に合わせて外部負荷容量を調整する必要があります。STM32マイコンの評価ボードとして販売されているNucleoボードでは下記のように負荷容量6pFの水晶発振子X2に対して4.3pFのコンデンサC31,C32が外部負荷容量として接続されています。

STM32_NUCLEO64.jpg



負荷容量と周波数偏差の関係は下記のような反比例のような関係があります。水晶発振子によって適切な負荷容量は異なりますが、下記の例では6pF前後が周波数偏差0付近となり、適切な負荷容量と分かります。

Crystal.jpg

負荷容量と周波数偏差の関係から負荷容量が適切でない場合は周波数偏差がプラスにもマイナスにもずれることを意味します。

例えば、周波数偏差マイナスの場合は1秒間の発振回数が減少することになります。32.768kHzの水晶発振子で32768回カウントして1秒になるはずが、32768回カウントで1秒よりも多く秒数を要するため、経時で時計が遅れることになります。反対に周波数偏差プラスの場合は1秒間の発振回数が増加することになります。32768回カウントして1秒になるはずが、1秒よりも少ない秒数で32768回カウントされるため、経時で時計が進むことになります。

つまり、安い時計で時計が遅れるという場合は外部負荷容量を交換して容量の少ないコンデンサに置き換える必要があります。一方、時計が進む場合は外部負荷容量を容量の大きいコンデンサに置き換える必要があります。

実際に手持ちの時計が1か月で数分遅れるため、12pF程度から8pFに変更したところ、遅れがほぼなくなりました。外部負荷容量は接続する先のマイコンデータシート等から計算で求められますが、構成によっては理論通りにならないこともあります。なお、STM32マイコンの場合はソフトウェア側で周波数偏差を微調整、キャリブレーションすることが可能ですが、ハードウェア側で可能な限り対応した上でソフトウェアで微調整する方が確実です。RTCの水晶発振子は時刻のずれとして明確に影響が出るため、最終的には数台の実物を準備し、個体差を含めて半月や1か月で何秒くらいずれるか負荷容量を数pF単位で調整した方が良さそうです。
posted by Crescent at 00:00| Comment(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする