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 (id wybiera jeden); te same argumenty są również akceptowane przez init() w celu ponownej konfiguracji istniejącej instancji.

src – pin wejściowy, którego zbocza narastające są zliczane.

direction (tylko jako słowo kluczowe) – albo UP / DOWN, aby ustawić stały kierunek, albo Pin, 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 przekroczy max, zawija się do min, a licznik cykli zwiększa się (zmniejsza przy liczeniu w dół). Przekazanie zarówno max, jak i min jako 0 wyłą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 przerwanie IRQ_MATCH. Przekaż None, aby wyłączyć.

match_pin (tylko jako słowo kluczowe) – Pin ustawiany w stan wysoki, gdy licznik pozycji jest równy match, 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 value atomowo ustawia licznik pozycji na value i zwraca poprzednią wartość licznika. Częsty idiom counter.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 value ustawia licznik cykli na value (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 Counter jako swój jedyny argument; konkretne zdarzenie można zidentyfikować wewnątrz procedury obsługi za pomocą irq.flags().

trigger to maska bitowa jednej lub więcej stałych IRQ_*:

  • IRQ_RESET – pin reset został aktywowany.

  • IRQ_INDEX – przejście na linii index.

  • 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ę z max do min.

  • IRQ_ROLL_UNDER – licznik pozycji zawinął się z min do max.

hard=True rejestruje 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

UP: int

Przekaż do direction, aby zliczać zbocza narastające jako dodatnie.

DOWN: int

Przekaż do direction, aby zliczać zbocza narastające jako ujemne.

IRQ_RESET: int

Flaga wyzwalania irq() dla zdarzenia pinu reset.

IRQ_INDEX: int

Flaga wyzwalania irq() dla zdarzenia wejścia indeksu.

IRQ_MATCH: int

Flaga wyzwalania irq() dla zdarzenia dopasowania pozycji.

IRQ_ROLL_OVER: int

Flaga wyzwalania irq() dla zawinięcia licznika w górę (max -> min).

IRQ_ROLL_UNDER: int

Flaga wyzwalania irq() dla zawinięcia licznika w dół (min -> max).