1.はじめに
弊社装置にはロータリーエンコーダ使用した機種が多数ありますが、これまではマイコンに内蔵されたタイマ機能の「位相計数モード」を使用していました。今回、5個のロータリエンコーダを使用することになり、マイコン内臓(2つ)のタイマでは足りないことから、割込みを使っての計数を行いました。その方法を紹介します。
2.ロータリーエンコーダとは
外観と回路図を右に示します。
右回転させた時、及び左回転させた時のAB出力波形を下記に示します。
このように
右回転では、Aの立上り→Bの立上り→Aの立下り→Bの立下りとなり、
左回転では、Bの立上り→Aの立上り→Bの立下り→Aの立下りとなります。
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各ポートの状態を見て、ステータス番号の設定と、最初の割込みエッジを決めてください。