Skip to content

Semena 3 PWM

Nestor Plasencia edited this page Nov 9, 2017 · 2 revisions

Salida Analogica

Una salida analógica se realiza mediante un Convertidor digital a analógico. Que toma un valor digital en número entero o binario y lo transforma en un voltaje.

Arduino UNO no posee un módulo conversor de Digital a Analógico, como si lo tiene el Arduino Due, Arduino Zero y MKR1000. Son pocos los microcontroladores que poseen esta característica, el principal motivo es su alto precio.

PWM

Para reemplazar esta característica se usa la modulación por ancho de pulso o PWM (por sus siglas en inglés), esta es una técnica para obtener resultados análogos con medios digitales.

Imagina alternar entre un voltaje de 5 y 0 V, el resultado es una onda rectangular, si el periodo de tiempo de esta señal es pequeño, aproximadamente 1 ms, el efecto que producirá en un LED es una regulación del brillo proporcional al ancho de pulso de la señal.

El ancho de pulso es el porcentaje de la señal que se encuentra en 5V.

Por ejemplo en 25% hace que solo la cuarta parte del periodo se encuentre en positivo, generando que la luz que emite el LED no sea muy potente.

Si aumentamos al 50%, la señal es cuadrada y la luz que emite el LED aumenta

Si ahora aumentamos al 75% solo una cuarta parte del periodo está en 0V, el resultado es un brillo superior en LED.

Es de esta forma que mediante una salida digital podemos emular un resultado que obtendremos con una salida analógica.

En Arduino no todos lo pines digitales pueden realizar esta función, para identificar los que sí pueden ser utilizados como pines de PWM las tarjetas poseen un símbolo de equivalencia (~).

Para producir esta señal PWM, Arduino cuenta con una función llamada analogWrite(), esta función posee dos parámetros de entrada, el primero el pin digital por el cual se generará la señal, y el segundo parámetro es un número en una escala de 0 - 255, es así que, el valor 0 no genera ninguna señal, para un 25% usamos 64, para un 50% el valor de 127, para un 75%, 191 y para un 100% 255.

Brillo de led

Continuando con el proyecto anterior de Circuits.io

El algoritmo en este nuevo ejercicio consiste en que mediante el potenciómetro regulamos el brillo de un led.

En la declaración de variables, como el pin 11 posee la característica de PWM seguiremos utilizándolo, y solo cambiamos el nombre de la variable valor por el de brillo.

int led = 11; 
int pot = 0; 
int brillo = 0;   

La configuración de pines quedará igual.

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

En void loop utilizamos la función analogRead en el puerto del potenciómetro y lo almacenaremos en la variable brillo.

brillo = analogRead(pot);

Eliminamos el codigo anterior y solo conservamos la lectura analogica.

Recordemos que la entrada analógica nos brinda una escala de 0 a 1023. Y para PWM necesitamos solamente una escala del 0 al 255, por lo tanto dividimos entre 4 el valor de la entrada analógica.

brillo = analogRead(pot)/4;

En la función analogWrite colocamos el pin de led y como valor la variable brillo

En Code Editor ejecutamos la simulación con Upload and Run.

Si ponemos el potenciómetro al 0% observamos que el led no enciende, conforme vamos aumentando el porcentaje observamos que el led se va encendiendo gradualmente.