classe Counter – compteur d’impulsions

La classe Counter encapsule le bloc matériel QENC (encodeur en quadrature / compteur) de l’i.MX RT configuré comme compteur d’impulsions à entrée unique. Chaque front montant sur la broche source incrémente (ou décrémente) un compteur de position matériel ; des fonctions de rappel logicielles peuvent être attachées aux événements ROLL_OVER / ROLL_UNDER / RESET / INDEX / MATCH.

Disponible uniquement sur l’OpenMV Cam RT1062 (port mimxrt). Sur les OpenMV Cam basées sur STM32, utilisez plutôt pyb.Timer configuré en capture d’entrée. Non exposé sur l’OpenMV Cam AE3 (port alif).

Exemple d’utilisation

from machine import Pin, Counter

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

Constructeurs

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)

Construit (ou récupère l’instance unique du) bloc compteur QENC identifié par id. Le RT1062 possède plusieurs blocs QENC (id en sélectionne un) ; les mêmes arguments sont également acceptés par init() pour reconfigurer une instance existante.

src – la broche d’entrée dont les fronts montants sont comptés.

direction (par mot-clé uniquement) – soit UP / DOWN pour fixer une direction constante, soit une Pin dont le niveau logique sélectionne la direction à l’exécution (bas = comptage croissant, haut = comptage décroissant).

filter_ns (par mot-clé uniquement) – temps minimal de stabilité de l’entrée en nanosecondes pour qu’une impulsion soit comptée. Le pilote utilise le filtre matériel le plus long inférieur ou égal à cette valeur. 0 (la valeur par défaut) désactive le filtrage.

max / min (par mot-clé uniquement) – plage modulo du compteur de position. Lorsque le compteur dépasse max, il revient à min et le compteur de cycles s’incrémente (se décrémente lors d’un comptage décroissant). Passer max et min tous deux à 0 désactive la plage.

reset (par mot-clé uniquement) – une Pin dont le front montant recharge le compteur de position à la valeur de départ (sans modifier le compteur de cycles).

match (par mot-clé uniquement) – valeur du compteur à laquelle une interruption IRQ_MATCH se déclenche. Passez None pour désactiver.

match_pin (par mot-clé uniquement) – une Pin mise au niveau haut tant que le compteur de position est égal à match, et au niveau bas sinon.

Méthodes

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

Réinitialise le compteur avec les paramètres donnés et remet à zéro ses compteurs de position et de cycles. Accepte les mêmes arguments par mot-clé que le constructeur.

deinit() None

Arrête le compteur, désactive toute interruption en attente et libère les ressources matérielles du QENC. Une réinitialisation logicielle dé-initialise automatiquement toutes les instances Counter.

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

Lit ou définit le compteur de position signé.

Sans argument, renvoie le décompte courant.

Avec un unique argument value, définit de manière atomique le compteur de position à value et renvoie le décompte précédent. L’idiome courant counter.value(0) remet le compteur à zéro au début d’une fenêtre de mesure.

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

Lit ou définit le compteur de cycles, un entier signé sur 16 bits qui suit le nombre de fois où le compteur de position a dépassé max / min.

Sans argument, renvoie le décompte de cycles courant.

Avec un unique argument value, définit le compteur de cycles à value (sans toucher au compteur de position) et renvoie le décompte précédent.

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

Enregistre une fonction de rappel à invoquer lorsqu’un des événements QENC pris en charge se déclenche. Le gestionnaire reçoit l’objet Counter comme unique argument ; l’événement spécifique peut être identifié à l’intérieur du gestionnaire via irq.flags().

trigger est un masque de bits composé d’une ou plusieurs constantes IRQ_* :

  • IRQ_RESET – la broche reset a été activée.

  • IRQ_INDEX – une transition sur la ligne index.

  • IRQ_MATCH – le compteur de position a atteint match. Match est automatiquement désactivé après s’être déclenché et doit être réarmé en réinstallant l’IRQ.

  • IRQ_ROLL_OVER – le compteur de position est passé de max à min.

  • IRQ_ROLL_UNDER – le compteur de position est passé de min à max.

hard=True enregistre un gestionnaire d’interruption matériel (latence plus faible, mais le gestionnaire ne doit pas allouer de mémoire). La valeur par défaut est une fonction de rappel planifiée. Passez handler=None pour désactiver l’interruption.

Constantes

UP: int

À passer à direction pour compter les fronts montants comme positifs.

DOWN: int

À passer à direction pour compter les fronts montants comme négatifs.

IRQ_RESET: int

Indicateur de déclenchement de irq() pour l’événement de la broche reset.

IRQ_INDEX: int

Indicateur de déclenchement de irq() pour l’événement d’entrée d’index.

IRQ_MATCH: int

Indicateur de déclenchement de irq() pour l’événement de correspondance de position.

IRQ_ROLL_OVER: int

Indicateur de déclenchement de irq() pour un débordement supérieur du compteur (max -> min).

IRQ_ROLL_UNDER: int

Indicateur de déclenchement de irq() pour un débordement inférieur du compteur (min -> max).