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

 

Vous aimerez aussi...

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *