class Counter – licznik impulsów¶
Klasa Counter opakowuje blok sprzętowy QENC (enkoder kwadraturowy / licznik) układu i.MX RT skonfigurowany jako jednowejściowy licznik impulsów. Każde zbocze narastające na pinie źródłowym zwiększa (lub zmniejsza) sprzętowy licznik pozycji; do zdarzeń ROLL_OVER / ROLL_UNDER / RESET / INDEX / MATCH można dołączyć programowe wywołania zwrotne.
Dostępne wyłącznie na OpenMV Cam RT1062 (port mimxrt). Na kamerach OpenMV opartych na STM32 należy zamiast tego użyć pyb.Timer skonfigurowanego do przechwytywania wejścia (input-capture). Niedostępne na OpenMV Cam AE3 (port alif).
Przykład użycia:
from machine import Pin, Counter
counter = Counter(0, Pin("P0", Pin.IN))
counter.value(0)
# ... wait some time ...
print("pulses:", counter.value())
Konstruktory¶
- 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)¶
Tworzy (lub pobiera singleton dla) blok licznika QENC identyfikowany przez
id. RT1062 ma wiele bloków QENC (idwybiera jeden); te same argumenty są również akceptowane przezinit()w celu ponownej konfiguracji istniejącej instancji.src– pin wejściowy, którego zbocza narastające są zliczane.direction(tylko jako słowo kluczowe) – alboUP/DOWN, aby ustawić stały kierunek, alboPin, którego poziom logiczny wybiera kierunek w czasie wykonywania (niski = liczenie w górę, wysoki = liczenie w dół).filter_ns(tylko jako słowo kluczowe) – minimalny czas stabilności wejścia w nanosekundach, aby impuls został zliczony. Sterownik używa najdłuższego filtra sprzętowego mniejszego lub równego tej wartości.0(wartość domyślna) wyłącza filtrowanie.max/min(tylko jako słowo kluczowe) – zakres modulo licznika pozycji. Gdy licznik przekroczymax, zawija się domin, a licznik cykli zwiększa się (zmniejsza przy liczeniu w dół). Przekazanie zarównomax, jak iminjako0wyłącza zakres.reset(tylko jako słowo kluczowe) –Pin, którego zbocze narastające przeładowuje licznik pozycji do wartości początkowej (bez zmiany licznika cykli).match(tylko jako słowo kluczowe) – wartość licznika, przy której wyzwalane jest przerwanieIRQ_MATCH. PrzekażNone, aby wyłączyć.match_pin(tylko jako słowo kluczowe) –Pinustawiany w stan wysoki, gdy licznik pozycji jest równymatch, a w przeciwnym razie w stan niski.Metody¶
- 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¶
Ponownie inicjalizuje licznik z podanymi parametrami i zeruje jego liczniki pozycji oraz cykli. Akceptuje te same argumenty słów kluczowych co konstruktor.
- deinit() None¶
Zatrzymuje licznik, wyłącza wszelkie oczekujące przerwania i zwalnia zasoby sprzętowe QENC. Miękki reset automatycznie deinicjalizuje wszystkie instancje
Counter.
- value() int¶
- value(value: int, /) int
Pobiera lub ustawia licznik pozycji ze znakiem.
Bez argumentu zwraca bieżącą wartość licznika.
Z pojedynczym argumentem
valueatomowo ustawia licznik pozycji navaluei zwraca poprzednią wartość licznika. Częsty idiomcounter.value(0)zeruje licznik na początku okna pomiarowego.
- cycles() int¶
- cycles(value: int, /) int
Pobiera lub ustawia licznik cykli, 16-bitową liczbę całkowitą ze znakiem, która śledzi, ile razy licznik pozycji przekroczył
max/min.Bez argumentu zwraca bieżącą wartość licznika cykli.
Z pojedynczym argumentem
valueustawia licznik cykli navalue(bez naruszania licznika pozycji) i zwraca poprzednią wartość licznika.
- irq(handler: Callable[[Counter], None] | None = None, trigger: int = 0, hard: bool = False) None¶
Rejestruje wywołanie zwrotne, które ma zostać wywołane, gdy wystąpi jedno z obsługiwanych zdarzeń QENC. Procedura obsługi otrzymuje obiekt
Counterjako swój jedyny argument; konkretne zdarzenie można zidentyfikować wewnątrz procedury obsługi za pomocąirq.flags().triggerto maska bitowa jednej lub więcej stałychIRQ_*:IRQ_RESET– pinresetzostał aktywowany.IRQ_INDEX– przejście na liniiindex.IRQ_MATCH– licznik pozycji osiągnąłmatch. Match jest automatycznie wyłączany po wyzwoleniu i musi zostać ponownie uzbrojony przez ponowną instalację IRQ.IRQ_ROLL_OVER– licznik pozycji zawinął się zmaxdomin.IRQ_ROLL_UNDER– licznik pozycji zawinął się zmindomax.
hard=Truerejestruje sprzętową procedurę obsługi przerwań (niższe opóźnienie, ale procedura obsługi nie może alokować pamięci). Domyślnie jest to zaplanowane wywołanie zwrotne. Przekażhandler=None, aby wyłączyć przerwanie.
Stałe¶