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:
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:
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
Muy buena explicación profesor :D
ResponderEliminar