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 (id jeden 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 / DOWN pro nastavení pevného směru, nebo Pin, 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 na min a čítač cyklů se inkrementuje (při počítání dolů dekrementuje). Předání obou max i min jako 0 rozsah 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ím None jej 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 value atomicky nastaví čítač pozice na value a vrátí předchozí počet. Běžný idiom counter.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 value nastaví čítač cyklů na value (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().

trigger je bitová maska jedné nebo více konstant IRQ_*:

  • IRQ_RESET – pin reset byl aktivován.

  • IRQ_INDEX – přechod na lince index.

  • IRQ_MATCH – čítač pozice dosáhl match. 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 z max na min.

  • IRQ_ROLL_UNDER – čítač pozice se přetočil z min na max.

hard=True registruje obsluhu tvrdého přerušení (nižší latence, ale obsluha nesmí alokovat). Výchozí je naplánovaný callback. Předáním handler=None přerušení vypnete.

Konstanty

UP: int

Předejte do direction pro počítání náběžných hran jako kladných.

DOWN: int

Předejte do direction pro počítání náběžných hran jako záporných.

IRQ_RESET: int

Příznak triggeru irq() pro událost pinu reset.

IRQ_INDEX: int

Příznak triggeru irq() pro událost vstupu index.

IRQ_MATCH: int

Příznak triggeru irq() pro událost shody pozice.

IRQ_ROLL_OVER: int

Příznak triggeru irq() pro přetočení čítače nahoru (max -> min).

IRQ_ROLL_UNDER: int

Příznak triggeru irq() pro přetočení čítače dolů (min -> max).