0% encontró este documento útil (0 votos)
3 vistas8 páginas

Conversión AD y Sensores en Microcontroladores

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)
3 vistas8 páginas

Conversión AD y Sensores en Microcontroladores

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

Conversión AD y DA

La conversión análoga digital y digital análoga es un proceso por el cual se puede tomar o
entregar muestras de una señal continua de voltaje. El uso de estás conversiones es de gran
utilidad para realizar procesamiento digital de señales. La conversión análogo digital, o ADC,
se puede realizar con algunos microcontroladores que tienen implícito un convertidor de este
estilo. El proceso de conversión digital análogo es posible con elementos externos de fácil
implementación o, incluso, es posible realizar esta conversión con los módulos PWM
incorporados en algunos microcontroladores.

Conversión AD, o ADC


Este proceso se realiza con el convertidor interno de los microcontroladores. Este módulo está
incorporado en la mayoría de los microcontroladores de gama media y alta. La conversión
implementada por los PICMicro cuenta con una resolución de 10 bits, lo que permite obtener
un número con un rango de 0 a 1023, que es proporcional a los valores de referencia, que por
defecto son 0 voltios y 5 voltios. Esto significa que si una entrada análoga, tiene una tensión de
0 voltios su resultado es 0, y si la tensión es de 5 voltios el resultado de la conversión es 1023
de igual manera si la tensión es de 2.5 voltios, el resultado será 512. Dependiendo de la
complejidad del microcontrolador un PIC puede tener hasta 13 entradas de señal análoga. Sin
embargo, cabe denotar que el módulo de conversión interna de los microcontroladores es sólo
uno, y los múltiples canales se pueden leer, pero no al mismo tiempo. Para realizar este tipo de
conversiones el compilador MikroC PRO cuenta con una librería definida: ADC para hacer la
conversión. Está librería cuenta con una sola función denominada unsigned int
ADC_Read(unsigned short channel). Esta función retorna el resultado de la conversión del
canal especificado por el parámetro channel.

Prueba de solo el convertidor a 10 bits:

Programa 1

void main( void )

//Declaración de variables.

unsigned int Dato;

OSCCON=0XFF; //oscilador 8 Mhz

ADCON0=0X01; // selección del canal analógico AN0, habilitar

// el módulo A/D

ADCON1=0X1E; //configuración de entradas digitales AN1 a la AN11

Recopilo: M. en E. Víctor Morales Castillo


// AN0 entrada analógica

ADCON2=0X3C; // justificación a la IZQUIERDA, tiempo de adquisición

// 20 TAD (conversión), reloj para el periodo de conversión Fosc/4

CMCON=7;

//Inicialización de puertos.

TRISB = 0;

TRISC = 0;

PORTB = 0;

PORTC = 0;

while(1) //Bucle infinito.

Dato = ADC_Read(0); //Se hace conversión sobre el canal 0.

//Se muestran los 8 bits de menor peso por el puerto B.

PORTB = Dato&0xFF;

//Se muestran los 2 bits de mayor peso por el puerto C.

PORTC = (Dato>>8)&0x03;

} }

Recopilo: M. en E. Víctor Morales Castillo


Sensores

La implementación de sensores en sistemas micro controlados es de gran utilidad en


muchas de sus aplicaciones, estos permiten obtener lecturas de variables como temperatura,
aceleración, presión, humedad, velocidad, luminosidad, contraste, entre otras. Su aplicación
es importante en sistemas de control, robótica, e instrumentación.

Sensor de temperatura LM35

El sensor LM35, es un dispositivo activo de 3 terminales que permite adquirir la


temperatura ambiente en rangos de -55 a 150 grados Celsius o centígrados. Este dispositivo
es de fácil implementación dado que solo cuenta con dos terminales de polarización, y una
salida de voltaje directamente proporcional a la temperatura. Este sensor puede ser
polarizado de 4 a 30 voltios y tiene una salida de 10m voltios por cada grado Celsius. La
apariencia física del sensor y su distribución de pines, así como la vista en ISIS, son las que
se pueden ver en las siguientes figuras:

Recopilo: M. en E. Víctor Morales Castillo


Para realizar la lectura del voltaje de salida del sensor se implementa en el
microcontrolador el módulo ADC. La máxima salida del sensor es 1,5 voltios, cuando la
temperatura es 150 grados Celsius. Por esto es importante cambiar el valor de referencia
positiva del convertidor análogo digital, con el fin de mejorar la resolución de la medida de
voltaje. Para el ejemplo de este tema se configurará el voltaje de referencia positivo del
ADC, en 2,5 voltios. Cambiando la referencia positiva a 2,5 voltios el convertidor entregará
un resultado binario de 1023 cuando el voltaje a convertir es de 2,5 voltios. Para el caso de
este sensor, se verá definido por las siguientes relaciones:

