Sunteți pe pagina 1din 21

Microcontroladores

Gustavo Espinoza Villegas


¿cómo funciona un ADC?
la conversión analógico-digital consta de
varios procesos, entre ellos tenemos:

muestreo

cuantización

codificación
LEY DE NYQUIST
El ingeniero sueco Harry Nyquist formuló el siguiente teorema para obtener una grabación digital de
calidad:

“La frecuencia de muestreo mínima requerida para realizar una grabación digital de calidad, debe ser
igual al doble de la frecuencia de audio de la señal analógica que se pretenda digitalizar y grabar”.

Este teorema recibe también el nombre de “Condición de Nyquist”.

Es decir, que la tasa de muestreo se debe realizar, al menos, al doble de la frecuencia de los sonidos más
agudos que puede captar el oído humano que son 20 mil hertz por segundo (20 kHz). Por ese motivo se
escogió la frecuencia de 44,1 kHz como tasa de muestreo para obtener “calidad ”, pues al ser un poco más
del doble de 20 kHz, incluye las frecuencias más altas que el sentido del oído puede captar.
PASOS PARA LA CONVERSIÓN
para convertir una señal analogica en digital el primer paso consiste en
realizar un muestreo (sampling) de esta, o lo que es igual, tomar ■ 24 000 muestras por segundo (24
diferentes muestras de tensiones o voltajes en diferentes puntos de la kHz)
onda senoidal. La frecuencia a la que se realiza el muestreo se denomina ■ 30 000 muestras por segundo (30
razón, tasa o tambien frecuencia de muestreo y se mide en kilohertz kHz)
(kHz). En el caso de una grabación digital de audio, a mayor cantidad de ■ 44 100 muestras por segundo
muestras tomadas, mayor calidad y fidelidad tendrá señal digital (44,1 kHz) (Calidad de CD)
resultante. ■ 48 000 muestras por segundo (48
kHz)
Durante el proceso de muestreo se asignan valores numéricos
equivalentes a la tensión o voltaje existente en diferentes puntos de la
sinusoide con la finalidad de realizar a continuación el proceso de
cuantización.

La tasas o frecuencias de muestreo más utilizadas por audio son las


siguientes:
TIPOS DE ADC: RAMPA DIGITAL
La conversión de analógico a digital implica
de forma inherente una acción de
comparador, donde en algún momento se
compara el valor de la tensión analógica
con un estándar. Una forma común de
hacerlo es aplicar el voltaje analógico a un
terminal de entrada del comparador y
disparar un contador binario que accione
un DAC. La salida del DAC se aplica a la otra
entrada del comparador. Puesto que la
salida del DAC está aumentando con el
contador, en algún momento se activará el
comparador cuando su tensión exceda la
entrada analógica. La transición del
comparador detiene el contador binario,
que en ese punto tiene el valor digital
correspondiente a la tensión analógica.
TIPOS DE ADC: aproximación suseciva
Ilustración de un SAC (comparador aproximación sucesiva) de 4 bits con
tamaños de pasos de 1 voltio (de Tocci, Digital Systems).El ADC de
aproximación sucesiva es mucho más rápido que la rampa digital, porque usa
la lógica digital para converger con el valor más próximo al voltaje de
entrada.En el proceso se usan un comparador y un DAC.
TIPOS DE ADC: FLASH
Se ilustra un ADC flash de 3 bits con una resolución de 1
voltio (de Tocci). La red de resistencias y comparadores
proporcionan una entrada al circuito lógico combinativo,
de manera que el tiempo de conversión es sólo el retardo
de propagación a través de la red -no está limitado por la
velocidad del pulso o alguna secuencia de convergencia-.
Es el tipo más rápido de ADC disponible, pero requiere un
comparador para cada valor de salida (63 para 6-bits, 255
para 8-bits, etc). Tales ADCs hasta 8-bits, están
disponibles en formato de IC. Se preveen ADC flash de 10
bits (1023 comparadores). La lógica codificadora ejecuta
una tabla de verdad para convertir la escalera de
entradas, en una salida numérica binaria.
ADC EN LOS MICROCONTROLADORES

En la mayoría de proyectos que realizamos con Arduino necesitamos que la placa conozca magnitudes del mundo
real, como pueden ser de luz o temperatura, para que esta active una serie de actuadores, como pueden ser
motores o leds. Para ello las placas de Arduino cuentan con entradas analógicas con las que, a través, de
sensores, medimos dichas magnitudes. Las dudas vienen, cuando nos planteamos que un ordenador o
microcontrolador en este caso, es un sistema digital y las magnitudes que deseamos medir son analógicas, por
ello necesitamos un sistema que pase de analógico a digital, el cual llamaremos ADC (Analog digital coverter).
Como es lógico Arduino cuenta con un ADC. Este conversor ADC va conectado a un multiplexor, para que así,
con uno solo de estos podamos tener varías entradas, como es en el caso de las placas Arduino que normalmente
cuenta con 6 de estas. La Arduino MEGA en cambio cuenta con 16 entradas analógicas.
EJEMPLO teórico void setup(){

Serial.begin(9600);
muestreo();

void loop(){
}

A continuación, haremos un programa void muestreo(){


con Arduino para calcular el tiempo de unsigned long time1=0;
muestreo que tiene nuestra placa. Para unsigned long time=0;
Serial.println("*************************");
este ejemplo solo requerimos de una placa Serial.println("ENSAYO TIEMPO DE MUESTRO:");
Arduino y el código será el siguiente: Serial.println("*************************");
for(byte i =0; i<4; i++){
time1=micros();
int A=analogRead(A0);
time=micros()-time1;
Serial.print(" Muestra: ");
Serial.print(i+1);
Serial.print(" Tiempo: ");
Serial.println(time);
}

}
Ejemplo teórico
Activando el serial monitor podremos ver
los resultados de nuestro experimento:
Excepto en la primera medida, las demás
tiene un tiempo de muestreo de 112
microsegundos, lo que equivale a una
frecuencia de muestreo de 8.928 kHz,
podemos tomar por válido ya que estoy
utilizando una placa Arduino UNO.
Además debemos tener en cuenta una
pequeña pérdida de tiempo que tenemos
al guardar y calcular las variables time1 y
time.
Ejemplo teórico
Otro factor a tener en cuenta del ADC es su resolución, para ello hablamos de los bits de resolución
que tiene, los bits no permiten hacer combinaciones, cuantos más tengamos mayor número de
combinaciones podremos hacer, cada una de estas combinaciones muestra una medida del sistema
analógico, la cantidad de medidas que tenemos serán 2 elevado al número de bits de resolución. Puesto
que Arduino UNO, en mi caso, tiene un ADC de 10 bits de resolución tendrá 1024 combinaciones. La
placa Arduino DUE por ejemplo cuenta con un ADC de 12 bits (4096 combinaciones). Pero hay un
segundo factor que interviene en la resolución, es el rango de medida, El rango de Voltaje de las placas
Arduino por defecto es de 5v o 3.3v. Con esto sabemos que en voltios tenemos una resolución igual a;
En la práctica
A continuación haremos un ejemplo con Arduino de la resolución midiendo el voltaje en un potenciómetro,
iremos girando las manecilla del potenciómetro y veremos que conversión da el ADC y a que corresponde en
voltaje. Comprobaremos además que el paso calculado antes de 4.88mV es correcto.
Una vez compilado el código, abrimos el serial monitor y comenzamos a girar el potenciómetro
para ver qué sucede, si ha sido montado correctamente, nos salió lo siguiente:
A partir de estos datos reales podemos conocer el resolución tenemos cuando trabajamos en el rango de voltaje de
0 a 5v, para ello cogemos dos muestras cuales quieras, por ejemplo la 21 y la 22 y hacemos lo siguiente:

Entonces pudimos comprobar que esto es cierto, ya que la resolución medida ha cuadrado con la teórica.
La conversión de una señal entrante análoga resulta en un
correspondiente numero digital de n bits. El modulo ADC tiene una
referencia de voltaje alta y baja “VREF” que es seleccionable a
través del software del microcontrolador por una combinación de
VDD, VSS, VREF+ o VREF-.

𝐶𝑉𝑅𝐶𝑂𝑁<3:0>
𝑉𝑅𝐸𝐹 = ∗ 𝑉𝐷𝐷
24

𝑏 ′ 𝑌𝑌𝑌𝑌 ′
𝑉𝑅𝐸𝐹 = ∗ 𝑉𝐷𝐷
24

b'YYYY’ puede ir de b’0000’ hasta b’1111’, siendo estos 0 y 15


respectivamente
El ADC, Analog2Digital Converter, tiene una característica única y
es de ser capaz de operar aun cuando el dispositivo se encuentra
en estado SLEEP o de reposo. Para operar en dicho estado, el reloj
del ADC debe provenir del mismo oscilador interno RC del ADC.

Cuenta con 5 registros propios, los cuales se nombrarán:

Ω ADRESH (VREF’s needed)


Ω ADRESL
Ω ADCON0
Ω ADCON1
Ω ANSEL
El registro ADCON0, como se muestra en la Figura I, se encarga
de controlar la operación del Modulo ADC. Así como también el
Registro ANSEL, mostrado en la Figura II, y el ADCON1, figura
en III, configuran el modo de operación de los pines presentes en
puertos A, B, etc. Los estados que estos pines puedan tomar son
de Pin Análogo o Pin Digital, pero existe además un tercer
estado y es VREF.

ANSEL REGISTER
𝑈−0 𝑅/𝑊 − 1 𝑅/𝑊 − 1 𝑅/𝑊 − 1 𝑅/𝑊 − 1 𝑅/𝑊 − 1 𝑅/𝑊 − 1 𝑅/𝑊 − 1

--- ANS6 ANS5 ANS4 ANS3 ANS2 ANS1 ANS0


𝑏𝑖𝑡 7 𝑏𝑖𝑡 0
ANS<6:0>: Requiere que TRIS(X) de los pines seleccionados
este como b’11111111’ o modo de entrada.

Donde,
“X”: Puede ser A, B, C, etc.
“R”: Bit de solo lectura (Readable)
“W”: Bit manipulable o de escritura (Writable)
“1”: Bit puesto como set
“0”: Bit establecido como cleared o limpiado
“U”: Unused por defecto se pone en 0 y como se ve, no
posee las terminologías “R” o “W”.
ADCON0 REGISTER
𝑅/𝑊 − 0 𝑅/𝑊 − 0 𝑅/𝑊 − 0 𝑅/𝑊 − 0 𝑅/𝑊 − 0 𝑅/𝑊 − 0 𝑈−0 𝑅/𝑊 − 0
GO/DONE(
ADCS1 ADCS0 CHS2 CHS1 CHS0 --- ADON
𝑏𝑖𝑡 7 N) 𝑏𝑖𝑡 0

Ω ANS<1:0>: Bits de selección del Reloj.


b’11’ es el modo de operación en SLEEP para ambos ADCS2
1/0.
Ω CHS<2:0>: Selección del Canal.
Ω GO/DONE(N): Bit de estado.
Dependiente del ADON.
Ω U: Unused.
Ω ADON: Ejecuta o no el ADC.
(1) Working
(0) Turned off
ADCON1 REGISTER
𝑈−0 𝑅/𝑊 − 1 𝑅/𝑊 − 1 𝑅/𝑊 − 1 𝑈−0 𝑈−0 𝑈−0 𝑈−0
ADFM ADCS2 VCFG1 VCFG0 --- --- --- ---
𝑏𝑖𝑡 7 𝑏𝑖𝑡 0

Ω ADFM: Bit encargado de seleccionar el formato del resultado


de la conversión
(1) Alineado hacia la derecha. MSB del ADRESH
leídos como (0).
(0) Orientado hacia la izquierda. LSB del ADRESL
leídos como (0).
Ω ADCS2: Reloj del ADC dividido en 2
(0) Deshabilitado
Ω VCFG<1:0>:
Ω U: Unused
Gracias

Harry Nyquist

S-ar putea să vă placă și