PicManía by RedRaven |
Búsqueda personalizada
|
PROYECTO : Medidor ADC con Transmisión RS232 Infrarroja |
||
por Santiago Villafuerte (Septiembre 2008) |
|
Objetivo Construir un circuito que mediante el uso de un microcontrolador PIC16 obtenga la medición de un voltaje y lo transmita vía infrarrojo a una interfaz RS232 de una computadora. Operación del PIC El PIC que se empleó es el PIC16F877A ya que cuenta con los periféricos que se necesitaban para la aplicación, siendo estos el temporizador de 8 bits, el generador de modulación de ancho de pulso (PWM), el convertidor analógico-digital de 10bits y el puerto serial RS232. El oscilador del PIC es un cristal de 4MHz y su fuente de alimentación puede ser de 4V a 5.5V, siendo en el caso de la aplicación un paquete de baterías de 4.5V. Configuración de las entradas y salidas del PIC El PIC solo controla 5 de sus 33 terminales de entrada-salida. Las terminales empleadas son las siguientes:
La configuración de las demás terminales se dejó como entrada. Configuración de la modulación por ancho de pulso (PWM) El PWM se necesita en la aplicación para generar una señal de 38kHz como portadora de la transmisión de información por puerto serial. La señal debe ser de 38kHz debido a que el receptor infrarrojo TSOP1738 empleado solo demodula señales con tal frecuencia, entregándolas en niveles TTL. Esto se explicará más a detalle en la sección del circuito. Para la configuración del PWM se utilizaron las siguientes fórmulas, las cuales se detallan en la hoja de características del pic. La frecuencia de trabajo requerida es de 38kHz y el periodo de trabajo requerido es del 50%.
Donde: El tiempo de trabajo del PWM que genera el PIC es de 10 bits, pero con la configuración que se propuso y el cálculo de la resolución se tiene que el máximo a utilizar es de combinaciones, lo suficiente para expresar 16us en términos binarios (25d = 0x19 = 011001b). Con los cálculos generados se tienen y un . Configuración del Timer 0 El timer 0 se emplea en la aplicación para generar retardos de 960ms. Se configuró el timer 0 para funcionar con una pre-escala de 1:256 y un desbordamiento de su registro de 8 bits cada 64ms, según se puede ver en la fórmula siguiente.
Para lograr un tiempo total de 960ms solo se cuentan los desbordamientos del timer 0 por 15 veces. Configuración del ADC de 10 bits Se emplea el ADC del pic para medir el voltaje presente en la terminal A0 y posteriormente reportarlo vía infrarrojo. La configuración del ADC empleada es la siguiente:
Configuración del puerto serial RS232 Se empleó el módulo USART del pic con las siguientes características:
El cálculo de la velocidad de conexión se realiza con la siguiente fórmula cuando la velocidad es baja (BRGH=0):
Los bits por segundo resultantes reales se obtienen de la siguiente forma: El error entre la velocidad ideal y la real es de 0.1602%. Circuito ADC y emisor El circuito cuenta con un sensor de temperatura LM35 que entrega 10mV/°C, o bien, 100°C/V. Se conecta a un amplificador operacional LM324 configurado como amplificador no inversor con una ganancia de 4. El LM324 puede funcionar sin fuentes bipolares. Posteriormente se tiene un capacitor de 1uF que reduce el ruido a la entrada A0 del ADC. El voltaje de referencia positivo del ADC en RA3 se obtiene mediante un diodo zener de 3.3V, y el voltaje de referencia negativo solo se conecta a tierra. Se colocan unos capacitores de 1uF muy cerca de las terminales Vdd y Vss del pic para filtrar posible ruido inducido por la fuente de alimentación. El ánodo del diodo emisor de luz infrarroja se conecta a una resistencia de 330W para limitar su corriente. Su cátodo se conecta a la salida de la transmisión RS232 (TX RC6). Una conexión de este tipo genera lo siguiente:
Cuando TX está en bajo, el led estará emitiendo luz infrarroja a 38kHz con la señal PWM de CCP1, es decir, tiene una lógica inversa. Esto resulta bastante útil porque el circuito receptor cuenta con un foto módulo TSOP1738 que funciona de la siguiente manera:
Cuya operación también resulta ser de lógica inversa, y cuando recibe la información generada con el led infrarrojo la revierte quedando los voltajes en su lógica original. Se eligió una velocidad de conexión serial de 2400bps ya que el fabricante del TSOP1738 lo maneja como la máxima velocidad posible en su hoja de características. Circuito Receptor y RS232
El circuito empleado para la recepción emplea el módulo infrarrojo TSOP1738 y un MAX232N que adapta los voltajes TTL recibidos por el TSOP1738 a voltajes de ±8.5V, que son los necesarios para realizar una conexión con el puerto RS232 de una PC. La comunicación realizada es solo de recepción de parte de la PC ya que no se implementó la transmisión hacia el pic. Programa en ensamblador del PIC16F877A A continuación se muestra el programa completo del pic, compilado con MPLAB 8.0. |
LIST
P=16f877a include "p16f877a.inc"
;Santiago Villafuerte
;Programa que obtiene la medición de lo que esté conectado
;La
recepción se hace en una computadora con puerto serie y ;TERMINALES
;Salida PWM a 38kHz -> RC2 ;CALCULOS PWM
;f=38kHz ;VARIABLES CONTEO EQU 0X20 ORG 0X0000 ;CONFIGURA ENTRADAS Y SALIDAS
;TRISC ;CONFIGURA TIMER 0 PARA SUBRUTINA DE RETARDO
BSF STATUS,RP0 ;BANCO 1 ;CONFIGURA PWM
MOVLW D'25' ;CONFIGURA RS232
BSF STATUS,RP0 ;BANCO 1
CALL
RETARDO ;ENVIA NOMBRE POR TX
; MOVLW D'9' ;9 CARACTERES ;TOMA LA MEDICION DE VOLTAJE EN RA0 Y LA ENVIA POR RS232
CICLO_INF BSF ADCON0,GO ;INICIA MEDICION ;/////////////////////////////////////////////////////////////// ;SUBRUTINA DE TIEMPO DE 960ms
RETARDO MOVLW D'15' ;15 X 64ms = 960ms ;///////////////////////////////////////////////////////////////
;TABLA
CON NOMBRE
END |
||
Programa del Receptor en Visual Basic El programa fue hecho en Visual Basic 6 SP5. La interfaz con el usuario es la siguiente:
El programa recibe 2 bytes en el puerto COM1 ya que el ADC del pic está operando con resolución de 10 bits. El cálculo del valor entero resultará en un valor que va de 0 hasta 1023, siendo 0 el equivalente al voltaje de referencia negativo y 1023 el equivalente al voltaje de referencia positivo. La conversión de los valores ASCII recibidos como cadena se logra con el código siguiente: binario = (Asc(bin_msb) * 256) + (Asc(bin_lsb)) 'calcula de 0 a 1023 Siendo bin_msb el byte más significativo y bin_lsb el byte menos significativo de la conversión ADC. El byte bin_msb solo contiene 2 bits de importancia (bit 1 y bit 0) y el byte bin_lsb contiene 8, siendo en total los 10 bits de la conversión. Los 2 bits más significativos se multiplican por 256 y posteriormente se suma el contenido del byte menos significativo para obtener la medición. La conversión a voltaje a partir de la medición en binario se realiza con la siguiente fórmula:
Por ejemplo, si se recibe 292 como medición, el voltaje de referencia positivo es 3.5V y el negativo es de 0V, la conversión entregará lo siguiente:
Posteriormente solo se hace una conversión entre unidades de ingeniería y su equivalente en V, según el sensor que se esté empleando. El código fuente de la forma usada en Visual Basic se muestra a continuación: |
'Santiago Villafuerte 'Mis variables
Public
vrefpos As Double Private Sub btnCaptura_Click()
cadena
= MSComm1.Input End Sub Private Sub btnDetener_Click()
captura = False End Sub 'Subfunción que se ejecuta al principio de la aplicación Private Sub Form_Load()
'Configura
puerto serial COM1 End Sub 'aquí llega si el com1 tuvo cambios en rx o tx Private Sub MSComm1_OnComm()
If
(MSComm1.InBufferCount >= 2) And (captura = True) Then 'el pic envía 2bytes
cada 960ms
End
Sub |
||
Errores conocidos en el programa y circuito - El voltaje de referencia dado por el diodo zener no es constante ya que depende de la fuente de alimentación y de la corriente que fluye por el diodo Esto implica que la conversión ADC pueda tener un error indeterminado. - No se implementó corrección de errores en la comunicación infrarroja en Visual Basic por lo que el programa puede mostrar desbordamiento de cadena y fallar. - El sensor de temperatura LM35 cuenta con un error de ±0.5°C en su medición. - No se considera tampoco el offset que el LM324 tiene al amplificar el voltaje del LM35. |
Esta página se modificó el 27/12/2008
|