La modulación de ancho de pulso (PWM) es una de las técnicas más importantes utilizadas en proyectos de electrónica y automatización de Raspberry Pi. Permite que los pines GPIO digitales simulen un control similar al analógico ajustando el tiempo de señal en lugar del voltaje de salida.

Resumen de Raspberry Pi PWM
La modulación de ancho de pulso (PWM) es un método que permite a los pines GPIO Raspberry Pi controlar la potencia de salida conmutando rápidamente una señal digital en ENCENDIDO y APAGADO. En lugar de crear un voltaje analógico real, el PWM cambia el tiempo que la señal permanece ALTA durante cada ciclo. Este porcentaje de PUNTUALIDAD se llama ciclo de trabajo.
Cómo funciona el PWM en Raspberry Pi

Una señal PWM cambia repetidamente un pin GPIO Raspberry Pi entre estados ALTO y BAJO. La señal sigue siendo digital, pero los dispositivos conectados responden al efecto medio de la conmutación.
Dos parámetros principales controlan el funcionamiento de la PWM:
| Parámetro PWM | Significado |
|---|---|
| Frecuencia | ¿Cuántas veces se repite la señal por segundo |
| Ciclo de trabajo | ¿Cuánto tiempo permanece la señal encendida durante cada ciclo |
En los pines GPIO de la Raspberry Pi, el ALTO es aproximadamente 3,3V. Un ciclo de trabajo del 50% significa que la señal se mantiene ALTA la mitad del tiempo y BAJA la otra parte. Esto puede hacer que un LED parezca medio brillante o reducir la potencia media entregada a un motor.
El ciclo de trabajo se calcula utilizando:
Ciclo de trabajo = Tiempo ON / Periodo Total × 100%
| Ciclo de trabajo | Comportamiento de la señal | Efecto práctico |
|---|---|---|
| 0% | Siempre APAGADO | Sin salida |
| 25% | ON durante un cuarto del ciclo | Baja salida |
| 50% | ON durante la mitad del ciclo | Producción media |
| 75% | ON durante tres cuartas partes del ciclo | Alta producción |
| 100% | Siempre ENCENDIDO | Producción completa |
Aumentar el ciclo de trabajo incrementa la producción media, mientras que disminuir el ciclo de trabajo la reduce.
La frecuencia de PWM es el número de ciclos de PWM por segundo. Se mide en hercios (Hz).
La frecuencia se calcula usando:
f=1/T
| Dispositivo | Frecuencia típica de PWM |
|---|---|
| LEDs | Cientos de Hz o más |
| Motores de corriente continua | Cientos de Hz a varios kHz |
| Servos | Alrededor de 50 Hz |
| Salida de audio | Frecuencias mucho más altas |
La frecuencia incorrecta puede causar parpadeos LED, motores ruidosos, servos inestables o mala calidad de audio.
PWM por hardware vs PWM por software en Raspberry Pi

| Tema | PWM por hardware | Software PWM |
|---|---|---|
| Definición | Utiliza hardware PWM dedicado dentro del procesador Raspberry Pi | Utiliza conmutación GPIO controlada por software para crear pulsos PWM |
| Control de Temporización | Controlado por hardware | Controlado por software y el sistema operativo Linux |
| Precisión del tiempo | Alto | Moderado |
| Estabilidad de la señal | Muy estable con menos jitter | ¿Puede tener un jitter, especialmente bajo una carga intensa de CPU |
| Uso de la CPU | Bajo uso de CPU | Mayor uso de la CPU |
| GPIO Flexibilidad | Limitado a pines GPIO seleccionados | Puede funcionar con muchos pines GPIO |
| Control de frecuencia | Más preciso y estable | Depende de la carga del sistema |
| Rendimiento bajo carga | Mantiene una salida estable mejor durante la actividad en segundo plano | Puede volverse inestable cuando las tareas en segundo plano de Linux interrumpen el tiempo de pulsos |
| Mejores aplicaciones | Servos, drivers de motor, ventiladores, salida de audio, sistemas de control de precisión | Atenuación LED, proyectos para principiantes, control a baja velocidad, indicadores de estado |
| Principal ventaja | Salida PWM suave y precisa | Configuración fácil y más opciones de GPIO |
| Limitación principal | Disponible solo en pines seleccionados | Tiempo menos preciso |
| Uso recomendado | Úsalo cuando la precisión del tiempo importa | Úsalo para proyectos sencillos donde se aceptan pequeños errores de tiempo |
Pines y configuración de GPIO PWM de Raspberry Pi

