JH7UBCブログ

アマチュア無線 電子工作 家庭菜園など趣味のブログです

Raspberry Pi Pico Micro Python ロータリーエンコーダ テスト

2021-11-15 18:23:48 | Raspberry Pi Pico
 前の記事でテストしたピン割込みを利用して、ロータリーエンコーダの回転方向を判定するスクリプトのテストをしました。

 まず、回転報告を判定する方法を説明します。ロータリーエンコーダのA,B端子はプルアップしておきます。ロータリーエンコーダを回転させると下の図のように、各端子の電圧が時間とともに変化します。
 A,Bの状態が変化した時(割込みが発生した時)のA,Bの値を読み取り、(B<<1)+Aの前の値と現在の値のXORをとると、時計回り(右回り)の時は、その値は、0か1になり、反時計回り(左回り)の時は、2か3になります。
 つまり、判定式D<2で時計回り、D>=2の時反時計回りと判定することができます。

 スクリプトです。
  4行目5行目 ロータリーエンコーダのA,Bが接続されるGPIO14とGPIO15を入力、プルアップに設定。
 34行目35行目 ピン割込みの設定、トリガは、立下りと立ち上がり、両方で割込みがかかるように設定。

 14行目からが、割込み時に回転方向を判定する関数です。
 最初、countをインクリメント、デクリメントするのに、count++,count--を使ったのですが、これが原因でエラーがでてしまいました。この原因が分からず、数時間を無駄にしました。MicroPythonではこの記述は通らないんですね。
 それから、判定の基準ですが、今までPICなどでのプログラムでは、count>=4でRIGHT、count<=4でLEFTとしたのですが、count>=3,count<=3の方がスムーズに判定するので、この値にしました。
 このスクリプトで実際にロータリーエンコーダを動かしてみると、一番最初のクリックだけ判定しませんが、その後はロスなく判定してくれました。

2021.12.3追記
 上の問題を解決する方法が分かりました。スクリプトを次のように訂正してください。最初PinA=1,PinB=1なので
 8行目 befDat=0x11 としてください。
これで、最初からスムーズに動くはずです。

 判定された結果は、shellに表示されます。


 接続回路図です。

ブレッドボードです。ロータリーエンコーダは、中華製の安価なものを使いました。かなりチャタリングがあるのですが、今回のスクリプトは、うまく回転方向を判定できます。



最新の画像もっと見る

コメントを投稿