How many PWM pins can a Arduino output?

Dominando el PWM en Arduino: Potencia y Precisión

26/06/2022

Valoración: 4.32 (8585 votos)

La Modulación por Ancho de Pulso, más conocida como PWM (Pulse Width Modulation), es una técnica increíblemente versátil que permite a microcontroladores como Arduino simular salidas analógicas a partir de señales digitales. Es la clave para controlar la velocidad de motores, el brillo de LEDs, generar tonos de audio y mucho más. Si alguna vez te has preguntado cómo tu placa Arduino puede hacer magia con componentes que requieren un control gradual, la respuesta reside en el poder del PWM.

How many PWM pins can a Arduino output?

A menudo, los principiantes se encuentran con la duda de cuántos pines PWM están disponibles en sus placas Arduino y cómo pueden aprovechar al máximo esta funcionalidad. En este artículo, desglosaremos todo lo que necesitas saber sobre el PWM en Arduino, desde sus fundamentos hasta consejos avanzados para tus proyectos.

Índice de Contenido

¿Qué es la Modulación por Ancho de Pulso (PWM)?

En esencia, el PWM es una técnica para obtener un resultado analógico a partir de una fuente de energía digital. Imagina un interruptor que se enciende y apaga muy rápidamente. Si el interruptor está encendido la mayor parte del tiempo, la potencia promedio entregada es alta. Si está apagado la mayor parte del tiempo, la potencia promedio es baja. El PWM hace exactamente esto: controla la cantidad de tiempo que una señal digital está en estado 'ON' (alto) versus 'OFF' (bajo) en un ciclo fijo.

  • Ciclo de Trabajo (Duty Cycle): Este es el porcentaje de tiempo que la señal está en estado 'ON' dentro de un período completo. Un ciclo de trabajo del 0% significa que la señal siempre está apagada (0V), mientras que un 100% significa que siempre está encendida (5V en Arduino). Un 50% significa que está encendida la mitad del tiempo y apagada la otra mitad. Este valor es fundamental, ya que determina el “valor analógico” efectivo.
  • Frecuencia: Es la rapidez con la que se repite el ciclo 'ON' y 'OFF'. Una frecuencia alta es crucial para muchas aplicaciones, ya que evita el parpadeo visible en LEDs o el zumbido audible en motores. Arduino genera PWM a frecuencias específicas, típicamente en el rango de los kilohertz (kHz), lo que las hace imperceptibles para el ojo humano o el oído en la mayoría de los casos.

La belleza del PWM radica en su eficiencia. A diferencia de un potenciómetro que desperdicia energía en forma de calor para reducir el voltaje, el PWM simplemente conmuta la energía, minimizando las pérdidas y haciendo que los sistemas sean más eficientes energéticamente.

Pines PWM en Placas Arduino Comunes

No todos los pines digitales de una placa Arduino son capaces de generar PWM. Solo aquellos marcados con un símbolo de tilde (~) o a veces con la etiqueta "PWM" en el diagrama de la placa tienen esta capacidad. Estos pines están conectados a temporizadores internos (timers) del microcontrolador, que son los encargados de generar las señales PWM de hardware.

La cantidad de pines PWM varía significativamente entre las diferentes placas Arduino debido a las características de los microcontroladores que utilizan:

Arduino Uno y Nano

Estas son quizás las placas más populares para empezar, ambas basadas en el microcontrolador ATmega328P.

  • Pines PWM: 6 pines (digitales 3, 5, 6, 9, 10 y 11).

Es importante notar que, en el Arduino Uno/Nano, los pines 5 y 6 comparten un temporizador, y los pines 9, 10 y 11 comparten otro. Esto significa que si manipulas la frecuencia de PWM para, por ejemplo, el pin 9, también afectarás la frecuencia de los pines 10 y 11. Los pines 3 y 11 también comparten un temporizador, aunque en el Uno, el pin 3 usa un temporizador diferente al 11 para la frecuencia estándar.

Arduino Mega 2560

Una placa más potente y con más pines, ideal para proyectos complejos.

  • Pines PWM: 15 pines (digitales 2 a 13, 44 a 46).

El Arduino Mega 2560, con su microcontrolador ATmega2560, ofrece una gran cantidad de pines PWM, lo que lo hace adecuado para aplicaciones que requieren un control simultáneo de muchos dispositivos.

Arduino Leonardo

Similar al Uno en tamaño, pero con un microcontrolador ATmega32U4, que permite una emulación de teclado/ratón USB.

  • Pines PWM: 6 pines (digitales 3, 5, 6, 9, 10 y 11).

Arduino Due

Una placa de 32 bits basada en ARM, mucho más potente y con más capacidades.

  • Pines PWM: 12 pines (digitales 2 a 13).

Además de estas, otras placas como la ESP32 o ESP8266 (que son compatibles con el entorno de programación Arduino) ofrecen una flexibilidad aún mayor en sus capacidades PWM, permitiendo configurar casi cualquier pin digital como salida PWM y con control preciso sobre la frecuencia y resolución.