Numeración GPIO y pines hardware PWM
Raspberry Pi utiliza múltiples sistemas de numeración GPIO. La mayoría de las librerías modernas de Python utilizan numeración BCM, mientras que la numeración física se refiere a la ubicación real de los pines en el encabezado.
| Tipo de numeración | Significado |
|---|---|
| Numeración BCM | La numeración GPIO de Broadcom se utiliza internamente |
| Numeración física de los alfileres | Posiciones reales de los pines del encabezado |
| Numeración de WiringPi | Sistema de numeración antiguo y obsoleto |
Verifica siempre la numeración GPIO antes de cablear el hardware.
Pines PWM de hardware comunes
| BCM GPIO | Pin físico | Canal PWM | Uso común |
|---|---|---|---|
| GPIO12 | Pin 32 | PWM0 | LEDs, motores, servos |
| GPIO13 | Pin 33 | PWM1 | LEDs, motores, servos |
| GPIO18 | Pin 12 | PWM0 | Audio, servos, control motor |
| GPIO19 | Pin 35 | PWM1 | Audio, servos, control motor |
GPIO18 se utiliza comúnmente porque soporta PWM por hardware y está ampliamente soportado en tutoriales y bibliotecas de PWM.
Bibliotecas y configuración de PWM
Bibliotecas PWM comunes de Raspberry Pi
| Biblioteca | Propósito principal | Notas |
|---|---|---|
| RPi.GPIO | Control básico de GPIO y PWM | Amigable para principiantes |
| GPIOZERO | Control simplificado de dispositivos | Interfaz de alto nivel |
| Pipio | Sincronización precisa y PWM avanzado | Soporta la temporización DMA |
| LGPIO | Control moderno de GPIO | Acceso de nivel inferior |
Parámetros típicos de configuración PWM
| Parámetro | Descripción |
|---|---|
| Frecuencia | Velocidad de conmutación PWM |
| Ciclo de trabajo | Porcentaje del tiempo ON |
| Pin GPIO | Pin de salida PWM seleccionado |
| Modo PWM | PWM de hardware o PWM de software |
Limitaciones de PWM y seguridad del cableado
El hardware PWM de Raspberry Pi tiene varias limitaciones que se vuelven importantes en robótica, control motor, sistemas de audio y aplicaciones industriales.
| Limitación | Explicación |
|---|---|
| Canales PWM limitados | Solo hay un pequeño número de salidas hardware PWM disponibles |
| Funciones compartidas | Algunos pines GPIO comparten periféricos |
| Conflictos de audio | El PWM puede entrar en conflicto con el audio a bordo |
| Restricciones de pines | No todos los pines GPIO soportan PWM por hardware |
| Compartición de frecuencia | Algunos canales PWM comparten fuentes de reloj |
| Dependencia de DMA | Los métodos avanzados de PWM pueden utilizar recursos DMA |
Muchos problemas de PWM se deben a errores de cableado más que a problemas de software.
| Error de cableado | Por qué importa |
|---|---|
| Mezcla de BCM y numeración física | Controla el pin GPIO incorrecto |
| Conexión de motores directamente a GPIO | Puede dañar la Raspberry Pi |
| Falta un terreno común | Causas señales inestables |
| Superar los límites de corriente del GPIO | Puede dañar permanentemente los pines GPIO |
| Falta un diodo de retroceso Los picos de tensión pueden dañar componentes | |
| Conexión de voltaje incorrecta | Los pines GPIO solo soportan lógica de 3,3V |
| Cables puentes sueltos | Causa señales PWM inestables |
Componentes de protección recomendados
| Componente | Propósito |
|---|---|
| MOSFET | Conmuta de forma segura cargas de mayor corriente |
| Conductor de puente en H | Controla la velocidad y dirección del motor |
| Diodo de retroceso de vuelo | Protege contra picos de tensión inductivos |
| Fuente de alimentación externa | Alimenta los motores de forma segura |
| Optoacoplador | Proporciona aislamiento eléctrico |
Aplicaciones PWM en Raspberry Pi
Sistemas de atenuación LED 5.1

