0% encontró este documento útil (0 votos)
273 vistas13 páginas

Uc PIC - Conversión Analógico - Digital

El documento describe el funcionamiento de un convertidor analógico-digital (ADC) en un microcontrolador PIC18F2550. Explica que el ADC en este microcontrolador es de 10 bits, multiplexado y de aproximaciones sucesivas. Detalla los registros de control del ADC, cómo configurar el tiempo de adquisición, reloj de conversión y canal analógico, y los pasos para realizar una conversión.

Cargado por

Josue Marshall
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
273 vistas13 páginas

Uc PIC - Conversión Analógico - Digital

El documento describe el funcionamiento de un convertidor analógico-digital (ADC) en un microcontrolador PIC18F2550. Explica que el ADC en este microcontrolador es de 10 bits, multiplexado y de aproximaciones sucesivas. Detalla los registros de control del ADC, cómo configurar el tiempo de adquisición, reloj de conversión y canal analógico, y los pasos para realizar una conversión.

Cargado por

Josue Marshall
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 13

Microcontroladores

Conversión Analógico-Digital
Un convertidor A/D produce un código digital de salida que es función del voltaje analógico de entrada y
del voltaje de referencia. El proceso de conversión A/D suele tomar un cierto tiempo y es generalmente
más complejo y largo que el proceso de conversión D/A. Existe una infinidad de métodos de conversión
A/D.
Un convertidor A/D o ADC (Analog to Digital Converter) tiene la forma general de la figura siguiente.

Diagrama en bloques de un convertidor digital analógico genérico


El voltaje de referencia Vref=Vref+-Vref- determina el fondo de escala. Además de la entrada analógica y la
salida digital, observamos dos señales importantes:
SC: Señal de inicio de conversión (Start Conversion). Cuando ésta se activa se inicia el proceso de
conversión de la señal de entrada. El ADC por lo tanto empieza a funcionar.
EOC: Señal de fin de conversión (End Of Conversion). Cuando el ADC ha finalizado de transformar el valor
analógico en uno digital, genera un pulso notificando que se ha finalizado el proceso. Justo después de
este pulso el ADC entra en un proceso inactivo.
El tiempo que toma el ADC para efectuar la conversión es el que necesita desde que se le da la orden de
inicio de conversión hasta que el dato está disponible a la salida y se le denomina tiempo de conversión
(tc). Este tiempo es propio de cada tipo de ADC, no existiendo un valor típico.
En la figura a continuación vemos como se relacionan las señales de inicio y final de conversión, el tiempo
de conversión y el dato digital de salida.

Cronograma básico de funcionamiento de un ADC


El pulso de inicio de conversión SC indica al ADC que inicie el proceso, poniéndolo en estado de actividad.
Al concluir la conversión, el ADC emite el pulso EOC indicando que ha concluido su labor y transfiere al
exterior el dato digital recién convertido.

Docente: Juan L. Merlo G.


Microcontroladores

Convertidor Analógico-Digital (ADC) del PIC18F2550


EL ADC del PIC18F2550 tiene la siguiente estructura:

Observamos que tiene 10 líneas de entrada analógica (el PIC18F4550 cuenta además con los pines AN5,
AN6 y AN7) multiplexadas, es decir, hay un solo ADC para todas las líneas. Esto significa que solo una línea
puede convertirse a la vez.
Se trata de un ADC de aproximaciones sucesivas con una resolución de 10 bits, es decir, las señales
analógicas de entrada se convierten en números binarios de 10 bits.
El ADC tiene asociados 5 registros:
ADRESH:ADRESL -> Resultado de la conversión (necesita dos registros de 8 bits)
ADCON0, ADCON1, ADCON2 -> Registros de control
Registro ADCON0:

Docente: Juan L. Merlo G.


Microcontroladores

Registro ADCON1:

Docente: Juan L. Merlo G.


Microcontroladores

Registro ADCON2:

Función de transferencia del ADC

Voltaje de referencia
El voltaje de referencia se puede seleccionar entre las líneas positiva y negativa del voltaje de alimentación
(VDD y VSS) o el voltaje en los pines RA3/AN3/VREF+ y RA2/AN2/VREF-/CVREF.

Docente: Juan L. Merlo G.


Microcontroladores

El ADC después de un reset


Si se produce un reset durante una conversión, todos los registros vuelven a su estado de reset y el ADC
se apaga, abandonando la conversión que estaba en marcha. Después de un reset, los registros
ADRESH:ADRESL contienen datos indeterminados.
El ADC en modo de bajo consumo (sleep)
El ADC puede funcionar mientras el microcontrolador está en modo de bajo consumo, para lo cual el reloj
de conversión debe obtenerse del oscilador RC interno del ADC.
Configuración de los pines analógicos
Todos los pines asociados al ADC pueden configurarse como entrada analógica o como pin de E/S digital.
Un pin configurado como entrada analógica debe tener su correspondiente bit TRIS como entrada; si se
deja como salida, el ADC convertirá el voltaje de salida presente en dicho pin (VOH o VOL). La operación del
ADC es independiente del canal seleccionado y de los bits TRIS.
A tener en cuenta:
- Cuando se lee los registros PORT, los pines configurados como canales de entrada analógicos se leen
como ceros.
- Si se aplica voltajes analógicos a un pin configurado como entrada digital, se puede producir un consumo
excesivo de corriente.
- El bit de configuración PBADEN en el registro de configuración 3H configura automáticamente los pines
del puerto B como analógicos o digitales después de un reset controlando cómo se comportan los bits
PCFG0 en el registro ADCON1 después de un reset.
Tiempo de adquisición
A la entrada del ADC hay un circuito de muestreo y retención (sample & hold) que lee el voltaje de la línea
seleccionada y lo ingresa al convertidor. Como en todo ADC, el circuito de entrada primero debe adquirir
adecuadamente el voltaje a convertir, por lo que después de configurar el ADC, es necesario habilitar el
tiempo necesario de adquisición antes de iniciar la conversión. El PIC18F2550 permite programar un
tiempo de adquisición desde el momento que se inicia el proceso de conversión con el bit GO/#DONE
hasta que se inicia el verdadero proceso de conversión. Cuando se concluye la conversión, el resultado se
almacena en el par de registros ADRESH:ADRESL, el bit GO/#DONE del registro ADCON0 se pone a cero y
el flag de interrupción ADIF se pone a 1. En el diagrama a continuación se puede observar la estructura de
una entrada analógica:

Docente: Juan L. Merlo G.


Microcontroladores

El tiempo de adquisición es necesario para que el capacitor de entrada CHOLD se cargue completamente
hasta el valor del voltaje presente en el canal de entrada analógico. La impedancia de fuente (RS) y la
impedancia del switch interno de muestreo (RSS) afectan el tiempo de adquisición. Se recomienda una
impedancia de fuente máxima de 2,5 kΩ.
Cada vez que se selecciona o cambia un canal analógico, éste debe ser muestreado por al menos el tiempo
mínimo de adquisición antes de iniciar la conversión. Para una impedancia de fuente RS=2,5kΩ a
temperatura ambiente el tiempo mínimo de adquisición aproximado es de 2,45 µs; se aconseja habilitar
un tiempo mayor a dicho mínimo para realizar una correcta adquisición. Cuando se inicia la conversión, el
capacitor CHOLD se desconecta del pin de entrada.
Selección y configuración del tiempo de adquisición
El tiempo de adquisición permite configurar si se utilizará un tiempo de adquisición predeterminado y
seleccionar dicho tiempo entre algunas opciones preestablecidas. En el registro ADCON2:

Los tiempos relativos al funcionamiento del ADC se miden en una unidad denominada TAD. Un TAD es el
tiempo necesario para convertir un bit del resultado. Por ejemplo, una vez iniciada, la conversión
analógico-digital para obtener el resultado de 10 bis tarda un total de 11 TAD.
El tiempo de adquisición se determina con los bits ACQT2:ACQT0 (ADCON2<5:3>) desde 2 TAD hasta 20
TAD.

Después de configurar el ADC, se pone a 1 el bit GO/#DONE para iniciar la conversión y entonces el ADC
continúa muestreando el voltaje de entrada por el tiempo de adquisición seleccionado y luego
automáticamente inicia la conversión.
Si se selecciona un tiempo de 0 TAD, el ADC interrumpirá el muestreo en cuanto se ponga a 1 el bit
GO/#DONE y el proceso de conversión iniciará inmediatamente, por lo que el usuario debe habilitar
manualmente un tiempo de adquisición desde que se selecciona el canal de entrada analógico hasta la
activación del bit GO/#DONE. Esta es la opción por defecto del ADC.
En cualquier caso, al concluir la conversión, el bit GO/#DONE se pone a 0, el flag de interrupción ADIF se
pone a 1 y el ADC empieza a muestrear el canal seleccionado nuevamente.
Selección del reloj de conversión (TAD)
La duración del TAD se puede seleccionar entre siete opciones:
• 2 TOSC
• 4 TOSC
• 8 TOSC
• 16 TOSC
• 32 TOSC
• 64 TOSC
• Oscilador RC interno del ADC