Cómo Usar PWM en Arduino: La Función analogWrite()

Arduino simplifica enormemente el uso de PWM gracias a la función analogWrite(). A pesar de su nombre, esta función no genera una verdadera salida analógica, sino una señal PWM.

What frequency should a timer output PWM?
So the timer0-Pins 5 an6 should output PWM with default frequency and timer1-pins 9 an 10, as well as timer2-pins 3 and 11 should output PWM with 25kHz. It shows, Pins 5 an 6 work as expected. an finally Pin11 stays to low from 0...127 and goes to high at 128 (2-Bit-PWM?)
analogWrite(pin, valor);
  • pin: El número del pin digital que deseas usar para PWM (debe ser uno de los pines PWM designados).
  • valor: Un entero que va de 0 a 255.

El valor determina el ciclo de trabajo:

  • 0: 0% de ciclo de trabajo (la señal siempre está baja, LED apagado, motor detenido).
  • 127: Aproximadamente 50% de ciclo de trabajo (LED a medio brillo, motor a media velocidad).
  • 255: 100% de ciclo de trabajo (la señal siempre está alta, LED a máximo brillo, motor a máxima velocidad).

Por ejemplo, para atenuar un LED conectado al pin 9:

int ledPin = 9; // Pin con capacidad PWM void setup() { pinMode(ledPin, OUTPUT); // Configurar el pin como salida } void loop() { for (int brillo = 0; brillo <= 255; brillo += 5) { analogWrite(ledPin, brillo); // Aumentar el brillo delay(30); } for (int brillo = 255; brillo >= 0; brillo -= 5) { analogWrite(ledPin, brillo); // Disminuir el brillo delay(30); } } 

Frecuencia de PWM en Arduino

La frecuencia por defecto del PWM en Arduino Uno es aproximadamente 490 Hz para los pines 3, 5, 6, 9, 10 y 11. Sin embargo, hay una ligera variación: los pines 5 y 6 operan a una frecuencia de aproximadamente 980 Hz, el doble de los demás. Esto se debe a que utilizan diferentes temporizadores internos que están configurados de manera distinta.

¿Por qué es importante la frecuencia?

  • LEDs: Una frecuencia demasiado baja puede causar un parpadeo visible. 490 Hz es generalmente suficiente para evitarlo.
  • Motores DC: Una frecuencia baja puede causar un zumbido audible en el motor, ya que el motor intenta seguir las rápidas conmutaciones de encendido/apagado. Una frecuencia más alta puede reducir este ruido y proporcionar un control más suave.
  • Servomotores: Los servomotores estándar requieren una señal PWM con una frecuencia muy específica, generalmente 50 Hz, y un ciclo de trabajo muy pequeño (entre 1ms y 2ms de pulso alto cada 20ms). La librería Servo de Arduino maneja esto automáticamente.
  • Aplicaciones de Audio: Para generar tonos de audio, la frecuencia de PWM debe ser mucho más alta que la frecuencia del tono que se desea generar (por ejemplo, decenas de kHz) para una buena calidad de audio.

Cambiando la Frecuencia de PWM (Avanzado)

Aunque analogWrite() utiliza frecuencias predeterminadas, es posible cambiar la frecuencia de PWM en Arduino modificando los registros de los temporizadores directamente. Esto es un tema más avanzado y requiere un conocimiento más profundo de la arquitectura del microcontrolador ATmega328P (para Uno/Nano) o el que sea pertinente para tu placa.

Al modificar los registros, puedes ajustar los prescalers de los temporizadores para obtener diferentes frecuencias. Sin embargo, ten en cuenta que cambiar la configuración de un temporizador afectará a todos los pines PWM asociados a ese temporizador. Por ejemplo, en un Arduino Uno:

  • El Temporizador 0 controla los pines 5 y 6.
  • El Temporizador 1 controla los pines 9 y 10.
  • El Temporizador 2 controla los pines 3 y 11.

Modificar estos registros permite una personalización extrema, pero puede complicar la programación y potencialmente interferir con otras funciones de la librería Arduino que dependen de los temporizadores (como la función delay() o millis() si se modifica el Temporizador 0).

Aplicaciones Comunes del PWM con Arduino

La Modulación por Ancho de Pulso es una herramienta increíblemente versátil en el mundo de la electrónica y la automatización con Arduino. Aquí te presentamos algunas de sus aplicaciones más destacadas:

  • Control de Brillo de LEDs: Esta es quizás la aplicación más sencilla y común. Permite crear efectos de atenuación, pulsación o incluso simular amaneceres y atardeceres.
  • Control de Velocidad de Motores DC: Al variar el ciclo de trabajo de la señal PWM que alimenta un motor de corriente continua (a través de un controlador de motor, como un puente H), se puede controlar con precisión su velocidad. Un ciclo de trabajo alto resulta en mayor velocidad, y uno bajo en menor velocidad.
  • Control de Servomotores: Aunque los servomotores utilizan una librería específica en Arduino (Servo.h), su principio de funcionamiento se basa en la duración de un pulso PWM. El ángulo del servo se determina por el ancho del pul pulso, no por el ciclo de trabajo total.
  • Generación de Tonos y Audio: Aunque Arduino no es un DAC de alta fidelidad, la rápida conmutación de un pin PWM puede generar ondas cuadradas de diferentes frecuencias, lo que permite crear tonos simples o incluso reproducir audio básico.
  • Regulación de Potencia: Utilizando transistores MOSFET como interruptores controlados por PWM, se puede regular la potencia entregada a cargas más grandes, como elementos calefactores o lámparas de mayor potencia, de manera muy eficiente.