El PWM se utiliza ampliamente en proyectos de LED Raspberry Pi porque puede controlar el brillo sin necesidad de un pin de salida analógico real. Al cambiar el ciclo de trabajo, los LED pueden parecer más tenues o más brillantes. Esto es útil para el control de brillo LED, mezcla de colores RGB, iluminación decorativa, sistemas de brillo adaptativo e indicadores de estado. Se debe usar una frecuencia PWM suficientemente alta para evitar el parpadeo visible.
Control de velocidad del motor

La PWM se utiliza comúnmente para controlar la velocidad de motores de corriente continua en ruedas robóticas, bombas, ventiladores, sistemas de transportes y actuadores de automatización. En lugar de cambiar directamente la tensión de alimentación, la PWM ajusta la potencia media entregada al motor. Los ciclos de trabajo más altos generalmente aumentan la velocidad del motor, mientras que los más bajos la reducen. Se requieren controladores externos de motor porque los pines GPIO de la Raspberry Pi no pueden accionar motores directamente de forma segura.
Control de posición de servo

Los servomotores utilizan pulsos de control repetitivos donde el ancho de pulso determina la posición en brazos robóticos, sistemas de cámara pan-tilt, vehículos RC y sistemas de automatización. Pequeños errores de sincronización pueden causar temblores, zumbidos o movimientos inestables, por lo que la sincronización estable de la PWM es importante para un control servo fiable.
Generación de señales de audio

El PWM Raspberry Pi puede generar tonos simples, alarmas, timbres y señales básicas de audio cambiando los pines GPIO en frecuencias audibles. La PWM es útil para una salida de sonido embebida sencilla, pero no puede sustituir completamente un DAC dedicado para aplicaciones de audio de alta calidad.
Aplicaciones industriales e IoT

La PWM es útil en sistemas industriales y IoT Raspberry Pi porque puede controlar salidas de hardware ajustables. Las aplicaciones habituales incluyen la agricultura inteligente, la monitorización ambiental, los sistemas HVAC, la automatización industrial y los sistemas de control IoT. La PWM controla frecuentemente ventiladores, bombas, válvulas, sistemas de iluminación y actuadores.
Raspberry Pi vs Arduino para PWM

