Renesas Synergy™

FAQ 1006545 : マイコンに内蔵されているタイマ・カウントの動作について知りたい。

タイマ・カウンタについての基礎的な内容を説明します。

(1)はじめに

最近の殆どのマイコンにはタイマ・カウンタが内蔵されています。
中にはインバータ制御用のように特定の目的専用のものもありますが、ここでは一般的なタイマ・カウンタについて説明します。
タイマ・カウンタは"タイマ"と"(イベント)カウンタ"の2つの機能を結合した名前となっています。
基本的にタイマとカウンタを実現するための回路は同じもので、入力された信号をカウント(計数)するものです。
タイマとカウンタの違いは簡単には

カウンタ:任意の間隔で入力された信号(イベント)の数をカウントし、個数を示す



タイマ:一定間隔で入力される信号をカウントすることで、時間の経過を示す



と表せます。
つまり、使用目的と入力される信号の違いとも言えます。
殆どの場合に、入力クロックとして内部のシステム・クロックを分周したものと外部からの信号の中から選択できるようになっていて、タイマとしてもカウンタとしても使えるようになっています。

(2)カウント動作による違い

タイマ・カウンタはカウント動作で大きく分けると、
・単純にカウント動作だけを行うフリーラン・カウンタ
(カウント動作を開始したら、カウント動作だけを行います。場合によってはカウント動作を止めることができないものもあります。)

・途中で停止したり、カウント周期を任意に設定してカウントできるカウンタ
(ある値までカウントしたら信号を出したり、カウント値をクリアしたり、止めたりすることができます。)

があります。

フリーラン・カウンタは回路が簡単なので一部の安価なマイコンで採用されています。
また、時計用タイマは止めることは可能ですが、通常の動作では停止する必要がない(止めると時間が狂ってしまいます)ので、動作的にはフリーラン・カウントとなります。
これに対して、マイコンに通常搭載されているタイマは途中で停止したり、任意のタイミングでクリアしたりと言った動作が可能なので、いろんな便利な使い方が考えられます。

(3)カウントへの付加機能

タイマ・カウンタでカウント動作するだけでは、使う場面が限られてきます。
タイマ・カウンタの機能を強化するためにタイマ・カウンタにはひとつまたは2つのレジスタが付加されています。
付加されたレジスタは主に

・コンペア・レジスタ
・キャプチャ・レジスタ

です。
これらは別のレジスタとして独立していることもありますが、通常は一つのレジスタで両方の機能を切り替えて使用することができるようになっています。

コンペア・レジスタはタイマ・カウンタのカウント値と比較するための値を設定するレジスタです。
このレジスタを使用することで、設定した値とカウント値が一致したら

・割り込みを発生する
・出力を変化させる
・タイマをクリアする

と言った動作を行います。
この動作を利用すると、タイマ・カウンタのクロックの精度で任意の時間間隔で割り込みを発生させたり、信号を変化させることが可能になります。



また、キャプチャ・レジスタは外部から入力された信号により、そのときのタイマ・カウンタのカウント値を取り込むために使用します。
この動作はハードウエアにより実現されるので、ソフトウエアによりタイマ・カウンタの値を読むよりも精度の高い値が得られます。



(ソフトウエアにより同じような動作をさせた場合、外部から入力された信号で割り込みを発生し、割り込み処理プログラムの中でタイマ・カウンタの値を読み出すことになります。 割り込みが発生して、実際に割り込みが受け付けられる時間は一般に変動します。 さらに割り込み処理プログラムの中でタイマ・カウンタの値を読み出すまでに時間が必要です。 そのため、外部から信号が入力されたタイミングの値からずれた値になることがあります。)

(4)タイマ・カウンタの用途(動作)

(a)タイマ・カウンタの主な用途(動作)には測定機能と出力機能があり、主な用途(動作)として以下に挙げるものがあります。

①測定機能
・外部イベント・カウント
・パルス幅測定、時間間隔測定

②出力機能
・インターバル・タイマ
・方形波出力
・パルス出力
・PWM出力
・ワンショットパルス出力
・キャリア・ゼネレーション


(b)個々の機能の概要

・外部イベント・カウント
外部からの信号(イベント)の数をカウントするする動作で、最も基本的な動作のひとつです。
信号が何個来たかをカウントしていて、プログラムでカウント値を定期的に読むような使いかたが考えられます。
例えば、下記の図のように、10分間に来た人を数える場合に使います。



これ以外の使い方としては、コンペア・レジスタと組み合わせて、カウントした外部からの信号(イベント)が指定した数になったら通知する(割り込みを発生する)ような動作を行わせることもあります。
例えば、一箱の24個のリンゴを入れるときに、24個カウントしたら箱を交換するために使用します。
下記の例のように、コンペア・レジスタに24-1を設定しておくと、24(0~23)個カウントして割り込みを発生します。
割り込みが発生したら、次の箱に交換するような動作となります。



・パルス幅測定、時間間隔測定
外部からの信号(イベント)の間隔を測定する機能で、キャプチャ・レジスタの基本的な使い方です。
下図ではモータの回転数を検出する場合の例を示します。
モータの軸にスロットの空いた円盤を取り付けスロットをフォトインタラプタで検出します。
フォトインタラプタの出力を外部からの信号(イベント)としてキャプチャのトリガ入力にします。
トリガが入力されるとカウンタの値をキャプチャ・レジスタに取り込みカウンタをクリアします。
キャプチャ・レジスタの値を読むことで、回転の周期を知ることができ、回転数を得ることができます。



