Trastejant

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.

Pinguino PWMSin 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.)

Circuito PWM con PinguinoAhora 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.


También te puede interesar...

No hay temas relacionados

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.