PWM : Pulse Width Modulation
Salut à tous.
Je chercher à me renseigner sur le PWM (Pulse Width Modulation) de la raspberry Pi, en particulier sur la RPi 3B+.
Pourquoi la RPi 3B+ ?
Parce que je vais entreprendre dans un premier temps des manipulation à partir de la commande "GPIO" de Gordon (celui de WiringPi) en BASH.
Il se trouve que cette commande n'est plus maintenue par son auteur mais fonctionne encore parfaitement avec la RPi 3B+ (mais pas avec la RPi 4B).
En lisant ce que j'ai trouvé sur le net, les explications ne sont pas très claires.
1) D'après ce que j'ai compris, il y a deux canaux, qui sont :
--> PWM0 : broche 12 (GPIO18) et broche 32 (GPIO12).
--> PWM1 : broche 33 (GPIO13) et broche 35 (GPIO19).
2) on ne peut pas faire varier pour un même canal (par exemple PWM0) le GPIO12 dans un sens et le GPIO18 dans l'autre sens.
Soit on utilise l'un des GPIO mais pas l'autre. Soit les deux GPIO fonctionnent de concert (j ne vois pas trop l'intérêt).
3) L'horloge PWM de la Raspberry Pi a une fréquence de base de 19,2 MHz. Ce qui se traduit par 19.200.000 Hz.
4) la fréquence que l'on cherche à obtenir est fonction de deux paramètres : pwmclock & pwmrange.
Sauf que je n'ai rien trouvé de probant sur leur minimum et leur maximum.
Quels sont leur minimum et maximum ?
Il semble, pour pwmrange, que le minimum soit 2 et le maximum 1024.
D'autre sujet donne comme maximum plutôt 4096, mais sans aucune certitude.
5) la relation est donnée par la formule : "pwmFrequency in Hz = 19.2e6 Hz / pwmClock / pwmRange".
6) l'exemple type que l'on retrouve un peu partout est :
--> pwmFrequency : 50Hz
avec soit :
--> pwmClock ....: 192
--> pwmRange ....: 2000
ou encore :
--> pwmClock ....: 1920
--> pwmRange ....: 200
Ce qui donne 1/50 = 0.020 secondes, c'est-à-dire une période de 20 millisecondes.
7) le PWM est relié à l'audio de la raspberry. Avec un casque branché sur la prise jack, on entend la fréquence.
8) l'usage de ce PWM est soit :
--> manipuler un servomoteur.
--> contrôler un ventilateur.
--> l'intensité lumineuse d'une led.
--> je ne suis pas certain que l'on puisse faire de la musique, peut-être juste quelques sons.
9) sur une breadborad, j'ai mis deux leds avec pour chacune une résistance de 300 ohms.
La première sur le GPIO12 (broche 32) et la seconde sur la GPIO18 (broche 12).
Voici le script bash pour le premier test :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| #!/bin/bash
# ======================== #
# Broche 12 : GPIO18 (PWM) #
# Broche 32 : GPIO12 (PWM) #
# ======================== #
PIN1=12 # Broche 32
PIN2=18 # Broche 12
# ======================== #
# #
# ======================== #
function pause()
{
read -s -n 1 -p "."
}
function quit()
{
gpio -g pwm $PIN1 0
gpio -g mode $PIN1 IN
gpio -g pwm $PIN2 0
gpio -g mode $PIN2 IN
echo -e "\nThat's all folks!"
exit 0
}
trap quit INT TERM QUIT
# ======================== #
# #
# ======================== #
gpio -g mode $PIN1 PWM
gpio -g mode $PIN2 PWM
gpio pwm-ms
gpio pwmc 384
gpio pwmr 1000
clear
for i in {0..1000..50}
do
gpio -g pwm $PIN1 $i
pause
done
quit |
Je ne fais que varier la led N°1. Or les deux leds fonctionnent de concert.
10) je n'ai pas trouvé grand chose d'intéressant sur le PWM :
--> https://raspberrypi.stackexchange.co...tput-frequency
@+