classe Encoder – décodeur en quadrature¶
La classe Encoder encapsule le bloc matériel QENC de l’i.MX RT configuré comme décodeur en quadrature. Elle suit un signal à deux phases (phase_a / phase_b) provenant d’un encodeur rotatif, incrémente ou décrémente un compteur de position sur 32 bits selon la relation de phase, et peut être combinée avec des entrées optionnelles index / reset pour un référencement absolu.
Disponible uniquement sur l’OpenMV Cam RT1062 (port mimxrt). Sur les OpenMV Cam basées sur STM32, utilisez plutôt pyb.Timer configuré en mode encodeur (Timer.ENC_AB). Non exposé sur l’OpenMV Cam AE3 (port alif).
Exemple d’utilisation
from machine import Pin, Encoder
enc = Encoder(0, Pin("P0", Pin.IN), Pin("P1", Pin.IN), phases=4)
enc.value(0)
# ... rotate the encoder ...
print("position:", enc.value())
Constructeurs¶
- class machine.Encoder(id: int, phase_a: Pin | None = None, phase_b: Pin | None = None, *, phases: int = 1, filter_ns: int = 0, max: int | None = None, min: int = 0, index: Pin | None = None, reset: Pin | None = None, match: int | None = None, match_pin: Pin | None = None)¶
Construit (ou récupère l’instance unique du) bloc encodeur QENC identifié par
id. Les mêmes arguments sont également acceptés parinit()pour reconfigurer une instance existante.phase_a/phase_bsont les deux broches d’entrée de quadrature.phases(par mot-clé uniquement) sélectionne la granularité de décodage. Le QENC prend en charge1(compte un front par paire d’impulsions),2(les deux fronts de la phase A) ou4(« décodage 4x » – chaque front des deux phases est compté). Par défaut1.filter_ns(par mot-clé uniquement) – temps minimal de stabilité de l’entrée en nanosecondes. 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 dans l’autre sens). Passer les deux à0désactive la plage.index(par mot-clé uniquement) – unePindont le front montant recharge le compteur de position àminet met à jour le compteur de cycles selon la direction ; l’usage typique est un repère de canal Z sur un encodeur rotatif.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 de position à 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(phase_a: Pin | None = None, phase_b: Pin | None = None, *, phases: int = 1, filter_ns: int = 0, max: int | None = None, min: int = 0, index: Pin | None = None, reset: Pin | None = None, match: int | None = None, match_pin: Pin | None = None) None¶
Réinitialise l’encodeur 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 l’encodeur, 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
Encoder.
- value() int¶
- value(value: int, /) int
Lit ou définit le compteur de position signé.
Sans argument, renvoie la position courante.
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 courantenc.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[[Encoder], 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
Encodercomme 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– la brocheindexa été activée.IRQ_MATCH– le compteur de position a atteintmatch. Match est à déclenchement unique 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.