klassen Counter – pulsräknare

Klassen Counter kapslar in i.MX RT QENC-hårdvarublocket (kvadraturkodare / räknare) konfigurerat som en pulsräknare med en enda ingång. Varje stigande flank på källstiftet ökar (eller minskar) en hårdvarubaserad positionsräknare; återanrop i programvara kan kopplas till händelserna ROLL_OVER / ROLL_UNDER / RESET / INDEX / MATCH.

Endast tillgänglig på OpenMV Cam RT1062 (mimxrt-porten). På de STM32-baserade OpenMV-kamerorna använder du i stället pyb.Timer konfigurerad för insignalsinfångning. Exponeras inte på OpenMV Cam AE3 (alif-porten).

Exempel på användning:

from machine import Pin, Counter

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

Konstruktorer

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)

Konstruera (eller hämta singletonen för) QENC-räknarblocket som identifieras av id. RT1062 har flera QENC-block (id väljer ett); samma argument accepteras även av init() för att omkonfigurera en befintlig instans.

src – ingångsstiftet vars stigande flanker räknas.

direction (endast nyckelord) – antingen UP / DOWN för att ange en fast riktning, eller ett Pin vars logiknivå väljer riktningen vid körning (låg = räkna upp, hög = räkna ner).

filter_ns (endast nyckelord) – minsta tid i nanosekunder som insignalen måste vara stabil för att en puls ska räknas. Drivrutinen använder det längsta hårdvarufiltret som är mindre än eller lika med detta värde. 0 (standard) inaktiverar filtreringen.

max / min (endast nyckelord) – modulo-intervall för positionsräknaren. När räknaren rullar förbi max slår den runt till min och cykelräknaren ökar (minskar vid nedräkning). Om både max och min anges som 0 inaktiveras intervallet.

reset (endast nyckelord) – ett Pin vars stigande flank laddar om positionsräknaren till startvärdet (utan att ändra cykelräknaren).

match (endast nyckelord) – räknarvärdet vid vilket ett IRQ_MATCH-avbrott utlöses. Ange None för att inaktivera.

match_pin (endast nyckelord) – ett Pin som drivs högt medan positionsräknaren är lika med match och lågt annars.

Metoder

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

Initiera om räknaren med de angivna parametrarna och nollställ dess positions- och cykelräknare. Accepterar samma nyckelordsargument som konstruktorn.

deinit() None

Stoppa räknaren, inaktivera eventuella väntande avbrott och frigör QENC-hårdvaruresurserna. En mjuk återställning avinitierar automatiskt alla Counter-instanser.

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

Hämta eller ange den teckenförsedda positionsräknaren.

Utan argument returneras det aktuella värdet.

Med ett enda value-argument ställs positionsräknaren atomärt till value och det föregående värdet returneras. Det vanliga uttrycket counter.value(0) nollställer räknaren i början av ett mätfönster.

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

Hämta eller ange cykelräknaren, ett teckenförsett 16-bitars heltal som håller reda på hur många gånger positionsräknaren har rullat förbi max / min.

Utan argument returneras det aktuella cykelvärdet.

Med ett enda value-argument ställs cykelräknaren till value (utan att röra positionsräknaren) och det föregående värdet returneras.

irq(handler: Callable[[Counter], None] | None = None, trigger: int = 0, hard: bool = False) None

Registrera ett återanrop som anropas när någon av de QENC-händelser som stöds utlöses. Hanteraren får Counter-objektet som sitt enda argument; den specifika händelsen kan identifieras inuti hanteraren via irq.flags().

trigger är en bitmask med en eller flera IRQ_*-konstanter:

  • IRQ_RESETreset-stiftet aktiverades.

  • IRQ_INDEX – en övergång på index-linjen.

  • IRQ_MATCH – positionsräknaren nådde match. Match inaktiveras automatiskt efter utlösning och måste återaktiveras genom att IRQ:n installeras om.

  • IRQ_ROLL_OVER – positionsräknaren slog runt från max till min.

  • IRQ_ROLL_UNDER – positionsräknaren slog runt från min till max.

hard=True registrerar en hård avbrottshanterare (lägre latens, men hanteraren får inte allokera minne). Standard är ett schemalagt återanrop. Ange handler=None för att inaktivera avbrottet.

Konstanter

UP: int

Skicka till direction för att räkna stigande flanker som positiva.

DOWN: int

Skicka till direction för att räkna stigande flanker som negativa.

IRQ_RESET: int

Utlösningsflagga för irq() vid reset-stiftshändelsen.

IRQ_INDEX: int

Utlösningsflagga för irq() vid index-insignalshändelsen.

IRQ_MATCH: int

Utlösningsflagga för irq() vid positionsmatchningshändelsen.

IRQ_ROLL_OVER: int

Utlösningsflagga för irq() vid att räknaren slår runt uppåt (max -> min).

IRQ_ROLL_UNDER: int

Utlösningsflagga för irq() vid att räknaren slår runt nedåt (min -> max).