Générer des signaux rectangulaires périodiques
Bibliothèque pigpio
Le daemon pigpio
Voir : https://abyz.me.uk/rpi/pigpio/pigpiod.html pour les options
Avant de pouvoir utiliser pigpio avec Python, il faut exécuter une commande pigpiod
, un processus exécuté en arrière plan appelé daemon, en mode super utilisateur.
Exemple : pour lancer le daemon pigpio avec un taux d’échantillonnage de 2 microsecondes et un tampon de 200 millisecondes :
sudo pigpiod -s 2 -b 200
Signaux PWM
Hardware PWM
Voir : https://abyz.me.uk/rpi/pigpio/python.html#hardware_PWM
Uniquement sur les ports compatibles (exemple : port 18 sur Pi Modele B)
PWM personnalisé
Voir : https://abyz.me.uk/rpi/pigpio/python.html#set_PWM_dutycycle
Il n’y a que 18 fréquence PWM possibles selon le taux d’échantillonnage choisi à l’initialisation du démon pigpio. La méthode set_PWM_frequency
règlera la fréquence effective du port spécifié avec la fréquence la plus proche parmi les suivantes :
Taux d’échantillonnage \(\mu\;s\) |
1 | 2 | 4 | 5 | 8 | 10 |
Fréquences \(Hz\) |
40000 20000 10000 8000 5000 4000 2500 2000 1600 1250 1000 800 500 400 250 200 100 50 |
20000 10000 5000 4000 2500 2000 1250 1000 800 625 500 400 250 200 125 100 50 25 |
10000 5000 2500 2000 1250 1000 625 500 400 313 250 200 125 100 63 50 25 13 |
8000 4000 2000 1600 1000 800 500 400 320 250 200 160 100 80 50 40 20 10 |
5000 2500 1250 1000 625 500 313 250 200 156 125 100 63 50 31 25 13 6 |
4000 2000 1000 800 500 400 250 200 160 125 100 80 50 40 25 20 10 5 |
Signaux PPM (servo)
Voir : https://abyz.me.uk/rpi/pigpio/python.html#set_servo_pulsewidth
Article détaillé sur le contrôle des servomoteurs.
Signaux quelconques
Voir : https://abyz.me.uk/rpi/pigpio/python.html#wave_add_generic
Les signaux quelconques (waves) sont défini à l’aide d’une liste d’impulsions (pulses) passée à la fonction wave_add_generic
:
wave_add_generic(gpio_on, gpio_off, delay)
avec :
gpio_on
= le port à commuter à l’état HAUT au début de l’impulsion.gpio_off
= le port à commuter à l’état BASau début de l’impulsion.delay
= le délai (en microsecondes) avant la prochaine impulsion.
Les numéros de port doivent être donnés sous forme de masque : un entier comportant un unique bit placé à la position correspondant au numéro du port (0 à 31). On obtient ce masque à l’aide de l’opérateur décalage << en Python:
Exemple : port numéro 4 → 1<<4 == 0000 0000 0000 0000 0000 0000 0001 0000
Exemple
import pigpio, time pi = pigpio.pi() G1=4 G2=24 pi.set_mode(G1, pigpio.OUTPUT) pi.set_mode(G2, pigpio.OUTPUT) flash_500=[] # flash every 500 ms flash_200=[] # flash every 200 ms # ON OFF DELAY flash_500.append(pigpio.pulse(1<<G1, 1<<G2, 500000)) flash_500.append(pigpio.pulse(1<<G2, 1<<G1, 500000)) flash_200.append(pigpio.pulse(1<<G1, 1<<G2, 200000)) flash_200.append(pigpio.pulse(1<<G2, 1<<G1, 200000)) pi.wave_clear() # clear any existing waveforms pi.wave_add_generic(flash_500) # 500 ms flashes f500 = pi.wave_create() # create and save id pi.wave_add_generic(flash_200) # 200 ms flashes f200 = pi.wave_create() # create and save id pi.wave_send_repeat(f500) time.sleep(3) pi.wave_send_repeat(f200) time.sleep(2) pi.wave_tx_stop() # stop waveform pi.wave_clear() # clear all waveforms