Upload
dimas-colmenares
View
15
Download
2
Embed Size (px)
Citation preview
REV 008 -2006
LABORATORIO DE MICROPROCESADORES
Daniel A Jacoby
Noviembre 2008
Instituto Tecnológico de Buenos aires
ADC HCS12
Diagrama en bloques
El modulo ATD tiene un conversor A/D de10 bits
Hay 8 entradas conectadas a mediante un multiplexor al conversor
El conversor tiene dos entradas de referencia VRH y VRL. En condiciones normales VRH=0v y VRH=5v
Módulos ATD del ProcesadorEl MC9S12DP256B posee 2 módulos ATD0 y ATD1
Registros de lectura del ADT
Cada modulo posee 8 registros donde se guarda el resultado de la conversión:
ATD0DR0 - ATD0DR7 para el modulo ATD0
ATD1DR0 – ATD1DR7 para el modulo ATD1
Registros de lectura del ADT
La conversión puede ser en 8 o 10 bits
8 Bits si SRES8=1
10 Bits si SRES8=0
Registros de lectura del ADT
El resultado de la conversión puede estar alineado a la izquierda o a la derecha
DJM=0 (Left justified)
DJM=1 (Right justified)
Registros de lectura del ADT
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
B7 B6 B5 B4 B3 B2 B1 B0 0 0 0 0 0 0 0 0
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0 B7 B6 B5 B4 B3 B2 B1 B0
DJM=0 (Left justified) 8 Bits
DJM=1 (Right justified) 8 Bits
ATDDRX
ATDDRXH ATDDRXL
Si la conversión es de 8 bits la lectura deberá realizarse del registro ATDDRXH/L x=0..7
Registros de lectura del ADT
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
B9 B8 B7 B6 B5 B4 B3 B2 B1 B0 0 0 0 0 0 0
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 0 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0
DJM=0 (Left justified) 10 Bits
DJM=1 (Right justified) 10 Bits
ATDDRX
ATDDRXH ATDDRXL
Si la conversión es de 10 bits la lectura deberá realizarse del registro ATDDRX x=0..7
Registros de lectura del ADT
Finalmente existe la posibilidad que los valores tengan representación no signada o signada siendo esta ultima valida solo para DJM=0 (Left justified)
DSGN=0 Unsigned
DSGN=1 Signed
Modos de operaciónSCAN=0 Una sola secuencia de L conversiones1
SCAN=1 Realiza en forma repetitiva L conversiones
L (Long de la secuencia) esta dado por S8C,S4C,S2C,S0C
MULT=0 Realiza L conversiones sobre el mismo canal MULT=1 Realiza L conversiones sobre canales consecutivos.
La selección del canal esta dado por CC,CB,CA
Si MULT=0 este es el canal a convertir.
Si MULT=1 este es el primer canal de la secuencia (CHini)1-Para iniciar una nueva conversión se debe escribir a
ATDCTL5.
Modos de operaciónEn todos los casos las lecturas se guardan a partir del registro ADTDR0.
Ej.:
L=1 ATDDR0
L=2 ATDDR0,ATDDR1
L=3 ATDDR0,ATDDR1,ATDDR2
Tabla para la selección del canal
Tabla para la selección de L
Modos de operaciónMULTI =0
En este caso se realizan L conversiones de UN solo canal. El canal elegido estará dado por los valores de CC CB y CA. Las lecturas serán guardadas en forma secuencial en los registros ADTDRx empezando por el 0 hasta L-1.
ADTDR0
ADTDR1
ADTDR2
ADTDR3
ADTDR4
ADTDR5
ADTDR6
ADTDR7
Ej.: Si CC,CB,CA =0102=210 y S8C,S4C,S2C,S0C= 310 este caso se convierte el canal 2 guardándose en ADTDR0 su valor. Luego se repite la conversión sobre el mismo canal guardándose en ADTDR1 su valor. Finalmente se repite la conversión del mismo canal guardándose dicho valor en ADTDR2.Si SCAN=1 esta secuencia se repite indefinidamente
MUX
PAD0
PAD1
PAD2
PAD3
PAD4
PAD5
PAD6
PAD7
CC CB CA
ADCADCSi
SCAN=1
Modos de operaciónMULTI =1 Ejemplo1
En este caso se convierte en forma secuencial L canales siendo el primero de ellos el dado por los valores de CC CB y CA (CHini).
ADCADC
ADTDR0
ADTDR1
ADTDR2
ADTDR3
ADTDR4
ADTDR5
ADTDR6
ADTDR7
MUX
PAD0
PAD1
PAD2
PAD3
PAD4
PAD5
PAD6
PAD7
CC CB CA
Ej.: Si CHini=2 y L= 310 este caso se convierte primero el canal 2 luego el 3 y finalmente el 4 empezando nuevamente por el 2 (Si SCAN=1)o se detiene si SCAN=0. S= 2,3,4,2,3,4,2,3,4…. .Osea L=3 y
Si SCAN=1
Modos de operación
MULTI =1 Ejemplo2: Input Channel wrap around
ADCADC
ADTDR0
ADTDR1
ADTDR2
ADTDR3
ADTDR4
ADTDR5
ADTDR6
ADTDR7
MUX
PAD0
PAD1
PAD2
PAD3
PAD4
PAD5
PAD6
PAD7
CC CB CA
CHini=6 Si SCAN=1
CHini=6
L=5
Tiempos de conversión
MAXIMO 2MHz !!
24MHz
Ej.: Si PRS=5 => ATDCLK = 0.5 (24MHz/6) = 2MHz
Tiempos de conversión
Durante la primera fase la entrada esta conectada al hold capacitor mediante un buffer de ganancia unitaria.
En la segunda fase la entrada se conecta directamente al hold capacitor (sin buffer) que se carga hasta el valor final.
El numero de ciclos de esta fase dependerá de la impedancia de salida de la fuente conectada al pin de entrada al ADC. Para fuentes de alta impedancia conviene elegir un tiempo mayor.
Tiempos de conversión
24MHz
Si ATDCLK = 2MHz => TATDCLK = 0.5us
Con TATDCLK = 0.5us tenemos:
Fase inicial= 2 x 0.5us= 1us
Final sample time= 2 x 0.5us= 1us
Conversion time= 10 x 0.5us= 5us
Total = 7us por canal
Si L=8 el tiempo total de conversión es Lx7=56us
Nota:
Se asumió que:
Se eligieron 2 ciclos para la fase 2 (final sample time) SMP1:SMP0=0:0
Se usan 10 bits de resolución (10 Ciclos) SRES8=0
ATDCTL4= 0x05
2 2 10
Fin de conversión
SCF :Sequence Completed Flag
SCF=1 si la secuencia finalizo (luego de L conversiones)
SCF=0 Si la secuencia no finalizo.
Se borra cuando:
A- Se escribe un “1” a SCF
B- Se escribe al ATDCTL5 (start of conversion)
C- Si AFFC=1 basta con leer directamente el resultado de la conversión
AFFC= Automatic Fast Flag Clear (Bit 6 de ADTCTL2)
Fin de conversión
CCFx se borra cuando:
A- Se lee el registro ADSTAT1 seguido una lectura de ADTDRX (AFFC=0)
B- Se escribe al ATDCTL5 (start of conversion)
C- Basta con leer directamente el resultado en ADTDRX si AFFC=1 .
Además del CCF existe un flag de fin de conversión para cada canal en una secuencia (CCFx donde x=[0..7]). Por ejemplo cuando finaliza la primera conversión en una secuencia CCF0=1 y el resultado estará en ATDDR0.
Luego cuando finaliza la segunda conversión de la secuencia CCF1 =1 y el resultado estará en ATDDR1. Así se sigue hasta completar la secuencia.
Impedancia de entrada
Se debe tener especial cuidado con la impedancia de entrada. Una impedancia muy alta introduce gran error en la medición por la corriente de fuga a la entrada (Iin=1uA) y una impedancia muy baja puede no limitar la corriente de entrada máxima (Iicp=2.5 mA) cuando la tensión de entrada excede los limites permitidos [VDDA,VSSA].
Impedancia de entrada máxima
Para 8 bits 1LSB ~ 20mV => Error < 1/2LSB =10mV Rs < 10mV / Iin(1uA) = 10K Ω
Para 10 bits 1LSB ~ 5mV => Error < 1/2LSB =2.5mV Rs < 2.5mV / Iin(1uA) = 2.5K Ω
Asumiendo que Vref=VRH-VRL=5.12V
1LSB (8 bits)=Vref/256 = 20mV
1LSB (10 bits)=Vref/1024 = 5mV
Impedancia de entrada mínima
Por ejemplo si por accidente la tensión de entrada se hace -12V el diodo de clamping limita la entrada a - 0.7v quedando sobre Rs 11.3V.
En este caso la Rs > 11.3V / 2.5mA = 4.5KΩ
Para la determinación de la Zin mínima debe tenerse en cuenta que la corriente de inyección máxima no debe exceder los 2.5mA
Valor del Capacitor CfPara determinar el valor de Cf debemos basarnos en la figura siguiente:
El capacitor CSAMP junto con S1 y S2 es un S/H. Durante la primera fase de la adquisición (2 ciclos) el capacitor se carga a través del buffer. El motivo de esto es que en el instante inicial la diferencia de tensión entre la entrada y la de dicho capacitor puede ser alta. Si la conexión fuese directa (sin buffer) podría haber una excesiva caída de tensión en la rama serie creando así un importante error en la conversión.
Valor del Capacitor Cf
Bajo estas condiciones la capacidad vista desde la entrada es:
CinN= Cin+CBUF=6pF+4pF=10pF
Cuando se inicia la segunda etapa se supone que la tension sobre CSAMP llego casi hasta casi el valor de la entrada no siendo mas necesario el buffer. Entonces en la segunda etapa el camino de carga es a través de S2 ahora la capacidad vista desde la entrada es:
CinS= Cin+CBUF+CSAMP= CinN+CSAMP= 10pF+12pF= 22pF
Valor del Capacitor Cf
Debido a la redistribución de carga se produce una caída en la tensión Δv que debe ser menor a un LSB.
La carga eléctrica antes del cierre de S2 es: Q= V1(Cf+CinN)
y después del cierre de S2 será: Q= V2(Cf+CinS).
Igualando : V1(Cf+CinN) = V2(Cf+CinS).
La caída por la predistribución de la carga será Δv=V2-V1
Valor del Capacitor Cf(Cf+CinS)
O sea V2= V1 (Cf+CinN)
(Cf+CinS) (Cf+CinS) La caida sera: v=V2-V1= V1 V1= V1 1
(Cf+CinN) (Cf+CinN)
v (Cf+CinS) 1 = 1 para 10 bitsV1 (Cf+CinN) 1024
(Cf+CinS) (Cf+CinN) 1
(Cf+CinN) 1024
(CinS CinN) 1
(Cf+CinN) 1024
Cf >1024 CinS 1024 CinN CinN
Cf >1024 (CinS CinN)
Valor del Capacitor Cf
1024 (CinS CinN)=1024 (22pF-10pF)=1024 12pf 12nf
Cf >1024 (CinS CinN)
Cf >12nF
Referencias
• ATD_10B8C Block User Guide V02.08
• AN2428/D
• AN2429/D