classe PWM – modulation de largeur d’impulsion¶
La classe PWM produit un signal modulé en largeur d’impulsion sur une Pin. C’est l’API moderne et multiplateforme pour le PWM ; sur les caméras OpenMV STM32, elle encapsule la machinerie sous-jacente des canaux pyb.Timer, de sorte que chaque instance PWM occupe un canal de minuteur.
Exemple d’utilisation:
from machine import PWM, Pin
# 50 Hz PWM on a header pin with a 12.5 % duty.
pwm = PWM(Pin("P7"), freq=50, duty_u16=8192)
pwm.duty_u16(32768) # change duty to 50 %
pwm.init(freq=5000, duty_ns=5000) # re-init at 5 kHz, 5 us pulse
pwm.duty_ns(3000) # 3 us pulse
pwm.deinit()
Constructeurs¶
- class machine.PWM(dest: Pin | int, *, freq: int | None = None, duty_u16: int | None = None, duty_ns: int | None = None, invert: bool = False)¶
Construit un objet
PWMpilotantdest(unePinsur les caméras OpenMV). Les arguments mots-clés sont équivalents à un appel àinit()immédiatement après la construction :freq– fréquence PWM en Hz.duty_u16– rapport cyclique sous forme de ratioduty_u16 / 65535.duty_ns– largeur d’impulsion en nanosecondes.invert– siTrue, inverse la polarité de la sortie.
Au plus un seul de
duty_u16/duty_nspeut être passé à la fois. Définirfreqpeut affecter d’autres instancesPWMqui partagent le même minuteur sous-jacent (vrai sur STM32 – chaque canal d’un TIM donné fonctionne à la même fréquence).Méthodes¶
- init(*, freq: int | None = None, duty_u16: int | None = None, duty_ns: int | None = None) None¶
Reconfigure la sortie PWM. Seuls les arguments fournis sont mis à jour ; les autres conservent leurs valeurs précédentes. Voir le constructeur pour la signification de chaque argument.
- freq() int¶
- freq(value: int, /) None
Obtient ou définit la fréquence PWM.
Sans argument, retourne la fréquence actuelle en Hz.
Avec un seul argument
value, définit la fréquence à cette valeur en Hz. Peut leverValueErrorsi la fréquence est en dehors de la plage atteignable par le minuteur sous-jacent.
- duty_u16() int¶
- duty_u16(value: int, /) None
Obtient ou définit le rapport cyclique sous forme de valeur 16 bits non signée dans la plage
0–65535.Sans argument, retourne le rapport cyclique actuel.
Avec un seul argument
value, définit le rapport cyclique àvalue / 65535de la période.0est toujours bas,65535est toujours haut.
- duty_ns() int¶
- duty_ns(value: int, /) None
Obtient ou définit la largeur d’impulsion directement en nanosecondes.
Sans argument, retourne la largeur d’impulsion actuelle.
Avec un seul argument
value, définit le temps haut de chaque cycle àvaluenanosecondes. Utile pour les sorties de type servomoteur où la largeur d’impulsion est la grandeur significative plutôt que le rapport cyclique.
Limitations¶
La fréquence PWM et la résolution du rapport cyclique sont interdépendantes sur chaque minuteur matériel : aux fréquences élevées, moins de pas de compteur tiennent dans une période et donc moins de bits de poids faible de
duty_u16sont significatifs.La fréquence PWM atteignable dépend de la source d’horloge et du prédiviseur du minuteur. Les TIM2 / TIM5 STM32 sont en 32 bits sur la plupart des composants (ainsi que TIM3 / TIM4 sur le STM32N6), offrant des plages de fréquence et de rapport cyclique plus larges ; les autres minuteurs sont en 16 bits. Consultez le manuel de référence du MCU concerné pour connaître les plages exactes.
Sur STM32, plusieurs canaux
PWMsur le même TIM partagent une fréquence. Définirfreq()sur une instance modifie la sortie de tous les autres canaux rattachés à ce TIM.