class Encoder – kvadratuuridekooderi¶
Encoder-luokka kapseloi i.MX RT QENC -laitteistolohkon, joka on konfiguroitu kvadratuuridekooderiksi. Se seuraa rotaatioenkooderista tulevaa kaksivaiheista signaalia (phase_a / phase_b), kasvattaa tai pienentää 32-bittistä sijaintilaskuria vaihesuhteen mukaan, ja se voidaan yhdistää valinnaisten index / reset -tulojen kanssa absoluuttista viittausta varten.
Saatavilla vain OpenMV Cam RT1062 -laitteessa (mimxrt-portti). STM32-pohjaisissa OpenMV-kameroissa käytä sen sijaan enkooderitilaan konfiguroitua pyb.Timer -ajastinta (Timer.ENC_AB). Ei käytettävissä OpenMV Cam AE3 -laitteessa (alif-portti).
Esimerkkikäyttö:
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())
Konstruktorit¶
- 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)¶
Luo (tai hae singleton) QENC-enkooderilohkolle, joka tunnistetaan tunnisteella
id. Samat argumentit hyväksyy myösinit()olemassa olevan instanssin uudelleenkonfigurointiin.phase_a/phase_bovat kaksi kvadratuuritulonastaa.phases(vain avainsanana) valitsee dekoodauksen tarkkuuden. QENC tukee arvoja1(laske yksi reuna pulssiparia kohti),2(vaiheen A molemmat reunat) tai4(”4x-dekoodaus” – molempien vaiheiden jokainen reuna lasketaan). Oletus1.filter_ns(vain avainsanana) – vähimmäisaika nanosekunteina, jonka ajan tulon on pysyttävä vakaana. Ajuri käyttää pisintä laitteistosuodatinta, joka on enintään tämän arvon suuruinen.0(oletus) poistaa suodatuksen käytöstä.max/min(vain avainsanana) – sijaintilaskurin modulo-alue. Kun laskuri ylittää arvonmax, se kiertyy arvoonminja kierroslaskuri kasvaa (pienenee liikuttaessa toiseen suuntaan). Antamalla molemmat arvoksi0alue poistetaan käytöstä.index(vain avainsanana) –Pin, jonka nouseva reuna lataa sijaintilaskurin uudelleen arvoonminja päivittää kierroslaskurin suunnan mukaan; tyypillinen käyttö on rotaatioenkooderin Z-kanavan merkki.reset(vain avainsanana) –Pin, jonka nouseva reuna lataa sijaintilaskurin uudelleen aloitusarvoon (muuttamatta kierroslaskuria).match(vain avainsanana) – sijaintiarvo, jossaIRQ_MATCH-keskeytys laukeaa. AnnaNonepoistaaksesi käytöstä.match_pin(vain avainsanana) –Pin, joka ohjataan korkeaksi, kun sijaintilaskuri on yhtä suuri kuinmatch, ja matalaksi muulloin.Metodit¶
- 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¶
Alusta enkooderi uudelleen annetuilla parametreilla ja nollaa sen sijainti- ja kierroslaskurit. Hyväksyy samat avainsana-argumentit kuin konstruktori.
- deinit() None¶
Pysäytä enkooderi, poista odottavat keskeytykset käytöstä ja vapauta QENC-laitteistoresurssit. Pehmeä uudelleenkäynnistys poistaa kaikki
Encoder-instanssit automaattisesti.
- value() int¶
- value(value: int, /) int
Hae tai aseta etumerkillinen sijaintilaskuri.
Ilman argumenttia palauttaa nykyisen sijainnin.
Yhdellä
value-argumentilla asettaa atomisesti sijaintilaskurin arvoonvalueja palauttaa edellisen lukeman. Yleinen tapaenc.value(0)nollaa laskurin mittausjakson alussa.
- cycles() int¶
- cycles(value: int, /) int
Hae tai aseta kierroslaskuri, etumerkillinen 16-bittinen kokonaisluku, joka seuraa kuinka monta kertaa sijaintilaskuri on ylittänyt arvot
max/min.Ilman argumenttia palauttaa nykyisen kierroslukeman.
Yhdellä
value-argumentilla asettaa kierroslaskurin arvoonvalue(koskematta sijaintilaskuriin) ja palauttaa edellisen lukeman.
- irq(handler: Callable[[Encoder], None] | None = None, trigger: int = 0, hard: bool = False) None¶
Rekisteröi takaisinkutsu, joka käynnistetään, kun jokin tuetuista QENC-tapahtumista laukeaa. Käsittelijä saa
Encoder-objektin ainoana argumenttinaan; tietty tapahtuma voidaan tunnistaa käsittelijän sisälläirq.flags()-kutsulla.triggeron yhden tai useammanIRQ_*-vakion bittimaski:IRQ_RESET–reset-nasta aktivoitui.IRQ_INDEX–index-nasta aktivoitui.IRQ_MATCH– sijaintilaskuri saavutti arvonmatch. Match on kertalaukaiseva, ja se on viritettävä uudelleen asentamalla IRQ uudelleen.IRQ_ROLL_OVER– sijaintilaskuri kiertyi arvostamaxarvoonmin.IRQ_ROLL_UNDER– sijaintilaskuri kiertyi arvostaminarvoonmax.
hard=Truerekisteröi kovan keskeytyskäsittelijän (pienempi viive, mutta käsittelijä ei saa varata muistia). Oletuksena on ajastettu takaisinkutsu. Annahandler=Nonepoistaaksesi keskeytyksen käytöstä.
Vakiot¶