正直なところ、私はロータリエンコーダの名前を初めて聞いたときは「何だそれは?」と思いました。名前を英和辞典で調べてみると、ロータリ(rotary:形容詞で「回転する」)、エンコーダ(encoder:名詞で「符号器」)となります。ロータリエンコーダは読んで字のごとく回転を符号化(コード化)するもの、つまり「ロータリエンコーダがどの程度回転したかというアナログな情報をプログラム(マイコン)で扱うためにデジタル化するもの」ということになります。身近なところですと「電子レンジのダイヤルを回すと温め時間を設定できる」など、ダイヤルなどを回すことでいろいろなことをしたい、という用途に使われているようです。
ロータリエンコーダには、インクリメンタル形とアブソリュート形という2種類のタイプがあります。それぞれの違いは次のようになります。
インクリメンタル形はエンコーダの回転軸が一定の角度だけ回転するごとにパルスを出力する方式です。「1回転当たり何パルス」という単位で精度が表現されているので(注3)、「1パルス当たり何度回転しているか」ということが計算でき、出力されたパルスの回数を数えることで軸が何度だけ回転したかを知ることができます。また、パルスの出力信号は2本用意されていて、パルスの出力パターンによって軸が時計回りに回ったのか反時計回りに回ったのかを知ることができます。
一方のアブソリュート形は、エンコーダの軸の位置に応じた値を出力する方式です。このとき、エンコーダから出力される値は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ビットのグレイコードを出力する形式のロータリエンコーダが接続できるようになっています。
H8/3048F-ONEとロータリエンコーダは図4のように接続されています。
ロータリエンコーダからは常に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.