発振が停止し、システムクロックがなくなると、マイコンは全く動作しません。モーター制御などの産業用アプリケーションでは、重大な事故につながります。そのため、アプリケーションを安全な状態にするために、発振停止をいち早く検知し、事故対応する必要があります。対応策としては、正常に動作しているクロック源に切り替え、マイコンの動作を継続させ、同時に緊急の割り込みを発生させて、各アプリケーションの制御回路を安全に停止させます。
ここではSTマイクロエレクトロクス(以下、ST)の汎用マイコンSTM32ファミリー*1)を例に挙げて説明します。
STM32ファミリーには、外部に振動子を接続する発振回路のHSEと、内蔵発振回路のHSIが搭載されています。
発振停止検知の対象はHSEです。HSEの発振停止が検出されると、システムクロックはHSIに自動的に切り替えられます。これにより、HSEに障害が発生した場合でもアプリケーションソフトウェアは動作を続けます。そして、発振停止のノンマスカブル割り込み(以下、NMI)が発生します。システムクロックの周波数や周波数精度はHSIの仕様に変わりますが、ソフトウェアは動作を続けられるので、NMIを利用して緊急対応用のソフトウェアを走らせることができます。さらに、モーター制御などの重要なアプリケーションを安全な状態にするために、タイマーにブレーク入力を送信することもできます。
読者の中には、「HSIが停止したら、どうするんだ?」と思われる方がいらっしゃると思います。HSIは、シリコン上に作られた抵抗やコンデンサーで構成されるために、外部の振動子に比べると、非常に信頼性が高く、障害が発生することはほとんどありません。そのため、高い信頼性が要求される車載用のマイコンなどでは、HSIをシステムクロックとして使用します。
*1)STM32ファミリー
最も簡単な方式は、クロックを使ってコンデンサーを充電する方法です。コンデンサーには充電用のMOSを付けます。MOSには発振信号をバッファーで受けた発振信号をつなげます。クロックが正常だと、クロックの周期でコンデンサーが充電されるので、コンデンサーの電位は、常にハイレベルに保たれます。
発振回路に障害が発生し、クロックが停止すると、コンデンサーは充電されなくなり、コンデンサーにたまった電荷が放電されます。しかし、自然放電の場合だと、放電に時間がかかって検知が遅くなってしまいます。そこで、放電用の抵抗を付けておきます。すると、抵抗を介してコンデンサーの電荷が放電され、電位が下がります。この電位の低下を検出することにより、クロック停止を検出できます。
同時に、クロック停止割り込みを発生させ、クロックラインを正常に動作する発振回路に切り替え、マイコンは動作を継続します。
この他にも、さまざまな方法がありますが、一般的には企業秘密なので公開されていません。
Copyright © ITmedia, Inc. All Rights Reserved.
記事ランキング