1023 𝑅𝑎𝑑𝑐
= 𝐸𝑐𝑢𝑎𝑐𝑖ó𝑛 1
2.5𝑉 𝑉𝑎𝑑𝑐

Donde Radc es el resultado binario de la conversión AD. De esta ecuación se puede deducir
que el voltaje Vadc, leído por el convertidor AD, es:
(2.5𝑉 )(𝑅𝑎𝑑𝑐)
𝑉𝑎𝑑𝑐 = 𝐸𝑐𝑢𝑎𝑐𝑖ó𝑛 2
1023
Trabajando con la relación del sensor que es: 10m voltios por cada grado Celsius, se puede
plantear la siguiente ecuación:

10𝑚𝑉 𝑉𝑎𝑑𝑐
= 𝐸𝑐𝑢𝑎𝑐𝑖ó𝑛 3
1°𝐶 𝑛°𝐶

Donde n es la temperatura en grados Celsius, que está registrando el sensor, de esta


ecuación se puede deducir que la temperatura n es:

(1°𝐶 )(𝑉𝑎𝑑𝑐)
𝑛°𝐶 = 𝐸𝑐𝑢𝑎𝑐𝑖ó𝑛 4
10𝑚𝑉

Remplazando la ecuación (2), en (4), se obtiene la siguiente relación:

(2.5𝑉 )(𝑅𝑎𝑑𝑐)
𝑛°𝐶 = = 0.244 𝑅𝑎𝑑𝑐 𝐸𝑐𝑢𝑎𝑐𝑖ó𝑛 5
1023

Está relación debe ser implementada en la conversión AD, en el programa del PIC.

Recopilo: M. en E. Víctor Morales Castillo


Para contextualizar el uso de este sensor se puede observar y analizar el siguiente código
fuente para un PIC 18F4550:

Nota: después de revisar el funcionamiento, hace una división por la mitad de la


temperatura, esto debido que luego no reconoce la referencia de voltaje a 2.5 v, si llegara a
pasar esta condición, quiere decir que lo está trabajando a 5v de referencia, por lo cual es
necesario multiplicar por 2 el resultado.

𝑛°𝐶 = 0.488 ∗ 𝑅𝑎𝑑𝑐

Para LM35C Su rango va de -40 grados a 110 grados centígrados.

Para LM35D Su rango va de 0 grados a 100 grados.

Prueba del sensor LM35 mediante la medición de temperatura:

Programa 2

// LCD module connections

sbit LCD_RS at LATE0_bit; // for writing to output pin always use latch (PIC18 family)

sbit LCD_EN at LATE1_bit; // for writing to output pin always use latch (PIC18 family)

sbit LCD_D4 at LATC0_bit; // for writing to output pin always use latch (PIC18 family)

sbit LCD_D5 at LATC1_bit; // for writing to output pin always use latch (PIC18 family)

sbit LCD_D6 at LATC6_bit; // for writing to output pin always use latch (PIC18 family)

sbit LCD_D7 at LATC7_bit; // for writing to output pin always use latch (PIC18 family)

sbit LCD_RS_Direction at TRISE0_bit;

sbit LCD_EN_Direction at TRISE1_bit;

Recopilo: M. en E. Víctor Morales Castillo


sbit LCD_D4_Direction at TRISC0_bit;

sbit LCD_D5_Direction at TRISC1_bit;

sbit LCD_D6_Direction at TRISC6_bit;

sbit LCD_D7_Direction at TRISC7_bit;

// End LCD module connections

void main( void )

//Declaración de variables.

unsigned int Radc, TemI;

float Tem;

char Text[16];

OSCCON=0XFF; //oscilador 8 Mhz

ADCON0=0X01; // selección del canal analógico AN0, habilitar

// el módulo A/D

ADCON1=0X1E; //configuración de entradas digitales AN1 a la AN11

// AN0 entrada analógica

ADCON2=0X3C; // justificación a la IZQUIERDA, tiempo de adquisición

// 20 TAD (conversión), reloj para el periodo de conversión Fosc/4

CMCON=7;

//Inicio del LCD.

Lcd_Init();

//Borrado del cursor.

Lcd_Cmd(_LCD_CURSOR_OFF);

//Impresión de texto.

Lcd_Out( 1, 1, "Temperatura:");

Recopilo: M. en E. Víctor Morales Castillo


while(1) //Bucle infinito.

//Lectura del canal 0 del ADC.

Radc = ADC_Read(0);

//Uso de la ecuación (13.5).

Tem = 0.244*Radc;

//Se convierte el resultado a un número entero.

TemI = Tem;

//Se convierte el número entero a una cadena de caracteres.

IntToStr( TemI, Text );

//Se imprime el resultado.

Lcd_Out( 2, 1, Text);

//Retardo de 100m segundos.

delay_ms(100);

} }

Recopilo: M. en E. Víctor Morales Castillo


Recopilo: M. en E. Víctor Morales Castillo

También podría gustarte