huborarduino.com

La web de Hubor para la simulación de Arduino con Proteus

Banner Guia Programacion Arduino Con Proteus

[Proteus versión 8.1]

En lecciones anteriores vimos que nuestro equipo Arduino era capaz de controlar diferentes dispositivos en función de la lógica de su programa. Para hacerlo utilizábamos las salidas digitales. Cuando queríamos encender un led, activábamos una salida digital y cuando lo queríamos apagar, la desactivábamos.

Al igual que sucedía con las entradas, el mundo de las salidas no acaba en lo meramente digital. Cuando necesitamos gobernar un determinado dispositivo no solo controlando que esté activado o desactivado, sino que deseamos manejar el grado mayor o menor de una determinada magnitud, utilizamos las salidas analógicas. Algunos ejemplos de utilización de las salidas analógicas son variar la intensidad luminosa para que un foco dé más o menos luz, controlar el caudal de sálida de un líquido variando el nivel de apertura de una electroválvula o modificar la velocidad de un motor. 

Cuando vimos en la lección anteror las entradas analógicas, vimos que el microprocesador leía el valor de tensión que se generaba en uno de sus pines (dentro de un rango que oscilaba entre 0 y 5V) y lo traducía a valores entre 0 y 1023. En muchos microprocesadores, el procedimiento para generar salidas digitales es exactamente el contrario. Escribimos en un determinado registro un valor entre 0 y 1023 y el microprocesador se encarga de poner uno de sus pines a un valor de tensión correspondiente entre el rango 0 y 5V.

Sin embargo nuestro querido Arduino no dispone de pines de salida analogíca. Así que tiene que utilizar otra técnica diferente denominada modulación de ancho de pulso (PWM pulse width modulation). Con esta técnica se puede utilizar un pin de salida digital haciéndole funcionar como una salida analógica. La técnica consiste en generar en el pin de salida un tren de pulsos de frecuencia constante (490Hz) y de tensión igual a cinco voltios en el ciclo alto y 0 voltios en el ciclo bajo (los únicos posibles en un pin digital). 

Lec05 001

Para obtener los diferentes valores analógicos se modifica el ciclo de trabajo de la señal periódica. Si hacemos que el 0% del tiempo la señal esté en el nivel bajo y el 100% en el nivel alto, obtendremos una señal de 5V. Si hacemos que el 25% del tiempo esté en el nivel bajo y el 75% en el nivel alto, obtendremos una señal de 3,75V. Con la señal al 50% de nivel alto y bajo, tendremos una señal de 2,5V. Con la señal al 75% de nivel bajo y 25% de nivel alto, tendremos una señal de 1,25V. Y si la señal está el 100% del tiempo a nivel alto, la señal de salida será de 0V.

Lec06 013

Ejemplo de señal con el 75% del ciclo en nivel alto que genera una salida de 3,75V.

Lec06 002

Ejemplo de señal con el 25% del ciclo en nivel alto que genera una salida de 1,25V.

Lec06 003

Utilizando la técnica PWM podemos tener salidas analógicas en nuestro Arduino utilizando algunos de sus pines digitales. Por ejemplo, el ATmega8 habilita la función PWM para los pines 9,10 y 11. El ATmega168 y el ATmega328P nos permite usar PWM con los pines 3,5,6,9,10 y11.

Para controlar el ciclo de trabajo de nuestra señal PWM podemos utilizar la función analogWrite(). El formato de esta función es:

analogWrite( <número pin> , <valor> )

Donde <número pin> se utilizar para seleccionar el pin en el que vamos a generar nuestra señal pwm y <valor> es un número comprendido entre 0 y 255.

Como es habitual en nuestro curso, vamos a realizar ejemplos prácticos que nos permitan aprender el funcionamiento de las salidas analógicas. Utilizaremos el siguiente circuito:

Lec06 004 

Hemos utilizado en esta ocasión el instrumento virtual osciloscopio que nos proporciona Proteus. Con este instrumento virtual podemos usar en nuestra simulación un osciloscopio como lo  haríamos en la vida real. Hemos conectado el pin IO3 al primero de los cuatro canales disponibles en nuestro osciloscopio.

Nuestro primer programa va a ser muy sencillo. Simplemente crearemos una variable entera, le asignaremos el valor 100 y utilizaremos la función analogWrite() que acabamos de ver. El código completo es el siguiente:

Lec06 005

Y el resultado de ejecutar nuestra simulación se muestra en la siguiente imagen.

Lec06 007

 

Practiquemos cambiando el valor de la variable valor_salida en el rango 0 a 254 y compruebe el efecto obtenido en la salida de nuestro arduino con ayuda de nuestro osciloscopio virtual. Para un valor 200, la señal leída por nuestro osciloscopio virtual es la siguiente.

Lec06 008

Como modificar nuestro programa cada vez, para variar la salida pvm es un poco tedioso, vamos a cambiar un poco nuestro programa para variar nuestra salida analógica en función de la lectura de una entrada analógica que iremos manipulando con ayuda de nuestro potenciómetro. El nuevo código sería:

Lec06 009

Observe como asignamos el valor de la entrada analógica a la variable valor_salida. Como los valores de lectura analógica abarcan un rango de 0 a 1023 y las salidas utilizan el rango de 0 a 254, dividimos el valor de entrada entre 4 para obtener valores proporcionales en la salida.

El resultado de la simulación con tres valors posibles de nuestro potenciómetro se muestran en las siguientes imágenes:

Lec06 010

Lec06 011

Lec06 012

En próximas lecciones ahondaremos en el uso de las salidas digitales.

 

 

Comparte este artículo en redes sociales

Submit to FacebookSubmit to Google PlusSubmit to TwitterSubmit to LinkedIn


Esta página es propiedad de Hubor.

2014.

¡Atención! Este sitio usa cookies y tecnologías similares. Si no cambia la configuración de su navegador, usted acepta su uso. Ampliar información