Tabla Comparativa: Pines PWM en Placas Arduino

Placa ArduinoMicrocontroladorNúmero de Pines PWMFrecuencia PWM Estándar (aprox.)
Arduino Uno / NanoATmega328P6 (3, 5, 6, 9, 10, 11)490 Hz (pines 3, 9, 10, 11), 980 Hz (pines 5, 6)
Arduino Mega 2560ATmega256015 (2-13, 44-46)490 Hz (la mayoría), 980 Hz (algunos)
Arduino LeonardoATmega32U46 (3, 5, 6, 9, 10, 11)490 Hz (pines 3, 9, 10, 11), 980 Hz (pines 5, 6)
Arduino DueATSAM3X8E (ARM Cortex-M3)12 (2-13)1 kHz (configurable)
ESP32ESP32Hasta 16Configurable (hasta 80 MHz, resolución ajustable)
ESP8266ESP8266Hasta 8 (excepto GPIO16)Configurable (hasta 1 kHz)

La tabla muestra la flexibilidad y el escalado de capacidades PWM a medida que se avanza a placas más potentes o especializadas. Es importante investigar las especificaciones exactas de la placa que estás utilizando para confirmar el comportamiento de los pines PWM.

Preguntas Frecuentes sobre PWM en Arduino

¿Todos los pines digitales de Arduino pueden generar PWM?

No, solo un conjunto específico de pines digitales, generalmente marcados con una tilde (~) o la etiqueta “PWM” en la placa, tienen la capacidad de generar PWM por hardware. Estos pines están conectados a los temporizadores internos del microcontrolador.

¿Puedo cambiar la frecuencia de PWM en Arduino?

Sí, es posible cambiar la frecuencia de PWM modificando directamente los registros de los temporizadores del microcontrolador. Sin embargo, esto es una técnica avanzada y puede interferir con otras funciones de la librería Arduino si no se hace correctamente. Para la mayoría de los proyectos, la frecuencia por defecto es suficiente.

¿Qué significa el 'valor' en analogWrite(pin, valor)?

El 'valor' es un número entre 0 y 255 que representa el ciclo de trabajo de la señal PWM. 0 significa 0% de ciclo de trabajo (apagado), y 255 significa 100% de ciclo de trabajo (encendido total).

¿Cuál es la diferencia entre PWM y una salida analógica real?

Una salida analógica real puede generar cualquier voltaje dentro de un rango continuo (por ejemplo, de 0V a 5V). El PWM, en cambio, es una señal digital que se enciende y apaga rápidamente. Simula un valor analógico al variar el tiempo que la señal está encendida dentro de un ciclo. Para componentes que no pueden responder lo suficientemente rápido a las conmutaciones (como un LED o un motor), el efecto es el mismo que si recibieran un voltaje analógico continuo.

¿Por qué mi motor zumba o mi LED parpadea cuando uso PWM?

Esto suele ser un indicio de que la frecuencia de PWM es demasiado baja para la aplicación. Los motores pueden zumbar porque intentan seguir las rápidas conmutaciones, y los LEDs pueden parpadear visiblemente si la frecuencia es inferior a la persistencia de la visión humana (alrededor de 50-60 Hz).

¿Necesito componentes adicionales para usar PWM?

Para controlar componentes de baja potencia como LEDs pequeños, no necesitas componentes adicionales más allá de una resistencia limitadora de corriente. Sin embargo, para controlar cargas de mayor potencia como motores grandes, tiras de LED o elementos calefactores, necesitarás componentes adicionales como transistores (MOSFETs) o controladores de motor (puentes H) para manejar la corriente y el voltaje que el pin Arduino no puede suministrar directamente.

En resumen, el PWM es una de las características más potentes y esenciales de Arduino, abriendo un mundo de posibilidades para proyectos que requieren control gradual. Comprender cómo funcionan los pines PWM, sus limitaciones y cómo manipularlos te permitirá llevar tus creaciones al siguiente nivel, desde simples atenuadores de luz hasta sistemas de control de movimiento complejos. La flexibilidad y eficiencia del PWM lo convierten en una herramienta indispensable en el arsenal de cualquier entusiasta o desarrollador de electrónica.

Si quieres conocer otros artículos parecidos a Dominando el PWM en Arduino: Potencia y Precisión puedes visitar la categoría Librerías.

Subir