Aprenda a controlar el brillo de un LED conectado a una Raspberry Pi usando PWM.
PWM es algo que todos usamos todos los días, aunque no lo sepamos. Es una técnica sencilla e increíblemente útil en una variedad de aplicaciones. Lo mejor de todo es que es algo que tu Raspberry Pi puede hacer sin sudar. ¿Cómo? Vamos a ver.
¿Qué es PWM?
Según la terminología, "modulación de ancho de pulso" suena bastante elegante. Pero de lo único que estamos hablando aquí es de apagar y encender una señal eléctrica, extremadamente rápido. ¿Por qué querríamos hacer esto? Simplemente porque es una forma muy sencilla de simular una señal analógica variable, sin recurrir a HAT Raspberry Pi, complementoso circuitos adicionales. Para determinadas aplicaciones, como calentar una estufa, accionar un motor o atenuar un LED, una señal PWM es literalmente indistinguible de un voltaje analógico "real".
Ciclos de trabajo
Entonces, tenemos una serie de pulsos que se alimentan a una carga (lo que estamos conduciendo). Esto por sí solo no es tan útil, hasta que empecemos a cambiar (o modular) el ancho de esos pulsos. La fase de "encendido" de un período de encendido y apagado determinado puede ocupar entre el 0 y el 100% del ciclo total. A este porcentaje lo llamamos
ciclo de trabajo.Por ejemplo, supongamos que tenemos una señal PWM de 3V con un ciclo de trabajo del 50%. La cantidad promedio de energía que pasa por el LED equivaldría a una señal siempre encendida de 1,5 V. Aumente el ciclo de trabajo y el LED se volverá más brillante; Bájelo y el LED se atenuará. Podemos generar audio usando el mismo método, razón por la cual la salida de audio de tu Raspberry Pi podría dejar de funcionar si usas PWM para otras cosas.
PWM en la frambuesa Pi
Puede utilizar el software PWM en cada pin GPIO de Raspberry Pi. Pero el hardware PWM sólo está disponible en GPIO12, GPIO13, GPIO18, y GPIO19.
¿Cual es la diferencia? Bueno, si vas a utilizar software para generar la señal, entonces consumirás ciclos de CPU. Sin embargo, es posible que su CPU tenga mejores cosas que hacer que decirle a un LED que se apague y encienda varios cientos de veces por segundo. De hecho, podría distraerse y atascarse con otras tareas, lo que puede alterar seriamente los tiempos de PWM.
En consecuencia, suele ser una mejor idea delegar la tarea a circuitos especializados. En el caso de la Raspberry Pi, este circuito se encuentra en su interior. el sistema en chip que alberga la CPU. El hardware PWM suele ser mucho más preciso y conveniente y, por lo tanto, es la opción preferida en la mayoría de los casos. Si desea tener una idea de lo que sucede bajo el capó del chip Broadcom BCM2711 de Raspberry Pi 4, puede consultar la documentación BCM2711. ¡El capítulo 8 cubre las cosas de PWM!
Atenuar un LED
Para que nuestro LED funcione con nuestra Raspberry Pi, necesitaremos realizar algunas pruebas. Eso significa dos componentes: el LED en sí y una resistencia limitadora de corriente, que conectaremos en serie con él. Sin la resistencia, su LED corre el riesgo de morir en una nube de humo maloliente si pasa demasiada corriente a través de él.
Calcular el valor de la resistencia
No importa a qué extremo del LED conecte la resistencia. Lo que importa es el valor de la resistencia. La Raspberry Pi 4 puede proporcionar alrededor de 16 miliamperios por pin. Para que podamos usar la ley de ohm para calcular el valor de la resistencia necesaria.
Dicha ley establece que la resistencia debe ser igual al voltaje sobre la corriente. Sabemos el voltaje que sale del pin GPIO del Pi (3,3 V) y sabemos cuál debería ser la corriente (16 miliamperios o 0,016 amperios). Si dividimos el primero por el segundo, obtenemos 206,25. Ahora, como te resultará difícil encontrar resistencias de este valor, optemos por 220 ohmios.
Conecte el ánodo del LED (pata larga) a GPIO 18 (que es el pin físico 12 en la Raspberry Pi). Conecte el cátodo (pata corta) a cualquiera de los pines de tierra del Pi. No olvides la resistencia, en algún lugar del camino. ¡Ya estás listo para comenzar!
Implementación de PWM en Raspberry Pi
Para que el hardware PWM funcione en Raspberry Pi, usaremos el Biblioteca rpi-hardware-pwm de Cameron Davidson-Pilon, adaptado de código de Jeremy Impson. Esto ha sido utilizado en el Pioreactor (un biorreactor basado en Pi), pero es bastante simple para nuestros propósitos.
Primero, vamos editar el archivo config.txtarchivo, que se encuentra en el /boot directorio. Sólo necesitamos agregar una línea: dtoverlay=pwm-2chan. Si quisiéramos usar pines GPIO distintos del 18 y 19, podríamos agregar algunos argumentos adicionales aquí. Por ahora, mantengamos las cosas simples.
Reinicia tu Pi y ejecuta:
lsmod | grep pwm
Este comando enumera todos los módulos cargados en la parte central del sistema operativo, llamada núcleo. Aquí, los estamos filtrando para encontrar solo el material PWM, usando el grep (Ese es el comando "impresión de expresión regular global").
Si pwm_bcm2835 aparece entre los módulos enumerados, entonces estamos en el camino correcto. ¡Ya casi terminamos de prepararnos! Todo lo que queda es instalar la biblioteca real. Desde la terminal ejecuta:
sudo pip3 install rpi-hardware-pwm
Ahora estamos listos para comenzar.
Codificación del circuito LED PWM
Es hora de ensuciarnos las manos con un poco de codificando en Python. Enciende Thonny y copia el siguiente código. Luego golpea Correr.
from rpi_hardware_pwm import HardwarePWM
import time
pwm = HardwarePWM(pwm_channel=0, hz=60) # here's where we initialize the PWM
pwm.start(0) # start the PWM at zero – which means the LED is off
for i in range(101):
pwm.change_duty_cycle(i)
time.sleep(.1) # by introducing a small delay, we can make the effect visible.
pwm.stop()
Si todo va bien, verá que el LED se vuelve más brillante gradualmente hasta que i la variable del contador llega a 100. Entonces se apagará. ¿Que está pasando aqui? Repasemos esto.
Estamos importando la parte relevante de la biblioteca PWM de hardware (junto con el tiempo módulo) y declarando una nueva variable. Podemos configurar el canal_pwm a 0 o 1, que corresponden respectivamente a los pines GPIO 18 y 19 del Pi.
El Hz valor que podemos establecer en la frecuencia que queramos (aunque en última instancia estamos limitados por la velocidad del reloj del Pi). A 60 Hz, no deberíamos ver ningún parpadeo de PWM. Pero podría ser una buena idea comenzar con un valor muy bajo (como 10) y aumentarlo gradualmente. Haga esto y podrá ver cómo se producen los pulsos. ¡No confíe sólo en nuestra palabra!
Trabajamos nuestro ciclo de trabajo (i) hasta de 0 a 100 usando un bucle for de Python. Vale la pena señalar que podemos configurar el tiempo de dormir argumento todo el tiempo que queramos: dado que el PWM se maneja en hardware, se ejecutará detrás de escena, por mucho tiempo que le digamos al programa que espere.
Hay más que aprender con PWM
¡Felicidades! Has escrito tu primer programa PWM. Pero, como suele ser el caso con Raspberry Pi, hay mucho que puedes hacer con esto, especialmente si aumentas tu Raspberry Pi con el HAT PWM adecuado. Así que no te contentes con un pequeño LED. Puede utilizar este nuevo poder para controlar motores, codificar mensajes y generar tonos de sintetizador. ¡Un mundo de modulación te espera!