Este documento describe el diseño e implementación de un sistema de adquisición de datos usando un microcontrolador PIC16F877A. El hardware incluye el microcontrolador, un cristal de 20MHz, capacitores, un MAX232 y un convertidor serial-USB. El software incluye programación del PIC para adquirir datos analógicos y enviarlos vía puerto serial, y programas en Matlab y Visual Basic para recibir los datos y graficar las formas de onda. El proyecto logró implementar con éxito el hardware y software propuestos para adquiri
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Adquisición de datos con PIC16F877A y Matlab
1. .
DISCRIMINADOR DE SEÑALES
UNIVERSIDAD FRANCISCO DE PAULA SANTANDER
INGENIERIA ELECTROMECANICA
CONTROL DISCRETO
Samuel Guiza Jerez
e-mail: samuelguiza@hotmail.com
Gustavo Guerrero Pérez
e-mail:lingust19@hotmail.com
RESUMEN: En el proceso de adquisición de
datos se utiliza un microcontrolador donde utilizamos
internamente el conversor análogo-digital. La propuesta
inicial era emplear un conversor ADC0804 para
adquirirlos por el puerto paralelo, pero en este caso se
usa el puerto serial-USB por ser más práctico el diseño
y disponibilidad de hardware para el desarrollo del
proyecto. Durante el desarrollo del proyecto se
emplearon varios software para adquirir los datos y
representarlos gráficamente.
PALABRAS CLAVE: Conversor A/D, matlab,
microcontrolador, USART.
1 INTRODUCCIÓN
La función principal del Sistema de Adquisición de Datos
es transmitir la información obtenida a través de sus
canales de entrada, de diferentes señales analógicas y/o
discretas las cuales son previamente captadas mediante
el uso de diferentes sensores. El núcleo del circuito está
basado en la utilización de un microcontrolador
“PIC16F877A” que, el cual, está dotado de varias
funciones que lo hacen muy versátil. Mediante una
adecuada codificación se pueden convertir señales
analógicas a señales discretas, darles tratamiento
mediante los puertos de entrada / salida y conectarlo
con una computadora a través de su interface RS 232.
Las magnitudes producidas por el generador de señales
ingresan al microcontrolador con una frecuencia que se
puede modificar en tiempo de ejecución. “MatLab” se
encarga de la recolección de los datos enviados por el
circuito electrónico, los cuales son almacenados en una
matriz y luego graficados. Además se graban en un
archivo histórico para su posterior lectura.
Paralelamente se ha desarrollado una aplicación en
“Visual Basic” que cumple la misma función del
programa realizado en “Matlab” con fines netamente
comparativos.
En este informe incluye la implementación del
hardware, la programación del microcontrolador, y la
manera como se adquirieron los datos.
2 OBJETIVOS
- Diseñar e implementar un hardware adecuado
para adquirir los datos.
- Crear un software para la adquisición de datos
por medio de matlab y/o visual basic.
- Graficar la onda de entrada en forma y
frecuencia.
3 IMPLEMENTACIÓN DEL HARDWARE
1
2. .
3.1 COMPONENTES
Fig.1 Representación esquemática del proyecto
Se utilizaron los siguientes recursos para la creación del
hardware:
- PIC16F877A.
- CRISTAL 20MHz.
- Capacitores cerámicos 15pF
- Capacitores electrolíticos de 1uF.
- Max 232.
- Convertidor Serial-USB.
- Conector DBG9 serial-hembra.
- Pulsador.
- Resistencia de 10k.
3.2 Programación del pic.
Para la programación del pic16f877a se empleó como
software el programa niple versión 5.2 como su
representación es esquemática mostraremos su
programación mediante una gráfica, cuyo objetivo es
utilizar su conversor análogo-digital mediante el canal
RA0 y guardarlo en un registro variable llamada dato.
Después de hacer la conversión mandar ese valor dato
al puerto serial mediante el protocolo USART.
Fig.2 representación esquemática de la programación
del pic.
Como se observa en la programación del pic, la
información transmitida por el puerto serial (pin C6), es
de modo asíncrono a una velocidad de 115200 baudios
(bps). Esto nos quiere decir que nos da 14400 datos por
segundos aproximadamente para una frecuencia de
muestreo máxima 724Hz, lo cual se nos disminuye entre
400Hz y 330Hz por perdida de datos en el convertidor
serial-USB.
3.3 AISLAMIENTO ELECTRICO
Antes de conectar el pic con el pc, debemos hacer un
aislamiento eléctrico y acoplar las señales lógicas
mediante el MAX232 como lo muestra la siguiente
figura.
2
3. .
Fig. 3. Configuración del MAX232
El funcionamiento del MAX232 consiste en convertir los
niveles lógicos de voltaje TTL hacia el puerto serial RS-
232 (entre +10v”0 lógico” y -10v”1 lógico”)
4 IMPLEMENTACION DEL SOTFWARE.
4.1 MEDIANTE VISUAL BASIC.
Fig.4 entorno visual basic para la adquisición de datos.
El código más importante a la hora de adquirir datos
desde el puerto serial es el siguiente:
SerialPort1.Open()
For xx = xcentro * -1 To
xcentro * 2 Step 0.1
valores(con) =
SerialPort1.ReadByte
TextBox1.Text =
valores(con)
voltaje =
Val(TextBox1.Text) * (5 / 255)
tiempo = tiempo +
6.9444444 * 10 ^ (-5)
tiempos(con1) = tiempo
ListBox1.Items.Add("Dato:
" & TextBox1.Text & " " & "Voltaje: "
& voltaje & " " & "tiempo: " & tiempo
& "s")
puntoX1 = (xx - 0.1) *
(pb.Width / (Val(txtx.Text) * 2)) /
127.75
puntoY1 = valores(con - 1)
* ycentro / 127.75
'sacamos coordenadas 2
puntoX2 = xx * (pb.Width /
(Val(txtx.Text) * 2)) / 127.75
puntoY2 = valores(con) *
ycentro / 127.75
dibujo.DrawLine(lapiz1,
Convert.ToSingle(puntoX1),
Convert.ToSingle(puntoY1),
3
4. .
Convert.ToSingle(puntoX2),
Convert.ToSingle(puntoY2))
con = con + 1
con1 = con1 + 1
censo = 1
Next
SerialPort1.Close()
Mediante este código realizamos la adquisición de
datos, la lógica es abrir el puerto, generar un bucle
mediante un for para generar el vector de datos. El otro
vector que nos representa el tiempo se genera a partir
del concepto de velocidad de puerto como se muestra
en el código anterior, y por último no olvidar cerrar el
puerto
4.2 MEDIANTE MATLAB.
El código empleado en matlab es similar al de visual,
con la excepción de que los datos no se adquieren
mediante un bucle, de lo contrario exageramos en la
memoria RAM del pc al abrir y cerrar el puerto para
hacer la respectiva lectura. Más bien, simplemente le
ordenamos leer el puerto y el automáticamente nos
genera la lectura de un vector máximo de 512 datos. Si
queremos más datos debemos repetir la instrucción de
lectura, tal como lo muestra el siguiente código.
%adquisiciondatos
s =
serial('COM4','BaudRate',115200,'Data
Bits',8);
fopen(s);
out = fread(s);
fclose(s);
%segun los datos recibidos,le damos
este valor a n
%n=input('deme n segun los datos
recibidos: ')
n=512;
voltaje=out*5/255;
cont=0;
cont1=0;
tiempo=0;
%Generando el vector tiempo
for cont = 1: n
cont1=cont1+2.14*6.944444445*10^(-5);
tiempo(cont)=cont1;
end
%graficando
plot(tiempo,voltaje),grid on;
xlabel('tiempo [segundos]')
title('Forma de onda');
Fig.5 resultado del código generado por matlab.
El análisis de datos mediante la transformada de
Fourier es particularmente útil en áreas como
procesamiento de señales e imágenes, filtrado,
convolución, análisis de frecuencia, y la estimación del
espectro de energía. Para nuestro proyecto tomamos el
código base del índice de ayuda de Matlab.
5 CONCLUSIONES
Se logró implementar el hardware propuesto
inicialmente, aunque se tuvo una adversidad al principio
con el empleo de un diodo antes del conversor A/D, con
el fin de protegerlo de voltajes negativos, se observó que
distorsionaba los datos adquiridos, quizás la frecuencia
nominal no era la adecuada, o su empleo no era apto
para esta aplicación viéndolo trabajar de un modo ideal.
Se graficó la forma de onda en función del tiempo, sin
embargo, en matlab se encontró un pequeño retraso que
se ajustó mediante código, realizándose ambos códigos,
en comparación al vector teórico del tiempo deducido del
valor de la velocidad del puerto.
Con respecto a la adquisición de datos
implementada, se puede decir que posee las ventajas de
no necesitar un modelo matemático preciso del sistema
a controlar, tiene alto rechazo al ruido y permite
contemplar situaciones excepcionales del estado del
proceso.
Como desventaja se puede decir el proyecto se
realizó mediante ensayo error, en nuestro caso se
trabajó más tiempo en el desarrollo del código del
software que en el desarrollo del hardware, debido al
conocimiento previo de microcontroladores.
4
5. .
En comparación al uso de software, matlab lleva la
mayor partida debido a su amplia variedad y aplicación
de campo con respecto a visual, aunque las
adquisiciones fueron diferentes en cada uno, se
presentaron similitudes lógicas que ayudaron a
desarrollar e implementar desde visual (que nos pareció
más fácil) hacia matlab.
Por último, el desarrollo de este proyecto nos
ayuda a visualizar claramente cómo podemos
automatizar una planta desde un interfaz gráfico de un
computadora, haciéndonos más competitivos en la
acción laboral.
6 REFERENCIAS
[1] G. Obregón-Pulido, B. Castillo-Toledo and A. Loukianov, “A
globally convergent estimator for n frequencies”, IEEE
Trans. On Aut. Control. Vol. 47. No 5. pp 857-863. Sep
2010.
[2] E. García Obrejo “Compilador C CCS y simulador de
PROTEUS para microcontroladores PIC ”,.Marcombo. pp
125-180. Sep 2010.
5
6. .
En comparación al uso de software, matlab lleva la
mayor partida debido a su amplia variedad y aplicación
de campo con respecto a visual, aunque las
adquisiciones fueron diferentes en cada uno, se
presentaron similitudes lógicas que ayudaron a
desarrollar e implementar desde visual (que nos pareció
más fácil) hacia matlab.
Por último, el desarrollo de este proyecto nos
ayuda a visualizar claramente cómo podemos
automatizar una planta desde un interfaz gráfico de un
computadora, haciéndonos más competitivos en la
acción laboral.
6 REFERENCIAS
[1] G. Obregón-Pulido, B. Castillo-Toledo and A. Loukianov, “A
globally convergent estimator for n frequencies”, IEEE
Trans. On Aut. Control. Vol. 47. No 5. pp 857-863. Sep
2010.
[2] E. García Obrejo “Compilador C CCS y simulador de
PROTEUS para microcontroladores PIC ”,.Marcombo. pp
125-180. Sep 2010.
5