これは MicroPython バージョン v1.27.0 のドキュメンテーションです。 このページの最新開発版 の方が、より新しい内容になっています。

クラス Encoder -- 直交デコード

Encoder は、ロータリーエンコーダなどから一般的に出力される直交信号(位相の異なる2つのパルス信号)をデコードし、そのパルスの順序に応じてカウントを増加または減少させます。

最小限の使用例:

from machine import Pin, Encoder

counter = Counter(0, Pin(0, Pin.IN), Pin(1, Pin.IN))   # ピン 0, 1 の Encoder を作成し、カウントを開始
value = counter.value()                                # 現在のカウント値を取得

対応ポート: ESP32

コンストラクタ

class machine.Encoder(id, ...)

指定した id に対応する Encoder オブジェクト(シングルトン)を返します。 id の値は利用するポートやハードウェアによって異なります。一般にはは 0, 1 などの値が使われ、該当するハードウェアブロック #0, #1 などを示します。

追加の引数は、後述する init() メソッドに渡され、Encoder インスタンスは再初期化されてリセットされます。

ESP32 では、この idPCNT ユニット に対応します。

メソッド

Encoder.init(phase_a, phase_b, *, ...)

指定したパラメータで Encoder を初期化し、リセットします:

  • phase_a には第1入力ピンを machine.Pin オブジェクトとして指定します。

  • phase_a には第2入力ピンを machine.Pin オブジェクトとして指定します。

これらのピンは、特定のハードウェアブロックに固定されたピンを持つポートでは省略できます。

ポートでサポートされている可能性がある追加のキーワード指定のみのパラメータは次のとおりです:

  • filter_ns には、パルスをカウントするために入力信号が安定していなければならない最小時間をナノ秒単位で指定します。実装では、この値以下でハードウェアがサポートする最長のフィルター時間を使います。デフォルトは 0 (フィルターなし)。 (ESP32 でサポート)

  • phases にはカウントする信号エッジの数を指定し、デコードの細かさ(分解能)を決定します。たとえば 4 を指定すると「4x 直交デコード」となり、1 パルスあたり 4 カウントが行われます。ポートによっては 1, 2, 4 フェーズがサポートされ、デフォルトは 1 フェーズです。 (ESP32 でサポート)

Encoder.deinit()

Encoder を停止し、割り込みを無効化してハードウェアリソースを解放します。ソフトリセットを行うと、すべての Encoder オブジェクトを初期化解除します。

Encoder.value([value])

エンコーダ値を符号付き整数として取得し、必要に応じて設定します。実装では、取得と設定をアトミック(不可分)に行うことが推奨されます。

この値のオーバーフローについては machine.Counter.value() の説明を参照してください。