マイコン基本機能【タイマー・カウンタ】現役エンジニアが簡単解説

こんにちは、組み込みエンジニアのtomozoです。

 

今回は、

私の組み込みの開発経験も交えながら

マイコンの機能【タイマー・カウンタ】

について分かりやすく解説します。

 

この記事は

マイコンのタイマーってどう使うんだろうって疑問を持っている新人エンジニアの方

向けの記事です。

 

マイコンのタイマー・カウンタ機能を使いたいけど

機能が多すぎてどう使うんだろうって

調べているところではないでしょうか?

 

新人の頃はマイコンのマニュアルを読んでみても、

ページ数が多くて分からないことが多くて

もう少し簡単に説明があればなあって思いますよね。

 

私も新人の頃に先輩からマニュアルみたら分かるよって言われたこと

ありましたが、それはある程度知っている人の意見であって

分からない人からしたらさっぱり分からないってこともあります。

 

この記事を読めば

  • マイコンのタイマー・カウンタ機能について
  • 組み込み機器ではどういう風に使われているか

が分かるようになります。

 

それでは早速解説をはじめます。

 

マイコンのタイマーとは

マイコンのタイマーとはいったいどんな物なんでしょうか?

新人エンジニアあん

tomozo

一言でいえばタイマー = 時間に関する機能です

 

例えば、50m走でスタートラインに立って

スタートの合図で走り出しゴールラインを切るまでの

時間をストップウォッチで計測しますね。

 

マイコンでもタイマー機能を利用することで同じことが行えるのです。

図のようにセンサAの位置にある物体が

センサBまで移動する時間を測りたいとします。

フローチャートを書くと以下のようになります。

これでAからBに到達する時間を測ることができます。

 

さてマイコンは時間をどうやって知るのでしょうか?

 

マイコンには水晶発振子という素子が繋がっていて

これが基本のシステムクロックというものを作っています。

例えば12Mhzの水晶発振子をマイコンにつないだ場合、

12Mhz ≒ 0.08333usのクロックが入力されます。

 

マイコンはシステムクロックを基準の時間として利用し、

入力クロックの数を数えることで時間を計測するのです

 

例えば、100usを数えるためには

100 us ÷ 0.08333us ≒  120

120回カウントすればいいというわけです。

ちなみに、たいてい割り切れませんが、非常に小さい単位なので

組み込みの世界では誤差範囲として無視します。

 

これがマイコンのタイマー・カウント機能の一つで

時間間隔測定機能といいます。

 

実際の組み込み制御では、より精度よく測定できるように

センサの入力を外部トリガー(きっかけ)として

カウントを自動で取得するのが一般的な使い方です。

 

上の図でいうと、センサAが遮光から透過になった時のカウントT1

センサBが透過から遮光になった時のカウントT2を取得し

T2 - T1でセンサAからセンサBまで移動するのにかかった

カウント数が分かるという仕組みです。

 

マイコンのタイマー・カウントの使い方は、

  • 上で紹介した時間を測定する機能
  • 信号を出力する機能

の2つに大別され

さらにいくつか機能に細かく分けられます。

表にすると以下のようになります。

大分類 詳細機能
測定機能 外部イベント・カウント
パルス幅・時間間隔測定
出力機能 インターバル・タイマ
方形波出力
パルス出力
PWM出力
ワンショットパルス出力

 

たくさんあって難しそうだわ

新人エンジニアあん

tomozo

そんなことないですよ

個別に実例を交えながら解説していきます。

 

組み込み機器での実用例

ここでは各機能のポイントと実際の組み込み制御で

どういった使い方をしているのか紹介します。

 

tomozo

各機能の細かい説明を書くと長くなりすぎるので、マイコンのマニュアルなどを見てくださいね

 

 外部イベント・カウント

これは外部からのイベント(センサ入力など)の数をカウントします。

実例

駆動する物体の回転軸に取り付けたエンコーダと呼ばれる

下図のような部品が回転することでセンサがON/OFFします。

(エンコーダの絵が上手く書けなかったのですが、

実際は等間隔で綺麗にスリットが入っています。)

 

センサから出力されるON/OFFのパルスを

カウントすることで物体の移動距離を知ることができます。

 

例えば、1周期で0.5mm動くとすれば10周期分動いたら5mmというわけです。

この時コンペアレジスタという比較するためのレジスタに10と設定しておけば

