La modulación por ancho de pulso (PWM) permite modificar el valor de voltaje que podemos aplicar a un componente, por ejemplo un led, motor, etc. La variación de este voltaje se logra a través de la modificación del ancho de pulso de una señal cuadrada (Señal digital) mediante el tiempo en el cual la señal dura en '1' (TH) como aparece en la siguiente figura:
Para cambiar el ancho de la señal se modifica su ciclo útil K, que es la relación entre el tiempo en '1' TH y el periodo de la señal T. Para trabajar el PWM usaremos el pin (GPIO17) como se muestra en el siguiente esquema:
Para la programación en bloques usaremos los siguientes bloques disponibles en la interfaz del laboratorio remoto:
Bloque | Descripción |
---|---|
Permite configurar el pin seleccionado en modo PWM, por ejemplo, el GPIO17 con una frecuencia de 500 Hz. | |
Permite iniciar el pin configurado previamente en modo PWM, con un ciclo útil. En el caso del ejemplo se inicia el GPIO17 con un ciclo útil del 50%, es decir, 50% de la señal en '1', 5'% de la señal en '0'. | |
Permite cambiar el ciclo útil directamente en código deacuerdo, por ejemplo, al valor de una variable declarada. |
Con estos bloques la idea es crear nuestro primer algortimo para trabajar con GPIOs. Para ello construiremos el siguiente algoritmo gráfico. Los pasos de creación y de explicación del PWM se pueden visualizar en siguiente video.
Para trabajar con código directamente en Python para interactuar con PWM usaremos las siguientes instrucciones en lenguaje de programación Python
Instrucción (Sentencia) | Descripción |
---|---|
import RPi.GPIO as GPIO | Permite importar el paquete RPi.GPIO en Python que accede a la configuración y activación de los GPIOs |
import time | Incorpora la librería o paquete time para retrasos en el código en segundos. |
GPIO.setmode(GPIO.BCM) | Configura los pines de la raspberry pi en modo BCM. En este modo el pin se va a llamar “GPIO17”, “GPIO22”, etc. Esta instrucción debe llamarse antes de configurar el GPIO deseado como entrada o salida. |
GPIO.setup(17,GPIO.OUT) | Permite configurar el GPIO en este caso el 17 como “salida”. |
pwm17=GPIO.PWM(17,500) | Configura el GPIO17 en modo PWM con una frecuencia de 500Hz. |
pwm17.start(50) | Inicia el modo pwm en el GPIO17 con un ciclo útil del 50%. En este caso el nombre “pwm17” debe estar en declarado en la configuración y en la inicialización del pin en el modo pwm deacuerdo a la sentencia anterior. |
time.sleep(0.3) | Crea un retraso en tiempo, en este caso de 0.3 segundos. |
Para trabajar en lenguaje Python, usaremos el siguiente código base que permite aplicar la modulación por ancho de pulso (PWM) al pin GPIO17. La idea será como se menciono controlar el voltaje aplicado al Led y por ende su brillo. El ancho de pulso cambiará cada 0.3 segundos.
#Inserta tu codigo de Raspberry Pi aqui (Nota: comentarios sin tildes!) import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) #Modo de configuracion BCM import time #Libreria para retrasos de tiempo GPIO.setup(17,GPIO.OUT) #pin 17 como salida pwm17=GPIO.PWM(17,500) #pin 17 en modo pwm con frecuencia de 500Hz pwm17.start(50) #Iniciar pwm en pin 17 con ciclo util del 50 porciento i = 0 #Variable de conteo para ciclo util while True: if i <100: #si i es menor a 100 incrementar en pasos de 20 i = i + 20 else: i = 0 pwm17.ChangeDutyCycle(i) #Cambiar ciclo util para pin 17 de acuerdo a variable i time.sleep(0.3) #Esperar 0.3 segundos
El código funciona del siguiente modo:
El video de explicación de este código se muestra a continuación: