En muchas ocasiones cuando estamos trabajando en nuestros proyectos electrónicos se es necesario trabajar a X voltaje de referencia. Supongamos que tenemos un sensor de temperatura LM35, este sensor ofrece una salida de tensión lineal con respecto a la temperatura, utiliza un factor de escala de 10 mV/°C. Imaginemos entonces que necesitamos este sensor para medir la temperatura de cierto lugar utilizando nuestro Arduino UNO. Para poder leer la temperatura del lugar necesitamos convertir la medida de temperatura que es una medida física a otra de tipo eléctronico. Este trabajo es el que precisamente hace el sensor. Ahora, el voltaje de salida que nos proporciona el LM35 es una señal analógica que debemos convertirla a una señal digital para poder procesarla, el mago que realiza este proceso se llama Conversor Analógico/Digital.
El Arduino UNO o más bien, el microcontrolador ATmega 328 utiliza un ADC de 10 bits ¿qué quiere decir el número diez? El diez nos indica el exponente en base dos que generará el número combinaciones posibles para representar una señal analógica, o bien el número de bits. Así, en nuestro caso tendremos 2^10 = 1024 combinaciones posibles para representar la señal que irá desde 0 a 2^10 – 1 = 1023. Para capturar la medida analógica, el arduino uno posee seis entradas analógicas donde cada una está conectada a un canal del conversor. Así, se podría utilizar un pin de entrada analógica del arduino para leer el voltaje que proporciona el LM35. Para leer este voltaje se utiliza una función llamada analogRead() que proporciona un rango de valores comprendidos entre 0 y 1023. Como ya sabemos, este rango proviene de la resolución de bits en el conversor del microcrontrolador. Pero estos valores están tomados en referencia a 5 volts.
Para dejar este apartado más claro, utilizaremos una resolución de bit de 3. Esto quiere decir que el ADC tendrá 2^3 posibles combinaciones, que irán desde 0 a 7 en escalones de 0.625 V cada uno. Así, cuando el voltaje en la entrada del conversor esté entre 0 y 0.625 V, tendremos un valor digital de 0. Si el valor está comprendido entre 3.75 y 4.375 V tendremos un valor digital de 6 y así.
{rokbox title=|Gráfica que muestra los valores digitales del ADC para cada rango de voltaje de una señal analógica Este conversor ilustrativo posee un número de bits de 3, logrando representar hasta 8 valores digitales de 0 a 7.| thumb=|http://www.clase911.com/CV/images/problems/arefarduino.jpg|}http://www.clase911.com/CV/images/problems/arefarduino.jpg{/rokbox}
Volviendo a nuestro Arduino UNO tenemos que la resolución de bits es 10. Teniendo entonces escalones de 4.88 mV. Es decir que cada escalón en nuestro conversor representará 4.88 mV.
Para nuestro sensor de temperatura, el máximo valor de voltaje que puede brindar es de 1500 mV o bien 1.5 V. Entonces esto nos indica que ya nuestro arduino no estaría leyendo voltajes que están por arriba de 1.5 V y es aquí donde entra el en juego el pin AREF.
Si ya nuestro valor máximo no es de 5 V sino de 1.5 V, tendríamos que utilizar un voltaje de refencia externo para no desperdiciar resolución y tener mayor exactitud a la hora de la medición. El encargado de esto es el pin AREF que nos permite utilizar un voltaje de referencia externo.
¿Cómo le decimos al Arduino UNO que ya no vamos a utilizar 5 V como voltaje de referencia?
Utilizamos una función dentro de nuestro programa llamada analogReference(). Para duemilanove y compatibles con ATmega328:
1 2 |
//Importante: este voltaje debe estar comprendido entre 0 y 5 Volts DC. analogReference(EXTERNAL); |
Es necesario llamar esta función antes que se lean los valores de voltaje utilizando analogReference() ya que de lo contrario podrías dañar tu Arduino.
Si deseamos entonces trabajar a 1.5 V de referencia tendríamos que utiliza un simple divisor de voltaje en donde el voltaje que entre a AREF sea de 1.5 Volts. Para lograr esto, el arduino utiliza una resistencia interna de 32 k como protección que tendrá un efecto en el divisor de tensión. Así, para lograr un voltaje de aproximadamente 1.5 V aplicando una fuente de voltaje de 2.5 , nuestra resistencia externa será:
1.5 = 2.5*32/(32+R)
Es decir, R = 74.67 kohms = 75 kohms para valores comerciales. Otra idea sería utilizar un diodo zener que brinde un voltaje de referencia de 1.5 V. Con esto entonces tendríamos escalones equivalentes a 1.46 mV, es decir hemos reducido casi 3 veces el valor de los escalones teniendo una mejor precisión en nuestras medidas ya que los cambios de temperatura son bastantes lentos.
Para obtener el valor de 1.46 mV utilizamos la fórmula del escalón o de resolución:
Resolución = Vi/2^n
1.46 mV = 1.5/1024
Espero que este artículos les haya servido para entender un poco más sobre el AREF y para qué sirve.
Revise los números de la ecuación, para que el resultado sea 1,5 V el valor de R debe ser 23,3k aprox
Muchas gracias por la información.
Solo me gustaría saber si la resistencia de 32 k, es pull-up o pull-down o quizas en serie a la entrada, para entender como hacer el divisor de tensión externo.
De todas formas fue una explicación muy clara para comprenderlo.
Según la página de Arduino, la resistencia que conectes quedará en paralelo con la resistencia interna: https://www.arduino.cc/reference/en/language/functions/analog-io/analogreference/
Estimada Kiara gracias por esta valiosa información, eres una chica super!