|
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:
-
Salida
PWM a 38kHz -> RC2
-
Salida
TX RS232 -> RC6
-
Entrada
ADC -> RA0
-
Entrada
de referencias de voltaje ->RA3 (Vref+) y RA2 (Vref-)
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:
-
Frecuencia de reloj del convertidor = Fosc / 32
-
Canal
de medición: RA0
-
Terminales de referencia: RA3 como Vref+ y RA2 como Vref-
-
Justificación de la conversión: Derecha (útil para 10 bits)
Configuración del puerto serial RS232
Se empleó
el módulo USART del pic con las siguientes características:
-
Velocidad de conexión: 2400bps
-
Modo
asíncrono (full-dúplex)
-
Tamaño
de palabra 8 bits
-
Sin
Paridad
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:
-
Si CCP1
está en alto y TX en alto, el led no emite luz.
-
Si CCP1
está en bajo y TX en alto, el led no emite luz.
-
Si CCP1
está en alto y TX en bajo, el led emite luz.
-
Si CCP1
está en bajo y TX en alto, el led no emite luz.
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:
-
Si TSOP
recibe una señal infrarroja de 38kHz, entrega una salida de 0V.
-
Si TSOP
no recibe una señal infrarroja de 38kHz, entrega una salida de 5V.
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. |