klasa Encoder – kvadraturni dekoder¶
Klasa Encoder obavija i.MX RT QENC sklopovski blok konfiguriran kao kvadraturni dekoder. Prati dvofazni signal (phase_a / phase_b) koji dolazi iz rotacijskog enkodera, povećava ili smanjuje 32-bitni brojač položaja prema faznom odnosu, a može se kombinirati s opcionalnim ulazima index / reset za apsolutno referenciranje.
Dostupno samo na OpenMV Cam RT1062 (mimxrt port). Na OpenMV kamerama temeljenim na STM32 umjesto toga koristite pyb.Timer konfiguriran za enkoderski način rada (Timer.ENC_AB). Nije izloženo na OpenMV Cam AE3 (alif port).
Primjer upotrebe:
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())
Konstruktori¶
- 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)¶
Konstruira (ili dohvaća jedinstvenu instancu za) QENC enkoderski blok određen s
id. Iste argumente prihvaća iinit()za ponovnu konfiguraciju postojeće instance.phase_a/phase_bsu dva kvadraturna ulazna pina.phases(samo kao ključna riječ) odabire granularnost dekodiranja. QENC podržava1(broji jedan brid po paru impulsa),2(oba brida faze A) ili4(„4x dekodiranje” – broji se svaki brid obiju faza). Zadano1.filter_ns(samo kao ključna riječ) – minimalno vrijeme stabilnosti ulaza u nanosekundama. Upravljački program koristi najduži sklopovski filtar koji je manji ili jednak ovoj vrijednosti.0(zadano) onemogućuje filtriranje.max/min(samo kao ključna riječ) – modulo raspon brojača položaja. Kada brojač prijeđemax, omota se namini brojač ciklusa se povećava (smanjuje pri kretanju u suprotnom smjeru). Prosljeđivanje oba kao0onemogućuje raspon.index(samo kao ključna riječ) –Pinčiji rastući brid ponovno učitava brojač položaja namini ažurira brojač ciklusa prema smjeru; tipična upotreba je oznaka Z-kanala na rotacijskom enkoderu.reset(samo kao ključna riječ) –Pinčiji rastući brid ponovno učitava brojač položaja na početnu vrijednost (bez promjene brojača ciklusa).match(samo kao ključna riječ) – vrijednost položaja pri kojoj se okida prekidIRQ_MATCH. ProslijediteNoneda onemogućite.match_pin(samo kao ključna riječ) –Pinpostavljen visoko dok je brojač položaja jednakmatch, a inače nisko.Metode¶
- 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¶
Ponovno inicijalizira enkoder sa zadanim parametrima te resetira njegove brojače položaja i ciklusa. Prihvaća iste argumente s ključnom riječi kao i konstruktor.
- deinit() None¶
Zaustavlja enkoder, onemogućuje sve neobrađene prekide i oslobađa QENC sklopovske resurse. Meko resetiranje (soft reset) automatski deinicijalizira sve
Encoderinstance.
- value() int¶
- value(value: int, /) int
Dohvaća ili postavlja predznakom označen brojač položaja.
Bez argumenta vraća trenutni položaj.
S jednim argumentom
valueatomarno postavlja brojač položaja navaluei vraća prethodnu vrijednost brojanja. Uobičajeni idiomenc.value(0)resetira brojač na početku mjernog prozora.
- cycles() int¶
- cycles(value: int, /) int
Dohvaća ili postavlja brojač ciklusa, predznakom označen 16-bitni cijeli broj koji prati koliko je puta brojač položaja prešao
max/min.Bez argumenta vraća trenutnu vrijednost brojača ciklusa.
S jednim argumentom
valuepostavlja brojač ciklusa navalue(bez utjecaja na brojač položaja) i vraća prethodnu vrijednost.
- irq(handler: Callable[[Encoder], None] | None = None, trigger: int = 0, hard: bool = False) None¶
Registrira povratni poziv koji se poziva kada se okine jedan od podržanih QENC događaja. Rukovatelj prima objekt
Encoderkao svoj jedini argument; pojedini se događaj može identificirati unutar rukovatelja putemirq.flags().triggerje bitovna maska jedne ili višeIRQ_*konstanti:IRQ_RESET– pinresetje aktiviran.IRQ_INDEX– pinindexje aktiviran.IRQ_MATCH– brojač položaja je dosegaomatch. Podudaranje je jednokratno i mora se ponovno naoružati ponovnom instalacijom IRQ-a.IRQ_ROLL_OVER– brojač položaja omotao se smaxnamin.IRQ_ROLL_UNDER– brojač položaja omotao se sminnamax.
hard=Trueregistrira rukovatelja tvrdim prekidom (manje kašnjenje, ali rukovatelj ne smije alocirati memoriju). Zadano je raspoređeni povratni poziv. Proslijeditehandler=Noneda onemogućite prekid.
Konstante¶