El Convertidor Análogo

7
El Convertidor Análogo-Digital en Arduino Primero que nada disculpas a todos por haber estado desaparecido durante el último mes. Se me juntaron muchas cosas del trabajo y estuve un par de semanas completamente desconetado de Internet. Regresando al tema, habrán visto que en algunas entradas anteriores he hecho uso del convertidor Análogo-Digital incluído en el Arduino. Pero poco o nada me he detenido a explicar su funcionamiento o como utilizarlo. Para dar continuidad a los artículos de Arduino, en esta entrada les explicaré algunas generalidades sobre convertidores Análogos-Digital y cómo utilizarlos en el Arduino. Lo análogo y lo digital Al principio, solo solo existían los circuitos análogos. La electrónica digital y su uso generalizado es relativamente reciente, antes de ello los circuitos electrónicos análogos eran la regla. La diferencia entre ambos tipos de circuitos es bastante sencilla: Mientras que en los circuitos digitales su funcionamiento está determinado por las combinaciones de estados lógicos que usualmente identificamos como 1s y 0s. En la electrónica análoga los valores son continuos es decir que una señal puede tomar cualquier valor de voltaje o corriente dentro del rango para el que fué diseñado. Si en la electrónica digital solo tenemos blanco o negro, en la electrónica análoga las señales son todas escalas de gris. Si bien la mayoría de equipos electrónicos modernos están controlados por lógica o controladores digitales, vivimos en un mundo análogo así que se hace necesaria la existencia de un dispositivo que convierta los valores que observamos a nuestro alrededor en datos digitales que se puedan analizar. Midiendo el mundo análogo El convertidor Análogo-Digital (ADC por sus siglas en inglés) es un dispositivo que toma una señal análoga (corriente, voltaje, temperatura, presión, etc.), cuantifica la señal y le asigna un valor que se muestra a su salida en formato digital. Los ADC más comunes son aquellos que convierten señales de voltaje o corriente a su equivalente digital aunque podemos encontrarlos para medir diversidad de magnitudes análogas. Afortunadamente los Arduinos incluyen de fábrica uno o varios ADC que nos permiten convertir niveles de voltaje a valores digitales.

description

arduino

Transcript of El Convertidor Análogo

  • El Convertidor Anlogo-Digital en Arduino Primero que nada disculpas a todos por haber estado desaparecido durante el ltimo mes. Se me juntaron muchas cosas del trabajo y estuve un par de semanas completamente desconetado de Internet. Regresando al tema, habrn visto que en algunas entradas anteriores he hecho uso del convertidor Anlogo-Digital includo en el Arduino. Pero poco o nada me he detenido a explicar su funcionamiento o como utilizarlo. Para dar continuidad a los artculos de Arduino, en esta entrada les explicar algunas generalidades sobre convertidores Anlogos-Digital y cmo utilizarlos en el Arduino.

    Lo anlogo y lo digital

    Al principio, solo solo existan los circuitos anlogos. La electrnica digital y su uso generalizado es relativamente reciente, antes de ello los circuitos electrnicos anlogos eran la regla. La diferencia entre ambos tipos de circuitos es bastante sencilla: Mientras que en los circuitos digitales su funcionamiento est determinado por las combinaciones de estados lgicos que usualmente identificamos como 1s y 0s. En la electrnica anloga los valores son continuos es decir que una seal puede tomar cualquier valor de voltaje o corriente dentro del rango para el que fu diseado. Si en la electrnica digital solo tenemos blanco o negro, en la electrnica anloga las seales son todas escalas de gris.

    Si bien la mayora de equipos electrnicos modernos estn controlados por lgica o controladores digitales, vivimos en un mundo anlogo as que se hace necesaria la existencia de un dispositivo que convierta los valores que observamos a nuestro alrededor en datos digitales que se puedan analizar. Midiendo el mundo anlogo El convertidor Anlogo-Digital (ADC por sus siglas en ingls) es un dispositivo que toma una seal anloga (corriente, voltaje, temperatura, presin, etc.), cuantifica la seal y le asigna un valor que se muestra a su salida en formato digital. Los ADC ms comunes son aquellos que convierten seales de voltaje o corriente a su equivalente digital aunque podemos encontrarlos para medir diversidad de magnitudes anlogas. Afortunadamente los Arduinos incluyen de fbrica uno o varios ADC que nos permiten convertir niveles de voltaje a valores digitales.

    http://2.bp.blogspot.com/-cS0C3ccobHk/UXcsmB44SQI/AAAAAAAADPg/uJsL-PUCTcA/s1600/Vacuum+tubes.jpghttp://1.bp.blogspot.com/-nSnwhtDUNos/UXcW8V5q9hI/AAAAAAAADPA/eu2X2fE8uPQ/s1600/Analogo-Digital.jpg

  • En general hay tres cosas que nos interesa saber sobre un ADC:

    1. La resolucin 2. El tiempo de conversin 3. El rango de trabajo

    Vamos ahora a revisar en detalle cada una de estas tres caractersticas.

    La resolucin del convertidor

    Uno de los mayores incovenientes de convertir seales anlogas a su equivalente en digital es que pasamos de una seal que por naturaleza es continua y sin cortes a un dato discreto, que solo puede tener ciertos valores. Este proceso es conocido como "cuantificacin". Generalmente la cantidad de valores discretos en los que un ADC puede traducir una seal anloga a digital se conoce como su resolucin y usualmente es medida en base al nmero de bits que el ADC tiene a su salida. El nmero de bits representa la cantidad mxima de valores discretos o de pasos que un ADC puede tener. Supongamos por ejemplo que tenemos un convertidor ADC de 3 bits. Este convertidor podr tener solo 8 valores diferentes a su salida. Esto significa que nuestros voltajes al ser convertidos podran tener mas o menos la siguiente distribucin (asumiendo un voltaje mximo de 5V):

    Entrada anloga (V) Salida digital 0.000 - 0.625 0 0.625 - 1.250 1 1.250 - 1.875 2 1.875 - 2.500 3 2.500 - 3.125 4 3.125 - 3.750 5 3.750 - 4.375 6 4.375 - 5.000 7

    Para calcular el nmero de valores discretos que el ADC es capaz de convertir utilizaremos esta frmula:

    Seguramente ahora te estars preguntando: Qu tanta resolucin necesito? La respuesta depende muchsimo de la aplicacin. Si por ejemplo ests fabricando un "dimmer" digital posiblemente estos 8 pasos de resolucin sean ms que suficiente para la esa aplicacin. Si en cambio ests haciendo un control en que requires muchsima precisin tener solo 8 pasos de conversin puede resultar desastroso.

    http://4.bp.blogspot.com/-Kg1qhEGfIKA/UXcyvp_KXKI/AAAAAAAADPw/ROBhjWzGbKY/s1600/ADC.jpghttp://4.bp.blogspot.com/-xA63JWOhyvs/UXcKeFj_ctI/AAAAAAAADOI/xuO8rLY2G-M/s1600/valoresdiscretos.png

  • El Arduino Mega que utilizaremos en este ejemplo posee 10 ADC con una resolucin de 10bits cada uno. Esto significa que para cada entrada anloga tenemos disponibles 1024 pasos o valores discretos,

    para la mayora de aplicaciones esto resulta ms que suficiente. El tiempo de conversin y la frecuencia de muestreo

    Lstimosamente la conversin de una seal anloga a su equivalente valor digital no es instantnea, esto significa que el convertidor tarda algn tiempo (usualmente muy pequeo) en realizar el proceso de conversin. Esto limita el nmero de conversiones que podemos realizar en una unidad de tiempo, a este nmero de conversiones que puede realizar un ADC usualmente se le conoce como frecuencia de muestreo o en ingles "sampling rate". Podemos entender este parmetro como la precisin del convertidor en el tiempo. Un ADC con un tiempo de conversin de 1 segundo es ms lento que uno que tarde 0.001segundos en hacer una conversin. La frecuencia de muestreo mxima del ADC se calcula utilizando el inverso del tiempo de conversin:

    Al igual que el parmetro de la resolucin, que la frecuencia de muestreo sea buena o mala depende mucho de que tan rpido cambie el valor anlogo que deseamos medir. Por ejemplo si tenemos una sonda que mide la humedad en el suelo, el valor a medir no va a cambiar hasta que transcurran algunos minutos por lo que un ADC que tarde 1 segundo en realizar la conversin no nos va a dar mayor problema, por el contrario si estamos queriendo convertir a digital una seal de audio, 1 segundo de tiempo de conversin se queda sumamente corto para capturar las frecuencias que el oido puede distinguir. Una forma simple para elegir un ADC es que la frecuencia de muestreo sea "al menos" el doble de la frecuencia de la seal que queremos convertir (ver Teorema de muestreo de Nyquist-Shannon). Por ejemplo si queremos medir una seal que oscila a 60Hz lo menos que necesitaremos es un ADC que logre tomar 120 muestras por segundo. Segn la hoja de especificaciones del ATmega1280, el tiempo de conversin del ADC vara entre 13s

    y 260s lo que implica una frecuencia de muestreo teorica entre 3.8kHz y 76.92kHz. Obviamente el ATmega1280 no es lo suficientemente rpido como para alcanzar la mxima frecuencia de muestreo

    terica del ADC. El rango de trabajo La tercer caracterstica, pero no la menos importante, que debemos tomar en consideracin al elegir un ADC es el rango de voltajes/corrientes que acepta en su entrada, este parmetro es escencial para evitar "quemar" (literalmente) nuestro ADC.

    http://es.wikipedia.org/wiki/Teorema_de_muestreo_de_Nyquist-Shannonhttp://www.atmel.com/Images/doc2549.pdfhttp://1.bp.blogspot.com/-Ha_HodJf6Z8/UXczpNrXA3I/AAAAAAAADP8/2JqQ9xjzg98/s1600/Scope+Sampling+1.gifhttp://4.bp.blogspot.com/-6MDhUnzzCnQ/UXcL5f8laPI/AAAAAAAADOU/U-X6bsOB2PY/s1600/FrecuenciaMuestreoMaximo.png

  • La nica forma de saber el rango del ADC es revisando su hoja tcnica, usualmente encontraremos el rango de valores de voltaje y de corriente aceptados en la entrada como tambin las tolerancias aceptadas.

    Para el Arduino Mega, segn las especificaciones tcnicas el rango de entrada va desde 0v hasta Vcc (5V).

    Voltajes de referencia El voltaje de referencia es un voltaje utilizado como valor "maximo" por el ADC para realizar el proceso de conversin. El Arduino Mega puede utilizar dos valores como referencia para realizar la conversin, el primero es el

    voltaje de alimentacin (5V) y el otro es un voltaje externo en tanto este no supere el voltaje de alimentacin (Vcc).

    Para que usar un voltaje de referencia externo? Si recuerdan, la resolucin de nuestro ADC est limitada a un numero de pasos predefinido por el fabricante. En el caso de que la seal que deseamos medir tenga un valor menor al voltaje de alimentacin entonces el rango de valores que podemos utilizar se reduce y por lo tanto reducimos tambin la precisin. Por ejemplo: Nuestra seal vara desde 0 a 2.5V. Si calculamos nuestro tamao de "paso" para cada valor utilizando la referencia de la alimentacin (5V):

    Pero si en cambio utilizamos el voltaje de referencia de 2.5V:

    Puedes ver como el tamao de paso se reduce casi a la mitad utilizando el valor mximo de voltaje medido como referencia, aumentando en consecuencia la precisin de los valores medidos para esa seal en particular. Qu hacer si quiero medir un voltaje mayor que el rango de entrada?

    Un truco bsico es utilizar un divisor de voltaje. Para el divisor de voltaje se recomienda utilizar resistencias de valores altos para que las corrientes se mantengan al mnimo. Por ejemplo si quisieras medir 100V con un Arduino cuya entrada mxima son 5V: Primero divides entre el voltaje mximo que quieres medir entre el voltaje de referencia (5V) para encontrar el numero de resistencias que deber tener tu divisor de voltaje:

    Como tener un divisor de voltaje con 20 resistencias es un poco incmodo y ocupa mucho espacio podras tener algo como lo siguiente:

    http://2.bp.blogspot.com/-ZeAWLrq8PmY/UXcUP67I0EI/AAAAAAAADOo/HgRhImD-eHI/s1600/Ref5V.pnghttp://3.bp.blogspot.com/-0qyAy3Ibg5M/UXcUgnT-UaI/AAAAAAAADO0/s6AslQR7HFg/s1600/Ref2.4V.pnghttp://2.bp.blogspot.com/-BZCEaSqfUjI/UXccntUEnLI/AAAAAAAADPQ/KgDoR4wRl-k/s1600/FormulaDivisor.png

  • En este caso estars midiendo 1/20 del voltaje. Solo ten cuidado con las tolerancias de las resistencias. Si asumimos por ejemplo que la tolerancia de las resistencias es del 5%, su valor real podria variar entre 0.95K y 1.05K es posible que tengas que utilizar un divisor mas grande para as jugar seguro y luego agregas un pequeo factor de correccin mediante software. El dimmer digital Ahora vamos a poner en prctica los conocimietos sobre ADC que hemos adquirido y vamos a utilizar algunas funciones muy tiles del Arduino. En este caso vamos a fabricar un dimmer de LED digital. Un "dimmer" o un "atenuador" es un sencillo dispositivo que atenua la intensidad de una luz. Seguramente ms de alguno ha utilizado o tienes uno de estos dispositivos en sus hogares.

    Atenuar un LED es un poco ms complicado, el problema es que los LED no funcionan calentando un filamento como los focos incandescentes sino que convierten directamente la energa elctrica en luz. Esto los hace muy eficientes, tan eficientes que si los hacemos funcionar fuera de su rango optimo de trabajo, por ejemplo reduciendo la corriente, desperdiciaremos mucha energa en forma de calor y adicionalmente podriamos notar algunas diferencias en el color del LED en tanto reducimos su intensidad. Una solucin sencilla muy prctica para atenuar LEDs con circuitos digitales es utilizar "modulacin de pulsos". La ventaja de utilizar esta tcnica es que permite que el led mantenga su color (ya que siempre funciona utilizando la misma corriente) y simplemente cambia la intensidad de la luz emitida. Realmente lo que sucede es que el led se esta apagando y encendiendo muy rapidamente lo que reduce la cantidad de luz que emite, esto ocurre tan rapido que nuestro ojo no lo nota y pareciera que el led esta reduciendo su intensidad.

    https://www.circuitlab.com/circuit/5sk8qc/divisor-voltaje/http://3.bp.blogspot.com/-Pj28LzE5058/UXc0WY2QOyI/AAAAAAAADQI/p38UZAgimqo/s1600/led.jpg

  • Afortunadamente Arduino ya incluye la funcionalidad para generar seales PWM e incluso ya lo hemos discutido en una de las primeras entradas de este blog. El circuito que utilizaremos en esta ocasin es sumamente sencillo, estos son los materiales que vamos a necesitar: 1 x Arduino Mega 1 x Resistencia 330Ohm (o 470Ohm) 1 x Diodo Led 1 x Potenciometro (resistor variable) de 1K. El diagrama del circuito es el siguiente:

    http://fuenteabierta.teubi.co/2012/12/intensidad-de-led-en-arduino.htmlhttp://fuenteabierta.teubi.co/2012/12/intensidad-de-led-en-arduino.htmlhttps://www.circuitlab.com/circuit/9nyhnj/pwm-dimmer-arduino/

  • Programando nuestro Arduino void setup() { pinMode(2,OUTPUT); } En el setup no es requisito configurar como salida el PIN donde conectaremos el LED, sin embargo lo dejo indicado solo para que quien lea el cdigo sepa que en esa lnea es donde lo conectaremos. Para el loop principal utilizaremos el siguiente cdigo: El cdigo funciona en tres pasos:

    int value; void loop() { value = analogRead(0); value = map(value,0,1023,0,255); analogWrite(2,value); delay(20); }

    1. Leemos el dato del voltaje del potenciometro. 2. Usamos la funcion map para cambiar el rango de entrada de 0-1023 a 0-255 (el rango que soporta analogWrite) 3. Escribimos el nuevo valor mapeado como PWM a la salida donde est conectado el LED. 4. Utilizo un pequeo delay para evitar que el valor cambie muy frecuentemente.

    La funcin map permite convertir un rango especificado en otro. Esto es muy til cuando uno necesita que el valor anlogo de la entrada se corresponda con un rango diferente en la salida. En este caso nuestro valor de entrada vara entre 0 y 1023 pero la funcin analogWrite est esperando un mximo de 255. Para finalizar los dejo con un pequesimo video del funcionamiento: Y eso es todo!! Espero que esta entrada les haya ayudado a entender como funcionan los convertidores anlogo-digital y lo puedan utilizar para sus proyectos e inventos.

    Sin nada ms que decir... Hasta la prxima!!

    El Convertidor Anlogo-Digital en ArduinoLo anlogo y lo digitalMidiendo el mundo anlogoLa resolucin del convertidorEl tiempo de conversin y la frecuencia de muestreoEl rango de trabajo

    Voltajes de referenciaEl dimmer digitalProgramando nuestro Arduino