class Counter -- 脈衝計數器¶
Counter 類別封裝了設定為單一輸入脈衝計數器的 i.MX RT QENC(正交編碼器 / 計數器)硬體區塊。來源接腳上的每個上升緣都會使硬體位置計數器遞增(或遞減);可將軟體回呼函式附加到 ROLL_OVER / ROLL_UNDER / RESET / INDEX / MATCH 事件上。
僅在 OpenMV Cam RT1062(mimxrt port)上可用。在以 STM32 為基礎的 OpenMV cam 上,請改用設定為輸入捕捉的 pyb.Timer。OpenMV Cam AE3(alif port)上未提供此功能。
使用範例:
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用於選擇其中之一);init()也接受相同的參數來重新設定既有的執行個體。src-- 計數其上升緣的輸入接腳。direction(僅限關鍵字)-- 可以是UP/DOWN以設定固定方向,或是一個Pin,由其邏輯電位在執行階段選擇方向(低電位 = 向上計數,高電位 = 向下計數)。filter_ns(僅限關鍵字)-- 一個脈衝要被計數時,輸入訊號需保持穩定的最短時間(奈秒)。驅動程式會採用小於或等於此值的最長硬體濾波器。0(預設值)會停用濾波。max/min(僅限關鍵字)-- 位置計數器的模數範圍。當計數器超過max時會回繞至min,而循環計數器遞增(向下計數時則遞減)。將max與min都傳入0會停用範圍限制。reset(僅限關鍵字)-- 一個Pin,其上升緣會將位置計數器重新載入為起始值(而不改變循環計數器)。match(僅限關鍵字)-- 觸發IRQ_MATCH中斷的計數器值。傳入None以停用。match_pin(僅限關鍵字)-- 一個Pin,當位置計數器等於match時被驅動為高電位,否則為低電位。方法¶
- 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¶
以給定的參數重新初始化計數器,並重設其位置與循環計數器。接受與建構子相同的關鍵字引數。
- 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是一個或多個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以停用中斷。
常數¶