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.

ExempleFabriquer un signal de 1MHz avec un rapport cyclique de 50 %

1
import pulseio
2
import time
3
import board 
4
5
pwm = pulseio.PWMOut(board.A3, frequency=1000000)
6
7
pwm.duty_cycle = 2 ** 16 // 2 # 65536 correspond à 100%, 32768 correspond à 50% etc...
8
9
while True:
10
    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éthodeVoici le programme

1
import pulseio
2
import time
3
import board 
4
5
pwm = pulseio.PWMOut(board.A3, frequency=1000)
6
7
pwm.duty_cycle = 2 ** 16 // 2 # 65536 correspond à 100%, 32768 correspond à 50% etc...
8
9
while True:
10
    for d in range(0,2**16-1,2**3):
11
        pwm.duty_cycle=d
12
    
13
    for d in range(2**16-1,0,-2**3):
14
        pwm.duty_cycle=d

Complémentutiliser 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