組み込みシステム、特にリアルタイム制御を伴う場合は MCU に搭載しているタイマを利用して時間の管理を行います。
◀ この記事の前に: メインループ / loop()
▶ この記事の次に: 定時タイマ割り込み
タイマ割り込みの概要
組み込みシステムは外部と直接関係を持つため、外部の状況を早く捉えたり、周辺回路が要求するタイミングに合わせたりする必要があります。それを実現するために時間(タイミング)を重視します。その時間を正確に管理するための機能がタイマです。
MCU には多くの場合、タイマを搭載しています。MCU内部の CPU はプログラムを逐次実行しています。プログラムの実行中に必要な時刻で処理を行う必要があります。そのときに使用する機能がタイマ割り込みです。タイマ割り込みはあらかじめ決めておいた時刻になると CPU に信号を発します。CPU はその信号を受けると逐次実行していたプログラムを一旦停止して、優先的にその信号に合わせた処理を実行します。その処理がタイマ割り込み処理です。処理が終了すると元々実行していた処理を再開します。
タイマの実際の動作は、カウンタにあらかじめ設定した値から一定の時間毎に1づつ減じて( カウントダウン )0になったときに割り込みを発生する場合と、カウンタに0を設定して一定の時間毎に1づつ増して( カウントアップ )あらかじめ設定した値になった場合に割り込みを発生する場合があります。この「一定の時間」をタイマのクロックと呼びます。クロックの周波数でタイマの分解能が決まります。クロックは MCU 内の各種の信号から選択します。
ハードウエアタイマとソフトウエアタイマ
MCU はタイマを内蔵している機種と内蔵していない機種があります。タイマを内蔵していない場合は、ソフトウエア( ライブラリ )でタイマを搭載することができます。前者をハードウエアタイマ、後者をソフトウエアタイマと呼びます。Body MCU で使用する Leafony STM32で使用している STM32L4 はタイマを内蔵しています。Body MCU2 は STM32 Leaf と AVR Leaf が使用できますが、 AVR Leaf はタイマを内蔵していませんので、タイマ・ライブラリを追加搭載してソフトウエアタイマとして実現します。
2系統のタイマ割り込み
前項の「あらかじめ設定した値」を一定にすると、定期的に割り込みが発生します。これを定時割り込み方式と呼びます。これ以外に「あらかじめ設定した値」を必要に応じて変化させて、割り込みを発生させる方法があります。これを可変割り込み方式と呼びます。Qumcum Lab. は2系統のタイマを使用しています。ひとつが定時割り込み方式によるもの、もうひとつはサーボモータ用の可変割り込み方式によるものです。
また、入力の変化と連動して入力の変化の幅を計測したり( インプットキャプチャ )たり、複数のタイマを組み合わせて周期的な出力を行う( PWM制御 )場合もあります。MCU に組み込まれているタイマは多くの機能を持っています。
汎用タイマ | サーボモータ制御用専用タイマ | |
---|---|---|
MCU リソース | TIM2 | TIM1 |
タイマ | TItimer | SVtimer |
クロックリソース | システムクロック | システムクロック |
クロック周波数 | 80MHz | 80MHz |
プリスケーラ値 | TM_TI_PRESCALER | TM_SV_PRESCALER |
800 | 800 * | |
タイマクロック | 10μs | 10μs * |
タイマ方式 | 定時割り込み方式 | 可変割り込み方式 |
オーバーフロー値 | TM_TI_INIT_INTERVAL | TM_SV_INIT_INTERVAL |
12,500( 125 ms ) | 50(可変) | |
初期化処理 | setupTMTIInt()() | setupTMSVint() |
タイマ割り込み処理 | intTimer() | intSVtimer() |
F/B連携フラグ | gTIintFlag | (なし) |
フォアグランド処理 | loop() | (なし) |
対象機能 | モニタ入力 | サーボモータの制御 |
Motion sequencer | ||
BLE 受信 |
*: サーボモータ制御はサーボモータの角度の精度とタイマクロックが直接関係します。サンプルプログラムでは、サーボモータの角度の精度は約 0.8 度です。この値はそのまま角速度の分解能になります。角加速度を考慮した場合はさらに高い精度が求められます。そのため、タイマクロックもさらに高い周波数( 短い周期 )が必要となります。
参考情報
参考になる情報は以下のとおりです。
このホームページ内
- 複数のMCUをつなぐ: このロボットには複数の MCUが搭載されています。その MCU間の接続の概要です。
他のWebサイト
- SN74LVC1G3157 SPDT アナログスイッチ Datasheet