La modulación por ancho de pulso (PWM, Pulse Width Modulation) es una tecnica para simular una salida analógica con una salida digital.
El control digital se usa para crear una onda cuadrada a la cuál le podemos variar la proporción de tiempo entre encendido y apagado.
A la duración del tiempo de encendido (ON) se le llama ancho de pulso. Para variar el valor analógico cambiamos, o modulamos, ese ancho de pulso.
Si repetimos este patrón de encendido/apagado lo suficientemente rapido por ejemplo con un LED el resultado es como si la señal variara entre 0 y 5V controlando el brillo del LED.
Arduino incorpora una función llamada analogWrite() que escribe un valor analógico (PWM) en un pin. La frecuencia de la señal PWM sera de aproximadamente 490Hz.
Podemos llamar la función escribiendo: analogWrite(pin, valor)
Donde «pin» es el pin en el cual se quiere generar la señal PWM y «valor» es el ciclo de trabajo deseado comprendido entre 0 y 255.
El ejemplo a continuación variará el ancho de pulso para cada LED desde 0 (apagado) hasta 255 (máximo brillo) de a un punto por vez. Hace uso de estructuras de bucle y no mucho más. Cualquier duda la pueden hacer vía comentarios.
/* ARDUINO BASICO: CONTROL DE UN LED RGB MEDIANTE PWM
www.automatismos-mdq.com.ar - www.mateslab.com.ar
28 de junio de 2012 - Mar del Plata
*/
// Declaracion de variables
int rojo = 0;
int verde = 0;
int azul = 0;
void setup()
{
// Nada para configurar
}
void loop()
{
// Activando la salida PWM 8
for (int a=0; a<255; a++)
{
azul = azul + 1;
analogWrite(8, azul);
delay(30);
}
// Activando la salida PWM 9
for (int r=0; r<255; r++)
{
rojo = rojo + 1;
analogWrite(9, rojo);
delay(30);
}
// Activando la salida PWM 10
for (int v=0; v<255; v++)
{
verde = verde + 1;
analogWrite(10, verde);
delay(30);
}
}
El diagrama de conexiones es muy sencillo, solo basta con identificar el cátodo común y los tres ánodos para no invertir la polaridad y listo. La alimentación la toma desde el puerto USB.
Podemos ver la gráfica del osciloscopio correspondiente a la señal PWM que entrega el pin 9. La frecuencia es de 490,215Hz.
Nuestro LED piraña de origen chino no posee color azul, es naranja. Se confundieron nuestros amigos asiaticos al fabricarlo. El siguiente vídeo muestra como varían los colores de forma automática.
+ Arduino.cc: Tutorial PWM
+ Arduino.cc: Referencia AnalogWrite