klasa Counter – brojač impulsa

Klasa Counter obavija i.MX RT QENC (kvadraturni enkoder / brojač) sklopovski blok konfiguriran kao brojač impulsa s jednim ulazom. Svaki rastući brid na izvornom pinu povećava (ili smanjuje) sklopovski brojač položaja; softverski povratni pozivi mogu se pridružiti događajima ROLL_OVER / ROLL_UNDER / RESET / INDEX / MATCH.

Dostupno samo na OpenMV Cam RT1062 (mimxrt port). Na OpenMV kamerama temeljenim na STM32 umjesto toga koristite pyb.Timer konfiguriran za hvatanje ulaza (input-capture). Nije izloženo na OpenMV Cam AE3 (alif port).

Primjer upotrebe:

from machine import Pin, Counter

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

Konstruktori

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)

Konstruira (ili dohvaća jedinstvenu instancu za) QENC brojački blok određen s id. RT1062 ima više QENC blokova (id odabire jedan); iste argumente prihvaća i init() za ponovnu konfiguraciju postojeće instance.

src – ulazni pin čiji se rastući bridovi broje.

direction (samo kao ključna riječ) – ili UP / DOWN za postavljanje fiksnog smjera, ili Pin čija logička razina odabire smjer tijekom rada (nisko = brojanje prema gore, visoko = brojanje prema dolje).

filter_ns (samo kao ključna riječ) – minimalno vrijeme stabilnosti ulaza u nanosekundama da bi se impuls brojao. 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đe max, omota se na min i brojač ciklusa se povećava (smanjuje pri brojanju prema dolje). Prosljeđivanje i max i min kao 0 onemogućuje raspon.

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 brojača pri kojoj se okida prekid IRQ_MATCH. Proslijedite None da onemogućite.

match_pin (samo kao ključna riječ) – Pin postavljen visoko dok je brojač položaja jednak match, a inače nisko.

Metode

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

Ponovno inicijalizira brojač 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 brojač, onemogućuje sve neobrađene prekide i oslobađa QENC sklopovske resurse. Meko resetiranje (soft reset) automatski deinicijalizira sve Counter instance.

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

Dohvaća ili postavlja predznakom označen brojač položaja.

Bez argumenta vraća trenutnu vrijednost brojanja.

S jednim argumentom value atomarno postavlja brojač položaja na value i vraća prethodnu vrijednost brojanja. Uobičajeni idiom counter.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 value postavlja brojač ciklusa na value (bez utjecaja na brojač položaja) i vraća prethodnu vrijednost.

irq(handler: Callable[[Counter], 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 Counter kao svoj jedini argument; pojedini se događaj može identificirati unutar rukovatelja putem irq.flags().

trigger je bitovna maska jedne ili više IRQ_* konstanti:

  • IRQ_RESET – pin reset je aktiviran.

  • IRQ_INDEX – prijelaz na liniji index.

  • IRQ_MATCH – brojač položaja je dosegao match. Podudaranje se automatski onemogućuje nakon okidanja i mora se ponovno naoružati ponovnom instalacijom IRQ-a.

  • IRQ_ROLL_OVER – brojač položaja omotao se s max na min.

  • IRQ_ROLL_UNDER – brojač položaja omotao se s min na max.

hard=True registrira rukovatelja tvrdim prekidom (manje kašnjenje, ali rukovatelj ne smije alocirati memoriju). Zadano je raspoređeni povratni poziv. Proslijedite handler=None da onemogućite prekid.

Konstante

UP: int

Proslijedite u direction za brojanje rastućih bridova kao pozitivnih.

DOWN: int

Proslijedite u direction za brojanje rastućih bridova kao negativnih.

IRQ_RESET: int

Zastavica okidanja irq() za događaj pina reset.

IRQ_INDEX: int

Zastavica okidanja irq() za događaj indeksnog ulaza.

IRQ_MATCH: int

Zastavica okidanja irq() za događaj podudaranja položaja.

IRQ_ROLL_OVER: int

Zastavica okidanja irq() za prelijevanje brojača (max -> min).

IRQ_ROLL_UNDER: int

Zastavica okidanja irq() za podlijevanje brojača (min -> max).