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ös init() olemassa olevan instanssin uudelleenkonfigurointiin.

phase_a / phase_b ovat kaksi kvadratuuritulonastaa.

phases (vain avainsanana) valitsee dekoodauksen tarkkuuden. QENC tukee arvoja 1 (laske yksi reuna pulssiparia kohti), 2 (vaiheen A molemmat reunat) tai 4 (”4x-dekoodaus” – molempien vaiheiden jokainen reuna lasketaan). Oletus 1.

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ää arvon max, se kiertyy arvoon min ja kierroslaskuri kasvaa (pienenee liikuttaessa toiseen suuntaan). Antamalla molemmat arvoksi 0 alue poistetaan käytöstä.

index (vain avainsanana) – Pin, jonka nouseva reuna lataa sijaintilaskurin uudelleen arvoon min ja 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, jossa IRQ_MATCH -keskeytys laukeaa. Anna None poistaaksesi käytöstä.

match_pin (vain avainsanana) – Pin, joka ohjataan korkeaksi, kun sijaintilaskuri on yhtä suuri kuin match, 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 arvoon value ja palauttaa edellisen lukeman. Yleinen tapa enc.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 arvoon value (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.

trigger on yhden tai useamman IRQ_* -vakion bittimaski:

  • IRQ_RESETreset-nasta aktivoitui.

  • IRQ_INDEXindex-nasta aktivoitui.

  • IRQ_MATCH – sijaintilaskuri saavutti arvon match. Match on kertalaukaiseva, ja se on viritettävä uudelleen asentamalla IRQ uudelleen.

  • IRQ_ROLL_OVER – sijaintilaskuri kiertyi arvosta max arvoon min.

  • IRQ_ROLL_UNDER – sijaintilaskuri kiertyi arvosta min arvoon max.

hard=True rekisteröi kovan keskeytyskäsittelijän (pienempi viive, mutta käsittelijä ei saa varata muistia). Oletuksena on ajastettu takaisinkutsu. Anna handler=None poistaaksesi keskeytyksen käytöstä.

Vakiot

IRQ_RESET: int

irq() -laukaisulippu reset-nastan tapahtumalle.

IRQ_INDEX: int

irq() -laukaisulippu index-nastan tapahtumalle.

IRQ_MATCH: int

irq() -laukaisulippu sijainnin täsmäystapahtumalle.

IRQ_ROLL_OVER: int

irq() -laukaisulippu laskurin ylikiertymälle (max -> min).

IRQ_ROLL_UNDER: int

irq() -laukaisulippu laskurin alikiertymälle (min -> max).