Source: https://www.prometec.net/aref/
Timestamp: 2019-11-18 10:41:55+00:00

Document:
La referencia analogica AREF | Tienda y Tutoriales Arduino
La referencia analogica AREF
El pin Analog Reference
La resolución de los convertidores ADC.
Las referencias internas de comparación en Arduino.
La referencia externa AREF.
La conversión de analógico a digital
En una sesión previa ya dijimos que Arduino dispone de 6 convertidores analógico a digital (ADC) que son los pines A0 a A5, y dijimos que son capaces de convertir valores de tensión hasta un máximo de 5V, que es la tensión de referencia en Arduino.
Ya dijimos también, que una de las características claves del convertidor, es su número de bits, que define la finura con los que podemos cuantificar esa conversión a digital. En el caso de Arduino, son 10 los bits que maneja en la puertas analógicas, lo que significa que su resolución es 210 =1.024 posibles valores.
Cuanto mayor sea esta resolución mejor es la capacidad de aproximación al valor real cuya conversión buscamos.
Es importante entender que una conversión a digital de una señal analógica es siempre una aproximación, y ni siquiera en el improbable caso de que el valor analógico fuese exactamente el que nos dice el convertidor, siempre tendremos una incertidumbre.
En un convertidor como los de Arduino con 10 bits de resolución, cada escalón de medida es de 5V/1024 = 0,0048828125 V, algo menos de 5mV, lo que significa que no puede discriminar entre valores de tensión cuya diferencia sea menor que esto.
Sin entrar en muchos detalles, conviene decir que lo que un convertidor ADC hace es comparar sucesivamente la señal que queremos cuantificar en la entrada, con una tensión de referencia contra la que hace las comparaciones.
Dicho de otro modo, un ADC no proporciona valores absolutos, sino que proporciona una comparación cuantificada con relación a un valor de referencia. Por eso, en la sesión Sensor de temperatura TMP36 hemos calculado la tensión de entrada en uno de los pines Analógicos como la lectura multiplicada por una relación entre el valor de la máxima de la entrada 5V con la máxima medida del conversor 1024.
Como las señales que normalmente manejamos en Arduino están alrededor de los 5V, comparar contra 5V es lo razonable, porque además la industria tiene una gama completa de sensores cuyo valor máximo devuelve 5V.
Pero cada vez más, la industria produce electrónica de 3,3V, el propio Arduino DUE es un ejemplo de ello, y si usamos nuestros ADC para digitalizar señales de pico 3,3V, estamos perdiendo precisión y resolución, porque estamos desperdiciando una parte de las posibles comparaciones, de hecho un tercio.
En la práctica, al ser 3,3V el máximo de la tensión de entrada compararlo contra 5V supone que nunca tendremos lecturas mayores de 1.024 * 3,3 /5 = 675 y seguiremos teniendo escalones de entrada de 5mV.
Pero si el convertidor es un comparador de tensiones, si pudiéramos cambiar el valor de tensión contra el que comparamos por una de 3,3V, los escalones serian de 3,3V/1024 = 0,00322265625 o sea 3,2 mV. Es decir hemos mejorado la resolución de nuestro convertidor y sin gastar un chavo.
Por eso en una situación ideal, la tensión de comparación contra la que realizamos la conversión de analógico a digital, debería ser el valor máximo posible de la señal de entrada. Porque es cuándo tendremos la mejor resolución posible con ese convertidor.
Los chicos de Arduino, eran conscientes de este asunto y por eso incluyeron un pin externo, que no habíamos usado hasta ahora, que permite conectar una tensión externa de referencia, contra la que se comparará la señal que leamos en nuestras puertas A0 a A5.
Este pin esta rotulado como AREF (Analog Reference o Referencia Analógica en cristiano) y está dos pines más arriba del digital pin 13:
Usando la referencia analógica externa
La cuestión de la referencia analógica contra la que comparamos las muestras en las puertas A0-A6, es tan importante, que Arduino provee varias tensiones internas contra las que comparar y que podemos activar para cambiar dicha referencia.
Para activar una referencia interna de 1,1V en un Arduino UNO usa la instrucción
Si por el contrario usas un MEGA puedes usar exclusivamente:
Que te activará referencias de 1.1V y 2.56V respectivamente.
Si usamos la clave DEFAULT, volvemos a la referencia estándar de 5V en prácticamente todos los modelos de Arduino.
Cuidado con la referencia DEFAULT, porque en el DUE significa 3,3V porque es su tensión de referencia. Asegúrate de esto antes de usarlo alegremente.
Cuando conectemos una tensión de referencia al pin AREF, tenemos que avisar a Arduino de que queremos usarla. Y eso lo hacemos con la instrucción
Usad la cabeza cuando modifiquéis la referencia analógica, porque si no tenéis cuidado, cenareis Arduino a la brasa. Es relativamente fácil de liarla con ciertas acciones que parecen inocentes:
Asegúrate de que si usas una referencia externa los GND de Arduino y de la referencia sean el mismo uniéndolos. No hacer esto tiene muy mal pronóstico a la primera de cambio.
No uses bajo ninguna circunstancia menos de 0v en el pin AREF ( O una señal que varíe y pueda tener transitorios negativos) porque el resultado es impredecible.
Si conectas una tensión externa de referencia, no llames a analogRead() antes de ejecutar la instrucción analogReference(EXTERNAL), porque harías un cortocircuito entre la señal de comparación interna y la tensión externa en AREF, y posiblemente podrás aprovechar la ocasión para comprarte ese Arduino nuevo al que le tienes tantas ganas.
No conectes a AREF menos de 1V ni más de 5V, no puedes poner 12 y esperar que te dé un valor tranquilamente.
Vamos a montar un circuito de prueba con un display I2C como vimos en la sesión.. y un potenciómetro. Pero en esta ocasión, conectaremos en los extremos del potenciómetro GND y 3,3V de modo que en el pin central que leeremos con A1, no puede nunca superar los 3,3V simulando un sensor con ese valor máximo.
Al ir girando el potenciómetro, leeremos una caída de tensión entre 0V y 3,3V. y la lectura del pin A1, dará valores entre 0 y 670, ya que estamos en el caso que definíamos un poco más arriba.
El programa simplemente leerá el pin analógico A1 y enviara su valor a un display I2C de 16 caracteres por dos líneas tal y como vimos en la sesión….
Aquí tenéis un minivideo con las lecturas del potenciómetro
Si ahora conectamos la tensión de 3,3V interna de Arduino al pin AREF, tendremos un circuito como este:
Veamos ahora el programa:
LiquidCrystal_I2C lcd(I2C_ADDR,2, 1, 0, 4, 5, 6, 7);
{  lcd.begin (16,2); // Inicializar el display con 16 caraceres 2 lineas
lcd.home (); // vamos al principioe
analogReference(EXTERNAL);  // Atentos aqui
{  lcd.setCursor ( 0, 1 ); // Vamos a la segunda linea
lcd.print(analogRead(A1));
lcd.print(" ");          // Para borrar rastros en pantalla
Aqui teneis un video con la diferencia:
Hemos insistido en la cuestion de la conversion analogica a digital y hemos visto que básicamente es una comparación contra un valor de referencia.
Hemos visto que podemos usar un valor interno o externo de tensión, distinto de los 5V habituales.
Ya sabemos las instrucciones precisas para activar esa referencia externa y las precauciones a adoptar cuando la usemos.
Tengo una duda muy básica, puedo usar el aref para medir un solo sensor a un voltaje específico y luego cambiar con el default para usar las otras entradas con el voltaje del 328 (es decir 5v) cierto?
Hola, soy Jesus de Tamaulipas mexico
Estoy trabajado con el atmega328 fuera del arduino, tengo un circuito donde leo 3 señales analogas. El objetivo es detectar una rango de impedancia y avisar si se sale del rango, tengo 2 problemas,
por cada pin analogo inyecto un voltaje poco menor a 5 v, y tambien esta conectada la resistencia variable que normalmente esta en circuito abierto, cuando se cierra el circuito de la resistencia, el voltaje cae en función de la impedancia inducida que no debe pasar de 35 Mohm, cuando la impedancia esta en 33M (buena) y/o a 37M(mala) las lecturas varian y se cruzan en momentos son iguales afectando a la salida (marca buena y mala). El otra problema es que cuando varia la impedancia en una entrada las lecturas de las otras entradas tambien se afectan, mi pregunta es si es relacionado al AREF, a la programacion o la electronica, agradesco si tienen algun comentario o idea?
Hola Jesus, no me atrevo a decirte nada sin poder jugar con eso
Hola buena noche desde mexico, tengo un dilema existencial :S
¿es posible medir voltajes mas altos por ejemplo un maximo de 12v – 24v?
¿quiero medir un maximo de 12v, es posible que llegue a quemar el arduino?
Hola raptr, si le metes eso al Arduino lo fríes seguro… Tendrías que pasarlo por un divisor de tensión por ejemplo.
estaba viendo este circuito que dice que puede soportar hasta 55v
¿Sera posible que de esa manera me lea el voltaje correctamente?
Hola Raptr, parece un divisor de tención. Mira primero con el voltímetro que baje el voltaje a 5V y entonces te serviría.
Hola. Quiero instalar un sensor analógico a mi Mega 2560 R3. Mis sensor analógico proporciona 0-2.5Vdc en la salida, pero lo tengo que alimentar con una fuente de alimentación externa ya que su entrada va de 10-30Vdc. En total tengo 4 claves, los dos de entrada y los dos de salida. Los de salida se corresponden con V_signal y GND_signal, mi pregunta es como he de conectarlos a una entrada analógica para tener un valor correcto. Porque conectando sólo el V_signal al la entrada analógica 0 no obtengo resultados coherentes.
No entiendo muy bien lo que me dices, pero la idea es que independientemente de como conectes la tension de entrada, le pongas una referencia de base para la medida con la que quieres comparar. De ese modo si te entiendo bien, bastaria con que conectes a Vref una tension de 2.5V que parece ser el maximo de tu medida
Te en cuenta tambien que sigues pudiendo tomar esas medidas sin usar la Vref, pero tu medida sera ma simprecisa que si la usas ¿Vale?
Existe algún método jugando con la Vref para aumentar la resolución del ADC a 11 bits.?
Hola Pablo. La respuesta corta es no. La Vref sirve para que puedas marcar el limite superior de la medida del convertidor. SI por ejemplo sabes que un sensor te dara como maximo 3V de señal, puedes poner 3V en Vref y las 1024 partes del convertidor se repartiran en 3V, dandote mejor resolucion que si midieras hasta 5, pero no puedes usarlo para mejorar la resolucion, solo para limitar el maximo de la escala
Hola saludo de peru:
Consulta, si es que hago un divisor de tension para conseguir el voltaje requerido de referencia, la resistencia interna del pin AREF me afectaria aun asi un caida de tension ? (esa informacion de la pagina de arduino)
“Alternativamente, se puede conectar la tensión de referencia externo al pin AREF través de una resistencia de 5K, que le permite cambiar entre las tensiones de referencia externos e internos. Tenga en cuenta que la resistencia va a alterar el voltaje que se usa como referencia porque hay una resistencia de 32K interno en el pin AREF. Los dos actúan como un divisor de tensión, por lo que, por ejemplo, 2,5 V aplicado a través de la resistencia dará lugar a 2,5 * 32 / (32 + 5) = ~ 2,2 V en el pin AREF.”
Muchos saludos para los amigos de Peru Samuel,
La idea del AREF es que puedas usar una tension de referencia respecto a la que mides tu señal sin perder la capacidad del convertidor ADC, pero no te preocpes por la caida interna de tension porque teoricamente su impezancia es infinita con lo que su caida es practicamente nula
Hola admin. e montado 100 led blancos de alta luminosidad de 5×9, normales para mi acuario . el sketch que e hecho consiste en que debe estar encendido desde las 8 de la mañana hasta las 10 de la noche, y empieza a desvanecer hasta apagarse del todo, en este momento empieza a encender poco a poco 20 led azules de alta luminosidad de 5×9 normales hasta que queda prendido totalmente hasta las 8 de la mañana.Todo funciona perfecto. Perooo, ya sabes que el delay va en milisegundos, y claro le tengo puesto una burrada, para 14 horas son 50400000, y para 10 horas 34000000, creo que esto se puede hacer de otra manera no?. Te agradeceria muchisimo que me ayudaras pues como te digo lo pongo a funcionar y va , pero claro no voy a estar 14 horas mirando si falla o no . Espero que me atiendas. Gracias
Hola Diego, puedes usar un rtc para saber la hora y utilizarlo para encender y apagarlos en función de la hora que sea. Un saludo.
Hola, en primer lugar enhorabuena por tu BLOG.
Supongo que soy del grupo de paletos aficionados a la electrónica. Mi duda es la siguiente porque me estoy volviendo loco buscando en internet y no doy con lo que necesito. Sólo deseo controlar de manera independiente 5 leds con Arduino One, de tal manera que todos permanezcan encendidos, pero de manera “aleatoria” (prefijada por mí, por supuesto, pero automatizada), se apague uno de ellos un segundo, y vuelva a encenderse. Y así cada uno de ellos cada cierto tiempo pero que el apagado de un segundo o así no afecte a los demás. Puede hacerse?
Desde luego que si Javier, basta con que conectes cada led a un pin de arduino y los controles por programa de forma independiente. Estas cosas parecen muy complicadas al principio, pero en cuanto aprendas a programar un poquito veras que rapido lo consigues. ANimo
saludos, estoy usando un fotodiodo cuya señal en un multimetro digital me arroja 1.5 volts, como me recomienda usar el aref en este caso
Puedes usar un divisor de tension de por ejemplo 3 resistencias de 1k y usar la caida de tension de 1/3 para alimentar directamente AREF. No es exactamente la terecera parte pero se le aproxima razonablemente. Otro modo seria usar una fuente power down para proprocionar exactamente los 1.5V a la referencia annalogica
Buenas tardes, tengo una duda y no encuentro información al respecto. El caso es que tengo varios sensores conectados por entradas analógicas y uno de ellos es el lm35 de temperatura pero como da 10mV por grado centigrado pues las lecturas son un poco imprecisas, entonces me gustaría bajar la tensión de referencia analógica. Pero, y aquí viene mi duda, ¿que pasaría si yo pongo la tensión de referencia interna del arduino uno (1,1 voltios), que para el sensor lm35 me vendría muy bien, ya que no voy a medir mas de 110 grados, y a la vez otro sensor introduce una tensión superior a 1,1 voltios por otra de las entradas analógicas? Siempre sin pasar de los 5 voltios soportados. ¿Se tostaría la entrada? ¿O simplemente el otro sensor marcaría el tope y no pasaría nada?
Gracias de antemano por el post. Espero que me puedas responder. Un saludo.
Hola Antonio, Aunque nunca he usado la referencia interna de tension no veo inconveniente en que la uses para lo que quieras. Otra cuestion mas peliaguda es saber si se quemaria con la tension superior de otro de tus sensores.
Vamos a ver un ADC compara la tension de entrada contra la de referencia mediante varios puentes de resistencia tipicamente, entiendo que no deberia causarte mas problema que una lectura invalida.
Pero de culaquier modo, si alguno de tus sensores te da valores a tu referncia de tension parece mala idea y mala ingenieria, ya que te va a causar mas problemas de los que te resuelva. Paraece mas sencillo subir la referencia a 3.3 para estar tranquilos porque recuerda que el LM35 tiene una precision mas bien pobre y tiene una incertidumbre de al menos 0,5 grados
¿Qué potenciometro se ha usado?¿Cuáles son sus requerimientos?
Hola Antonio, He usado un poitenciometro de 10k para este ejemplo
Jesus Mª Verduch
No lo entiendo la resolución en ambos casos sigue siendo de 1024
Hola Jesus Mari,
Cierto, la resolucion siguen siendo de 1024 digamos pasos, pero antes cada paso era e 5V/ 1024 = 5 mV y ahora es de 3.3 /1024 = 3mV, o sea al fijar el AREF lo que haces es bajar el fondo de escala contra el que comparas

References: resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución