You are on page 1of 7

Conversor Anlogo-Digital (ADC12) del MSPF149

Descripcin [1,2]
El microcontrolador MSPF149 tiene un conversor anlogo-digital (ADC12) con las
siguientes caractersticas:
12 bits.
Tasa de muestreo mxima: 200 KHz.
Perodos de muestreo programables, controlados por software o por timers.
Inicio de la conversin por software, o por temporizadores (Timer A o B).
Trmino de la conversin genera interrupciones para alertar al procesador.
Generacin de referencias configurable por software. Referencia positiva
externa o interna, de 1.5 o 2.5 V esta ltima. Referencia negativa externa o
tensin de tierra negativa.
8 canales de entrada, configurables independientemente.
4 seales internas: sensor de temperatura interna y niveles de voltajes de
referencia.
Fuente de reloj de conversin ajustable.
4 modos de conversin: un canal, un canal repetido, secuencia de canales,
secuencia repetida de canales.
Registro con un vector de 18 interrupciones.
16 registros de almacenamiento del resultado de la conversin.

Diagrama del Conversor Anlogo-Digital

Operacin del ADC12 [1]


El ADC12 convierte una entrada analgica a su representacin digital de 12 bits y
guarda el resultado en la memoria de conversin. Para esto, se utilizan dos niveles de
voltaje (VR+ y VR-) para definir los lmites mximo y mnimo de la conversin.
La salida digital (NADC) toma el valor 0xFFF si la seal de entrada (Vin) es mayor o
igual a VR+ y es igual a cero si la seal de entrada es menor o igual que VR-. Para los
otros casos, el valor de la conversin queda dado por la frmula:

El ADC12 es configurado mediante dos registros de control: ADC12CTL0 y


ADC12CTL1. Es habilitado con los bits ADC12ON y ENC. Por tanto, el ADC12 puede
ser apagado cuando no est en uso para disminuir el consumo.
Reloj
El reloj para la conversin es denominado ADC12CLK y sus fuentes pueden ser
SMCLK, MCLK, ACLK o el oscilador interno ADC12OSC. Este ltimo est en el
rango de los 5 MHz, pero vara segn el dispositivo, el voltaje de alimentacin y la
temperatura. Cualquiera sea la fuente escogida, puede ser dividida por un factor de 1
hasta 8 mediante los bits ADC12DIVx.
Entradas y multiplexor
Las seales anlogas (8 externas y 4 internas) son seleccionadas para la conversin
mediante el multiplexor de entradas analgicas. El diseo del multiplexor permite
minimizar el crosstalk, la inyeccin de ruido debido a la conmutacin entre canales.
Las entradas del ADC12 estn multiplexadas con los pines del puerto P6, que son
puertas digitales CMOS. Al aplicar seales anlogas a puertas CMOS, es posible el
flujo de corrientes parsitas entre Vcc y tierra. El deshabilitar el buffer de entrada de
cada pin elimina este efecto y permite reducir el consumo total de energa. Esto se
realiza mediante los bits P6SELx.
Generacin Voltaje de Referencia
El seteo de REFON = 1 permite habilitar la referencia interna. El bit REF2_5V permite
seleccionar entre 2.5 V (REF2_5V = 1) o 1.5 V (REF2_5V = 0).
Referencias externas pueden ser conectadas a los pines VR- y VR+ y VE+.
Muestreo y tiempos de conversin
La conversin anloga a digital se inicia con un canto de subida de la seal interna SHI.
Las fuentes de esta seal son:
Bit ADC12SC, controlado por software
Etapa de salida 1 del Timer_A
Etapa de salida 0 del Timer_B
Etapa de salida 1 del Timer_B

La polaridad de la fuente de la seal SHI puede ser invertida mediante el bit ISSH. La
seal SAMPCON controla el perodo de muestreo y el inicio de la conversin. Al estar
SAMPCON en alto, el muestreo est activo. La transicin alto-bajo de SAMPCON
inicia la conversin anlogo a digital, que requiere 13 ciclos de ADC12CLK.
El bit de control SHP permite elegir entre dos mtodos de muestreo:
Modo extendido (SHP = 0)

