スイッチとロータリエンコーダの入力を処理するH8で学ぶマイコン開発入門(12)(3/4 ページ)

» 2007年09月19日 00時00分 公開

ロータリエンコーダ

 正直なところ、私はロータリエンコーダの名前を初めて聞いたときは「何だそれは?」と思いました。名前を英和辞典で調べてみると、ロータリ(rotary:形容詞で「回転する」)、エンコーダ(encoder:名詞で「符号器」)となります。ロータリエンコーダは読んで字のごとく回転を符号化(コード化)するもの、つまり「ロータリエンコーダがどの程度回転したかというアナログな情報をプログラム(マイコン)で扱うためにデジタル化するもの」ということになります。身近なところですと「電子レンジのダイヤルを回すと温め時間を設定できる」など、ダイヤルなどを回すことでいろいろなことをしたい、という用途に使われているようです。

 ロータリエンコーダには、インクリメンタル形とアブソリュート形という2種類のタイプがあります。それぞれの違いは次のようになります。

インクリメンタル形

 インクリメンタル形はエンコーダの回転軸が一定の角度だけ回転するごとにパルスを出力する方式です。「1回転当たり何パルス」という単位で精度が表現されているので(注3)、「1パルス当たり何度回転しているか」ということが計算でき、出力されたパルスの回数を数えることで軸が何度だけ回転したかを知ることができます。また、パルスの出力信号は2本用意されていて、パルスの出力パターンによって軸が時計回りに回ったのか反時計回りに回ったのかを知ることができます。

※注3:
これを「分解能」といいます。


インクリメンタル型のロータリエンコーダのパルス 図3 インクリメンタル型のロータリエンコーダのパルス

アブソリュート形

 一方のアブソリュート形は、エンコーダの軸の位置に応じた値を出力する方式です。このとき、エンコーダから出力される値は2進数ではなく、グレイコードと呼ばれる形式で出力されます。グレイコードについての詳細はここでは解説しませんが、2進数が、

 0,1,10,11……

と増えていくのに対してグレイコードは、

 0,1,11,10……

と増えていくようなコードで、値が1つ変化するときに必ず1文字しか変化しないのが特徴です(注4)。例えばグレイコードが8ビットのロータリエンコーダは、グレイコードを2進数のデータに変換(注5)することで0x00〜0xffで1回転を表せます(つまり分解能が256ということ)。現在位置を示す値が0x10だったときに時計回りに回転すると、

 0x11,0x12,……

のように値が変わり、反時計回りに回転すると、

 0x09,0x08,……

のように値が変わります(このとき、0x00の次は0xffになります)。この方式ではグレイコードのビット数を増やす(エンコーダの精度を高める)と、それに応じて必要な出力信号の本数が増える(回路が増える)ことになります。本連載のターゲットボードには、この8ビットのグレイコードを出力する形式のロータリエンコーダが接続できるようになっています。

※注4:
2進数は0111 → 1000のように多くの文字が変化することがありますが、グレイコードではそのようなことはなく必ず1文字しか変化しません(0111は10進数で5を表し、6は0101となります)。


※注5:
グレイコードから2進数への変換の手順は、「1:グレイコードの最上位ビットはそのまま2進数の最上位ビットとなる」「2:それ以外のビットはそのけたのグレイコードと1つ上のけたの2進数との排他的論理和を取った値がそのけたの2進数となる」です。例えばグレイコード0110を2進数にしてみると、最上位ビットは0、次のビットはグレイコードが1で2進数の最上位ビットは先ほど0になったので排他的論理和を取って1、次のビットは……というふうにすると0100であることが分かります。


H8マイコンとロータリエンコーダの接続

 H8/3048F-ONEとロータリエンコーダは図4のように接続されています。

H8マイコンとロータリエンコーダの接続イメージ 図4 H8マイコンとロータリエンコーダの接続イメージ。ターゲットボードには2つのロータリエンコーダが搭載されており、この図では省略しているがロータリエンコーダ1はH8/3048F-ONEのP30〜P37にPLDを介して接続している

 ロータリエンコーダからは常に8ビットのグレイコードがPLDに対して出力されており、PLD内部でグレイコードから2進数への変換を行い、H8/3048F-ONEに出力します。H8マイコンは、PLDからデータを受け取った時点で2進数に変換されたデータを使用できます。

 ただし、PLDがH8マイコンにデータを出力するのはH8マイコンから要求があったときのみで、その要求はH8マイコンのCAP(CAPTURE)端子をLowからHighにすることで行われます(CAP端子はポート80を便宜的に名付けたもので、普通のポート出力です)。

Copyright © ITmedia, Inc. All Rights Reserved.