klassen Encoder – kvadraturavkodare¶
Klassen Encoder kapslar in i.MX RT QENC-hårdvarublocket konfigurerat som en kvadraturavkodare. Den följer en tvåfassignal (phase_a / phase_b) från en roterande kodare, ökar eller minskar en 32-bitars positionsräknare enligt fasrelationen, och kan kombineras med valfria index / reset-ingångar för absolut referens.
Endast tillgänglig på OpenMV Cam RT1062 (mimxrt-porten). På de STM32-baserade OpenMV-kamerorna använder du i stället pyb.Timer konfigurerad för kodarläge (Timer.ENC_AB). Exponeras inte på OpenMV Cam AE3 (alif-porten).
Exempel på användning:
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())
Konstruktorer¶
- 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)¶
Konstruera (eller hämta singletonen för) QENC-kodarblocket som identifieras av
id. Samma argument accepteras även avinit()för att omkonfigurera en befintlig instans.phase_a/phase_bär de två kvadraturingångsstiften.phases(endast nyckelord) väljer avkodningsupplösningen. QENC stöder1(räknar en flank per pulspar),2(båda flankerna på fas A) eller4(”4x-avkodning” – varje flank på båda faserna räknas). Standard1.filter_ns(endast nyckelord) – minsta tid i nanosekunder som insignalen måste vara stabil. Drivrutinen använder det längsta hårdvarufiltret som är mindre än eller lika med detta värde.0(standard) inaktiverar filtreringen.max/min(endast nyckelord) – modulo-intervall för positionsräknaren. När räknaren rullar förbimaxslår den runt tillminoch cykelräknaren ökar (minskar vid rörelse åt andra hållet). Om båda anges som0inaktiveras intervallet.index(endast nyckelord) – ettPinvars stigande flank laddar om positionsräknaren tillminoch uppdaterar cykelräknaren enligt riktningen; typisk användning är ett Z-kanalsmärke på en roterande kodare.reset(endast nyckelord) – ettPinvars stigande flank laddar om positionsräknaren till startvärdet (utan att ändra cykelräknaren).match(endast nyckelord) – positionsvärdet vid vilket ettIRQ_MATCH-avbrott utlöses. AngeNoneför att inaktivera.match_pin(endast nyckelord) – ettPinsom drivs högt medan positionsräknaren är lika medmatchoch lågt annars.Metoder¶
- 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¶
Initiera om kodaren med de angivna parametrarna och nollställ dess positions- och cykelräknare. Accepterar samma nyckelordsargument som konstruktorn.
- deinit() None¶
Stoppa kodaren, inaktivera eventuella väntande avbrott och frigör QENC-hårdvaruresurserna. En mjuk återställning avinitierar automatiskt alla
Encoder-instanser.
- value() int¶
- value(value: int, /) int
Hämta eller ange den teckenförsedda positionsräknaren.
Utan argument returneras den aktuella positionen.
Med ett enda
value-argument ställs positionsräknaren atomärt tillvalueoch det föregående värdet returneras. Det vanliga uttrycketenc.value(0)nollställer räknaren i början av ett mätfönster.
- cycles() int¶
- cycles(value: int, /) int
Hämta eller ange cykelräknaren, ett teckenförsett 16-bitars heltal som håller reda på hur många gånger positionsräknaren har rullat förbi
max/min.Utan argument returneras det aktuella cykelvärdet.
Med ett enda
value-argument ställs cykelräknaren tillvalue(utan att röra positionsräknaren) och det föregående värdet returneras.
- irq(handler: Callable[[Encoder], None] | None = None, trigger: int = 0, hard: bool = False) None¶
Registrera ett återanrop som anropas när någon av de QENC-händelser som stöds utlöses. Hanteraren får
Encoder-objektet som sitt enda argument; den specifika händelsen kan identifieras inuti hanteraren viairq.flags().triggerär en bitmask med en eller fleraIRQ_*-konstanter:IRQ_RESET–reset-stiftet aktiverades.IRQ_INDEX–index-stiftet aktiverades.IRQ_MATCH– positionsräknaren nåddematch. Match är engångsutlösande och måste återaktiveras genom att IRQ:n installeras om.IRQ_ROLL_OVER– positionsräknaren slog runt frånmaxtillmin.IRQ_ROLL_UNDER– positionsräknaren slog runt frånmintillmax.
hard=Trueregistrerar en hård avbrottshanterare (lägre latens, men hanteraren får inte allokera minne). Standard är ett schemalagt återanrop. Angehandler=Noneför att inaktivera avbrottet.
Konstanter¶