ロータリーエンコーダと7セグメントLEDの実験

はじめに

ロータリエンコーダを使ったインクリメント/ディクリメントを7セグメントLEDに表示する実験です。

概要

ロータリエンコーダは、電子機器の調整ダイアルなどに使われていて、出力信号の形態からインクリメンタル型とアブソリュート型があります。使用したC12E2420404(ALPS電気)は、インクリメンタル型/クリックありタイプです。

7セグメントLED(7セグLED)は、数字表示のa~g(デジット)と、D.P(デシマルポイント)の計8つのLEDから成る数字表示モジュールで、アノードコモンとカソードコモンの2種類があります。視認性に優れ、モジュールの数だけ桁数を増やせます。表示方法には、各モジュールを短周期で順次点滅を繰り返すことで常時点灯しているように見える錯覚を利用したダイナミック点灯制御が使われます。但し、LED電流制限抵抗やトランジスタの外付け部品およびマイコン側も7本以上のI/Oピンと、ダイナミック点灯制御プログラムが必要で取り扱いが面倒です。
そこで、実験では「7セグメントLEDシリアルドライバモジュール」(秋月電子通商:下写真図)を使用しました。

これは、シフトレジスタや電流制限抵抗などを実装した小型基板に、7セグLEDを搭載したシリアル信号接続のモジュールです。SDI/SCK/LATCHの3つの信号で表示できるので、I/Oピンが少ないマイコンでも使えます。また、SDOを次のモジュールのSDIにつなげば桁数を増やせます。

ロータリエンコーダについて

インクリメンタル型ロータリエンコーダの軸を回すと、お互いの位相が90°ずれたA相とB相のパルス信号が出力されます(下図)。軸の回転方向によって位相のずれ方が異なるので、CW/CCWが判別できます。実験では、CWをインクリメント、CCWをディクリメントにしました。

軸の最小角度(1クリック)で、B相A相のパルスは、CW/CCWそれぞれ次の4つの状態を遷移します。
 CW: 00→01, 01→11, 11→10, 10→00
 CCW: 00→10, 10→11, 11→01, 01→00
次に、下表のように「前の値」と「今の値」それぞれ 00, 01, 10, 11 の全16通りの組合せを合計※の順に並べます。

4つの状態は、CWが赤、CCWが青に該当します。ここでは、CWに「1」、CCWに「-1」を割り当てています。プログラムでは、16通りの割り当てを配列Dirにして、合計を配列のインデックスにすることで、CWなら1→7→14→8、CCWなら2→11→13→4の順に割り当て値が読み出され、その合計を4で除することで、インクリメント/ディクリメント量を求めています。
※合計は、左に2ビットシフトした「前の値」2ビットと、「今の値」2ビットをOR演算で結合します。これと0x0FをAND演算すると、結合した4ビット(合計)が抽出されます。以下は、「前の値」=01、「今の値」=10の演算例です。

7セグメントLEDシリアルドライバモジュールについて

7セグメントLEDシリアルドライバモジュール基板に実装されているシフトレジスタは、入力されたシリアルデータを各セグメントにパラレル出力します。マイコン側は、7セグLEDの表示パターンをシリアルデータにしてモジュールに送信します。以下は、「2」の表示例を説明したものです。

「2」をa~g+D.Pの各セグメントに当てはめると、0b11011010の8ビットデータになります。この0b11011010と1をAND演算すると、最下位の’0’が抽出されます。次に、データを右に1ビットシフトした0b01101101と1のAND演算で、最下位の’1’が抽出されます。このように、ビットシフトとAND演算を繰り返すことで、1,1,0,1,1,0,1,0それぞれ1ビットが抽出されます。ここで、AND演算毎にSCKをLo/Hiにすると、モジュールのシフトレジスタへ1ビット毎順次シリアル送信されます。複数桁の場合は、全セグメント分のビット抽出と送信を繰り返します。送信後、LATCHをLo/Hiにすると、7セグLEDに表示がラッチされます。実験プログラムでは、0~9の表示データを、配列Segとして用意しました。

内容

下図は、実験回路です。2つの7セグLEDモジュールをカスケード接続して2桁の数字を表示します。

下は、ソースコードです。MCC(MPLAB Code Configurator)を使用しています。

結果

ブレッドボードで実験しました。電源電圧は5[V]です。ロータリーエンコーダは、DIP化変換基板を介して取り付けています。動画は、インクリメントとディクリメントの様子です。(動画はこちら)

まとめ

実験のように、デジタルデバイスの制御には、ビット情報を手順を踏んで処理する必要があります。このため、制御データを配列化して、ビットシフトとOR/AND演算を組み合わせることで、デバイス制御に必要なビット結合やビット抽出が可能になります。また、デバイス制御のノウハウが分かれば、今後の電子工作物に活用でき、利便性の向上に役立てることができます。

– 以上 –