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 przezinit()w celu ponownej konfiguracji istniejącej instancji.phase_a/phase_bto dwa pinowe wejścia kwadraturowe.phases(tylko jako słowo kluczowe) wybiera ziarnistość dekodowania. QENC obsługuje1(zliczanie jednego zbocza na parę impulsów),2(oba zbocza fazy A) lub4(„dekodowanie 4x” – zliczane jest każde zbocze obu faz). Domyślnie1.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 przekroczymax, zawija się domin, a licznik cykli zwiększa się (zmniejsza przy ruchu w drugą stronę). Przekazanie obu jako0wyłącza zakres.index(tylko jako słowo kluczowe) –Pin, którego zbocze narastające przeładowuje licznik pozycji domini 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 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(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
valueatomowo ustawia licznik pozycji navaluei zwraca poprzednią wartość licznika. Częsty idiomenc.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[[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
Encoderjako 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– pinindexzostał 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ę 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¶