Dispositivos ADC
Los Convertidores de analógico a digital se encuentran entre
adquisición de datos.
Los Ordenadores digitales utilizan valores
Temperatura, presión (viento o líquido), la humedad y
tratamos todos los días.
Una cantidad física se convierte en señales eléctricas
sensor. Sensores de temperatura, velocidad, presión
tensión (o corriente).
Por lo tanto, es necesario un convertidor analógico a digital
manera que el microcontrolador pueda leer y procesar
Conexión de un sensor a un microcontrolador a través de un ADC
ADC en un AVR
se encuentran entre los dispositivos más ampliamente utilizados para
utilizan valores binarios (discretos), pero en el mundo físico todo es analógico
, la humedad y la velocidad son algunos ejemplos de magnitudes físicas
señales eléctricas (voltaje, corriente) utilizando un dispositivo llamado
velocidad, presión, luz, y muchas otras cantidades naturales
convertidor analógico a digital para convertir las señales analógicas
leer y procesar.
Conexión de un sensor a un microcontrolador a través de un ADC
Bloque de un ADC de 8bits
más ampliamente utilizados para la
analógico (continuo).
magnitudes físicas que
un dispositivo llamado transductor o
producen una salida que es
las señales analógicas a los números digitales de
Características del ADC
Resolución
El ADC tiene una resolución de n bits, donde n puede ser 8, 10, 12, 16, o incluso 24 bits.
El ADC de mayor resolución proporciona un tamaño de paso más pequeño, donde el tamaño de paso es el más pequeño
cambio que puede ser diferenciado por un ADC. Algunas resoluciones ampliamente utilizadas para un ADC se muestran en
la Tabla siguiente. Aunque la resolución de un chip ADC se decide en el momento de su diseño y no se puede cambiar, se
puede controlar el tamaño de paso con la ayuda de lo que se llama Vref o voltaje de referencia. Esto se discute a
continuación.
Resolución versus tamaño de paso para un ADC con Vref = 5v
Tiempo de conversión
Además de la resolución, el tiempo de conversión es otro factor importante para juzgar un ADC. El Tiempo de conversión
se define como el tiempo que tarda el ADC para convertir la entrada analógica a un número digital (binario). El tiempo de
conversión es definido por la fuente de reloj conectado al ADC además del método utilizado para los datos conversión y la
tecnología utilizada en la fabricación del chip ADC tales como MOS o tecnología TTL.
Voltaje de referencia (Vref)
Vref es un voltaje de entrada utilizado para la tensión de referencia. El voltaje conectado a este pin, junto con la resolución
del chip ADC, definen el tamaño de paso. Para un ADC de 8 bit , el tamaño del paso es Vref/256 porque es un ADC de 8 bit
y 28
nos da 256 pasos.
Por ejemplo, si el rango de entrada analógica debe ser 0 a 4 voltios, Vref está conectado a 4 voltios. Eso le da 4V/256
=15.62 mV para el tamaño de paso de un ADC de 8 bits.
En otro caso, si necesitamos un tamaño de paso de 10 mV para un ADC de 8 bits, a continuación, Vref = 2.56 V, debido a
que 2.56V/256 = 10 mV. Para el ADC de 10 bits, si el Vref = 5V, a continuación, el tamaño del paso es de 4.88 mV, como se
muestra en la Tabla. Las Tablas muestran la relación entre Vref y el tamaño de paso para los ADCs de 8 y 10 bits,
respectivamente.
En algunas aplicaciones, tenemos que la tensión de referencia diferencial en V ref = V ref (+) - V ref (-). A menudo, el pin
Vref(-) está conectado a tierra y el pin Vref (+) se utiliza como el Vref.
Vref relacionado con voltaje de entrada Vin en ADC de 8 bits Vref relacionado con voltaje de entrada Vin en ADC de 10 bits
Salida de datos digitales
En un ADC de 8 bits tenemos una salida de datos digital de 8 bits de D0-D7, mientras que en el 10 bit ADC es la salida de
datos D0-D9. Para el cálculo de la tensión de salida, se utiliza la siguiente fórmula:
����� �� ���� ����� � �� �������
����ñ� �� ����
donde ����� �� ���� = salida de datos digitales (en decimal), ���� � �� ������� = voltaje de entrada analógico, y el
tamaño de paso (resolución) es el cambio más pequeño, que es Vref/256 para un ADC de 8 bits.
Ejemplo
Para un ADC de 8 bits, tenemos Vref = 2,56 V. Calcular la salida D0-D7 si la entrada analógica es: (a) 1,7 V, y (b) 2,1 V.
Solución:
Debido a que el tamaño del paso es 2.56/256 = 10 mV, tenemos lo siguiente:
(a) Dsalida = 1,7 V/10 mV = 170 en decimal, lo que nos da 10101010 en binario para D7-D0.
(b) Dsalida = 2,1 V/10 mV = 210 en decimal, lo que nos da 11010010 en binario para D7-D0.
ADC Paralelo frente a un serial
Los chips de ADC tienen sus salidas de datos ya sea en paralelo o en serie.
Un ADC en paralelo, tenemos 8 o más pines dedicados a sacar los datos binarios, pero en un ADC serial tenemos un solo
pin de salida de datos. Esto significa que dentro del ADC serie, hay registro que tipo PISO Parallel In Serial Out responsable
de enviar los datos binarios un bit a la vez. Los pines de datos D0-D7 del ADC de 8 bits proporcionan una ruta de datos en
paralelo de 8 bits entre el chip ADC y la CPU.
Dispositivos como el ADC de serial están siendo ampliamente utilizados. Mientras que los ADCs seriales utilizan menos
pines y los paquetes son más pequeños y toman mucho menos espacio en la tarjeta de circuito impreso, se necesita más
tiempo de CPU para obtener los datos convertidos del ADC porque la CPU debe obtener los datos un bit a la vez, en lugar
de en una sola operación de lectura con el ADC paralelo.
Canales de entrada analógicos
Muchas aplicaciones de adquisición de datos necesitan más de un ADC. Por esta razón, vemos chips de ADC con 2, 4, 8, o
incluso 16 canales en un solo chip.
La Multiplexación de entradas analógicas se utiliza ampliamente como se muestra en el ADC848 y MAX1112. En estas
fichas, contamos con 8 canales de entradas analógicas, lo que nos permite controlar varias magnitudes tales como la
temperatura, la presión, el calor, y así sucesivamente. Chips de microcontroladores AVR vienen con hasta 16 canales de
ADC.
Señales de inicio de conversión y fin de conversión.
El hecho de que tenemos varios canales de entrada analógica y un solo registro de salida digital crea la necesidad de las
señales de inicio de conversión (SC) y de fin de conversión (EDC).
Cuando se activa SC, el ADC inicia la conversión del valor de entrada analógica de Vin a un número digital de n bits.
La cantidad de tiempo que se necesita para convertir varía dependiendo del método de conversión como se ha explicado
anteriormente.
Cuando la conversión de datos esta completa, la señal de fin de conversión notifica a la CPU que los datos convertidos
están listos para ser recogidos.
Aproximación sucesiva ADC
Aproximación Sucesiva es un método ampliamente utilizado para convertir una entrada analógica a salida digital. Tiene
tres componentes principales: (a) registro de aproximación sucesiva (SAR), (b) la comparación, y (e) la unidad de control.
Consulte la figura siguiente.
Cómo funciona la aproximación sucesiva.
Suponiendo un tamaño de paso de 10 mV, la aproximación sucesiva de un ADC de 8 bits deberá someterse a las medidas
siguientes para convertir una entrada de 1 voltio:
(1) Se inicia con el binario 10000000. Desde 128 x 10 mV = 1.28 V es mayor que la entrada de 1 V, el bit 7 se borra.
(2) 01000000 nos da 64 x 10 mV = 640 mV y el bit 6 se mantiene, ya que es más pequeña que la entrada de 1 V.
(3) 01100000 nos da 96 x 10 mV = 960 mV y el bit 5 se mantiene, ya que es más pequeña que la entrada de 1 V,
(4) 01110000 nos da 112 x 10 m V = 1120 mV y el bit 4 se ha caído ya que es mayor que la de entrada 1 V.
(5) 01101000 nos da 108 x 10 mV = 1080 mV y el bit 3 se ha caído ya que es mayor que la entrada de 1 V.
(6) 01100100 nos da 100 x 10 m V = 1000 mV = V 1 y el bit 2 se mantiene, ya que es igual a la entrada. A pesar de que
encuentra la respuesta no se detiene.
(7) 011 000 110 nos da 102 x 10 mV = 1020 mV y el bit 1 se ha caído ya que es mayor que la entrada de1V.
(8) 0110010 1 nos da 101 x 10m 10m V = 10 V y el bit 0 se ha caído ya que es mayor que la entrada de 1 V.
Observe que el método de aproximación sucesiva pasa por alto los pasos incluso si la respuesta se encuentra en uno de los
pasos anteriores.
La ventaja del método de aproximaciones sucesivas es que el tiempo de conversión está fijado ya que tiene que ir a través
de todos los pasos.
ADC PROGRAMACIÓN EN EL AVR
Debido a que el ADC es ampliamente utilizado en la adquisición de datos, en los últimos años un número creciente de
microcontroladores han tenido un periférico ADC en el chip, al igual que los temporizadores y USART.
Un ADC en el chip elimina la necesidad de una conexión a un ADC externo, lo que deja más pines para otras actividades
de I/O. La gran mayoría de los chips AVR vienen con ADC.
Características del ADC en un ATMEGA
El periférico ADC del ATMEGA tiene las siguientes características:
(a) Es un ADC de 10 bits.
(b) Cuenta con 8(6 en el ATMEGA8) canales analógicos de entrada.
(c) Los datos binarios de salida convertida está en manos de dos registros de función especial llamada ADCL y ADCH.
(d) Debido a que los registros ADCH: ADCL nos dan 16 bits y la salida de datos ADC es de sólo 10 bits de ancho, 6 bits de los
16 no se utilizan. Tenemos la opción de no utilizar cualquiera de los 6 bits superiores o los inferiores 6 bits.
(e) Tenemos tres opciones para Vref: Vref se puede conectar a AVCC (VCC analógico) '
Referencia interna de 2.56 V, o pin externo AREF
(f) El tiempo de conversión es definido por la frecuencia del cristal conectado a los pines XTAL (Fosc) y los bits ADPS0: 2.
Consideraciones de hardware del ADC en un AVR
Para las señales de lógica digital una pequeña variación en el nivel de tensión no tiene efecto en la salida. Por ejemplo, 0.2
V se considera baja, ya que en la lógica TTL, toda tensión menor que 0.5V será detectado como estado lógico bajo. Ese no
es el caso cuando se trata de tensión analógica.
Ejemplo
Para un ADC de 10-bit, tenemos Vref = 2.56 V. Calcular la salida D0-D9 si la entrada analógica es: (a) 0.2 V, y (b) 0 V. ¿Cuál
es la variación entre (a) y (b )? .
Solución:
Debido a que el tamaño del paso es 2.56/1024 = 2.5 mV, tenemos lo siguiente:
(a) Dsalida = 0.2 V/2.5 mV = 80 en decimal, lo que nos da 1010000 en binario.
(b) Dsalida = 0 V/2.5 mV = 0 en decimal, lo que nos da 0 en binario.
La diferencia es 1010000, lo cual es 7 bits!
Podemos utilizar muchas técnicas para reducir el impacto de la tensión de alimentación y la variación de Vref en la
veracidad de salida del ADC. A continuación, examinamos dos de las técnicas en el AVR ampliamente utilizadas.
Conexión recomendada
Desacoplamiento AVCC desde VCC
El pin AVCC proporciona la alimentación para los circuitos analógicos ADC. Para tener una mejor precisión del ADC en el
AVR debemos proporcionar una fuente de voltaje estable para el pin AVCC. La figura anterior muestra cómo utilizar un
inductor y un condensador para lograrlo.
Conexión de un condensador entre Vref y GND
Mediante la conexión de un condensador entre el pin GND y AVREF puede hacer que el voltaje Vref sea más estable y
aumentar la precisión del ADC.
Programación del ADC del AVR en C
En el microcontrolador AVR varios registros se relacionan con la ADC. Son ADCH (parte alta de datos), ADCL (parte baja de
datos), ADCSRA (registro de estado y Control del ADC) y ADMUX (registro de selección de multiplexor en el ADC).
Registro ADMUX
REFS1: 0 Bits de selección de referencia.
Estos bits seleccionan la tensión de referencia para el ADC.
ADLAR Resultados con Ajuste a la Izquierda.
Este bit determina cualquiera de los bits de los bits a la izquierda o derecha del resultado registros ADCH: ADCL que
se utiliza para almacenar el resultado Si escribimos un uno a ADLAR, el resultado será ajustado a la izquierda, de lo
contrario, el resultado está ajustado a la derecha.
MUX3: 0 Bits de selección de Canal Analógico y ganancia.
El valor de estos bits selecciona la ganancia para los canales diferenciales y también selecciona la combinación de
entradas analógicas que se conectan al ADC.
La Figura muestra el diagrama de bloques de los circuitos internos de selección Vref.
Como puedes ver, tenemos tres opciones: (a) AREF pines (b) pin AVCC, o (c) interna 2.56 V. La siguiente Tabla
muestra como los pines REFS1 y REFS0 del registro ADMUX se pueden utilizar para seleccionar la fuente del Vref.
Tabla de selección de fuente de Vref
Tenga en cuenta que si conecta el pin VREF a un voltaje fijo externo que no será capaz de utilizar las otras opciones
de voltaje de referencia en la aplicación, ya que un cortocircuito con la tensión externa.
Otro punto importante a tener en cuenta es el hecho de que la conexión de un condensador externo de 100 uf entre
el pin VREF y GND aumentará la precisión y la estabilidad del ADC. Especialmente cuando se desea utilizar la
referencia interna 2.56 V.
Si decide 2.56V como Vref el tamaño del paso del ADC será 2.56/1024= 10/4 = 2.5 mV.
Fuente del canal de entrada del ADC
Si selecciona la entrada de una sola terminal, puede elegir el canal de entrada entre ADC0 a ACD7. En este caso, un
solo pin se utiliza como la línea analógica, y GND del chip AVR se utiliza como tierra común. La Tabla muestra los
valores de los pines MUX3-MUX0 de diferentes entradas.
Registro ADCSRA
El registro ADCSRA es el registro de estado y de control del ADC. Los bits de este registro controlan o monitorean la
operación de los ADC. En la figura se puede ver una descripción de cada bit del registro ADCSRA.
ADEN ADC Enable
Este bit habilita o deshabilita el ADC. Configuración de este bit a uno habilita el ADC, y limpieza de este bit a cero
deshabilitará incluso mientras una conversión está en progreso.
ADSC ADC Start Conversion
Para empezar cada conversión tiene que establecer este bit a uno.
ADFR ADC Auto disparador
Auto activación del ADC, está habilitado cuando se configura este bit a uno.
ADIF ADC Interrupt Flag
Este bit se establece a uno cuando una conversión se completa y los registros de datos se actualizan.
ADIE ADC Interrupt Enable
Al activar este bit a uno permite al ADC una interrupción cuando completa la conversión.
ADPS2: 0 Bits Preescalar Select
Estos bits determinan el factor de división entre la frecuencia XTAL y el reloj de entrada al ADC.
ADCSC bit de Inicio de Conversión
Como dijimos antes, un ADC tiene una entrada de inicio de Conversión. El chip AVR tiene un circuito especial para
desencadenar la conversión inicial. Como se ve en la figura mas abajo, además del bit ADCSC de ADCSRA hay otras
fuentes de activación de inicio de la conversión. Si usted setea el bit ADATE de ADCSRA a uno, se puede seleccionar
la fuente de activación automática mediante la actualización ADTS2: 0 en el registro SFIOR. Si se borra ADATE, el
ajuste en los ADTS2: 0 no tendrán efecto. Tenga en cuenta que hay muchas consideraciones, si desea utilizar el
modo de disparo automático.
Fuentes de disparo en el ADC
Un tiempo de conversión A / D
Como se ve en la figura siguiente, mediante el uso de los bits ADPS2: 0 del registro ADCSRA podemos establecer el
tiempo de conversión A / D. Para seleccionar el tiempo de conversión, se puede seleccionar cualquiera de Fosc / 2,
Fosc / 4, Fosc / 8, Fosc/16, Fosc/32, Fosc/64 o Fosc/128 de reloj ADC, donde Fosc es la frecuencia del cristal
conectado al chip AVR. Observe que el multiplexor tiene 7 entradas ya que la opción ADPS2: 0 = 000 está reservada.
Para el AVR, el ADC requiere una frecuencia de reloj de entrada de menos de 200 kHz para la máxima precisión.
Selección del Reloj para el ADC Ejemplo
Un AVR está conectado a un oscilador de cristal de 8 MHz. Calcular la frecuencia para el ADC si : (a) ADPS2: 0 = 001
(b) ADPS2: 0 = 100 (c) ADPS2: 0 = 111
Solución:
(a) Debido a que ADPS2: 0 = 001 (decimal 1), la entrada CK / 2 se activará; tenemos 8 MHz / 2 = 4 MHz (mayor de
200 kHz y no válida)
(b) Debido a ADPS2: 0 = 100 (decimal 4), la entrada CK / 8 se activará; tenemos 8 MHz / 16 = 500 kHz (mayor de 200
kHz y no válida)
(e) Por ADPS2: 0 = 111 (7 decimal), se activa la entrada ck/I28, tenemos 8 MHz / = 62 kHz (una opción válida, ya que
es inferior a 200 kHz)
Pasos en la programación del convertidor A / D utilizando sondeo
Para programar el convertidor A/D del AVR, realiza los siguientes pasos :
1. Hacer el pin para el canal ADC seleccionado un pin de entrada
2. Encienda el módulo ADC del AVR porque está deshabilitado para ahorrar energía,
3. Seleccione la velocidad de conversión, usamos los bits ADPS2: 0 para seleccionar la velocidad de conversión en el
registro ADCSRA.
4. Seleccionar referencia de voltaje y los canales de entrada del ADC. Utilizamos los bits REFS0 y REFS1 en el registro
ADMUX para seleccionar la referencia de tensión y los bits MUX4: 0 en ADMUX para seleccionar el canal de entrada
ADC
5. Active el bit de inicio de conversión escribiendo un uno en el bit ADSC de ADCSRA.
6. Espere a que la conversión se complete mediante el sondeo del bit ADIF en el registro ADCSRA.
7. Después de que el bit ADIF se coloque a uno, lea los registros ADCL y ADCH para obtener la salida de datos
digitales. Tenga en cuenta que hay que leer ADCL antes de ADCH, de lo contrario, el resultado no será valido
8. Si quiere leer el canal seleccionado de nuevo, vuelva al paso 5.
9. Si desea seleccionar otra fuente Vref o canal de entrada, vuelva al paso 4.
Programa en C Este programa coloca los datos desde el canal 0 del ADC en los puertos PORTB y PORTD de manera infinita.
#lnclude <avr/io.h>
int main (void)
{
DDRB 0xFF; //salida
DDRD 0xFF; //salida
DDRC ; // Entrada
ADCSRA= 0x87; //habilita el ADC y selecciona ck/128
ADMUX= 0XC0; //2.56V Vref, entrada ADC0,data justificada a la derecha
while (1){
ADCSRA|=(1<<ADSC); //Inicio de conversion
while((ADCSRA&(1<<ADIF))==O);//espera fin de conversion
PORTD ADCL; //escribe el byte bajo al PORTD
PORTE = ADCH; //escribe el byte alto al PORTB
}
return 0;
}
Utilizando interrupción
#include <avr\io.h>
#include <avr\interrupt.h>
ISR (ADC_vect)
{
PORTD = ADCL; //escribe el byte bajo al PORTD
PORTB = ADCH; //escribe el byte alto al PORTB
ADCSRA|=(1<<ADSC); //Inicio de conversion
}
int main(void) {
DDRB 0xFF; //salida
DDRD 0xFF; //salida
DDRC ; // Entrada
sei ( ) ;
ADCSRA= 0x8F; //habilita la interrupcion,habilita el ADC y selecciona ck/128
ADMUX= OxC0; //2.56V Vref, entrada ADC0,data justificada a la derecha
ADCSRA| = (l<<ADSC) ;//Inicio de conversion
while (1);
return 0;
}