Tiempos en modo extendido.


En este modo, la seal SHI controla directamente a SAMPCON y define la longitud del
perodo de muestreo (tsample). Al estar SAMPCON en alto el muestreo est activo; su
transicin a estado bajo junto con la sincronizacin con ADC12CLK gatillan la
conversin.
Modo de pulso (SHP = 1)
La seal SHI es utilizada en este caso para disparar el temporizador de muestreo. Los
bits SHT0x y SHT1x del registro ADC12CTL0 controlan el intervalo del temporizador
de muestreo que define el perodo de SAMPCON. El temporizador mantiene a
SAMPCON en alto luego de la sincronizacin con ADC12CLK para un intervalo
programado de tsample. El tiempo total de muestreo es entonces tsample + tsync.

Tiempos en modo pulso

Consideraciones del tiempo de muestreo


Cuando SAMPCON = 0, todas las entradas anlogas Ax estn en alta impedancia. Si
SAMPCON = 1, la entrada Ax seleccionada puede ser modelada como un filtro RC
pasabajos durante el tiempo de muestreo tsample, de acuerdo a la figura:

VI :

VC: voltaje de carga de CI

voltaje de entrada en pin Ax


VS: fuente de voltaje externa
RS: resistencia de fuente externa
RI : resistencia interna de MUX
CI : capacitancia de entrada

Circuito equivalente de la entrada anloga


La fuente ve una resistencia interna del multiplexor activo (RI , mx. 2 k) en serie con
CI (mx. 40 pF).
RS y RI afectan el tiempo de muestreo tsample. El tiempo mnimo de muestreo para una
conversin de 12 bits se obtiene a partir de la ecuacin:

Sustituyendo los valores mximos de RI y CI, se llega a:

Entonces, si RS es por ejemplo de 10 k, tsample debe ser mayor a 4,33 s.


Memoria de conversin
La memoria de conversin consiste en 16 registros que almacenan los resultados de las
conversiones (ADC12MEMx). Cada uno de estos registros tiene asociado un registro de
control ADC12MCTLx. Los bits SREFx definen el voltaje de referencia y los bits
INCHx seleccionan el canal de entrada. El bit EOS define el trmino de la secuencia si
se ha seleccionado el modo de conversin secuencial. Cuando el bit EOS en el registro
ADC12MCTL15 no est seteado, la secuencia va de ADC12MEM15 a ADC12MEM0.
Los bits CSTARTADDx definen el primer ADC12CTLx usado para cualquier
conversin. Si el modo de conversin es de un canal o de un canal repetido, el
CSTARTADDx apunta al nico ADC12CTLx a ser usado.
Si el modo de conversin es de secuencia de canales o de secuencia repetida,
CSTARTADDx apunta a la primera ubicacin ADC12MCTLx a ser usada en la
secuencia. Un puntero (no visible por software) es incrementado automticamente al
siguiente ADC12MCTLx cuando cada conversin se completa. La secuencia contina
hasta que sea procesado un bit EOS en ADC12MCTLx.

Modos de conversin
Como ya se ha sealado, el ADC12 tiene 4 modos de operacin seleccionados por los
bits CONSEQx. Esto se ve en la siguiente tabla [2]:

Modos de conversin.
Para mayor detalle acerca de cada uno de estos modos de conversin, consultar [1].
Trmino de las conversiones
La detencin de la actividad del ADC12 depende del modo de conversin utilizado. Las
maneras recomendadas para detener una conversin activa o una secuencia de
conversin son:
Resetear ENC en el modo 00 detiene la conversin inmediatamente y los
resultados son impredecibles. Para que los resultados sean correctos, revisar el
bit busy antes de resetear ENC.
Resetear ENC durante la operacin en el modo 10 detiene el conversor al final
de la conversin actual.
Resetear ENC en los modos 01 o 11 detiene el conversor al final de la secuencia.
Cualquier modo de conversin puede ser detenido en forma inmediata seteando
CONSEQx = 0 y reseteando el bit ENC. Los datos de conversin no son
confiables.
Interrupciones
El ADC12 tiene 18 fuentes de interrupciones:
ADC12IFG0- ADC12IFG15
ADC12OV, ADC12MEMx overflow
ADC12TOV, ADC12 overflow del tiempo de conversin.
Los bits ADC12IFGx se setean cuando su correspondiente registro de memoria
ADC12MEMx ha almacenado un resultado de conversin. Se genera entonces una
interrupcin si el bit ADC12IEx correspondiente y el bit GIE estn seteados. La
condicin ADCOV ocurre cuando un resultado de conversin es escrito en cualquier
ADC12 MEMx antes que el resultado de conversin previo fuese ledo. La condicin
ADCTOV se genera cuando existe una peticin de una nueva operacin de muestreoconversin, antes que la conversin actual se haya completado.

Vector de Interrupciones (ADC12IV)


Todas las interrupciones van al mismo vector, ADC12IV, el que es utilizado para saltar
en forma rpida a la rutina de atencin que corresponda.
La interrupcin habilitada de ms alta prioridad genera un nmero en el registro
ADC12IV. Este nmero puede ser evaluado o sumado a PC para entrar
automticamente a la rutina apropiada de software. Las interrupciones deshabilitadas no
afectan el valor de ADC12IV.
Cualquier acceso (lectura o escritura) del registro ADC12IV resetea automticamente
las condiciones ADC12OV o ADC12TOV si alguna de ellas era la interrupcin
pendiente de mayor prioridad. Ninguna de estas condiciones de interrupcin tienen flags
accesibles. Los flags ADC12IFGx no se resetean por un acceso al registro ADC12IV.
Estos bits se resetean automticamente accediendo el registro ADC12MEMx
correspondiente, o bien por software.
Si luego de servir a una interrupcin existe otra interrupcin pendiente, se genera una
nueva interrupcin. Por ejemplo, si las interrupciones ADC12OV y ADC12IFG3 estn
pendientes cuando la rutina de servicio de interrupciones accede al registro ADC12IV,
la condicin de interrupcin ADC12OV es reseteada automticamente. Luego de
ejecutada la instruccin RETI de la rutina de servicio de interrupciones, ADC12IFG3
genera una nueva interrupcin.

Referencias
[1] MSP430x1xx User`s Guide, Texas Instruments. Disponible:
http://www.elo.utfsm.cl/~lsb/elo325/datos/msp430x1xx.pdf
[2] Tcnicas de Diseo con Microcontrolador MSP430, Ziga, J. Memoria para
optar al ttulo de Ingeniero Civil Electrnico. Profesor Gua: Silva, L. 2003.

ANEXO: Ejemplo de muestreo con ADC12

/* Tomado del cdigo easyweb.c, autor: A. Dannenberg */


// Muestrea y retorna el valor de conversin A/D del canal 7
// (asociado con el pin P6.7, se asume inicializacin de osc y puertos)
unsigned int GetAD7Val(void)
{
ADC12CTL0 = ADC12ON | SHT0_15 | REF2_5V | REFON;
// ADC on, ref. int. ON (2,5 V), modo 00
ADC12CTL1 = ADC12SSEL_2 | ADC12DIV_7 | CSTARTADD_0 | SHP;
// MCLK / 8 = 1 MHz

ADC12MCTL0 = SREF_1 | INCH_7;

// ref. int, canal 7

ADC12CTL0 |= ENC;
ADC12CTL0 |= ADC12SC;

// habilita conversin
// muestrea & convierte

while (ADC12CTL0 & ADC12SC);

// espera trmino de la conversin

ADC12CTL0 &= ~ENC;

// deshabilita conversion

return ADC12MEM0 / 41;

// escala a porcentaje 0-100% sobre ref

You might also like