PWM

con Pinguino
pic

Ya sabemos leer valores analógicos, ahora es el turno de aprender a escribirlos también. Cómo dijimosen el tutorial anterior los valores analógicos se diferencian de los digitales en que mientras estos ultimos solamente puenden ser 0 o 1 los analógicos pueden tener multitud de valores.

Sin embargo, los microprocesadores y microconotroladores (cómo el PIC de pinguino) trabajan con valores digitales, unicamente 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.

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 puslo que mandamos es muy pequeño el led nunca alcanzará su intensidad máxima y por lo tanto lo perciviremos 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.

pinout

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 pinguino.

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 pinguino unicamente 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 Pinguino pueden usar PWM, de hecho unicamente 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 pinguino. Unicamente necesitaremos un led con su correspondiente resistencia, un potenciometro y la placa Pinguino. Lo que haremos será variar el pulso que escribamos en uno de los pines PWM de pinguno en función de la lectura que hagamos del potenciometro (si tienes dudas sobre la lectura de entradas analógicas puedes consultar el tutorial anterior.)

circuito

Ahora escribimos y cargamos este código en el pinguino

//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 potenciometro
int lectura = 0;
 
void setup()
{
 
}
 
void loop()
{
	//Leemos el pontenciometro
	lectura = analogRead(POT);
	//dividimos el valor del potenciometro 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 potenciometro cambia la intensidad del led. Esto es porque estamos variando el ancho del pulso que lo mantiene encendido utilizando el PWM de Pinguino.

Plantilla Basada en la obra de © 2011 Ansimuz.