Le module pulseio, sortie PWM - Niveau facile
Quelques mots sur le module pulseio
le module pulseio est utilisé sous CircuitPython pour tout ce qui est lié aux impulsions. La documentation de ce module se trouve ici :
https://circuitpython.readthedocs.io/en/3.x/shared-bindings/pulseio/__init__.html
Ce module contient 3 librairies :
PWMOut : pour générer une sortie PWM
PulseIn : pour lire une série d'impulsions. Utilisé par exemple pour lire un signal infrarouge.
PulseOut : pour générer un train d'impulsions. Utilisé par exemple pour envoyer un signal infrarouge.
Générer une sortie pwm
Qu'est-ce que le PWM
La modulation à largeur d'impulsions (Pulse Width Modulation) permet de générer un signal carré de fréquence donnée. Le rapport entre le temps où le signal est haut sur une période est appelé rapport cyclique (duty cycle). Plus ce rapport est élevé, plus la charge connectée sur la broche reçoit d'énergie. En jouant sur ce rapport cyclique, le PWM permet de faire varier l'intensité d'une LED, la vitesse d'un moteur ou bien de contrôler l'angle de rotation d'un servo moteur.
Exemple : Fabriquer un signal de 1MHz avec un rapport cyclique de 50 %
import pulseio
import time
import board
pwm = pulseio.PWMOut(board.A3, frequency=1000000)
pwm.duty_cycle = 2 ** 16 // 2 # 65536 correspond à 100%, 32768 correspond à 50% etc...
while True:
pass
Le code ci-dessus produit la sortie suivante sur la broche A3 de la carte CPX. On voit que le signal est très propre, même à la fréquence élevée de 1MHz.
Faire clignoter une LED progressivement
Pour faire un allumage en douceur d'une LED, on va la piloter par un signal PWM dont on va faire varier le rapport cyclique. Plus celui-ci sera proche de 65535, plus la LED sera lumineuse, plus celui-ci sera proche de 0, moins celle-ci brillera.
Une fréquence de 1000Hz sera suffisante pour que l'effet de persistance rétinienne nous masque le clignotement de la LED.
Nous utiliserons une LED branchée en série avec une résistance de 220 ohms sur la broche A3. Les pinces crocodiles sont parfaitement adaptées pour ce montage.
Méthode : Voici le programme
import pulseio
import time
import board
pwm = pulseio.PWMOut(board.A3, frequency=1000)
pwm.duty_cycle = 2 ** 16 // 2 # 65536 correspond à 100%, 32768 correspond à 50% etc...
while True:
for d in range(0,2**16-1,2**3):
pwm.duty_cycle=d
for d in range(2**16-1,0,-2**3):
pwm.duty_cycle=d
Complément : utiliser la LED rouge interne
Il est tout à fait possible de remplacer la LED externe sur la broche A3 par la LED rouge interne à la CPX. Il suffit pour cela de remplacer board.A3
par board.D13