10回カウントしたら割り込みを発生させるという使い方もできるので

5mm動いたら止めたいというときは割り込みで停止処理すれば

狙った位置で止めることができます。

パルス幅・時間間隔測定

これは外部からのイベント(センサ入力など)の間隔を計測します。

 

先述の外部イベントカウントではエンコーダの数をカウントしましたが、

こちらの機能では信号の間隔を測りどのくらいの速度で回転するか

知ることができます。

 

下図の矢印のタイミングで

信号の立ち上がりエッジごとにタイマーのカウントを取り込み

1周期の時間を測ります。

算出例を挙げると

計測するための一定周期の基準タイマーが48Mhz( = 約0.02us)で動いているとします。

タイマーカウントが図のAの立ち上がりエッジタイミングで1000、

Bのタイミング1500とするとAからBまでの時間は

(1500 – 1000) × 0.02 = 10us

というわけです。

 

実例

回転を強/弱させられるようなモーターを制御する時に

回転数を安定させるために回転速度を測って遅くしたり早くしたりしながら

速度調整するのに利用します。

目標速度 が10usだったとします。

現在の速度 制御
5us 目標より遅いので早くする
10us 目標より早いので遅くする

というようになります。

 

車の運転で時速50kmで走るために、スピードメーターを見ながら

アクセルを踏んだり離したりしながら速度を調整しますが

同じようなものです。

インターバル・タイマ

一定時間ごとに割り込みを発生させる機能

必ずと言っていいほど組み込み機器ではお世話になります。

実例

1ms毎に割り込みを発生させてセンサ入力の状態監視など

を行います。

センサやスイッチはノイズが乗る可能性があるため

信号を1回で読んだだけで状態を判断すると誤検知する可能性があります。

そこで1msの割り込みで2回同じ状態が続いたら確定といった

処理をする時に利用します。

 

具体的には下図のようにA、B、C・・・H、Iと1msの

インターバルタイマ割り込み毎にスイッチの状態を見ていたとします。

スイッチを押した瞬間と離した瞬間はセンサの状態

が不安定になります。

チャタリングするっていいます。

AではLowですがBではHighなのでLowなのか

Highなのか判断しづらいところです。

そこでLow、Lowが2回続いたDでLowを確定、

同様にHigh、Highが2回続いたIでHighを確定させるようにします。

方形波・パルス・PWM・ワンショットパルス出力

これらは同じような使い方で機能は似ているので

まとめて説明します。

 

カウントアップされるタイマーカウンタ値を元に

設定した条件で出力します。

 

タイマーカウント値は

0、1,2,3,・・・255、0、1、2,3・・・

とカウントアップするので

100のタイミングでHigh、

オーバーフロー(255→0)するタイミングでLow

を出力するというような使い方です。

 

以下のように使い分けられます。

出力方式 出力結果
方形波出力 同じ周期で出力
パルス幅やPWM出力 HighとLowの時間を任意に設定し出力
ワンショットパルス出力 一回だけ出力

実例

ステッピングモーターやDCモーターを回す時に

よく使用します。

 

ステッピングモーターは以下の特徴があります。

  • 入力したステップ数だけ回転する
  • 入力したパルスの速度に応じて回転数が変わる

PWM出力とステッピングモーターの制御は非常に相性がよく、

特にメカ的な位置精度が要求される場面で使われます。

 

タイマーを利用したプログラミングの実例を

こちらの記事で詳しく紹介しています。

よければ読んでみてください。

【組み込み基礎】RL78でLチカプログラミング【タイマ/割込/ポート】

 

まとめ

マイコンのタイマーには以下の機能がある

時間・カウントを測定する機能

  • 外部イベント・カウント
  • パルス幅・時間間隔測定

信号を出力する機能

  • インターバル・タイマ
  • 方形波出力
  • パルス出力
  • PWM出力
  • ワンショットパルス出力

組み込み制御では以下のような用途で利用されることが多い

  • モーターの制御
  • 回転検出
  • 位置検出

 

実例を交えながらできるだけ簡単にタイマー・カウンタについて

解説しました。

 

参考になったとか、もっとここが知りたいなど一言でも

コメント、意見などいただけると励みになります。

 

こちらの記事でマイコンの基本機能についてまとめています。

もしよければご覧ください。

マイコン基本機能5選【初心者組み込みエンジニア必見】

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA