今回は外付けのRTC(リアルタイムクロック)について調査を行なったのでその結果を踏まえて紹介したいと思います。リアルタイムクロックはマイコンやPC等で日付、時刻を機能として使用する場合に利用します。マイコンやPC等のメイン電源が切れている場合にも電池等から電源をRTCに気供給することで日付や時刻を進めて正しい日付や時刻を保持することができます。また、アラーム機能を利用することで予め設定した時刻で信号を出してマイコンの外部割込みイベントを発生させるといった使い方もできます。
STM32マイコンの多くは電池接続用のVBAT端子とRTC機能を備えているため、外付けでRTCを接続しなくとも時刻を保持することができますが、時刻の保持精度を考慮すると外付けの方が有利です。時刻の保持精度が高いと時刻合わせした数か月後や数年後にも時刻の大きな遅れや進みなく利用できることになります。
一般的な水晶発振子の精度は30ppm程度のため、1か月で80秒前後、1年で15分前後のずれが生じる可能性があります。3ppmの場合は1か月で8秒前後、1年で1分半前後のずれが生じる可能性があります。詳細についてはこちらでは述べませんが実際は水晶発振子の仕様が30ppmであっても負荷容量にの影響で更に精度が悪い場合もあります。仕様通りの精度を出すためには水晶発振子内蔵のRTCがお勧めです。水晶発振子内蔵の場合、多くは工場出荷時に調整されており、外付けの水晶発振子に比べて精度が高くなります。環境温度が25℃付近で常に使用する場合は温度補正機能がない場合でもある程度の精度が出ますが、通常、環境温度は昼夜、季節や設置場所で大きく変化します。そのため、精度の高い温度補正機能付きのRTCがお勧めです。環境温度が変化する場合でも精度を高く維持することができます。
入手しやすい外付けRTCを調査、比較してみました。
広く使用され有名なRTCとしてDS1307があります。シングルボードコンピュータ等でもドライバが配布されており、非常に便利ですが静電気に弱く、電池を外している状態では特に破損しやすいRTCです。気づくと時刻が読めない、I2Cデバイスとして動作しないということが多々あります。そのため、DS1307を使用するのであれば、アドレスと主要なレジスタの互換のあるDS3231やM41T00がお勧めです。同じドライバやソフトでそのまま使用することができます。特に実用を考えると温度補正があるDS3231がお勧めです。
ただ、DS3231はコストが高く、ICパッケージが大きいため、小型なデバイスに組み込む場合やコスト削減をする場合はRV-8803-C7がお勧めです。温度補正付で超小型パッケージで350円前後と低コストです。RV-8803-C7の1つ欠点というならば、電源端子が1つのみで電池電源ピンがないため、ダイオードで外部電源と電池の切り替え回路が別途必要となる点です。RTCでは長時間電池を駆動させるため、漏れ電流が無視できません。漏れ電流が数10nA以下の非常に小さなBAS70-05やBAV170Q等の低漏洩ダイオードを使用する必要があります。
実際にRV-8803-C7の評価基板を購入して使ってみました。USBシリアルI2C変換基板を使ってNode-RedからRTCの時刻の読み書きをするフローを実装してみました。アドレスは異なるものの、DS1307や他のRTC同様に簡単に使用することができました。今後、RV-8803-C7を使ったデバイスを開発したいと思います。