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 (iden sélectionne un) ; les mêmes arguments sont également acceptés parinit()pour reconfigurer une instance existante.src– la broche d’entrée dont les fronts montants sont comptés.direction(par mot-clé uniquement) – soitUP/DOWNpour fixer une direction constante, soit unePindont 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épassemax, il revient àminet le compteur de cycles s’incrémente (se décrémente lors d’un comptage décroissant). Passermaxetmintous deux à0désactive la plage.reset(par mot-clé uniquement) – unePindont 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 interruptionIRQ_MATCHse déclenche. PassezNonepour désactiver.match_pin(par mot-clé uniquement) – unePinmise 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 àvalueet renvoie le décompte précédent. L’idiome courantcounter.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
Countercomme unique argument ; l’événement spécifique peut être identifié à l’intérieur du gestionnaire viairq.flags().triggerest un masque de bits composé d’une ou plusieurs constantesIRQ_*:IRQ_RESET– la brochereseta été activée.IRQ_INDEX– une transition sur la ligneindex.IRQ_MATCH– le compteur de position a atteintmatch. 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é demaxàmin.IRQ_ROLL_UNDER– le compteur de position est passé deminàmax.
hard=Trueenregistre 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. Passezhandler=Nonepour désactiver l’interruption.
Constantes¶
- IRQ_MATCH: int¶
Indicateur de déclenchement de
irq()pour l’événement de correspondance de position.