Вы находитесь на странице: 1из 4

Conceptos bsicos de un ADC, en Pic16 o Pic18F45x/18F4550:

Un ADC convierte mide el voltaje V en un pin (que tendr que estar declarado como entrada con el
correspondiente registro TRISA) lo convierte en un n!mero" #l voltaje se mide en re$erencia a un
voltaje m%nimo& Vre$(') & a un voltaje m(imo& Vre$ ())*
V+norm , ( V - Vre$(') ) . (Vre$()) -Vre$(') )
/a $0rmula anterior corresponde a un voltaje normali1ado" Si el voltaje V alcan1a el m(imo (Vre$))
tendremos una salida de 2 si se queda en el m%nimo (Vre$') una salida de 3"
4ormalmente Vre$' suele ser Vss,54D,3V Vre$) , Vcc , 6V& pero pueden usarse otros voltajes de
re$erencia" Si por ejemplo queremos medir una se7al que sa8emos que oscila entre 9 : voltios
usar%amos Vre$',9 Vre$),:" As% aprovec;ar%amos mejor el rango dinmico del conversor"
Como el microcontrolador no va a manejar n!meros en coma $lotante& el voltaje normali1ado se
e(presa con un entero& convirtiendo el intervalo real <3&2= en el intervalo de niveles enteros entre <3
4ma('2=" /a resoluci0n del ADC es una caracter%stica $undamental nos dice el n!mero de niveles
con los que cu8rimos el intervalo <3&2=" >or ejemplo& en los >IC solemos tener una resoluci0n de 23
8its& que representan 9?23,239@ niveles" #l intervalo real <3&2) se aplicar%a al intervalo <3&239:=" Si
asumimos un rango de 6V& tendremos que la resoluci0n de cada nivel es de r,6.239@ V,@"AA mV"
Seg!n la documentaci0n de Bicroc;ip (esto puede variar para otros microcontroladores) cualquier
voltaje entre <3 r= (o por de8ajo de 3& lo que corresponde a VCVre$') se cuanti$icar%a en el nivel 3"
#ntre r 9r tendr%amos una salida de nivel 2" As% ;asta llegar a nivel 239: que cuanti$icar%a voltajes
por encima de 239:r , 239:( 6.239@ , @"DD6V" Como se ve& voltajes por de8ajo de Vre$' o por encima
de Vre$) son posi8les se cuanti$ican como nivel m%nimo 3 o m(imo& 239:" 4iveles por de8ajo de
3V o por encima de la tensi0n de alimentaci0n (normalmente 6V) pueden ser da7ar el >IC"
4ivel Voltaje
3 Cr
2 <r&9r=
9 <9r&:r=
E E
239: F239:r
Aunque un >IC puede tener del orden de A'29 posi8les canales (pines) de entrada anal0gica& solo tiene
normalmente un !nico m0dulo ADC& lo que signi$ica que no podemos tomar medidas simultneas de
varios canales" Si es necesario& lo que podemos ;acer es ir conectando (seleccionando) los sucesivos
canales al ADC para ir midiendo sus voltajes"
#l proceso de una conversin ADC se divide en un tiepo de !d"uisicin #! (durante el cual un
condensador interno se carga al voltaje e(terior) un tiepo de conversin #c (durante el cual se
desconecta el pin e(terior se cuanti$ica el voltaje del condensador)"
#l tiempo de adquisici0n Ta depende de las caracter%sticas elGctricas del >IC (en particular de la
capacidad del condensador)" Si no se respeta este tiempo& el condensador no ;a8r alcan1ado el nivel
del voltaje e(terior la medida ser incorrecta" /os datas;eet de los >IC indican los Ta recomendados
para diversas $amilias"
Htro aspecto importante de la adquisici0n es recordar que Bicroc;ip recomienda una impedancia
m(ima para el sensor (o lo que sea) suministrador de voltaje que est conectado a nuestro pin" #n la
maor%a de los casos se recomienda que dic;a impedancia no supere los 9"6 Io;mios" Seg!n entiendo
con mis escasos conocimientos de electr0nica& impedancias muc;o maores ;ar%an que (de8ido a
corrientes de pGrdida siempre presentes) el condensador no llegara nunca a cargarse al voltaje de
entrada o tardase muc;o en ;acerlo& lo que dar%a lugar a que la medida posterior $uese incorrecta" Si la
impedancia de nuestra $uente es mu superior a la recomendada de8er%amos plantearnos insertar un
driver"
#l tiempo de conversi0n Tc depende $undamentalmente del n!mero de 8its del conversor" /a unidad
8sica es el llamado Tad& apro(imadamente el tiempo necesario para ganar un 8it adicional" /a
conversi0n total tarda entre 22 2@ Tad (contando con la descarga $inal del condensador para estar
listo para otra medida" #l reloj del ADC se de8e ajustar (como una $racci0n del oscilador principal)
para que dic;o Tad no sea in$erior a un valor m%nimo especi$icado en los datas;eet"
>or ejemplo para la $amilia >IC2AJ969.@69 el Tad m%nimo es de 2"K usec Tc , 2@ Tad"
#n cam8io para la $amilia >IC2AJ9693.@693 tenemos un Tad m%nimo de 3"L6 usec un Tc , 22 Tad"
Un comentario $inal* aunque es mu conveniente tener un ADC integrado dentro del microcontrolador&
si lo pensamos en tGrminos de nivel de ruido& etc" las cercan%as de un microcontrolador con la l%neas de
reloj& rpidos cam8ios en las l%neas digitales& comunicaciones& etc" no es el mejor sitio para u8icar un
ADC" #sto quiere decir que si estamos mu interesados en la precisi0n& tal ve1 ser%a conveniente
considerar un ADC aparte& que nos comunicar%a los datos adquiridos a travGs de S>I o similares" Una
ve1 dic;a la advertencia nos centraremos en como usar de la $orma ms e$iciente el ADC de un
microcontrolador (en este caso un >IC)"
/os registros de control del ADC en un >IC ($amilia 2AJ 9693.@693)
>ara estos ejemplos vo a usar c0digo para la $amilia >IC2AJ9693.@693 con algunos comentarios
so8re la $amilia 969.@69" #l conversor AD es uno de los m0dulos de un >IC donde ;a ms di$erencias
entre modelos* distintos n!mero de canales AD& di$erentes $ormas de programar que canales son
digitales o anal0gicos& la posi8ilidad o no de programar tiempos de adquisici0n& etc"
#sto ;ace que la con$iguraci0n del ADC sea 8astante dependiente del modelo siempre sea 8ueno
tener a mano la documentaci0n ante comportamientos inesperados" >or ejemplo& los registros
asociados al puerto serie son los mismos entre una amplia gama de dispositivos" >or el contrario& es
$cil que el n!mero de registros de con$iguraci0n cam8ie entre modelos"
/a $amilia >IC2AJ9693 tiene : registros de control asociados al ADC (ADCH43& ADCH42
ADCH49)" >or el contrario& la $amilia 969.@69& al tener menos $uncionalidades& s0lo necesita 9
(ADCH43 ADCH42)" De todas $ormas& los nom8res $unciones de los 8its comunes sern los
mismos que los aqu% descritos& aunque pueden estar situados en di$erentes registros"
Adems de los registros de control tenemos otros dos registros ADR#SM ADR#S/ (AD result
Mig;./oN) donde se guarda el resultado de la conversi0n& pero estos si son comunes entre dispositivos"
Veamos un resumen de estos registros (de nuevo& los datas;eet de Bicroc;ip son los mejores manuales
de usuario)*
Registro ADC$%0: permite seleccionar (CMS) el canal del que tomaremos la medida" Tam8iGn tiene
el 8it que ;a8ilita el conversor (ADH4) que arranca (5H) el proceso de conversi0n"
Oit P Oit L 8it K 8it 6 8it @ 8it : 8it 9 8it 2 8it 3
4om8re Q Q CMS: CMS9 CMS2 CMS3 5H ADH4
Junci0n 4o
usado
4o
usado
Selecci0n de canal*
desde 3 (3333) a 29 (2233)
/an1a
ADC
H4.HJJ
AD$%: #ncendido (2) o apagado (3) del modulo ADC"
&$ : Se pone a 2 para iniciar el proceso de conversi0n" Cuando la conversi0n ;a terminado el m0dulo
lo pone a 3" As% es como sa8emos que podemos recoger el resultado (en ADR#SM.ADR#S/)
C'(x: selecciona cual de los posi8les 2: canales anal0gicos se conecta al ADC para medir"
Registro ADC$%1: dedicado a seleccionar cuales de los posi8les canales se van a usar como entradas
anal0gicas a programar el uso o no de voltajes de re$erencia e(ternos (distintos de los valores 3 6V
por de$ecto)
Oit P 8it L 8it K 8it 6 8it @ 8it : 8it 9 8it 2 8it 3
4om8re Q ( VCJ52 VCJ53 >CJ5: >CJ59 >CJ53 >CJ53
Junci0n 4o
usado
4o
usado
Uso (2) de
Vre$ ())&Vre$(')
Reparto canales
digitales . anal0gicos
)CF&1: por de$ecto (3) usamos Vss,5nd,3V como Vre$'" Si es 2 se tomara como Vre$' el voltaje
presente en A49"
)CF&0: /o mismo que el anterior pero para Vre$)" >or de$ecto usaremos Vdd (alimentaci0n&
t%picamente 6 o :":V) como Vre$)" Si es 2 se usa el voltaje presente en A4: como Vre$)"
PCF&:*+10: >osi8lemente no necesitaremos todos los posi8les canales anal0gicos" #stos 8its
permiten decidir cuales de los pines se dedican a canales anal0gicos cuales permanecen como
canales digitales" /os valores posi8les van desde 3333 (todos anal0gicos) a 2222 (todos digitales)"
/os canales anal0gicos se denotan en la documentaci0n como A43& A42& A49& etc" /os dispositivos
con A canales (969.@69) los reparten entre el puerto A el #" /os que tienen 2: canales usan tam8iGn
parte del puerto O (9693.@693)" Birar la documentaci0n& porque el orden no es consecutivo" >or
ejemplo& para el @693
Cana
l
A4
3
A4
2
A4
9
A4
:
A4
@
A4
6
A4
K
A4
L
A4
A
A4
D
A42
3
A42
2
A42
9
>in RA
3
RA
2
RA
9
RA
:
RA
6
R#3 R#2 R#9 RO9 RO: RO2 RO@ RO3
Registro ADC$%+: in$ormaci0n para determinar los tiempos Ta Tc del conversor la $orma en la
que el resultado (23 8its) se guarda en ADR#SM*ADR#S/ (2K 8its)"
Oit P 8it L 8it K 8it 6 8it @ 8it : 8it 9 8it 2 8it 3
4om8re ADJB ( ACRT9 ACRT9 ACRT9 ADCS9 ADCS2 ADCS3
Junci0n Jormato 4o
usado
>rogramaci0n T adquisici0n Reloj del ADC
ADF,: Jormateo del resultado" #l conversor da 23 8its que se guardan en dos registros
(ADR#SM*ADR#S/) de A 8its& por lo que K de los 2K 8its estarn vac%os" Si ADJB,2 el resultado
est despla1ado a la derec;a& por lo que los K 8its ms signi$icativos de ADR#SM estarn vac%os" Si es
3 se justi$ica a la i1quierda son los K 8its menos signi$icativos de ADR#S/ los que estn vac%os" #l
caso ADJB,2 se suele usar cuando nos interesan los 23 8its" #l resultado se puede pasar a un entero
de 2K 8its como*
res , (ADR#SMCCA))ADR#S/S
#l caso ADJB,3 se suele usar si s0lo queremos los A 8its ms signi$icativos" #n ese caso 8asta ;acer*
res , ADR#SMS
AC-#: 8its para la programaci0n del T de adquisici0n" Recordar que el tiempo de adquisici0n es el
que de8emos esperar despuGs de seleccionar (conectar) un canal al ADC mientras se carga el
condensador cuo voltaje posteriormente mediremos" Si escogemos 333 el usuario es responsa8le de
la espera (de unos pocos usec& especi$icada en la documentaci0n) entre la selecci0n del canal (poner
los 8its CMS adecuados en ADCH43) el inicio del proceso de conversi0n (poner a 2 el 8it 5H de
ADCH43)"
#l modo manual (333) era la norma entre $amilias anteriores& que de ;ec;o no conta8an con estos 8its
de con$iguraci0n" #n la $amilia 9693.@693 es posi8le programar dic;o tiempo de espera" De esta $orma
tras seleccionar el canal podemos inmediatamente lan1ar la conversi0n (ADCH43"5H,2) el m0dulo
esperara el tiempo programado antes de iniciar la conversi0n" #sto permite optimi1ar el
aprovec;amiento del ADC como veremos"
#l tiempo de adquisici0n es la suma de varios $actores& siendo los principales la capacidad del
condensador a cargar el tiempo que tarda el ampli$icador del ADC en esta8ili1arse" #s importante
consultar el datas;eet si queremos optimi1ar el muestreo porque podemos encontrarnos 8astantes
di$erencias entre diversos modelos"
ADC(: seleccionan la velocidad del reloj del ADC como una $racci0n (div , 9& @& A& 2K& :9& K@) del
reloj principal (aunque tam8iGn es posi8le asociarlo a un oscilador RC independiente)" #l inverso de la
$recuencia del ADC determina el llamado Tad& que viene a ser el tiempo dedicado a o8tener cada 8it
del resultado*
J+ad , Josc . div
Tad , 2.J+ad , div . Josc (en microsec si Josc est en BM1)
H8viamente de8er%amos escoger un divisor 8ajo para o8tener la $recuencia ms alta (Tad ms
peque7o) posi8le para tardar lo menos posi8le en cada conversi0n" Sin em8argo ;a una limitaci0n* el
Tad no puede ser menor que un cierto tiempo m%nimo dependiente del modelo" >or ejemplo p!r! .!
/!i.i! +5+/45+ se recoiend! "ue #!d se! coo 0nio 116 usec" 2n c!bio p!r! .!
+5+0/45+0 podeos b!3!r ! 0145 usec"
#so signi$ica que si tenemos un cristal de 93 B;1& el divisor escogido ser%a*
2*:9 si tenemos un @69& a que Tad , div . Josc , :9.93 B;1 , 2"K usec , recomendado
2*2K si tenemos un @693 a que Tad , div . Josc , 2K.93 BM1 , 3"A usec F 3"L6 usec recomendados
4uestro primer programa con el ADC
#l proceso a seguir para una conversi0n (seg!n se descri8e en la documentaci0n de Bicroc;ip) es el
siguiente*
2" Con$igurar el ADC con la asignaci0n de canales (>CJ5)& programar el reloj del ADC (8its
ADCS)& seleccionar o no voltajes de re$erencia (VCJ5)& etc"
9" Una ve1 con$igurado& ;a8ilitar el ADC (ADH4,2)
:" #scoger canal (8its CMS) a usar (el pin dado se conecta al condensador)
@" #sperar (dela) Ta mientras se carga el condensador (este paso puede ser evitado programamos
la espera)
6" /an1ar la conversi0n (5H,2)
K" #sperar a completar a que la conversi0n conclua (5H,3)"
L" #(traer el resultado de ADR#SM*ADR#S/
A" Si ;emos terminado con el ADC& apagarlo para reducir consumo"
A;ora que conocemos los detalles escri8iremos el primer programa para un >IC2AJ@693 usando las
rutinas de C2A no tendremos di$icultades en imaginar que est ;aciendo cada rutina por de8ajo"
/as rutinas 8sicas para operar en C2A con el ADC pueden verse en este c0digo ejemplo del manual de
C2A*

Вам также может понравиться