タイマー(Timer)は、キッチンタイマーのように、時間が経過したことを知らせる装置です。しかし、経過時間を測る以外にも指定した周期のパルスを出力したり、入力パルスの周期を測ったりすることにも使用します。むしろ、最近ではそのような用途の方が多いようです。そのため最近のマイコンには特別な機能を備えたタイマーが多くあり、使用方法もマイコンによって異なります。そこで、今回はSTM32シリーズ(STマイクロエレクトロ二クス製)に搭載されている汎用タイマーを例にとって、タイマーの基本的機能を説明します。
この記事は会員限定です。会員登録すると全てご覧いただけます。
図1に16bitタイマーのブロック図を示します。クロックを数えるカウンタは16bitで、最大6万5536までカウントできます。クロックは内部クロックか外部クロックを、トリガ/クロックコントローラによって選択可能です。プリスケーラー(Pre-scalar)とは分周器のことです。クロックを分周してカウント周期を調整することができます。ここでは16bitなので、最大6万5536分周までできます。自動再ロードレジスタ(ARR:Auto Reload Register)はユーザーが希望するカウント値を入れておきます。キャプチャ/比較機能はパルスの入出力を制御するブロックです。このブロックはクロックを数える機能には直接関係しません。内部には入出力パルスを制御するキャプチャ・コンペアレジスタ(CCR:Capture Compare Register)を持っています。パルスの入出力は外部CH1端子で行います。この端子は機能によって入力になったり、出力になったりします。
タイマーの最も基本的な機能です。カウンタはクロックが入るたびに1を足したり、引いたりして、数を数えます。1つのクロックの周期の時間は分かっていますから、カウンタの数とクロックの周期の掛け算によって、時間を計算することができます。
カウンタの値が、0からスタートして、1ずつ増えていき、ARRの値までカウントすると、カウントを止めて、CPUに時間が経過したことを知らせる割り込み信号を送ります。このような場合を、アップカウントと言います。その場合のカウンタをアップカウンタと呼びます。
逆に、ARRの値から1ずつ減らして行き、カウンタの値が0になったら、カウントを止めてCPUに割り込み信号を送る場合を、ダウンカウントと言います。その場合のカウンタをダウンカウンタと呼びます。
どちらの場合もCPUに割り込み信号を送る時間は、ARRの値で決まってきます。
外部から入力された信号の立ち上がり、立ち下がりまたは両方のいずれかを検知すると、カウンタの値をCCRへ取り込む機能をインプットキャプチャ(Input capture)と呼びます。図2に例を示します。
これは外部CH1に入力された信号の”Lowレベル”から“Highレベル”への立ち上がりを検知する場合です。最初の立ち上がりの時、カウンタの値は4ですので、CCRには4が取り込まれ(キャプチャされ)ます。CPUは、すかさずこの値をRAMなどのメモリに格納しておきます。次の立ち上がりの時、カウンタの値は11です。この値もCCRに取り込まれ、CPUによってメモリに格納されます。次にCPUで「11-4=7」の計算を行うことによって、入力された信号の1周期がクロックの7周期分に相当することが分ります。クロックの周期は分っていますので、CPUで掛け算を行えば、入力されたクロックの周期を知ることができます。
“Highレベル”から“Lowレベル”への立ち下がりを検知する場合も同様に動作して、入力されたクロックの周期を知ることができます。
立ち上がり、立ち下がりの両方でキャプチャすることもできます。その場合は、“Highレベル”の長さ、“Lowレベル”の長さを知ることができます。
Copyright © ITmedia, Inc. All Rights Reserved.