CONVERSOR A/D


CONVERSOR ANÁLOGO DIGITAL (ADC)

Los microcontroladores 18F2550 y 18F4550 poseen un conversor análogo digital interno con las siguientes especificaciones.

  •   10 bits de resolución
  •  13 canales análogosen dispositivos de 40 pines y 10 en dispositivos de 28 pines
  •  Tiempo de adquisición configurable
  •   Reloj de conversión configurable
  •  Voltajes de referencia configurables
RESOLUCIÓN DE 10 BITS:

Cuando el microcontrolador tiene configurado los voltajes de referencia como la misma alimentación (Vss, Vdd), se asume que Vref = 5V

R=( (Vref+) - (Vref-)) / 1023 = 4.89 mV

Cuando se manejan voltajes de referencia diferentes de la alimentación del micro, estos se establecen en las entradas RA2 (Vref -) y RA3 (Vref +), la diferencia mínima entre estos dos voltajes (ΔVref)  viene dada por la alimentación del microcontrolador de la siguiente manera:

Si  VDD ≥ 3.0 V                                  ΔVref  mínimo = 3.0V
Para este caso la mejor  resolución obtenida es de:  R = 3V / 1023 = 2.93 mV

Si  VDD < 3.0 V                                  ΔVref  mínimo = 1.8V
Para este caso la mejor  resolución obtenida es de:  R = 1.8V / 1023 = 1.76 mV


Para configurar los voltajes de referencia en C se utiliza la función SETUP_ADC_PORTS(Constante);  mediante un operador or, junto con la configuración de los canales análogos. Las opciones disponibles son:

·         VSS_VDD                           // Rango 0 a Vdd
·         VREF_VREF                      // Rango (Vref-) a (Vref+)
·         VREF_VDD                        // Rango (Vref-) a Vdd
·         VSS_VREF                         // Rango 0 a (Vref+)

CANALES ANÁLOGOS:

Para los dispositivos de 40 pines como el 18f4550 los canales análogos están distribuidos así:

·         Canal 0 (AN0):                  RA0        (Pin 2)
·         Canal 1 (AN1):                  RA1        (Pin 3)
·         Canal 2 (AN2 / Vref-):       RA2        (Pin 4)
·         Canal 3 (AN3 / Vref+):      RA3        (Pin 5)
·         Canal 4 (AN4):                  RA5        (Pin 7)
·         Canal 5 (AN5):                  RE0        (Pin 8)
·         Canal 6 (AN6):                  RE1        (Pin 9)
·         Canal 7 (AN7):                  RE2        (Pin 10)
·         Canal 8 (AN8):                  RB2        (Pin 35)
·         Canal 9 (AN9):                  RB3        (Pin 36)
·         Canal 10 (AN10):              RB1        (Pin 34)
·         Canal 11 (AN11):               RB4        (Pin 37)
·         Canal 12 (AN12):              RB0        (Pin 33)

Para los dispositivos de 28 pines como el 18f2550 solo están disponible 10 canales, no existe el puerto E, por lo tanto los canales AN5, AN6 y AN7 no están habilitados.


No es necesario habilitar todos los canales análogos, se habilitan dependiendo de cuantos requiera la aplicación a desarrollar, para este propósito se dispone de la función SETUP_ADC_PORTS(Constante); Esta función se trabaja en conjunto con un operador or con la configuración de voltajes de referencia  los posibles valores de constantes son:

NO_ANALOGS     // Ningún canal análogo todos digitales
ALL_ANALOG     // A0 A1 A2 A3 A5 E0 E1 E2 B2 B3 B1 B4 B0    
AN0_TO_AN11     // A0 A1 A2 A3 A5 E0 E1 E2 B2 B3 B1 B4      
AN0_TO_AN10    // A0 A1 A2 A3 A5 E0 E1 E2 B2 B3 B1         
AN0_TO_AN9      // A0 A1 A2 A3 A5 E0 E1 E2 B2 B3            
AN0_TO_AN8      // A0 A1 A2 A3 A5 E0 E1 E2 B2               
AN0_TO_AN7      // A0 A1 A2 A3 A5 E0 E1 E2                  
AN0_TO_AN6      // A0 A1 A2 A3 A5 E0 E1                     
AN0_TO_AN5      // A0 A1 A2 A3 A5 E0                        
AN0_TO_AN4      // A0 A1 A2 A3 A5
AN0_TO_AN3      // A0 A1 A2 A3
AN0_TO_AN2      // A0 A1 A2
AN0_TO_AN1      // A0 A1
AN0                       // A0

