Modulacion por ancho de pulsos Arduino

Modulación por ancho de pulsos (Pulse Width Modulation) Arduino Uno y Nano opera en las salidas analógicas 3, 5, 6, 9, 10, 11 con una frecuencia de 488,28 Hz. Con la función analogWrite la frecuencia PWM cambia de 0 a 255 y corresponde a un factor de llenado de pulsos de 0 a 100%. Para muchos dispositivos la frecuencia PWM del Arduino Nano es baja, por lo que es necesario aumentarla. Veamos cómo hacerlo correctamente.

Para esta actividad necesitaremos:

  • Arduino Uno / Arduino Nano / Arduino Mega
  • LEDs y resistencias de 220 Ohm;
  • placa de pruebas;
  • cables de conexion.

Qué es la modulación por ancho de pulsos Arduino

Qué es la modulación por ancho de pulsos Arduino
Qué es la modulación por ancho de pulsos Arduino

Modulacion por ancho de pulsos (en inglés – Pulse Width Modulation Arduino) es el control de la potencia a la carga variando el ancho del pulso a una frecuencia y amplitud constantes de la señal. El siguiente gráfico muestra que con diferentes valores en la función analogWrite, la amplitud del pulso permanece constante, pero el ancho del pulso cambia. La potencia de la señal PWM Arduino Mega determina el factor de llenado del pulso.

La modulación por ancho de pulsos tiene dos aplicaciones:

1. PWM se utiliza en fuentes de alimentación, reguladores de potencia, etc. El uso de PWM en el Arduino Nano hace que sea mucho más fácil controlar el brillo de las fuentes de luz (LED, tira de LED direccionable) y la velocidad de los motores de corriente continua.

2. PWM se utiliza para producir una señal analógica. El convertidor digital-analógico (DAC) de Arduino es fácil de implementar, ya que requiere un mínimo de elementos de radio – un solo circuito RC formado por una resistencia y un condensador es suficiente.

Implementación de señal PWM en Arduino Uno / Nano

Implementación de señal PWM en Arduino Uno / Nano
Implementación de señal PWM en Arduino Uno / Nano

En el siguiente ejemplo demostraremos el uso de la modulación PWM para controlar el brillo del LED utilizando la función analogWrite. Como se muestra en el primer gráfico, configuraremos el ciclo de trabajo de la señal en la salida digital 10 con diferentes intensidades – 0%, 25%, 50%, 75% y 100%. Visualmente, esto se reflejará en el brillo del LED conectado al pin 10 del microcontrolador habilitado para Pulse Width Modulation.

Programa Arduino para Pulse Width Modulation

#define LED 10

void setup() {
   pinMode(LED, OUTPUT);
}

void loop() {
   analogWrite(LED, 0);
   delay(500);
 
   analogWrite(LED, 64);
   delay(500);
 
   analogWrite(LED, 127);
   delay(500);
 
   analogWrite(LED, 191);
   delay(500);
 
   analogWrite(LED, 255);
   delay(500);
}

Explicación del código para Pulse Width Modulation:

  1. en este programa, el LED se enciende a diferentes frecuencias PWM;;
  2. el microcontrolador Arduino permite controlar la salida digital (encendido/apagado) o analógica (de 0 a 5v en 256 pasos).

Cambio de la frecuencia PWM en Arduino Mega, Uno, Nano

Cambio de la frecuencia PWM en Arduino Mega, Uno, Nano
Cambio de la frecuencia PWM en Arduino Mega, Uno, Nano

En el siguiente programa de ejemplo utilizaremos un cambio suave en la frecuencia de la señal PWM, como se muestra en el diagrama. El ejemplo requerirá un LED conectado al pin 10 Arduino. Puedes usar cualquier pin de un microcontrolador Arduino que soporte modulacion por ancho de pulsos (están marcados con un garabato). La frecuencia de los pulsos se modificará con un bucle for y el LED se encenderá y apagará suavemente.

Programa Arduino para cambio de la frecuencia PWM

#define LED 10

void setup() {
   pinMode(LED, OUTPUT);
}

void loop() {
   for(int i=0; i<=255; i++) {
      analogWrite(LED, i);
      delay(10);
   }

   for(int i=255; i>=0; i--) {
      analogWrite(LED, i);
      delay(10);
   }
}

Explicación del código para cambio de la frecuencia PWM:

  1. la señal PWM se controla mediante la función analogWrite, que genera una señal analógica.

El Arduino basado en ATmega168/328 utiliza tres temporizadores para PWM:

Temporizador 0 – pines 5 y 6
Temporizador 1 – pines 9 y 10
Temporizador 2 – pines 3 y 11

El temporizador 0 se utiliza para la temporización, es decir, funciones de delay y millis. Aumentar la frecuencia del temporizador 0 hará que se interrumpan las funciones de sincronización. Para aumentar las salidas 9 y 10 de Arduino, debe modificarse la frecuencia del temporizador 1. La frecuencia PWM máxima es de 62.500 Hz en las placas Arduino Uno y Nano. Para ello, agregue el comando apropiado en la tabla siguiente.

Resolución Frecuencia PWM Modo de control
8 bit 62 500 Hz TCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x09;
7 812,5 Hz TCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x0a;
976,56 Hz TCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x0b;
244,14 Hz TCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x0c;
61,04 Hz TCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x0d;

Conclusión. En el gráfico las líneas verdes representan un periodo de tiempo regular. Una llamada a la función analogWrite(value) en Arduino IDE utiliza un valor entre 0 y 255, de forma que analogWrite(255) utiliza el 100% del ciclo (siempre en ALTO), analogWrite(191) utiliza el 75% del ciclo, y analogWrite(127) utiliza el 50% del ciclo de trabajo (la mitad del tiempo), por ejemplo. El valor 0 corresponde pues al 0% del ciclo de trabajo.


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *