clasa Counter – numărător de impulsuri¶
Clasa Counter încapsulează blocul hardware i.MX RT QENC (encoder în cuadratură / numărător) configurat ca numărător de impulsuri cu o singură intrare. Fiecare front crescător de pe pinul sursă incrementează (sau decrementează) un numărător hardware de poziție; funcții de retroapelare (callback) software pot fi atașate evenimentelor ROLL_OVER / ROLL_UNDER / RESET / INDEX / MATCH.
Disponibil numai pe OpenMV Cam RT1062 (portul mimxrt). Pe camerele OpenMV bazate pe STM32, folosiți în schimb pyb.Timer configurat pentru captura intrării. Nu este expus pe OpenMV Cam AE3 (portul alif).
Exemplu de utilizare:
from machine import Pin, Counter
counter = Counter(0, Pin("P0", Pin.IN))
counter.value(0)
# ... wait some time ...
print("pulses:", counter.value())
Constructori¶
- 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)¶
Construiește (sau obține instanța unică pentru) blocul numărător QENC identificat prin
id. RT1062 are mai multe blocuri QENC (idselectează unul); aceleași argumente sunt acceptate și deinit()pentru a reconfigura o instanță existentă.src– pinul de intrare ale cărui fronturi crescătoare sunt numărate.direction(numai ca argument-cheie) – fieUP/DOWNpentru a stabili o direcție fixă, fie unPinal cărui nivel logic selectează direcția în timpul execuției (nivel jos = numărare crescătoare, nivel ridicat = numărare descrescătoare).filter_ns(numai ca argument-cheie) – timpul minim de stabilitate a intrării, în nanosecunde, necesar pentru ca un impuls să fie numărat. Driverul folosește cel mai lung filtru hardware care este mai mic sau egal cu această valoare.0(valoarea implicită) dezactivează filtrarea.max/min(numai ca argument-cheie) – intervalul modulo al numărătorului de poziție. Când numărătorul depășeștemax, acesta se readuce lamin, iar numărătorul de cicluri se incrementează (se decrementează la numărarea descrescătoare). Transmiterea atât amaxcât și aminca0dezactivează intervalul.reset(numai ca argument-cheie) – unPinal cărui front crescător reîncarcă numărătorul de poziție la valoarea de pornire (fără a modifica numărătorul de cicluri).match(numai ca argument-cheie) – valoarea numărătorului la care se declanșează o întrerupereIRQ_MATCH. TransmitețiNonepentru a dezactiva.match_pin(numai ca argument-cheie) – unPinmenținut la nivel ridicat cât timp numărătorul de poziție este egal cumatchși la nivel jos în rest.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¶
Reinițializează numărătorul cu parametrii dați și resetează numărătoarele sale de poziție și de cicluri. Acceptă aceleași argumente-cheie ca și constructorul.
- deinit() None¶
Oprește numărătorul, dezactivează orice întreruperi în așteptare și eliberează resursele hardware QENC. O resetare ușoară (soft reset) dezinițializează automat toate instanțele
Counter.
- value() int¶
- value(value: int, /) int
Citește sau setează numărătorul de poziție cu semn.
Fără argument, returnează valoarea curentă a numărătorului.
Cu un singur argument
value, setează atomic numărătorul de poziție lavalueși returnează valoarea anterioară. Idiomul uzualcounter.value(0)resetează numărătorul la începutul unei ferestre de măsurare.
- cycles() int¶
- cycles(value: int, /) int
Citește sau setează numărătorul de cicluri, un întreg cu semn pe 16 biți care urmărește de câte ori numărătorul de poziție a depășit
max/min.Fără argument, returnează valoarea curentă a numărătorului de cicluri.
Cu un singur argument
value, setează numărătorul de cicluri lavalue(fără a atinge numărătorul de poziție) și returnează valoarea anterioară.
- irq(handler: Callable[[Counter], None] | None = None, trigger: int = 0, hard: bool = False) None¶
Înregistrează o funcție de retroapelare (callback) care va fi invocată când se declanșează unul dintre evenimentele QENC acceptate. Funcția de tratare primește obiectul
Counterca singur argument; evenimentul specific poate fi identificat în interiorul funcției prinirq.flags().triggereste o mască de biți alcătuită din una sau mai multe constanteIRQ_*:IRQ_RESET– pinulreseta fost activat.IRQ_INDEX– o tranziție pe liniaindex.IRQ_MATCH– numărătorul de poziție a atinsmatch. Potrivirea este dezactivată automat după declanșare și trebuie reactivată prin reinstalarea IRQ-ului.IRQ_ROLL_OVER– numărătorul de poziție s-a readus de lamaxlamin.IRQ_ROLL_UNDER– numărătorul de poziție s-a readus de laminlamax.
hard=Trueînregistrează o funcție de tratare a întreruperilor de tip hard (latență mai mică, dar funcția de tratare nu trebuie să aloce memorie). Valoarea implicită este o funcție de retroapelare programată. Transmitețihandler=Nonepentru a dezactiva întreruperea.
Constante¶