メニュー

九州・中国地方密着型!組み込み機器のお悩み、当社が解決します!

組み込み機器 受託開発・生産センター.com
組み込み機器 受託開発・生産センター.com

Produced by株式会社サンエス

設計のポイント

タイマー機能の活用 その3
~ 高精度な時間計測のためのタイマー活用~

分類マイコンファームウェア 設計のポイント

設計のポイント

1.なぜ高精度な時間計測が必要なのか?

以下の項目に対応したい場合、高精度な時間計測が必要です。

●外部イベントのタイムスタンプ

PWMの周期に対してパルス幅を変化させることで、LEDの明るさを調整することができます。

●イベント間の間隔測定

複数のイベントが連続して発生した際の、それぞれのイベント間の時間差を測定したい場合(例:パルスカウント、周期測定)

●処理時間のプロファイリング

ある関数やコードブロックの実行にどれくらいの時間がかかっているかを正確に測定し、最適化の指針を得たい場合

●通信プロトコルのタイミング調整

UARTのボーレート調整、SPI/I2Cのクロックタイミング、あるいは独自のビットバン通信など厳密な時間管理が求められる場合

●ソフトウェアデバウンス(※)

スイッチのチャタリングなど、瞬間的なノイズによる誤動作を防ぐため、一定時間信号が安定していることを確認する際に、正確な時間が必要です。

※)ソフトウェアデバウンスとは連続して発生するイベントを一定時間遅延させて、最後のイベント発生から一定時間経過後に一度だけ処理を実行する技術

 

2.タイマーを使った高精度な時間計測の仕組み

多くのマイコンのタイマーモジュールは、時間計測を効率的に行うための機能を備えています。主な手法としては、以下の2つが挙げられます。

1) 入力キャプチャ(Input Capture)機能

入力キャプチャは、特定のGPIOピンに入力される信号のエッジ(立ち上がりまたは立ち下がり)を検出した瞬間のタイマーカウンタの値を自動的に記録する機能です。

【仕組み】

・タイマーカウンタは、設定されたプリスケーラに従ってカウントアップし続けます。

・入力キャプチャが有効になっているGPIOピンに、設定されたエッジ(例: 立ち上がりエッジ)が入力されるとその瞬間のカウンタの値が専用の「キャプチャレジスタ」にコピーされます。

・同時に、入力キャプチャ割り込みが発生し、マイコンにイベントの発生を通知します。

・割り込みハンドラ内でキャプチャレジスタの値を読み取ることで、イベントが発生した正確な時刻(タイマーのカウント値)を知ることができます。

【活用例】

・パルス周期の測定

最初の立ち上がりエッジでカウンタ値をキャプチャし、次の立ち上がりエッジで再度キャプチャします。この2つのキャプチャ値の差が1周期の時間となります。

・パルス幅の測定

立ち上がりエッジでキャプチャし、立ち下がりエッジでキャプチャします。その差がパルス幅です。

・外部イベントのタイムスタンプ

複数のセンサー入力の発生時刻を、共通のタイマーを基準にして高精度に記録します。

・エンコーダ信号の読み取り

回転量や回転速度の測定に利用されます。

 

【メリット】

・高精度

ハードウェアレベルでカウンタ値が記録されるため、マイコンが割り込み処理を開始するまでの遅延の影響を最小限に抑えられます。

・マイコンの負荷が低い

マイコンは割り込みが発生するまで、キャプチャ処理に直接関与する必要がありません。

 

2) ワンショットタイマーとタイムアウト検出

特定の処理が一定時間内に完了するか、あるいは外部からの応答が一定時間内にない場合にタイムアウトを検出する用途で利用されます。

【仕組み】

・タイマーを特定の時間だけカウントするように設定し、カウントが完了したら割り込みを発生させる、あるいは特定のフラグをセットします。

・イベントが発生した際にタイマーをスタートさせ、期待される時間内に次のイベントが発生しない場合、タイマー割り込みによってタイムアウトを検出します。

【活用例】

・通信のタイムアウト監視:シリアル通信などでデータ送信後、一定時間内に受信応答がない場合にエラーを検出します。

・ソフトウェアデバウンス: ボタンが押されたことを検出後、タイマーをスタートさせ、例えば50ms間チャタリングが発生せず。信号が安定していれば、ボタン押下を確定します。

【メリット】

・確実な時間監視:期待される応答や処理が一定時間内に完了しない場合に、確実に検出できます。

・リソースの有効活用:タイムアウト待ちの間、マイコンは他の処理を実行できます。

 

3.設計のポイント

高精度な時間計測機能を活用する際の具体的な考慮点です。
1)タイマーの分解能と精度
●クロック周波数
タイマーのカウント速度は、その元となるクロック周波数とプリスケーラの設定に依存します。例えば、1MHzのクロックであれば1μs単位でカウントできます。必要な計測分解能に応じて適切なクロック周波数を持つタイマーを選択し、プリスケーラを設定します。
●ビット幅
 タイマーのビット幅(8bit, 16bit, 32bitなど)によって、カウントできる最大値(計測できる最大時間)が決まります。計測したい時間のスケールに合うタイマーを選びます。
2)オーバーフロー対策
タイマーカウンタは、最大値に達すると0に戻る(オーバーフローする)特性があります。長時間の計測を行う場合やカウンタ値の差分を取る際に、オーバーフローを考慮する必要があります。オーバーフロー割り込みを利用し、オーバーフロー回数をカウントすることで、より長い時間を計測できます。
例: 16bitタイマー(1MHzのクロック、1クロックで1カウント、最大65535カウント)で1秒以上の計測を行う場合、タイマーが約65msごとにオーバーフローするたびにカウンター変数をインクリメントし、キャプチャ値を読み取った際にこのカウンター変数も加味して最終的な時間を算出します。
3)割り込み遅延の考慮
入力キャプチャはハードウェアで行われるため、割り込み遅延の影響は少ないですが、キャプチャ値を読み取り計算する部分ではソフトウェア的な遅延が発生します。非常に厳密なタイミングが求められる場合は、割り込み処理の優先度を高く設定し、割り込みハンドラ内の処理を最小限に抑えるなどの工夫が必要です。
4)同期と非同期の理解
入力キャプチャは、外部信号とタイマーのカウントを同期させるための重要な機能です。これにより、マイコンがポーリングするよりもはるかに高精度な計測が可能になります。非同期イベント(いつ発生するか分からないイベント)の計測には、この入力キャプチャ機能が非常に有効です。
5)レジスタ操作の原子性
複数のバイトからなるタイマーのカウンタ値やキャプチャ値を読み取る際、割り込みなどによって値が途中で更新されてしまう「読み取り途中の更新」を防ぐために、割り込みを一時的に無効にする またはレジスタ操作の原子性を保証するマイコンの機能(例:ロック機能)を利用することが重要です。

設計のポイント 一覧

マイコンファームウェア 設計のポイント

お気軽にご相談ください

組み込み機器 受託開発・生産センター.comを運営する株式会社サンエスは、九州・中国地方に特化したサービス提供を行っており、ものづくりのパートナーとして選ばれています。回路・基板設計~メカ設計までの一貫対応と、部品実装や組立まで任せられるODM企業として、皆様の困難な課題を解決します。

[受付時間] 9:00〜17:00
土日祝 定休
084-963-1222
営業統括部 宛
技術資料のダウンロードはこちらから 技術資料ダウンロ―ド メールフォームでのお問い合わせはこちらから ご相談お問合せ