====== Raspberry : faire varier la puissance électrique avec PWM ====== ====== Ressources ====== * Brochage du GPIO et des cartes HAT : https://fr.pinout.xyz/ * Article sur PWM : https://mespotesgeek.fr/fr/variation-de-puissance-electrique-via-raspberry/ * Document PDF sur PWM : {{:isn:4346-5-rpi-pwm.pdf|}} ===== Présentation ===== Pour **contrôler l’intensité** lumineuse d’une LED ou la **vitesse** d’un moteur en utilisant les sorties GPIO du Raspberry, il faudrait pourvoir **gérer la puissance électrique** disponible en faisant varier le courant ou l’intensité. Cela n'est pas possible car la tension de sortie est de **3,3 V** à l'état haut et de **0 V** (la masse) à l'état bas. La solution est de d'**alterner ces deux états de façon répétée** : cette technique se nomme le **PWM** pour Pulse Width Modulation (modulation de largeur d’impulsion). ===== Principe de fonctionnement ===== Le principe général consiste à appliquer une **succession d’impulsion** (passage de l’état 0 à 1) pendant des durées bien choisies afin d'obtenir, en **moyenne** sur une certaine durée, **plusieurs valeurs intermédiaires** au lieu d'avoir uniquement deux valeurs, tout ou rien. Pour, il faut gérer deux paramètres: * La fréquence (période), * et le rapport cyclique {{ :isn:pwm_01.png?nolink |}} ==== Fréquence ==== La fréquence (ou période) est le nombre d’impulsion générées par seconde et est mesurée en Hertz (Hz). Par exemple 50 Hz correspond à 50 impulsions en une seconde soit une impulsion toute les 0.02 secondes. ==== Le rapport cyclique ==== Le rapport cyclique est le pourcentage de temps ou le signal est en position 1 pendant le cycle. Par exemple pour une fréquence de 50 Hz et un rapport cyclique de 80% cela signifie que toutes les 0.02 secondes le signal sera à 1 (high) pendant 80% du temps du cycle de 0.02 seconde et à 0 (LOW) pendant les autres 20% du temps. {{ :isn:pwm_02.png?nolink |}} ===== Gérer l'éclairage d'une LED ===== En t'aidant des documents donnés en ressource, réalise : * le **câblage** d'une LED sur un des ports du GPIO du Raspberry, * un programme qui donne **l'impression** de faire **varier** plusieurs fois l'intensité lumineuse de la LED. ===== Eléments de réponse ===== import RPi.GPIO as GPIO import time # Utiliser la numérotation électronique du GPIO GPIO.setmode(GPIO.BCM) # choisir le numéro de broche du GPIO à utiliser en sortie GPIO.setup(4, GPIO.OUT) # creation d'un objet PWM appelé LED en précisant le numero de broche (4) et la frequence (50Hz) LED = GPIO.PWM(4, 50) # demarrage du PWM avec un cycle a 0 (LED off) : LED éteinte LED.start(0) # Simuler un éclairage de la LED à la moitié de sa puissance lumineuse = définir le rapport cyclique à 50 LED.ChangeDutyCycle(50) # attendre 2 secondes time.sleep(0.01) # éteindre la LED LED.ChangeDutyCycle(0) # Arreter le PWM LED.stop() # libérer le port du GPIO utilisé GPIO.cleanup() ==== Les activités ... ==== [[.:accueil|Je reviens à la liste des activités.]]