1.はじめに
 弊社装置にはロータリーエンコーダ使用した機種が多数ありますが、これまではマイコンに内蔵されたタイマ機能の「位相計数モード」を使用していました。今回、5個のロータリエンコーダを使用することになり、マイコン内臓(2つ)のタイマでは足りないことから、割込みを使っての計数を行いました。その方法を紹介します。

circuit50 elma50

2.ロータリーエンコーダとは
 外観と回路図を右に示します。
右回転させた時、及び左回転させた時のAB出力波形を下記に示します。
このように
右回転では、Aの立上り→Bの立上り→Aの立下り→Bの立下りとなり、
左回転では、Bの立上り→Aの立上り→Bの立下り→Aの立下りとなります。


             右回転                                左回転
 rotate_CW   rotate_CCW

3.設計
 上記を元に状態遷移表を作ります。

イベント ステータス 備考
←ステータス番号
Low High Low High ←Aの状態
Low Low High High ←Bの状態
カウント処理 次ステータス カウント処理 次ステータス カウント処理 次ステータス カウント処理 次ステータス
Aの立下り -1 +1
Aの立上り +1 -1
Bの立下り +1 -1
Bの立上り -1 +1

あとは、この状態遷移表を元にプログラムするだけです。サンプルプログラムは こちら(RX210マイコン用Cソース)。
なお、割込みが入るごとに割込みエッジ(立上り/立下り)を反転する必要があります。
また、初期化時にはAB各ポートの状態を見て、ステータス番号の設定と、最初の割込みエッジを決めてください。