por ejemplo la forma de configurar un canal analogo con voltajes de referencia vss a vdd sera de la siguiente forma:


SETUP_ADC_PORTS (AN0 | VSS_VDD);
 
Después de configurar los canales análogos necesarios la forma correcta de seleccionar el canal a convertir es mediantes la función SET_ADC_CHANNEL ( Canal ); donde canal puede ser desde AN0 hasta AN13

TIEMPO DE  ADQUISICIÓN  (TACQ):

El conversor análogo digital posee un condensador interno de muestreo, antes de iniciar una conversión se debe esperar un tiempo mínimo (TACQ), para que el condensador se cargue totalmente al nivel de la entrada análoga, esto también se debe hacer  cada vez que se selecciona un canal nuevo, el tiempo varía dependiendo de la impedancia de entrada de conversor y la impedancia de salida del circuito a digitalizar.
Este tiempo debe ser mayor que 2.4 µs y se puede asignar en el programa por medio de un retardo o se puede configura automático, en el modo automático existen ocho posibilidades, este tiempo se ejecuta entre el momento de la orden de conversión y el momento que realmente iniciala conversion

  • 20 TAD
  • 16 TAD
  • 12 TAD
  • 8 TAD 
  •  6 TAD
  •  4 TAD
  • 2 TAD
  • 0 TAD

SELECCIÓN DEL RELOJ DE CONVERSION:

El conversor del microcontrolador es por el método de aproximaciones sucesivas, el tiempo que demora en convertir un bit es igual al tiempo (TAD), este tiempo debe ser lo menor posible para obtener la mayor velocidad de muestreo, pero sin olvidar que debe ser superior al mínimo TAD del microcontrolador, que según su hoja de características es de 0,7µs.

La selección del reloj de conversión es configurable, existen 7 opciones diferentes para configurar el TAD se escoge dependiendo del cristal utilizado, siempre teniendo en cuenta que sea superior el mínimo TAD .

  •      2 Tosc
  •      4 Tosc
  •      8 Tosc
  •      16 Tosc
  •      32 Tosc
  •      64 Tosc
  •      Oscilador interno RC

Se debe seleccionar la opcion que me proporcione el TAD mas pequeño, siempre teniendo en cuenta de que no sea menor que el TAD mínimo del microcontrolador

Ejemplo:

Si se tiene un cristal de 20MHz y se tiene seleccionado 8Tosc el tiempo de adquisición será:
TAD = 8 * 1/20Mhz = 0.4 µs

Lo cual sería un tiempo menor que el mínimo requerido por el microcontrolador, para esta frecuencia de oscilación mínimo se debe tener configurado 16Tosc

TAD = 16 * 1/20Mhz = 0.8 µs

Cuando se elige el oscilador interno RC, el TAD viene predeterminado aproximadamente 4ms, además esto permite trabajar con el conversor en un estado de reposo (sleep)

La conversión completa de los 10 bit requiere de 11 TAD más los configurados en el tiempo de adquisición automático.
 


La forma de configurar este parámetro en C es mediante la función SETUP_ADC (Modo); los posibles modos que se pueden utilizar con esta función son:

  •     ADC_OFF              
  •     ADC_CLOCK_DIV_2  
  •     ADC_CLOCK_DIV_4   
  •      ADC_CLOCK_DIV_8   
  •      ADC_CLOCK_DIV_16  
  •      ADC_CLOCK_DIV_32  
  •      ADC_CLOCK_DIV_64  
  •       ADC_CLOCK_INTERNAL   
Después de tener configurado y seleccionado el canal del modulo ADC, se puede iniciar y leer la conversión por medio de la función  

READ_ADC (Modo); 

Donde modo puede ser:

  •    ADC_START_AND_READ     Inicia y lee la conversión, es la configuración por defecto 
  •    ADC_START_ONLY               Solo inicia la conversión
  •    ADC_READ_ONLY                 Solo lee el resultado de la conversión

VER EJEMPLO
 

1 comentario: