Modulación de ancho de pulso en Arduino

Una placa Arduino solo puede generar una señal baja (0 voltios) y una señal alta (5 voltios). Sin embargo también es posible realizar una modulación de ancho de pulso en Arduino, para alimentar dispositivos que requieren un rango de voltajes entre 0 y 5 voltios.

Si es tu caso, y buscas aprender a alimentar un LED o servomotores, a continuación te mostraremos cómo funciona la modulación por ancho de pulso y cómo generar dichas señales en una placa Arduino Uno.

Modulación de ancho de pulso en una placa Arduino

Una señal modulada por ancho de pulso se compone de pulsos de corriente cortos de alta frecuencia. La señal parece una onda cuadrada, con el voltaje cayendo muy rápidamente de 5 voltios a 0 voltios:

Diagrama de ancho de pulso y duración del ciclo.png

En Arduino, la frecuencia de modulación de ancho de pulso es de alrededor de 500 Hz, por lo que ocurren 500 de estos ciclos cada segundo.

La duración de cada ciclo es de sólo unos 2 milisegundos.

La duración de la parte alta de la señal se denomina ancho de pulso. La duración de las partes alta y baja de la señal se denomina Tiempo del ciclo.

El porcentaje de la duración del ancho del pulso en relación con el tiempo del ciclo, se denomina ciclo de trabajo:

Ciclo de trabajo fórmula 3.png

Al cambiar el ciclo de trabajo, podemos cambiar el voltaje aparente a cualquier valor entre 0 y 5 voltios:

Diagrama de ciclo de trabajo al 100 % con voltaje y valores de escritura analógicos CROPPED.png

En un ciclo de trabajo del 50 %, el ancho del pulso es el 50 % del ciclo, por lo que el voltaje aparente es el 50% de 5 voltios o 2,5 voltios.

Esto corresponde a un valor analogWrite de 127.

Las señales de modulación de ancho de pulso solo se pueden generar en los pines de la placa Arduino rotulados con el símbolo: «~»

Pines de modulación de ancho de pulso de Arduino

Función analogWrite() para generar señales de modulación de ancho de pulso

La función analogWrite() puede generar la señal de modulación de ancho de pulso en Arduino. Para ellos se requieren dos argumentos en la función, pin y value:

analogWrite(pin, value);

El Argumento pin indica el número de pin donde se generará la señal de modulación de ancho de pulso.

Por otro lado, el argumento value es el valor analogWrite. Dicho valor es el ciclo de trabajo de la señal de modulación de ancho de pulso.

Si deseas hallar el valor de analogWrite que producirá una señal de modulación de ancho de pulso, utiliza la siguiente fórmula:

Fórmula para convertir voltaje a analógicoEscribir valor.png

proyecto ejemplo

El siguiente proyecto sirve de ejemplo en el uso de la modulación de ancho de pulso en una placa Arduino. La finalidad de dicho proyecto es el de aumentar y disminuir automáticamente el brillo de un LED.

La siguiente imagen ilustra el montaje físico para entre los componentes y la placa Arduino Uno:

Diagrama de cableado PWM.png

La resistencia limitadora debe ser de entre 220 y 1.000 ohmios.

Programación del Arduino para modulación de ancho de pulso

Este programa aumentará el brillo del LED al 100 %  y luego lo disminuirá al 0 %, en un ciclo infinito.

Una vez realizado el montaje de los componentes, sube el siguiente código en tu placa:

int ledPin = 6;
int brightness = 0;
int fadeAmount = 5;

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

void loop() {
  analogWrite(ledPin, brightness);

  brightness = brightness + fadeAmount;

  if (brightness <= 0 || brightness >= 255) {
    fadeAmount = -fadeAmount;
  }

  delay(30);
}

En primer lugar se declara la variable int  ledPin para almacenar el número de pin donde está conectado el LED.

Luego, se declara la otra variable int que llamaremos brightness (brillo). Dicha variable almacenará los valores de analogWrite a medida que se desplazan entre 0 y 255.

También se declara una tercera variable que se llamará fadeAmount que se utilizará para controlar la velocidad a la que el LED se enciende y se apaga.

Dentro del bloque setup(), usaremos la función pinMode() para establecer a la variable ledPin como salida.

Dentro de la sección loop(), escribimos la función analogWrite() con el objetivo de generar la señal de modulación de ancho de pulso.

El primer argumento es el número de pin que generará la señal de modulación de ancho de pulso, por lo que usamos la variable ledPin como primer argumento.

El segundo argumento es el valor analogWrite que establece el ciclo de trabajo.

Hemos declarado una variable llamada brightness para almacenar este valor, por lo que se utiliza como segundo argumento.

La siguiente línea es brightness = brightness + fadeAmount;.

La línea de código anterior toma la variable brightness y le suma la variable fadeAmount cada vez que se ejecuta un ciclo.

Se declaró la variable fadeAmount igual a 5, por lo que esto hará que la variable brightness aumente en 5 con cada ciclo del bucle.

Finalmente tenemos una sentencia if con la condición de que «si brightness es menor o igual a 0, o brightness es mayor o igual a 255″, se ejecutará el código dentro de la sentencia fadeAmount = -fadeAmount;.

Esperamos que este sencillo tutorial te haya servido para aprender a realizar la modulación de ancho de pulso en Arduino.

Deja un comentario

programar en arduino logo

En este sitio aprenderas a programar en Arduino de forma gratuita a través de sencillos tutoriales y distintos proyectos.