必須のPCB設計のヒント:PCB設計にウォッチドッグタイマーを実装する方法

投稿日 2017/11/1 水曜日
更新日 2020/10/16 金曜日
Boiling kettle

在宅勤務には仕事のメリットがいくつかあります。自分で食事を作ることができ、昼休みに洗濯をすることができ、好きなだけお茶を飲むことができます。私はお茶のために水を沸かすためにストーブトップのケトルを使用しているので、執筆に没頭しているときは、高い音のホイッスルでお湯が沸いたことを知らせてくれるのを頼りにしています。

時々、不注意で蓋をきちんと閉めないことがあります。その結果、ケトルは静かなままで、中の液体の水が急速にガスに変わっていても音を立てません。このシナリオでの私の不注意な行動は、お茶を少なく飲むことを意味するだけですが、組み込みシステムでは、ウォッチドッグタイマー(WDT)の操作方法を知らない場合、その結果ははるかに重大です。タイマーの操作に失敗すると、停止したマイクロコントローラーは停止したままとなり、組み込みシステムがダウンしたままになります。ウォッチドッグタイマーの仕組み、ウォッチドッグタイマー回路の実装方法、そして最初の試みで正しく機能させる方法を見てみましょう。そうすることで、このシナリオを避けることができます。

組み込みシステムがWDTを持っていても回復できなかった理由

ウォッチドッグタイマーは、ハードウェアまたはソフトウェアのウォッチドッグ回路がクラッシュした場合にマイクロコントローラーを再起動するための、電子機器におけるシンプルなフェイルセーフ機能です。STM32ウォッチドッグタイマーは、別の集積回路(IC)として、またはマイクロコントローラー自体に組み込まれた機能として利用可能です。組み込みシステム設計においてWDTを使用しないことは、しばしば許されない過ちです。

ウォッチドッグタイマーの動作方法はシンプルです。設定されたウォッチドッグタイムアウト間隔でカウントダウンするようにプログラムされます。通常の操作では、マイクロコントローラーは定期的にタイマーのカウントダウンタイマーをリフレッシュして、それが期限切れになるのを防ぎます。マイクロコントローラーが応答しない場合、ウォッチドッグタイマーをリフレッシュしません。その結果、ウォッチドッグタイマーが期限切れになると、マイクロコントローラーをリセットするためのパルスまたは信号をトリガーします。このシンプルな機能は、マイクロコントローラーがクラッシュする可能性がある設計ミスや環境要因を補償します。

しかし、WDTが失敗した場合、組み込みシステムが誤った状態から回復する可能性は低いです。これが、ウォッチドッグタイマーがマイクロコントローラーをリセットできない原因を特定することが重要である理由です。最も明白な答えは、ウォッチドッグタイマーチップが故障していることです。しかし、複数のユニットで組み込みシステムが回復できないと繰り返し発生する場合、設計に何か問題がある可能性があります。

実際に、私が設計し展開してきた数百のマイクロコントローラーベースのデバイスの中で、STM32ウォッチドッグタイマーが故障したという事例には一度も遭遇したことがありません。根本的な原因は、しばしば単純に人為的なミスです。

The Community for Creative Electronics

Powerful Free ECAD Software with Online Collaboration

Error on a red screen
WDTが停止したマイクロコントローラを復活させるのに失敗したときに見るもの

WDTが正常に動作しない可能性がある理由

内蔵WDTを使用する組み込みシステムでは、実行中のコードがウォッチドッグタイマーを無効にする可能性があります。これは、設定ビットが意図せずに上書きされた場合です。外部ウォッチドッグタイマーチップは、全く異なる問題に直面します。この場合、ファームウェアエンジニアがプログラムを開発およびデバッグしているときに、外部ウォッチドッグタイマーからのリセット信号を切断できるジャンパーピンが一般的に存在します。しばしばこれらのジャンパーピンは、現場に展開する前に手動で接続する必要があります。接続されていない場合、WDTのリセット信号は切断されたままとなり、マイクロコントローラーをリセットできません。

ウォッチドッグタイマーが機能しない一般的な理由の一つは、コーディングエラーによるものです。WDTタイマーをリフレッシュする関数がプログラムの間違った部分に配置されている場合、それらは本来機能すべき時に動作しません。リアルタイムオペレーティングシステム(RTOS)では、異なる優先順位を持つ複数のタスクがあると、マイクロコントローラのファームウェアが複雑になります。優先度の高いウォッチドッグ回路タスクは、優先度の低いタスクが異常な無限ループにある場合でも実行を続けることがあります。ウォッチドッグタイマー回路のリフレッシュが最優先タスクである場合、マイクロコントローラは正しく機能していないときにリフレッシュされません。

Man programming at computer
ウォッチドッグタイマーが正しくリフレッシュされるようにすることは良い習慣です

WDTが信頼性を持って機能することを確実にする方法

WDTがその役割を果たすことを確実にするには、ファームウェア開発者、システムインストーラー、およびハードウェアウォッチドッグ設計者が関与します。ファームウェア開発者は、内部WDTをオフにするコードオーバーランを避けるためにプログラミングのベストプラクティスを適用するべきです。ファームウェア開発者は、マイクロコントローラのメモリアーキテクチャと、コード内でメモリポインターと割り当てを正しく使用する方法をよく理解していなければなりません。

その他にも、プログラムの構造は、ウォッチドッグタイマーがプログラムの適切な位置でリフレッシュされるように設計されるべきです。これは、プログラムのどこかで無限ループが発生した場合にプログラムがウォッチドッグリセットをトリガーすることを意味します。また、WDTの機能を現場でチェックするテストユーティリティを開発することもできます。これにより、外部ウォッチドッグタイマーとマイクロコントローラーの間の接続されていないジャンパーピンを見逃すリスクも排除されます。

高品質な製造可能な回路基板を構築するために必要なすべてを含む使いやすいPCBレイアウトツールにアクセスする必要がある場合は、CircuitMakerをご覧ください。使いやすいPCB設計ソフトウェアに加えて、すべてのCircuitMakerユーザーはAltium 365プラットフォーム上の個人ワークスペースにアクセスできます。設計データをクラウドにアップロードして保存し、安全なプラットフォームでウェブブラウザを介してプロジェクトを簡単に閲覧できます。

Easy, Powerful, Modern

The world’s most trusted PCB design system.

今日からCircuitMakerを使い始めて、新しいCircuitMaker Pro from Altiumにご期待ください。

 

Altium Designerのアクションをチェックしてください...

強力なPCB設計

関連リソース

ホームに戻る
Thank you, you are now subscribed to updates.
Altium Need Help?