class Counter – pulssilaskuri

Counter-luokka kapseloi i.MX RT QENC -laitteistolohkon (kvadratuurienkooderi / laskuri), joka on konfiguroitu yhden tulon pulssilaskuriksi. Jokainen lähdenastan nouseva reuna kasvattaa (tai pienentää) laitteiston sijaintilaskuria; ohjelmistotakaisinkutsuja voi liittää ROLL_OVER- / ROLL_UNDER- / RESET- / INDEX- / MATCH-tapahtumiin.

Saatavilla vain OpenMV Cam RT1062 -laitteessa (mimxrt-portti). STM32-pohjaisissa OpenMV-kameroissa käytä sen sijaan input-capture-tilaan konfiguroitua pyb.Timer -ajastinta. Ei käytettävissä OpenMV Cam AE3 -laitteessa (alif-portti).

Esimerkkikäyttö:

from machine import Pin, Counter

counter = Counter(0, Pin("P0", Pin.IN))
counter.value(0)
# ... wait some time ...
print("pulses:", counter.value())

Konstruktorit

class machine.Counter(id: int, src: Pin | None = None, *, direction: int | Pin = UP, filter_ns: int = 0, max: int | None = None, min: int = 0, reset: Pin | None = None, match: int | None = None, match_pin: Pin | None = None)

Luo (tai hae singleton) QENC-laskurilohkolle, joka tunnistetaan tunnisteella id. RT1062-laitteessa on useita QENC-lohkoja (id valitsee yhden); samat argumentit hyväksyy myös init() olemassa olevan instanssin uudelleenkonfigurointiin.

src – tulonasta, jonka nousevat reunat lasketaan.

direction (vain avainsanana) – joko UP / DOWN kiinteän suunnan asettamiseksi, tai Pin, jonka loogisen tason avulla suunta valitaan ajonaikaisesti (matala = laske ylöspäin, korkea = laske alaspäin).

filter_ns (vain avainsanana) – vähimmäisaika nanosekunteina, jonka ajan tulon on pysyttävä vakaana, jotta pulssi lasketaan. 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 laskettaessa alaspäin). Antamalla sekä max että min arvoksi 0 alue poistetaan käytöstä.

reset (vain avainsanana) – Pin, jonka nouseva reuna lataa sijaintilaskurin uudelleen aloitusarvoon (muuttamatta kierroslaskuria).

match (vain avainsanana) – laskuriarvo, 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(src: Pin | None = None, *, direction: int | Pin = UP, filter_ns: int = 0, max: int | None = None, min: int = 0, reset: Pin | None = None, match: int | None = None, match_pin: Pin | None = None) None

Alusta laskuri uudelleen annetuilla parametreilla ja nollaa sen sijainti- ja kierroslaskurit. Hyväksyy samat avainsana-argumentit kuin konstruktori.

deinit() None

Pysäytä laskuri, poista odottavat keskeytykset käytöstä ja vapauta QENC-laitteistoresurssit. Pehmeä uudelleenkäynnistys poistaa kaikki Counter -instanssit automaattisesti.

value() int
value(value: int, /) int

Hae tai aseta etumerkillinen sijaintilaskuri.

Ilman argumenttia palauttaa nykyisen lukeman.

Yhdellä value-argumentilla asettaa atomisesti sijaintilaskurin arvoon value ja palauttaa edellisen lukeman. Yleinen tapa counter.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[[Counter], 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 Counter -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_INDEX – siirtymä index-linjalla.

  • IRQ_MATCH – sijaintilaskuri saavutti arvon match. Match poistetaan automaattisesti käytöstä laukeamisen jälkeen, 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

UP: int

Anna parametrille direction, jotta nousevat reunat lasketaan positiivisina.

DOWN: int

Anna parametrille direction, jotta nousevat reunat lasketaan negatiivisina.

IRQ_RESET: int

irq() -laukaisulippu reset-nastan tapahtumalle.

IRQ_INDEX: int

irq() -laukaisulippu index-tulon 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).