Escolar Documentos
Profissional Documentos
Cultura Documentos
Reporte de Proyecto
DESARROLLADO POR:
JORGE ABRAHAM GARCA RUELAS
06061021
OBJETIVO
Disear una tarjeta de adquisicin de datos de bajo costo y accesible para el mejor
aprendizaje del estudiante de la especialidad de electrnica.
INTRODUCCION
La tarjeta DAQ son tarjetas insertables que permiten la entrada y salida de datos
de computador a otros aparatos donde se conectan sensores y actuadores para
interactuar con el mundo real. Los datos que entran y salen pueden ser seales
digitales o anlogas simplemente conteos de ocurrencias digitales tanto de
entrada como de salida.
Las tarjetas se comportan como si fueran un puerto ms en el computador, y
poseen todo un protocolo y sistema de manejo, por lo que entender cada tarjeta,
como es su funcionamiento, al igual que otro instrumento o cualquier instrumento
requiere de tiempo y cuidado.
Existen tarjetas de alto y de bajo desempeo. Las de alto desempeo son
programables y facilitan el manejo de informacin, pues son en cierta forma
inteligentes y suficientes, y por tanto no comprometen la velocidad y el rendimiento
del computador. Las tarjetas de bajo desempeo requieren de un control directo
del computador, y se deben limitadas por la velocidad de este.
Las tarjetas como cualquier otro perifrico requiere de sus parmetros de
programacin, y hasta protocolos de comunicacin por lo que se requiere de un
software (Driver) que maneje lo bajo de programacin y deje en la superficie la
posibilidad de programar aplicaciones con los beneficios de dichas tarjetas de una
forma sencilla.
En la actualidad existen muchas variables analgicas que podemos leer de
manera directa a travs del sensor adecuado. En otras ocasiones, al no existir un
sensor diseado de manera explcita para determinada variable, se ocupa un
sensor para medir una variable fsica diferente, pero que se relaciona con la que
nos interesa por medio de una relacin matemtica, lo cual nos da la posibilidad
de que para cualquier proceso industrial (ah existe un nmero ilimitado de
variables), exista un sensor involucrado. El sensor lee la variable fsica y nos
entrega una seal elctrica que est dentro de un rango de valores de voltaje,
siendo ste el que tenemos que hacer llegar al ADC del microcontrolador.
Teniendo en cuenta que el ADC mide variaciones de voltaje, el sensor tiene que
adecuarse con respecto del rango mnimo y mximo que puede leer la entrada del
ADC. Para que el ADC pueda realizar una conversin del valor analgico, se le
tiene que agregar un voltaje de referencia, porque ste es el que indica
precisamente cul es el rango de operacin de la entrada del ADC. Todos los ADC
de los microcontroladores PIC aceptan, como mximo, un rango de operacin que
1.5 Mbps
1.5
(Rojo 1)
(Verde 3)
(Blanco 2)
(Negro 4)
TIPO A
Transferencia de Datos
Funcionamiento
El funcionamiento est centrado en el host, todas las transacciones se
originan en l. Es el controlador host el que decide todas las acciones, incluyendo
el nmero asignado a cada dispositivo (esta asignacin es realizada
automticamente por el controlador "host" cada vez que se inicia el sistema o se
aade, o elimina, un nuevo dispositivo en el bus), su ancho de banda,
etc. Cuando se detecta un nuevo dispositivo es el host el encargado de cargar los
drivers oportunos sin necesidad de intervencin por el usuario
reconocer las
Sensor de Temperatura.
El sensor usado para la medicin de la temperatura es el LM35D de National
Semiconductors.
Este sensor cuenta con una precisin calibrada de 1C y un rango que abarca
desde -55C a +150C [2] .
Sensor LM35.
El encapsulado del sensor es el TO-92 con 3 pines, dos de ellos para alimentarlo
(VCC-GND) y el tercero VOUT nos entrega un valor de tensin proporcional a la
temperatura medida por el dispositivo cuya sensibilidad es de 10mV por cada
grado centgrado.
Para su correcta lectura es necesario hacer un adecuado tratamiento de la seal
por medio de una etapa de acoplamiento que sirve para amplificar la seal y
obtener mayor precisin en la lectura pudiendo leerse fracciones de grado.
DESARROLLO
El proyecto se realizo en 3 etapas.
1.- Etapa de Investigacion
2.-Etapa de Programacion
3.- Armado y pruebas
CONCLUSIONES
Se cumplieron los objetivos ya que se construyo una tarjeta de adquisicin de
datos funcional a un bajo costo, que trabaja con un protocolo de comunicacin
estndar que es el USB lo que la hace muy practica por que puede ser utilizada en
cualquier PC.
Adems de que fue diseada para adaptarse a cualquier sensor puesto que
cuenta con una interfaz sencilla que nos da la oportunidad de caracterizar la
respuesta lo que la hace sumamente funcional
ANEXOS
Diagrama elctrico de conexin
INTERFAZ DE USUARIO
SENSOR
Interfaz de usuario
Cdigo PIC18f4455
#include <18F4455.h>
#device ADC=8
ADC a 10bits
#fuses
HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL3,CPUDIV1,VRE
GEN,MCLR,NOPBADEN
// Paso 2: Ajuste el fusible del PLL de acuerdo al Xtal que utilice
// No olvide que PLL1 = Para un Xtal de 4Mhz
//
//
//
#use delay(clock=48000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
/////////////////////////////////////////////////////////////////////////////
#define USB_HID_DEVICE
directivas HID
FALSE
#define USB_EP1_TX_ENABLE
USB_ENABLE_BULK
EP1(EndPoint1) for IN bulk/interrupt transfers
//turn
on
#define USB_EP1_RX_ENABLE
USB_ENABLE_BULK
EP1(EndPoint1) for OUT bulk/interrupt transfers
//turn
on
#define USB_EP1_TX_SIZE
buffer
64
#define USB_EP1_RX_SIZE
buffer
64
#include <pic18_usb.h>
PIC USB driver
#include <usb_desc_scope.h>
#include <usb.c>
0xD8,0x04,
0x0B,0x00,
//product id
0x01,0x00,
#define LEDR
PIN_B6
#define LEDB
PIN_B7
int8 dato[63],entrada[6];
void main(void) {
LED_ON(LEDR);
presencia de energia
LED_OFF(LEDB);
setup_adc( VREF_VREF );
la entrada anloga
set_adc_channel( 0 );
setup_adc(ADC_TAD_MUL_16);;
reloj del ADC ADC_CLOCK_DIV_16
usb_init();
// inicializamos el USB
usb_task();
usb_wait_for_enumeration();
configurado por el host
LED_OFF(LEDR);
LED_ON(LEDB);
contacto con la PC
while (TRUE){
if(usb_enumerated())
{
if (usb_kbhit(1))
host
{ LED_OFF(LEDB);
usb_get_packet(1, dato, 64);
del EP1 y almacenamos en dato
if (dato[0]==0){
LED_ON(LEDR);
entrada[0]= read_adc();
entrada[1]= read_adc();
entrada[2]= read_adc();
entrada[3]= read_adc();
entrada[4]= read_adc();
entrada[5]=
(entrada[0]+entrada[1]+entrada[2]+entrada[3]+entrada[4])/5;
dato[1]=entrada[5];
usb_put_packet(1, dato, 64,USB_DTS_TOGGLE);
delay_ms(300);
LED_OFF(LEDR);
delay_ms(300);
}
}
}
}
}
Cdigo matlab
function varargout = Proyecto(varargin)
% PROYECTO M-file for Proyecto.fig
%
PROYECTO, by itself, creates a new PROYECTO or raises the existing
%
singleton*.
%
%
H = PROYECTO returns the handle to a new PROYECTO or the handle to
%
the existing singleton*.
%
%
PROYECTO('CALLBACK',hObject,eventData,handles,...) calls the local
%
function named CALLBACK in PROYECTO.M with the given input
arguments.
%
%
PROYECTO('Property','Value',...) creates a new PROYECTO or raises the
%
existing singleton*. Starting from the left, property value pairs are
%
applied to the GUI before Proyecto_OpeningFcn gets called. An
%
unrecognized property name or invalid value makes property application
%
stop. All inputs are passed to Proyecto_OpeningFcn via varargin.
%
%
*See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
%
instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help Proyecto
% Last Modified by GUIDE v2.5 14-Jun-2010 15:56:22
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',
mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Proyecto_OpeningFcn, ...
'gui_OutputFcn', @Proyecto_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Outputs from this function are returned to the command line.
function varargout = Proyecto_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
conectado = 0;
end
end
end
else
set(handles.radiobutton2,'value',0);
set(handles.radiobutton2,'enable','off')
calllib('libreria', 'MPUSBClose', my_in_pipe); % Se cierra el tunel de recepcin
calllib('libreria', 'MPUSBClose', my_out_pipe); % Se cierra el tunel de envio
unloadlibrary libreria
% Importante descargar la librera de memoria, de lo
contrario genera errores
end
% --- Executes on button press in radiobutton1.
function radiobutton2_Callback(hObject, eventdata, handles)
Enable = get(handles.radiobutton2,'Value');
vid_pid_norm = libpointer('int8Ptr',[uint8('vid_04d8&pid_000b') 0]);
out_pipe = libpointer('int8Ptr',[uint8('\MCHP_EP1') 0]);
in_pipe = libpointer('int8Ptr',[uint8('\MCHP_EP1') 0]);
[conectado] = calllib('libreria','MPUSBGetDeviceCount',vid_pid_norm);
[my_out_pipe] = calllib('libreria', 'MPUSBOpen',uint8 (0), vid_pid_norm, out_pipe,
uint8(0), uint8 (0)); % Se abre el tunel de envio
[my_in_pipe] = calllib('libreria', 'MPUSBOpen',uint8 (0), vid_pid_norm, in_pipe,
uint8 (1), uint8 (0)); % Se abre el tunel de recepcin
data_in = eye(1,64,'uint8');
% Se declara el vector de datos de entrada (el que
se recibe del PIC)
data_out = eye(1,64,'uint8');
% Se declara el vector de datos de salida (el que
se envia al PIC)
% TODOS LOS DATOS SE DECLARAN COMO UINT8
% de lo contrario no hay comunicacin.
Nombre = 'Ultimas Mediciones';
fecha = date;
datos = strcat(Nombre,'_',fecha,'.txt');
if Enable==1
arch = 0;
i = 3;
n = 0;
set(handles.radiobutton1,'enable','off')
set(handles.edit1,'enable','off')
set(handles.edit2,'enable','off')
set(handles.edit3,'enable','off')
set(handles.edit4,'enable','off')
if i >= 3
if arch ==0
[arch,error] = fopen(datos,'w');
end
i = 0;
if n >= 100;
arch = fclose('all');
else
if (arch > -1)
numero = fprintf(arch, '%d \n',Total);
n = n+1;
else
disp('El archivo no pudo ser creado');
end
end
end
end
else
set(handles.radiobutton1,'enable','on')
set(handles.edit1,'enable','on')
set(handles.edit2,'enable','on')
set(handles.edit3,'enable','on')
set(handles.edit4,'enable','on')
set(handles.edit5,'String','Esperando...');
fclose('all');
data_out(1) = 1;
if conectado == 1
calllib('libreria', 'MPUSBWrite',my_out_pipe, data_out, uint8(64), uint8(64),
uint8(200)); % Se envia el dato al PIC
[aa,bb,data_in,dd] = calllib('libreria', 'MPUSBRead',my_in_pipe, data_in,
uint8(64), uint8(64), uint8(200)); % Se recibe el dato que envia el PIC
end
warndlg('Reinicie el PIC','Advertencia')
end
function closeGUI(source,eventdata)
%src is the handle of the object generating the callback (the source of the event)
%evnt is the The event data structure (can be empty for some callbacks)
arch = fclose(arch);
calllib('libreria', 'MPUSBClose', my_in_pipe); % Se cierra el tunel de recepcin
calllib('libreria', 'MPUSBClose', my_out_pipe); % Se cierra el tunel de envio
unloadlibrary libreria
% Importante descargar la librera de memoria, de lo
contrario genera errores
delete(gcf)
close all
clear all
Referencias.
Data sheet PIC18F4455.pdf
Data sheet LM35.pdf
www.forosdeelectronica.com
www.national.com
www.steren.com.mx
www.elet.itch.edu.mx/academia/ehernand/