Crea, comparte, aprende y disfruta
PWM con Pingüino
Ya sabemos leer valores analógicos, ahora es el turno de aprender a escribirlos también. Cómo dijimos en el tutorial anterior los valores analógicos se diferencian de los digitales en que mientras estos últimos solamente pueden ser 0 o 1 los analógicos pueden tener multitud de valores.
Sin embargo, los microprocesadores y microcontroladores (cómo el PIC de pingüino) trabajan con valores digitales, únicamente entienden de 0s y 1s, o hay corriente o no hay corriente. Entonces ¿cómo es posible que algo que sólo puede trabajar con dos valores sea capaz de entregar multitud de ellos? la respuesta está en utilizar PWM.
Que es PWM
El PWM (Modulación de ancho de Pulso) consiste en aprovechar la gran velocidad del microcontrolador para simular una salida analógica. Realmente lo que el microcontrolador hacer es encender y apagar multitud de veces por segundo su patilla PWM, de esta forma puede crear una señal cuadrada. Cuanto más tiempo tarde en encender y apagar más largo será el pulso, si en cambio lo hace de forma muy rápida el pulso será muy breve.
Esto se traduce poder controlar, por ejemplo, la intensidad de un led. Si el pulso que mandamos es muy pequeño el led nunca alcanzará su intensidad máxima y por lo tanto lo percibiremos cómo atenuado. Cuanto más largo sea el pulso que lo mantiene encendido más tiempo tendrá de alcanzar su intensidad máxima y por lo tanto veremos que brilla más. Lo mismo ocurre, por ejemplo, con los motores de Corriente Continua. Usando PWM podemos controlar la velocidad a la que se mueven.
PWM con Pingüino
Ahora que sabemos lo que ocurre en «las tripas» de nuestro hardware cuando escribimos en analógico y sabemos su utilidad vamos a aprender a cómo hacerlo utilizando pingüino.
El PIC de Pinguino tiene PWM con una resolución de 8bit, o lo que es lo mismo, puede dar cualquier valor entre 0 (El pulso más corto) y 255 (El pulso más largo y equivalente a un 1 lógico o 5V). Para usar el PWM de pingüino únicamente tenemos que utilizar la función analogWrite(pin,valor). en pin colocamos el pin en el que queremos escribir y valor un valor comprendido entre 0 y 255.
No todos los pines de Pingüino pueden usar PWM, de hecho únicamente dos de ellos tienen esta capacidad, estos son los pines 11 y 12.
Vamos a crear un sencillo circuito con el que probar el PWM de pingüino. Únicamente necesitaremos un led con su correspondiente resistencia, un potenciómetro y la placa Pingüino. Lo que haremos será variar el pulso que escribamos en uno de los pines PWM de pingüino en función de la lectura que hagamos del potenciómetro (si tienes dudas sobre la lectura de entradas analógicas puedes consultar el tutorial anterior sobre lecturas analogicas con Pinguino.)
Ahora escribimos y cargamos este código en el pingüino:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | //Llamamos LED al pin 11 (Que es PWM) #define LED 11 //Llamamos POT al pin 13 #define POT 13 //creamos una variable en la que almacenar el valor del potenciómetro int lectura = 0; void setup() { } void loop() { //Leemos el potenciómetro lectura = analogRead(POT); //dividimos el valor del potenciómetro entre dos, para que los cambios sean más visibles lectura = lectura/2; //Escribimos el valor de la lectura del pot en el pin del LED usando el PWM analogWrite(LED, lectura); //hacemos una pequeña pausa antes de la siguiente lectura delay(10); } |
Si montamos este circuito y cargamos el programa observaremos que al girar el potenciómetro cambia la intensidad del led. Esto es porque estamos variando el ancho del pulso que lo mantiene encendido utilizando el PWM de Pingüino.
Deja una respuesta