マイクロコントローラ リアルタイムクロック(RTC)の内部:設計、精度、セキュリティ
マイクロコントローラ タイマーシリーズ第3回:リアルタイムクロック(RTC)の内部
今回はマイクロコントローラベースのリアルタイムクロック(RTC)の核心に迫ります。前回はタイマーの基礎とパルス幅変調を扱いました。この記事では、RTCがいかに正確な1秒間隔を維持し、時刻と日付を管理し、ドリフトを補償し、改ざんから保護するかを説明します。
RTCの役割
RTCは、安定した1秒ティックを生成し、連続カウントを維持する専用ハードウェアです。シンプルなタイミング図は、ティックジェネレータ、秒カウンタを読み取るソフトウェアルーチン、3秒後に発火するアラームを示します。主要な要件は精度と連続動作です。

図1. 基本的なRTCタイミング図
典型的なハードウェア機能
最新のマイクロコントローラRTCには通常以下が含まれます:
- 内部32,768 Hz発振器(多くの場合クリスタルまたはTCXOオプション付き)
- 高精度リファレンスを提供する外部クロック入力
- ソースを選択するマルチプレクサ、続いて32,768(2¹⁵)で分周するプリスケーラーで1 Hzティックを生成
- 32ビット(以上)秒カウンタ、および分、時、日、月、年のオプションカウンタ
- 1 Hz矩形波出力ピン
- アラーム、秒ティック、その他イベント用割り込みピン
- 専用バックアップ電源ピン(通常コインセル電池)で、チップの他部分がパワーダウンしてもクロックを動作継続

図2. 一般的なRTCハードウェア機能
精度と周波数補償
RTCの心臓部は32,768 Hzクリスタルです。よく設計された発振器では、クリスタル自体が主な誤差源です。外部TCXOはサブppm安定性を提供できますが、内部発振器も補償により同等の性能を達成可能です。
典型的な誤差源には:
- クリスタルと周辺回路の初期許容差
- 予測可能な二次曲線に従う温度ドリフト
- 経年変化、通常年間数ppmのみ
以下のグラフはテキサス・インスツルメンツ提供で、温度と初期誤差の組み合わせ、慎重なキャリブレーションで総誤差を黄色帯域(ボードレベル測定後に達成可能な目標)に収められる様子を示しています。

図3. 誤差 vs 温度(テキサス・インスツルメンツ)
1 ppm精度で1年間では、クロックは約30秒ずれます—ほとんどの趣味プロジェクトよりはるかに優れていますが、ミッションクリティカルシステムでは依然として考慮すべきです。
タイミング誤差の補償
ハードウェアのシンプルさを犠牲にせず、小さなドリフトを補正する2つの一般的な戦略があります:
調整可能なプリスケーラー。 RTCがプログラマブルなプリスケーラーを公開している場合、ソフトウェアは数秒ごとにモジュラスを調整できます。例えば、0.00010秒速く進むクロックでは、4秒ごとにプリスケーラーを32,768から32,781に変更し、不足分0.00010秒を毎回加算します。

図4. ドリフト対策のためのプリスケーラー調整
利点:きめ細かな補正と最小限のコード。欠点:調整可能なプリスケーラーと追加レジスタが必要。
ソフトウェア補正。 ハードウェアにプログラマブルなプリスケーラーがない場合、ファームウェアは秒カウンタの累積誤差を追跡し、蓄積誤差が1秒に達したらティックを加減算します。調整はサイクルごとに1回しか見えないため、急激に感じられることがあります。

図5. ソフトウェアのみのタイミング補正
利点:あらゆるRTCで動作。欠点:ティックレートに顕著なジャンプが生じる。
セキュリティ考慮事項
時間が請求、使用制限、クリティカルなシーケンシングに関わるアプリケーションでは、RTCを改ざんから保護することが不可欠です。多くのマイクロコントローラは以下を提供します:
- ソフトウェアで永続的にロック可能な書き込み保護レジスタ
- 時間変更にハードウェアリセットを要求(完全リセットでロック解除)
- 物理的改ざんを検知するエンクロージャレベルの侵入検知
例えば、この記事で使用しているMCUにはロックビットがあり、一度設定するとチップリセットまでクリアできず、不正コードによるクロック変更を防止します。
時刻と日付の管理
一部のRTCは完全な時刻とカレンダーカウンタを統合しています。ハードウェアにこれらがない場合、ファームウェアは標準アルゴリズムで32ビット秒カウンタから日付を導出できます。C標準ライブラリのtime.hは、エポック(通常1970年1月1日)からの秒数を返す関数を期待します。RTCのカウンタを読み取るシンプルなget_time()ラッパーがライブラリに供給され、ライブラリが閏年、夏時間、フォーマットを処理します。
32ビット秒カウンタの限界
32ビットカウンタは2³²秒(約136年以上)でオーバーフローします。しかし、エポックが1970年開始の場合、カウンタは2038年にロールオーバーします(Y2038問題)。Cライブラリに依存するシステムでは、カウンタが2³¹-1に達すると未定義動作を起こす可能性があります。
NASAのディープインパクトミッションは、0.1秒単位で時間を追跡する32ビットタイマーが2013年にロールオーバーし、制御コマンドが破損した可能性があるとして通信を失いました。
「正確な原因は不明だが、分析によりディープインパクトの姿勢制御喪失につながった可能性のあるコンピュータータイムタグの潜在的問題が明らかになった。」
— NASAニュースリリース、2013年
設計者は、システムの予想寿命を十分に超えるカウンタを使用するか、ファームウェアでロールオーバー処理を実装すべきです。
次のステップ
このシリーズの最終記事では、ソフトウェアハング時でもマイクロコントローラを生かすセーフティネット、ウォッチドッグタイマーを扱います。
産業技術
- OPC Unified Architectureでリアルタイム企業相互運用性を実現
- コンデンサの充放電:RC回路のハンズオン実験
- RCおよびRL回路の時定数計算をマスターする
- リアクティブDC回路における電圧と電流の計算
- 産業成長の解き放ち:IoTが新たな産業革命をどう推進するか
- 作業設備をアップグレードすべきタイミング:賢明なビジネス判断
- デジタルトランスフォーメーションを加速する7つの主要ドライバー
- 高性能加工(HPM)を受け入れよう:速度、精度、ROIを飛躍させる
- ロボットが3D環境変化をリアルタイム検知しARグラスで兵士に警告、ヒューマン・ロボットチームで状況認識強化
- 高度航空機センサー:リアルタイム着氷検知と融解率監視
- クラウド管理を戦略的ITプラクティスへ変革する