・インターバル・タイマ
一定間隔(インターバル)で割り込みを発生させる機能で、タイマとしてもっとも基本的な動作です。
この動作では、コンペア・レジスタを使用します。
コンペア・レジスタに設定した値とタイマ・カウンタの値が一致すると割り込みを発生し、タイマ・カウンタをクリアして再度0からカウントを行います。
この動作を繰り返すことで、一定間隔で割り込みを発生させることができます。



・方形波出力
方形波出力の基本的な動作はインターバル・タイマと同じです。
違いは波形そのものを出力することです。
下図の例のようにコンペア・レジスタとタイマ・カウンタが一致する度に割り込み要求が発生し、タイマ出力が反転動作を繰り返します。



・パルス出力
これもパルスを出力する機能ですが、方形波出力と異なり周期だけでなく、デューティ比を変更できます。
この機能では、コンペア・レジスタを2つ使用し、ひとつは周期を指定するために、もう一つはデューティ比を指定するために使います。
2つのコンペア・レジスタは同等ではなく、周期を指定するために用いるコンペア・レジスタでは一致によりタイマ・カウンタをクリアできますが、デューティ比を指定するためのコンペア・レジスタとの一致では出力が変化するだけで、タイマ・カウンタをクリアしません。
また、各コンペア・レジスタとタイマ・カウンタとの一致で割り込み要求を発生します。
パルス出力の動作例を下図に示します。
この機能を使用すると、次に説明するPWM出力と同じような出力波形を発生させることができます。
なお、パルス出力では、デューティを変更するためにコンペア・レジスタの値を変更するときのタイミングが問題になることがあります。
タイミングを間違えると、1周期の中でデューティ設定用のコンペア・レジスタとの一致が2回発生したり、1回も発生しなかったりして、タイマ出力が反転してしまうことがあります。



・PWM出力
これもパルス出力と同じような波形を発生させますが、基本的にデューティ比を変更することが目的となります。
PWM出力の周期は通常固定されていることが多く、その場合にはタイマ・カウンタのビット数で決まる時間となります。
このとき、デューティ比を指定するためにコンペア・レジスタを使用します。
PWM出力ではパルス出力と異なり、目的が明確なので、デューティ比変更のためのコンペア・レジスタの書き換えタイミングに制約はありません。
動作タイミングを図に示します。
この動作タイミングでは最初の起動時を示しています。
起動すると、最初の1周期間、出力はインアクティブ(図ではロウ・レベル)となります。
タイマ・カウンタがオーバフローすると出力がアクティブとなり、コンペア・レジスタと一致するとインアクティブとなります。
以降はこの動作を繰り返すことでPWM信号を出力します。



コンペア・レジスタの値を書き換えて、デューティ比を変更した場合の動作例を下記の図に示します。
周期の途中でmからnに書き換えていますが、その結果が動作に反映されるのは次のオーバフロー以降になります。



タイマ・カウンタによっては、周期も変更できるものもありますが、その場合には1周期の完了がタイマ・カウンタのオーバフローではなく周期設定用のコンペア・レジスタとの一致になるだけです。

・ワンショットパルス出力
これまでの出力機能が同じ動作を連続して繰り返すものであったものに対して、この機能は1個のパルスだけを出力するものです。
この機能では、2つのコンペア・レジスタを使用します。
1つはトリガがかかってからパルスを出力するまでの時間を指定し、もう1つはパルスの幅を指定します。
動作の概要を下記のタイミング図に示します。
外部からトリガ信号が入力されると、タイマ・カウンタはクリアされ、0からカウント動作を開始します。
タイマ・カウンタの値が出力タイミングを指定するコンペア・レジスタの値(m)と一致するとタイマ出力にパルスが出力され、幅を指定するコンペア・レジスタの値(n)と一致するとパルスの出力を終了します。



・キャリア・ゼネレーション
赤外線リモコン用の信号を生成するときに使用する機能で、2つのタイマ・カウンタを組み合わせて使用します。
タイマ・カウンタそのものの動作と言うよりはその応用となりますので、他の機能とは性格が異なります。
赤外線リモコンでは発光時には赤外線をあるキャリア周波数でオン/オフしています。その為、1つのタイマ・カウンタではこのキャリア周波数に合わせた信号を発生します(パルス出力動作)。
もう1つのタイマ・カウンタでは赤外線リモコン信号そのものの信号の長さ(期間)をカウントします(インターバル・タイマ動作)。
インターバル・タイマからの設定時間を経過したことを示す出力信号により、リモコンで出力したい信号をサンプリングし、1ならキャリアを出力し、0ならばキャリアを出力しないような動作になります。
この動作を下に示すタイミング図を用いて説明します。
キャリア信号は既に片方のタイマ・カウンタで発生させているものとします。
インターバル・タイマ動作のコンペア・レジスタの値は一致の割り込みで書き換えるものとし、k(オフ時間),m(オン時間),n(オフ時間)を順に設定していくものとします。
①kとの一致で出力データ値(1)がサンプリングされ、②タイマ出力からキャリア信号が出力され始めます。
③一致による割り込み処理でコンペア・レジスタにm、出力データに0を書きます。
④mとの一致で出力データ値(0)がサンプリングされ、⑤キャリア出力が停止します。
⑥一致割り込みでコンペア・レジスタと出力データ値を更新します。
以上の動作を繰り返すことで動作します。

他にご質問がございましたら、リクエストを送信してください