třída Counter – čítač pulzů¶
Třída Counter obaluje hardwarový blok i.MX RT QENC (kvadraturní enkodér / čítač) nakonfigurovaný jako čítač pulzů s jedním vstupem. Každá náběžná hrana na zdrojovém pinu inkrementuje (nebo dekrementuje) hardwarový čítač pozice; k událostem ROLL_OVER / ROLL_UNDER / RESET / INDEX / MATCH lze připojit softwarové callbacky.
Dostupné pouze na OpenMV Cam RT1062 (port mimxrt). Na kamerách OpenMV založených na STM32 použijte místo toho pyb.Timer nakonfigurovaný pro input-capture. Není k dispozici na OpenMV Cam AE3 (port alif).
Příklad použití:
from machine import Pin, Counter
counter = Counter(0, Pin("P0", Pin.IN))
counter.value(0)
# ... wait some time ...
print("pulses:", counter.value())
Konstruktory¶
- 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)¶
Vytvoří (nebo získá singleton pro) blok čítače QENC identifikovaný pomocí
id. RT1062 má více bloků QENC (idjeden vybírá); stejné argumenty přijímá takéinit()pro rekonfiguraci existující instance.src– vstupní pin, jehož náběžné hrany se počítají.direction(pouze jako klíčové slovo) – buďUP/DOWNpro nastavení pevného směru, neboPin, jehož logická úroveň vybírá směr za běhu (nízká = počítat nahoru, vysoká = počítat dolů).filter_ns(pouze jako klíčové slovo) – minimální doba stability vstupu v nanosekundách, aby byl pulz započítán. Ovladač použije nejdelší hardwarový filtr menší nebo roven této hodnotě.0(výchozí) filtrování vypne.max/min(pouze jako klíčové slovo) – modulo rozsah čítače pozice. Když čítač překročímax, přetočí se namina čítač cyklů se inkrementuje (při počítání dolů dekrementuje). Předání oboumaximinjako0rozsah vypne.reset(pouze jako klíčové slovo) –Pin, jehož náběžná hrana znovu načte čítač pozice na počáteční hodnotu (bez změny čítače cyklů).match(pouze jako klíčové slovo) – hodnota čítače, při níž se vyvolá přerušeníIRQ_MATCH. PředánímNonejej vypnete.match_pin(pouze jako klíčové slovo) –Pin, který je nastaven na vysokou úroveň, dokud se čítač pozice rovnámatch, jinak na nízkou.Metody¶
- 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¶
Znovu inicializuje čítač se zadanými parametry a vynuluje jeho čítače pozice a cyklů. Přijímá stejné klíčové argumenty jako konstruktor.
- deinit() None¶
Zastaví čítač, vypne všechna čekající přerušení a uvolní hardwarové prostředky QENC. Soft reset automaticky deinicializuje všechny instance
Counter.
- value() int¶
- value(value: int, /) int
Získá nebo nastaví znaménkový čítač pozice.
Bez argumentu vrátí aktuální počet.
S jediným argumentem
valueatomicky nastaví čítač pozice navaluea vrátí předchozí počet. Běžný idiomcounter.value(0)vynuluje čítač na začátku měřicího okna.
- cycles() int¶
- cycles(value: int, /) int
Získá nebo nastaví čítač cyklů, znaménkové 16bitové celé číslo, které sleduje, kolikrát čítač pozice překročil
max/min.Bez argumentu vrátí aktuální počet cyklů.
S jediným argumentem
valuenastaví čítač cyklů navalue(bez ovlivnění čítače pozice) a vrátí předchozí počet.
- irq(handler: Callable[[Counter], None] | None = None, trigger: int = 0, hard: bool = False) None¶
Zaregistruje callback, který se vyvolá při výskytu jedné z podporovaných událostí QENC. Obsluha obdrží jako svůj jediný argument objekt
Counter; konkrétní událost lze uvnitř obsluhy zjistit pomocíirq.flags().triggerje bitová maska jedné nebo více konstantIRQ_*:IRQ_RESET– pinresetbyl aktivován.IRQ_INDEX– přechod na linceindex.IRQ_MATCH– čítač pozice dosáhlmatch. Match se po vyvolání automaticky vypne a musí být znovu aktivován opětovnou instalací IRQ.IRQ_ROLL_OVER– čítač pozice se přetočil zmaxnamin.IRQ_ROLL_UNDER– čítač pozice se přetočil zminnamax.
hard=Trueregistruje obsluhu tvrdého přerušení (nižší latence, ale obsluha nesmí alokovat). Výchozí je naplánovaný callback. Předánímhandler=Nonepřerušení vypnete.
Konstanty¶