Docente: Juan L. Merlo G.


Microcontroladores

El tiempo TOSC es el período del oscilador del microcontrolador. Por ejemplo, para una fOSC=8 MHz, el
TOSC es de 1/8 MHz = 0,125 µs.
Para que la conversión A/D se realice correctamente, el TAD debe ser el menor posible pero mayor que el
TAD mínimo del dispositivo que para el PIC18F2550 es de aproximadamente 0,7 µs.

Pasos para realizar la conversión A/D con el PIC18F2550


1. Configurar el convertidor A/D:
- Configurar los pines analógicos y la referencia de voltaje (ADCON1)
- Configurar el tiempo de adquisición del ADC (ADCON2)
- Configurar el reloj de conversión TAD del ADC (ADCON2)
- Configurar la justificación del resultado (ADCON2)
2. Configurar la interrupción por ADC si se necesita:
- Borrar el flag ADIF
- Habilitar la interrupción por ADC (bit ADIE)
- Habilitar las interrupciones por periféricos (bit PEIE)
- Habilitar las interrupciones (bit GIE)
3. Realizar la conversión:
- Encender el convertidor A/D
- Seleccionar el canal analógico a convertir (ADCON0)
- Esperar el tiempo de adquisición adecuado si es que se ha seleccionado la opción manual.
- Iniciar la conversión poniendo a 1 el bit GO/#DONE (ADCON0)
4. Esperar la conclusión de la conversión:
- Esperando a que el bit GO/DONE se ponga a cero o
- Esperando la interrupción por ADC
5. Leer el resultado de la conversión ADRES=ADRESH:ADRESL y borrar el flag ADIF si fuera necesario.
6. Para una conversión subsecuente, volver al paso 1 o 2 según se requiera. Se necesita un tiempo mínimo
de 3 TAD antes de empezar la siguiente adquisición.
Proceso de conversión A/D
Las figuras siguientes muestran lo que ocurre después de poner a 1 el bit GO/#DONE. En la primera figura
se observa que pasa cuando se selecciona un tiempo de adquisición de 0 TAD. La conversión se inicia
después de la siguiente instrucción (luego de poner a 1 el bit GO/#DONE) para permitir que se pueda entrar
en modo de bajo consumo (Sleep) antes de empezar la conversión.

Docente: Juan L. Merlo G.


Microcontroladores

En esta segunda figura se observa lo que ocurre cuando se selecciona un tiempo de adquisición de 4 TAD.

Si el bit GO/#DONE se pone a 0 en medio de una conversión, ésta es abortada y el par de registros
ADRESH:ADRESL no serán alterados respecto del valor que contenían después de la última conversión
correcta. Después de que se completa o se aborta una conversión, se requiere esperar al menos 3 TAD
para iniciar la siguiente adquisición. Después de ese tiempo, la adquisición del canal seleccionado se inicia
automáticamente.
En ambas figuras se observa que hay un ciclo TAD para la descarga del capacitor de muestreo. Esto
garantiza una óptima adquisición para la siguiente conversión.

Convertidor Analógico-Digital (ADC) del PIC12F675


El ADC del PIC12F675 tiene la estructura siguiente:

Al ADC del PIC12F675 también tiene resolución de 10 bits. Tiene 4 entradas analógicas, pero solo una de
ellas se puede leer a la vez, la entrada activa se selecciona mediante un multiplexor interno dedicado a

Docente: Juan L. Merlo G.


Microcontroladores

este propósito que la conecta al circuito sample & hold. Para poder realizar la conversión el ADC necesita
una fuente de tensión de referencia que puede seleccionarse desde dos orígenes distintos, uno puede ser
la alimentación del microcontrolador y el otro puede ser una tensión de referencia externa suministrada
al pin destinado a este propósito (GP1/AN1), y además, se necesita una fuente de pulsos de reloj. El
resultado de la conversión se obtiene en dos registros de 8 bits cada uno: ADRESH y ADRESL.
Configuración del ADC del PIC12F675
La principal dificultad a la hora de configurar el módulo ADC se encuentra en la sincronización del reloj
principal con la velocidad real del convertidor, cuya respuesta es más lenta. Para ello, el microcontrolador
dispone de un divisor de frecuencia entre el reloj principal y la entrada de reloj del ADC.
Para seleccionar la escala del divisor se necesitan 11 TAD para realizar cada conversión. El TAD es un pulso
de reloj de un ancho determinado que establece la velocidad de conversión del ADC. La hoja de datos
indica que como mínimo tiene que ser de 1.6 µs, por lo tanto, en la tabla, para la frecuencia de reloj
seleccionada, se buscará la configuración del divisor que dé como resultado 1.6 µs o en su defecto si no
existe, la inmediata superior.

(1) La fuente de reloj RC del ADC tiene un TAD mínimo típico de 4 µs.
(2) Estos valores superan el tiempo mínimo requerido para el TAD.
(3) Para una conversión rápida se recomienda otra fuente de reloj.
(4) Si la frecuencia de operación del microcontrolador es mayor que 1 MHz, la fuente de reloj RC del
ADC se recomienda solamente cuando la conversión se hace en modo de bajo consumo (SLEEP).
Al tiempo de conversión del canal hay que añadirle el tiempo de lectura de los registros de salida. Cuando
se muestra el valor de un solo registro de 8 bits, el microcontrolador tarda 1 ciclo de instrucción (4 ciclos
de reloj) y, 2 ciclos de instrucción (8 ciclos de reloj) cuando el formato de salida es de 10 bits porque el
resultado de la lectura se encuentra en dos registros de 8 bits. Se tendrá que hacer una espera mínima de
10 µs si se realiza un cambio de configuración en tiempo de ejecución para estar seguro que la lectura es
correcta. El tiempo de espera es necesario para que el módulo complete su nueva configuración y se
estabilice. La impedancia de la fuente de señal aplicada a la entrada no debe superar los 10 kΩ para
garantizar que el acoplamiento es correcto. El módulo tiene un flag de aviso de conclusión de lectura (ADIF)
y permite interrupciones. También puede funcionar en el modo de bajo consumo (SLEEP) del micro
mediante el reloj interno RC. Se puede abortar la conversión en proceso, pero después de esto hay que
esperar 2TAD antes de iniciar una nueva conversión y, mientras tanto, los registros de salida mantienen el
valor de la conversión anterior.
El ADC del PIC12F675 tiene asociados dos registros
ADRESH:ADRESL -> Resultado de la conversión (necesita dos registros de 8 bits)
ANSEL, ADCON0 -> Registros de control
Registro ANSEL:

Docente: Juan L. Merlo G.


Microcontroladores

Con los bits ADCS2:ADCS0 se asigna la velocidad de reloj al ADC.


Mediante los bits ANS3:ANS0 se selecciona los pines que trabajarán como analógicos y con el registro
TRISIO bits se deben configurar como entradas.
Con los bits ADCS2:ADCS0 se selecciona el tiempo de adquisición del ADC que es de 11Tad (1 TAD=1.6 µs
como mínimo para este ADC). Para esto se utiliza la tabla con una frecuencia de 4 MHz; como no existe 1.6
µs exactos, se elige el inmediato superior que es 2 µs (001=8 TOSC) con lo que la conversión durará alrededor
de 11 TAD = 11×2 µs = 22 µs.
Registro ADCON0:

Con el bit ADFM seleccionamos la justificación del resultado: 0 para justificación a la izquierda (opción por
defecto) y 1 para justificación a la derecha.
El bit ADON permite encender o apagar el ADC.
El bit VCFG selecciona el voltaje de referencia Vref+ del ADC. Con 0 es el voltaje de alimentación del
microcontrolador (opción por defecto) y con 1 es el voltaje conectado al pin GP1/AN1.

Docente: Juan L. Merlo G.


Microcontroladores

Poniendo el bit GO/DONE a 1 se inicia la conversión, volviendo automáticamente a 0 cuando ésta concluye.
Los bits CHS1:CHS0 permiten seleccionar el canal a convertir. Esto se hace antes de iniciar la conversión.
Es muy diferente a seleccionar qué canal es analógico porque pueden haberse configurado dos canales
analógicos, pero solo se puede convertir uno a la vez. Estos bits seleccionan qué canal debe convertirse en
un determinado momento.
Tiempo de adquisición
Para que el ADC alcance la precisión correcta, el capacitor de muestreo CHOLD debe cargarse
completamente al nivel de voltaje de la entrada a convertir. El tiempo de carga de CHOLD es el denominado
tiempo de adquisición. Este tiempo es afectado directamente por la impedancia de la fuente de señal (RS)
y por la impedancia del switch de muestreo (RSS). La impedancia RSS varía con el voltaje de alimentación
VDD y el máximo valor recomendado para RS es 10 kΩ. Si la impedancia disminuye, el tiempo de adquisición
se acorta.

Después de seleccionar el canal de entrada a convertir (bits CHS1:CHS0), se debe dejar pasar el tiempo de
adquisición antes de iniciar la conversión. Para calcular el tiempo de adquisición se puede usar la ecuación
siguiente:

En el ejemplo se calcula el tiempo de adquisición para una temperatura de 25°C y condiciones estándar,
lo que arroja un resultado de alrededor de 20 µs, que sería el tiempo mínimo de adquisición que habría
que dejar pasar después de seleccionar un canal y antes de iniciar una conversión.
Pasos para realizar la conversión A/D con el PIC12F675
1. Configurar el módulo ADC:
- Configurar qué pines serán analógicos (ANSEL).
- Configurar el reloj de conversión TAD (ANSEL).
- Configurar el voltaje de referencia (ADCON0).
- Seleccionar la justificación del resultado: izquierda o derecha (ADCON0).

Docente: Juan L. Merlo G.


Microcontroladores

2. Configurar la interrupción por ADC (opcional):


- Borrar el flag ADIF.
- Poner a 1 el habilitador ADIE.
- Habilitar las interrupciones por periféricos poniendo a 1 el bit PEIE.
- Habilitar las interrupciones poniendo a 1 el bit GIE.
3. Realizar la conversión:
- Seleccionar el canal analógico a convertir (ADCON0).
- Encender el módulo ADC (ADCON0).
- Iniciar la conversión poniendo a 1 el bit GO/#DONE (ADCON0).
- Esperar el tiempo de adquisición adecuado si es que se ha seleccionado la opción manual.
4. Esperar que concluya la conversión ya sea:
- Sondeando que el bit GO/#DONE se ponga a 0.
- Esperando a que se produzca la interrupción por ADC.
5. Leer el resultado de los registros ADRESH:ADRESL y borrar el flag ADIF si fuera necesario.
7. Para una conversión subsecuente, volver al paso 1 o 2 según se requiera.

ADC con mikroC


mikroC ofrece la librería ADC que contiene las siguientes funciones:
ADC_Init(): Inicializa el ADC para funcionar con el reloj RC.
ADC_Init_Advanced: Inicializa el ADC para funcionar con un voltaje de referencia definido por el usuario.
Incluye las siguientes opciones:
_ADC_INTERNAL_REF: Ambas referencias a los valores internos VDD y VSS
_ADC__EXTERNAL_REF: Ambas referencias de voltaje conectadas a los pines Vref+ y Vref-.
_ADC__EXTERNAL_VREFL: Voltaje de referencia bajo conectado al pin Vref-.
_ADC__EXTERNAL_VREFH: Voltaje de referencia alto conectado al pin Vref+.
_ADC__INTERNAL_VREFL: Voltaje de referencia bajo conectado internamente a VSS.
_ADC__INTERNAL_VREFH: Voltaje de referencia alto conectado internamente a VDD.
Aplicables a otros microcontroladores con capacidad de generar voltajes de referencia internos:
_ADC_INTERNAL_FVRH1: Voltaje de referencia alto fijado a 1,024V.
_ADC_INTERNAL_FVRH2: Voltaje de referencia alto fijado a 2,048V
_ADC_INTERNAL_FVRH4: Voltaje de referencia alto fijado a 4,096V
_ADC__INTERNAL_FVR: Voltajes de referencia conectados internamente a 4,096V y 2,048V
respectivamente.
_ADC_INTERNAL_FVRL2: Voltaje de referencia bajo conectado internamente a 2,048V.
_ADC_INTERNAL_FVRH3: Voltaje de referencia alto conectado internamente a 3,072V.
Ejemplo:
ADC_Init_Advanced(_ADC_EXTERNAL_VREFL | _ADC_INTERNAL_FVRH4);
ADC_Get_Sample(): Lee y devuelve el valor analógico del canal especificado. Lleva como argumento el
canal a leer en formato unsigned char.
Ejemplo:
DatoADC=ADC_Get_Sample(3); // Leer el valor analógico del canal 3 y guardar el resultado.

Docente: Juan L. Merlo G.


Microcontroladores

ADC_Read(): Inicializa el módulo ADC para funcionar con el reloj RC y luego lee y devuelve el valor
analógico del canal especificado. Lleva como argumento el canal a leer en formato unsigned char.
Ejemplo:
DatoADC=ADC_Read(0); // Configura el ADC y lee el valor analógico del canal 0.

Docente: Juan L. Merlo G.

También podría gustarte