ロータリーエンコーダ
 ロータリーエンコーダの実験をしました。正回転、逆回転でパルスを出し、これをカウントすることによって回転角(回転位置)を調べる ことが本来の使い方だと思うのですが、電子レンジの時間設定のように数値を決めるだけにも使われています。タイマーの時間設定やPWM 制御の値設定に使えるのではないかと思い実験してみました。
右がエンコーダの拡大写真です。実験中は多回転が楽なように臨時のクランクを付けています。ALPSの製品でEC16B24102の様です。デジット で150円でした。クリックなしで1回転で24のパルスを出します。お店で幾種類かをまとめた規格表をくれましたので、その中から品番を推定しました。
チャタリングを防ぐために、1msごとにエンコーダを読みに行きます。後でデータシートをよく見るとチャタリングのmaxは3msと書いてありました。 実験の目的が数値設定だけで、LEDで見えること、手で回転してみてチャタリングが分からなかったのでこれでよしとします(角度測定ではダメでしょう)。

上の図はエンコーダの波形です。A,B端子はonになるとC端子と導通し、0Vになります。offの時はIO端子をソフトウエアプルアップしているので、5Vに なります。1サイクルで4つの状態が存在し、A端子をLSBとする2ビットを10進表記すると 0→1→3→2→0・・・と変化します(CWの時)。ここで2と3を 入れ替えると 0→1→2→3→0 となり、1増える(または3減る)と正回転(CW)、1減る(または3増える)と逆回転であることが分かります。 2と3の入れ替えはif文で安易にごまかしています(ごめん)。エンコーダの扱いはChaNさんのページで勉強しました(感謝)。
回路図  プログラム

ゼロを決めるために、逆回転で0になるとそれ以上はデクリメントしないことにしています。1回転で 4×24=96 のカウントをします。ややデリケート です。クランクを付けると、2〜300くらいの数値設定なら実用になりそうです(それ以上は回すことを辛抱せねばなりません)。
秋月で購入したもう一つのエンコーダはクリック付きでした。1サイクルの4相の内、1カ所しかクリックがないので実際には4飛びにカウントがアップ します。これでは使いにくいので途中の計算で4で割り、4分の1のカウントをすることになります。1回転24カウントになります。デリケートな カウントアップが無い替わりに2回転しても48しかカウントできません。数値が小さいときは使いやすいかもしてません。
角度を測定するなら、クリックなしにすべきでしょう。360÷96=3.75度の精度で測定できます。

TOPへ