Qué es PWM y cómo funciona en Arduino

Qué es PWM en Arduino¡Andale! ¿Cómo lo llevan? Ayer estuve con un amigo que está empezando. Un auténtico novatillo, si me lo permite. Y me preguntó para que servían los pines digitales con el simbolito ese. El simbolito ese es el que puedes encontrar en el pin 3 y que según pone en tu placa tiene que ver con PWM.

 

 

Vamos a ello, ¿Qué es PWM en Arduino?

¿Qué coño es PWM? PWM viene del inglés Pulse Width Modulation. Son señales cuadradas a las cuáles se les cambia el periodo. Fíjate en esta imagen de la wikimedia (libre de derechos y tal):

ciclo de trabajo PWM

Si el ciclo de trabajo es del 25% se pasa el 25% de su periodo arriba y el 75% abajo. El periodo es lo que dura la onda sin repetirse. Por eso ves que se va repitiendo con el tiempo porque el periodo se repite durante todo el tiempo. El periodo es la suma de la parte alta y baja una vez, cuando vuelve a subir ya es otro periodo y la onda vuelve a empezar otra vez.

Fíjate que el ancho de la onda, su altura, siempre es la misma. Va de 0 a 5 Voltios. Lo único que varía es el tiempo que está en ON/OFF. La frecuencia de los pines es de 490Hz más o menos, excepto el 5 y el 6 que es de 980 Hz para el Arduino UNO y lo mismo pero en los pines 3 y 11 para el Leonardo. La locura es simplemente porque dependen de los timers (temporizadores) internos que tienen. Hay 3 y uno de ellos tiene el doble de frecuencia lo que afecta a nuestros pines.

Así lo que pasa es que con este pequeño cálculo:

1/500Hz = 0.002 segundos

conseguimos el tiempo del periodo. Esto significa que estamos jugando con porcentajes de un tiempo que es ná, 2 milésimas de segundos.

Para qué se usa el PWM este?

Es raro que empiece ahora a hablar de ondas,¿no? ¿Año nuevo fumada nueva? ¡Qué va, no tanto! Lo que pasa es que las ondas estas se utilizan para controlar la dirección de los servos entre otras cosas molonas. Así lo que hacen es generar pulsos (un pulso es la subida y bajada, esa onda cuadrada que se forma) cada x tiempo. Según el tiempo, que se controla con el ciclo de trabajo (el porcentaje ese que te dije antes), el servo cambia de posición entre 0 y 180º.

¿Sabes para qué se utiliza más? ¿Te acuerdas de esos leds que programaste hace poco? Pues si te das cuenta te dije yo los pines que deberías usar. De hecho tal vez en clones de Arduino (¡Cómo te gusta china, bribón!) no te funcionen porque no sean pines PWM. El truco está en que hemos conectado unos pines digitales para generar una señal analógica…WTF!!!! ¿Estamos locos o qué?

Pines digitales y leds

Si son pines digitales la teoría dice que deben de generar dos valores: o 5V o 0 Voltios, u ON u OFF. Y eso es lo que pasa si cargas el programa Fade en pines como el 12 o el 8, por eso te hice cambiar el pin del 12 al 9 😉 . Esto sucede porque hemos utilizado la función AnalogWrite de Arduino. Esta función lo que hace es generar una onda cuadrada con el ciclo de trabajo adecuado para que simule que estás creando una señal de un voltaje dado. No lo generamos de manera real, simplemente es un juego de ondas 😉

Y tú me dirás: Hermano, ¿por qué no utilizas los pines analógicos y ya está todo apañao? Pues porque justamente y mágicamente los pines analógicos (A0-A5) solamente son de entrada. Sólo leen, no envían y es por eso que no es necesario declararlos en el setup como INPUT ni nada similar.

Si te pusieses cabezón y quisieses crear tu propia función PWM en cualquier pin una forma rudimentaria de hacerlo sería esta:

int ciclotrabajo = 100;

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

void loop()
{
  digitalWrite(8, HIGH);
  delayMicroseconds(ciclotrabajo); 
  digitalWrite(8, LOW);
  delayMicroseconds(500 - ciclotrabajo); /*El ciclo es de 500Hz mas o menos*/
}

Fíjate que lo que hago no es más que generar un ciclo de trabajo y le hago estar tantos microsegundos (en el delay eran milisegundos, esto es mil veces menos) esperando encendido (HIGH) y luego los que restan apagado (LOW). No intentes probar esto con un led porque ya te dije que a velocidades altas no somos capaces de distinguir este pequeño cambio con nuestros ojos. Este método es rudimentario porque además de que si aparece una interrupción se jode el invento (otro día hablamos de interrupciones que eso da para post), hay que tener en cuenta que los delay hacen que el microcontrolador se quede pensando y no puede hacer otra cosa que esperar.

Conclusiones

Bueno,al final el PWM ha resultado algo que se utiliza en motores, leds e incluso sonidos. Además de estar oculto dentro de Arduino y qué utilizas inconscientemente al generar una salida analógica. La cosa está en utilizar los pines correctos cuando queremos una variación en el voltaje de SALIDA.

Espero que te haya quedado claro qué es PWM y para qué sirve. Sígueme en Google+ (ahí en la barra de tu derecha) para hacerme feliz y que no mueran gatitos. Y ahí abajo puedes poner tu e-mail para que te avise de nuevos posts. Además, que nunca se sabe cuando me puede dar por hacerte algún regalito..guiño guiño 😉 ¿Nos vemos?

[Total:11    Promedio:3.9/5]
Opt In Image

Deja un comentario