class Counter -- パルスカウンター¶
Counter クラスは、単一入力のパルスカウンターとして構成された i.MX RT QENC(直交エンコーダー/カウンター)ハードウェアブロックをラップします。ソースピンの立ち上がりエッジごとにハードウェアの位置カウンターがインクリメント(またはデクリメント)され、ROLL_OVER / ROLL_UNDER / RESET / INDEX / MATCH の各イベントにソフトウェアコールバックを割り当てることができます。
OpenMV Cam RT1062(mimxrt ポート)でのみ利用できます。STM32 ベースの OpenMV カメラでは、代わりに入力キャプチャ用に構成した pyb.Timer を使用してください。OpenMV Cam AE3(alif ポート)では公開されていません。
使用例:
from machine import Pin, Counter
counter = Counter(0, Pin("P0", Pin.IN))
counter.value(0)
# ... wait some time ...
print("pulses:", counter.value())
コンストラクタ¶
- class machine.Counter(id: int, src: Pin | None = None, *, direction: int | Pin = UP, filter_ns: int = 0, max: int | None = None, min: int = 0, reset: Pin | None = None, match: int | None = None, match_pin: Pin | None = None)¶
idで識別される QENC カウンターブロックを構築します(またはそのシングルトンを取得します)。RT1062 には複数の QENC ブロックがあります(idで 1 つを選択します)。同じ引数は、既存のインスタンスを再構成するためのinit()でも受け付けられます。src-- 立ち上がりエッジをカウントする入力ピンです。direction(キーワード専用)-- 固定方向を設定するUP/DOWN、または論理レベルで実行時に方向を選択するPinのいずれかです(low = カウントアップ、high = カウントダウン)。filter_ns(キーワード専用)-- パルスがカウントされるために入力が安定している必要のある最小時間(ナノ秒単位)です。ドライバはこの値以下で最も長いハードウェアフィルタを使用します。0(デフォルト)はフィルタリングを無効にします。max/min(キーワード専用)-- 位置カウンターのモジュロ範囲です。カウンターがmaxを超えるとminにラップし、サイクルカウンターがインクリメントされます(カウントダウン時はデクリメント)。maxとminの両方に0を渡すと範囲が無効になります。reset(キーワード専用)-- 立ち上がりエッジで位置カウンターを開始値に再ロードするPinです(サイクルカウンターは変更されません)。match(キーワード専用)--IRQ_MATCH割り込みが発生するカウンター値です。Noneを渡すと無効になります。match_pin(キーワード専用)-- 位置カウンターがmatchと等しい間は high に駆動され、それ以外では low になるPinです。メソッド¶
- init(src: Pin | None = None, *, direction: int | Pin = UP, filter_ns: int = 0, max: int | None = None, min: int = 0, reset: Pin | None = None, match: int | None = None, match_pin: Pin | None = None) None¶
指定したパラメータでカウンターを再初期化し、その位置カウンターとサイクルカウンターをリセットします。コンストラクタと同じキーワード引数を受け付けます。
- deinit() None¶
カウンターを停止し、保留中の割り込みをすべて無効にして、QENC ハードウェアリソースを解放します。ソフトリセットでは、すべての
Counterインスタンスが自動的に deinit されます。
- value() int¶
- value(value: int, /) int
符号付き位置カウンターを取得または設定します。
引数なしの場合は、現在のカウントを返します。
単一の
value引数を指定した場合は、位置カウンターをアトミックにvalueに設定し、以前のカウントを返します。一般的な慣用句counter.value(0)は、測定ウィンドウの開始時にカウンターをリセットします。
- cycles() int¶
- cycles(value: int, /) int
サイクルカウンターを取得または設定します。これは符号付き 16 ビット整数で、位置カウンターが
max/minを何回超えてラップしたかを追跡します。引数なしの場合は、現在のサイクルカウントを返します。
単一の
value引数を指定した場合は、サイクルカウンターをvalueに設定し(位置カウンターには触れません)、以前のカウントを返します。
- irq(handler: Callable[[Counter], None] | None = None, trigger: int = 0, hard: bool = False) None¶
サポートされている QENC イベントのいずれかが発生したときに呼び出されるコールバックを登録します。ハンドラは唯一の引数として
Counterオブジェクトを受け取ります。具体的なイベントは、ハンドラ内で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を渡すと割り込みが無効になります。
定数¶