| Categoría | Raspberry Pi | Arduino |
|---|---|---|
| Sistema operativo | Ejecuta Linux OS | Ejecuta un firmware simple |
| Potencia de procesamiento | Mayor potencia de procesamiento para aplicaciones avanzadas | Menor potencia de procesamiento pero optimizado para tareas de control |
| Temporización PWM | Menos predecible debido a la multitarea del sistema operativo | Comportamiento PWM en tiempo real más predecible |
| Latencia | Latencia moderada | Menor latencia con respuesta de hardware más rápida |
| Control de hardware | Acceso indirecto al hardware a través del sistema operativo y bibliotecas | Acceso directo al hardware |
| Estabilidad PWM | Bueno para PWM de propósito general | Mejor para un control de motores estables y bucles de control |
| Redes | Excelente soporte de redes e IoT | Redes limitadas sin módulos adicionales |
| Multitarea | Puede ejecutar servidores, scripts, bases de datos y múltiples aplicaciones | Capacidad limitada de multitarea |
| Programación | Programación sencilla de alto nivel con Python | Programación sencilla de bajo nivel con Arduino IDE |
| Electrónica para principiantes | Ideal para principiantes con enfoque en software | Excelente para principiantes en electrónica |
| Automatización inteligente | Excelente para sistemas de automatización inteligente conectados | Bueno para automatización independiente |
| Control Motor en Tiempo Real | Rendimiento moderado | Excelente rendimiento |
| Cronometraje de precisión | Precisión moderada en el tiempo | Excelente precisión de tiempo |
| Mejores casos de uso | Sistemas IoT, automatización inteligente, monitorización remota, proyectos basados en Linux | Motores, servos, robótica, control embebido, PWM en tiempo real |
| Principal ventaja | Combina PWM con software avanzado y redes | Proporciona un control PWM en tiempo real preciso y estable |
Solución de problemas con Raspberry Pi PWM
| Problema | Causa posible | Solución recomendada |
|---|---|---|
| La señal no funciona | Numeración incorrecta de GPIO | Comprueba si el código utiliza BCM, físico u otro sistema de numeración. |
| La señal no funciona | Cableado incorrecto | Revisa de nuevo las conexiones GPIO, la colocación de las resistencias y la tierra compartida. |
| La señal no funciona | Pin sin soporte | Confirma si el pin seleccionado soporta PWM por hardware o software. |
| La señal no funciona | Problema de biblioteca o permisos | Verifica la instalación de la librería GPIO, los permisos y los comandos de configuración. |
| Nerviosismo servo | Fuente de alimentación débil | Usa una fuente de alimentación separada para el servo. |
| Nerviosismo servo | Falta un terreno común | Conecta la tierra de la Raspberry Pi a la toma de tierra de la fuente de alimentación servo. |
| Nerviosismo servo | Inestabilidad PWM de software | Usa hardware PWM o una biblioteca más estable como pigpio. |
| Nerviosismo servo | Ruido eléctrico | Acorta los cables y mejora el filtrado de energía o la disposición del cableado. |
| Parpadeo LED | Frecuencia demasiado baja | Aumenta la frecuencia de PWM hasta que el parpadeo deje de ser visible. |
| Parpadeo LED | Mal cableado | Comprueba los valores de las resistencias, las conexiones sueltas y la calidad del cableado. |
| Ruido o inestabilidad del motor | Fuente de alimentación débil | Usa una fuente de alimentación externa para el motor en lugar de alimentar el motor desde GPIO. |
| Ruido o inestabilidad del motor | Componentes de protección faltantes | Utiliza un driver adecuado y añade componentes de protección como un diodo de vuelta cuando sea necesario. |
| Ruido o inestabilidad del motor | Frecuencia incorrecta | Ajusta la frecuencia PWM para adaptarla al motor y al circuito de control. |
| Errores de pigpio | Daemon no se ejecuta | Inicia o reinicia el demonio pigpio. |
| Errores de pigpio | Conflictos en GPIO | Comprueba si otro programa ya está usando el mismo pin GPIO. |
Preguntas frecuentes [FAQ]
¿Por qué es importante la PWM en Raspberry Pi aunque los pines GPIO sean solo digitales?
PWM permite que los pines GPIO Raspberry Pi simulen un control similar al analógico cambiando rápidamente señales entre estados ALTO y BAJO. En lugar de cambiar el voltaje directamente, la PWM modifica el ciclo de trabajo para controlar la entrega media de potencia. Esto permite atenuar LEDs, ajustar la velocidad del motor, controlar la posición de los servomotores y gestionar ventiladores usando pines GPIO digitales estándar.
¿Cuándo debería usarse PWM por hardware en lugar de PWM por software en Raspberry Pi?
La PWM por hardware es mejor para aplicaciones que requieren una sincronización estable y una generación precisa de pulsos, como servos, controladores de motor, salida de audio y robótica. Como el hardware dedicado controla la señal, produce menos jitter y utiliza menos recursos de la CPU. El PWM por software suele ser suficiente para tareas más sencillas como el atenuado de LED o los indicadores de estado, donde los pequeños errores de temporización son menos perceptibles.
¿Por qué una frecuencia PWM incorrecta puede causar problemas en los proyectos de Raspberry Pi?
Diferentes dispositivos responden mejor a distintas frecuencias PWM. Si la frecuencia es demasiado baja, los LEDs pueden parpadear visiblemente, los motores pueden producir ruido o movimientos bruscos, y los servos pueden volverse inestables. Las frecuencias muy altas también pueden reducir la resolución de PWM o aumentar las demandas de procesamiento. Elegir la frecuencia correcta mejora el rendimiento, la suavidad y la fiabilidad.
¿Por qué los motores y servos nunca deberían conectarse directamente a los pines GPIO de la Raspberry Pi?
Los pines GPIO Raspberry Pi solo admiten señales lógicas de baja corriente de 3,3V y no pueden alimentar motores o servos de forma segura de forma segura. Los dispositivos de alta corriente pueden dañar pines GPIO, crear picos de tensión o causar un funcionamiento inestable. Los controladores externos, MOSFETs, circuitos H-bridge, diodos flyback y fuentes de alimentación separadas ayudan a proteger la Raspberry Pi y a mejorar la fiabilidad de las PWM.
¿Por qué Arduino suele ser mejor para un control preciso de PWM que Raspberry Pi?
Las placas Arduino están diseñadas para el control de hardware en tiempo real y ejecutan un firmware sencillo sin un sistema operativo multitarea. Esto permite una sincronización PWM más predecible, menor latencia y mejor estabilidad para motores, servos y bucles de control. Raspberry Pi es más potente en redes, aplicaciones Linux, sistemas IoT y automatización inteligente, pero la actividad en segundo plano de Linux puede afectar la precisión del tiempo de PWM.