パーツ解説

ロータリーエンコーダの使い方

投稿日:2022-06-05 更新日:

今回はPICで ロータリーエンコーダ を使ってみたので、使い方や制御するためのポイントを紹介します。

ロータリーエンコーダとは

まずはじめに ロータリーエンコーダ について軽く紹介したいと思います。

今回使用したのは、秋月電子で販売されているALPS社のロータリーエンコーダ(24クリックタイプ)です。

見た目やサイズは可変抵抗とよく似ていますが、違いとしては以下の点が挙げられます。

  • 回転角に制限がなく360° 何周でも回せる。
  • 角度の情報は絶対値ではなく相対値で取得できる。

可変抵抗の場合は回転角に応じたアナログ電圧が取得できるので、最大値と最小値の決まっているボリュームなどに使用されます。

一方ロータリーエンコーダは軸を回すたびに、(反)時計回りに1ステップ分回転したという情報が得られるので、+, ー のボタンのようにして使えます。

一番身近な例としてはマウスのホイールなどに利用されています。

信号

続いてロータリーエンコーダの信号について解説します。

ロータリーエンコーダには3つの端子がついていて、図のようにC端子はGNDに接続し、A, B端子はプルアップしておきます。

 

このとき、軸を時計回りに回すと次のような信号が出力されます。

すなわち、Bに対してAのほうが90° 進んだパルスが出力されます。

逆に、反時計回りに回すとAのほうが90° 遅れたパルスが出力されます。

このパルスの位相差をマイコンで検出することで回転情報を取得できます。

具体的にどうするかというと、BがH → Lに変化した瞬間に、AがLなら時計回り、AがHなら反時計回りと判定します。

チャタリング

ロータリーエンコーダやスイッチなど、物理的な接点を持つ部品には必ずチャタリングという問題が付随します。

接点が切り替わるときに、一定時間高速で出力が振動するのです。

これは、スイッチを押したときに微小にバウンドしているようなイメージです。

ロータリーエンコーダは、出力がH → Lに切り替わったら1ステップ回転したとカウントするのでした。

つまり、チャタリングの対策をしていないと、本当は1ステップしか回転していないのに何ステップも回転したように誤検出してしまうのです。

チャタリングの対策としてはソフトウェア的な対策とハードウェア的な対策があります。

ソフトウェアの場合、最初の変化を受け付けてから一定時間待ってから処理をすることでチャタリングを回避することができます。

実際にPICマイコンで試してみたところ、タクトスイッチのチャタリングはこれで上手く回避できたのですが、ロータリーエンコーダのチャタリングは強烈なのか、多少マシにはなっても完全に回避することはできませんでした。

なので、今回はハードウェア的な対策を紹介します。

使用するのはシュミットトリガインバータです。

ここでいうインバータとはNOT回路のことで、入力のHとLを反転させて出力します。

普通のNOT回路の場合、入力が微妙な電圧だと出力が不安定になってしまいます。

しかしシュミットトリガの場合は、下図のようにH → Lの場合とL → Hの場合で閾値が異なるため不安定になりません。

このシュミットトリガインバータを2個繋げ、入力にCとRをつけることで高周波成分をカットすれば、チャタリングが解消されます。

なのですが今回実験してみると、Cを入れると何故かPICの動作が不安定になってしまいました。原因は不明ですが、Cを抜くと上手くいったのでヨシとします。

実験

ロータリーエンコーダの回転値を読み取って、I2CでLCDに表示させる実験を行いました。

使用した部品はこちらです。

ロータリーエンコーダはそのままではブレッドボードで使用することができないので、こんな感じにピン付きのケーブルを端子にはんだ付けして使用しました。

プログラム全体はGitHubに載せておくので、ここでは主要部だけ載せます。

回路図はこんな感じです。

結果https://youtube.com/shorts/W9zGxbqlNcQ?feature=share時計回りに回すとカウントが増加し、反時計回りに回すと減少することが確認できました。

回転速度が速かったりすると信号を拾いきれなかったりするので、信号を累積して回転量を推定するのにはこのままだと厳しいですが、+とーの入力装置としては十分に使用できます。

あとがき

コンデンサの謎は残るものの、とりあえずロータリーエンコーダを使用することができました。

この記事がロータリーエンコーダを使ってみたいというあなたに届いたならば幸いです。

最後までご覧いただきありがとうございました。

-パーツ解説

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

APDS-9960の近接センサーを使ってみる

前回APDS-9960のジェスチャーセンサーを使用しました。今回はジェスチャーに加えて近接センサーも使用してみたいと思います。 前回の記事はこちらhttps://rikeden.net/?p=120さ …

PICで128x64グラフィックLCDを使ってみる

今回はAliExpressで買った128×64のグラフィックLCDを使ってみました。使用したPICはPIC16F18857です。 400円ぐらいで安かったのはいいですが、データシートや型番が不明なので …

リアルタイムクロック DS1307 の使い方

今回は秋月電子で販売されているこちらのリアルタイムクロック(以下RTC)のDS1307について紹介します。 目次1 RTCとは2 DS1307の特徴3 レジスタ4 プログラム RTCとは まずはRTC …

【Pico W】QR Clock ver.2を作ってみた【ソフト編】

前回の記事でQR Clock ver.2のハードウェアを紹介しました。今回はソフトウェアについて紹介していきます。 マイコンにはRaspberry Pi Pico Wを使用しています。ピン数が多いこと …

【PIC】aitendo の 122x32 グラフィックLCDを使ってみた

今回はaitendoで122×32のグラフィックLCDが299円(税抜)とかなり安かったので買ってみました。商品ページはこちらです。 グラフィックLCDについては以前に記事を書きましたが、それとは制御 …