class Encoder -- 直交デコーダー¶
Encoder クラスは、直交デコーダーとして構成された i.MX RT QENC ハードウェアブロックをラップします。ロータリーエンコーダーから来る二相信号(phase_a / phase_b)を追跡し、位相関係に応じて 32 ビットの位置カウンターをインクリメントまたはデクリメントし、絶対参照のためにオプションの index / reset 入力と組み合わせることができます。
OpenMV Cam RT1062(mimxrt ポート)でのみ利用できます。STM32 ベースの OpenMV カメラでは、代わりにエンコーダーモード(Timer.ENC_AB)用に構成した pyb.Timer を使用してください。OpenMV Cam AE3(alif ポート)では公開されていません。
使用例:
from machine import Pin, Encoder
enc = Encoder(0, Pin("P0", Pin.IN), Pin("P1", Pin.IN), phases=4)
enc.value(0)
# ... rotate the encoder ...
print("position:", enc.value())
コンストラクタ¶
- class machine.Encoder(id: int, phase_a: Pin | None = None, phase_b: Pin | None = None, *, phases: int = 1, filter_ns: int = 0, max: int | None = None, min: int = 0, index: Pin | None = None, reset: Pin | None = None, match: int | None = None, match_pin: Pin | None = None)¶
idで識別される QENC エンコーダーブロックを構築します(またはそのシングルトンを取得します)。同じ引数は、既存のインスタンスを再構成するためのinit()でも受け付けられます。phase_a/phase_bは 2 つの直交入力ピンです。phases(キーワード専用)はデコードの粒度を選択します。QENC は1(パルスペアごとに 1 エッジをカウント)、2(位相 A の両エッジ)、または4(「4x デコード」-- 両位相のすべてのエッジをカウント)をサポートします。デフォルトは1です。filter_ns(キーワード専用)-- 入力が安定している必要のある最小時間(ナノ秒単位)です。ドライバはこの値以下で最も長いハードウェアフィルタを使用します。0(デフォルト)はフィルタリングを無効にします。max/min(キーワード専用)-- 位置カウンターのモジュロ範囲です。カウンターがmaxを超えるとminにラップし、サイクルカウンターがインクリメントされます(逆方向に動く場合はデクリメント)。両方に0を渡すと範囲が無効になります。index(キーワード専用)-- 立ち上がりエッジで位置カウンターをminに再ロードし、方向に応じてサイクルカウンターを更新するPinです。一般的な用途は、ロータリーエンコーダーの Z チャンネルマークです。reset(キーワード専用)-- 立ち上がりエッジで位置カウンターを開始値に再ロードするPinです(サイクルカウンターは変更されません)。match(キーワード専用)--IRQ_MATCH割り込みが発生する位置値です。Noneを渡すと無効になります。match_pin(キーワード専用)-- 位置カウンターがmatchと等しい間は high に駆動され、それ以外では low になるPinです。メソッド¶
- init(phase_a: Pin | None = None, phase_b: Pin | None = None, *, phases: int = 1, filter_ns: int = 0, max: int | None = None, min: int = 0, index: Pin | None = None, reset: Pin | None = None, match: int | None = None, match_pin: Pin | None = None) None¶
指定したパラメータでエンコーダーを再初期化し、その位置カウンターとサイクルカウンターをリセットします。コンストラクタと同じキーワード引数を受け付けます。
- deinit() None¶
エンコーダーを停止し、保留中の割り込みをすべて無効にして、QENC ハードウェアリソースを解放します。ソフトリセットでは、すべての
Encoderインスタンスが自動的に deinit されます。
- value() int¶
- value(value: int, /) int
符号付き位置カウンターを取得または設定します。
引数なしの場合は、現在の位置を返します。
単一の
value引数を指定した場合は、位置カウンターをアトミックにvalueに設定し、以前のカウントを返します。一般的な慣用句enc.value(0)は、測定ウィンドウの開始時にカウンターをリセットします。
- cycles() int¶
- cycles(value: int, /) int
サイクルカウンターを取得または設定します。これは符号付き 16 ビット整数で、位置カウンターが
max/minを何回超えてラップしたかを追跡します。引数なしの場合は、現在のサイクルカウントを返します。
単一の
value引数を指定した場合は、サイクルカウンターをvalueに設定し(位置カウンターには触れません)、以前のカウントを返します。
- irq(handler: Callable[[Encoder], None] | None = None, trigger: int = 0, hard: bool = False) None¶
サポートされている QENC イベントのいずれかが発生したときに呼び出されるコールバックを登録します。ハンドラは唯一の引数として
Encoderオブジェクトを受け取ります。具体的なイベントは、ハンドラ内でirq.flags()を介して識別できます。triggerは、1 つ以上のIRQ_*定数のビットマスクです:IRQ_RESET--resetピンがアサートされました。IRQ_INDEX--indexピンがアサートされました。IRQ_MATCH-- 位置カウンターがmatchに達しました。Match はワンショットであり、IRQ を再インストールして再アームする必要があります。IRQ_ROLL_OVER-- 位置カウンターがmaxからminへラップしました。IRQ_ROLL_UNDER-- 位置カウンターがminからmaxへラップしました。
hard=Trueはハード割り込みハンドラを登録します(レイテンシは低くなりますが、ハンドラはメモリ割り当てを行ってはいけません)。デフォルトはスケジュールされたコールバックです。handler=Noneを渡すと割り込みが無効になります。
定数¶