class Encoder – dekoder kwadraturowy

Klasa Encoder opakowuje blok sprzętowy QENC układu i.MX RT skonfigurowany jako dekoder kwadraturowy. Śledzi ona dwufazowy sygnał (phase_a / phase_b) pochodzący z enkodera obrotowego, zwiększa lub zmniejsza 32-bitowy licznik pozycji zgodnie z zależnością fazową i może być łączona z opcjonalnymi wejściami index / reset w celu odniesienia bezwzględnego.

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 trybu enkodera (Timer.ENC_AB). Niedostępne na OpenMV Cam AE3 (port alif).

Przykład użycia:

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())

Konstruktory

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)

Tworzy (lub pobiera singleton dla) blok enkodera QENC identyfikowany przez id. Te same argumenty są również akceptowane przez init() w celu ponownej konfiguracji istniejącej instancji.

phase_a / phase_b to dwa pinowe wejścia kwadraturowe.

phases (tylko jako słowo kluczowe) wybiera ziarnistość dekodowania. QENC obsługuje 1 (zliczanie jednego zbocza na parę impulsów), 2 (oba zbocza fazy A) lub 4 („dekodowanie 4x” – zliczane jest każde zbocze obu faz). Domyślnie 1.

filter_ns (tylko jako słowo kluczowe) – minimalny czas stabilności wejścia w nanosekundach. 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 ruchu w drugą stronę). Przekazanie obu jako 0 wyłącza zakres.

index (tylko jako słowo kluczowe) – Pin, którego zbocze narastające przeładowuje licznik pozycji do min i aktualizuje licznik cykli zgodnie z kierunkiem; typowym zastosowaniem jest znacznik kanału Z na enkoderze obrotowym.

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ść pozycji, 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(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

Ponownie inicjalizuje enkoder z podanymi parametrami i zeruje jego liczniki pozycji oraz cykli. Akceptuje te same argumenty słów kluczowych co konstruktor.

deinit() None

Zatrzymuje enkoder, wyłącza wszelkie oczekujące przerwania i zwalnia zasoby sprzętowe QENC. Miękki reset automatycznie deinicjalizuje wszystkie instancje Encoder.

value() int
value(value: int, /) int

Pobiera lub ustawia licznik pozycji ze znakiem.

Bez argumentu zwraca bieżącą pozycję.

Z pojedynczym argumentem value atomowo ustawia licznik pozycji na value i zwraca poprzednią wartość licznika. Częsty idiom enc.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[[Encoder], 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 Encoder 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 – pin index został aktywowany.

  • IRQ_MATCH – licznik pozycji osiągnął match. Match jest jednokrotny 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

IRQ_RESET: int

Flaga wyzwalania irq() dla zdarzenia pinu reset.

IRQ_INDEX: int

Flaga wyzwalania irq() dla zdarzenia pinu index.

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).