111421330 Tarjeta de Adquisicion de Datos Usb
-
Upload
sergio-hernandez -
Category
Documents
-
view
57 -
download
0
Transcript of 111421330 Tarjeta de Adquisicion de Datos Usb
UNIVERSIDAD TECNOLOGICA DE TEHUACAN
REPORTE TARJETA DE ADQUISICION DE
DATOS USB/LABVIEW PIC 18F4550
TSU. HENOC SALINAS JUAREZ
28/10/2012
Diseño y construcción de una tarjeta de adquisición de datos por USB monitoreada y controlada con LABVIEW.
INTRODUCCION
La adquisición de datos (DAQ) es el proceso de medir con una PC un
fenómeno eléctrico o físico como voltaje, corriente, temperatura, presión o
sonido. Un sistema DAQ consiste de sensores, hardware de medidas DAQ y
una PC con software programable. Comparados con los sistemas de medidas
tradicionales, los sistemas DAQ basados en PC aprovechan la potencia del
procesamiento, la productividad, la visualización y las habilidades de
conectividad de las PCs estándares en la industria proporcionando una
solución de medidas más potente, flexible y rentable.
PARTES DE UN SISTEMA DAQ
DISPOSITIVO DAQ
El hardware DAQ actúa como la interfaz entre una PC y señales del mundo exterior.
Funciona principalmente como un dispositivo que digitaliza señales analógicas
entrantes para que una PC pueda interpretarlas. Los tres componentes clave de un
dispositivo DAQ usado para medir una señal son el circuito de acondicionamiento de
señales, convertidor analógico-digital (ADC) y un bus de PC. Varios dispositivos DAQ
incluyen otras funciones para automatizar sistemas de medidas y procesos. Por
ejemplo, los convertidores digitales-analógicos (DACs) envían señales analógicas, las
líneas de E/S digital reciben y envían señales digitales y los
contadores/temporizadores cuentan y generan pulsos digitales
DESCRIPCION DE TARJETA
El diseño de esta tarjeta consta de 8
entradas digitales, 4 entradas
analógicas y 8 salidas digitales y
una salida PWM.
Utiliza la librería mpusbapi.dll,
proporcionada por Microchip con el
controlador PicUSB.
Se realiza un programa en labview
con las librerías picusb_read y
picusb_write, quienes son las que
controlan la librería mpusbapi.dll.
Cambio o actualizacion del firmware
del pic con la utilizacion del
BOOTLOADER USB proporcionado
por microchip.
EL PIC 18F4550
Es un microcontrolador programable con 32Kbytes de memoria flash de programa y 2kbytes
de SRAM de propósito general. Cuenta con 13 entradas de A / D y 18 de propósito general de
E / S.
Para la construcción de la tarjeta DAQ se uitilza el puerto B como salidas y el
puerto D como entradas, las entradas analógicas se configuraron en el puerto
A en los pines RA0,RA1,RA2 y RA3.
Utiliza un cristal de 12 MHz y dos capacitores de 22pF para la oscilación de
funcionamiento.
EL FIRMWARE
#device pic18f4550 #include <18F4550.h> #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL3,CPUDIV1,VREGEN #use delay(clock=48000000) // Cristal de 12MHz #use rs232(baud=9600, parity=N, xmit=PIN_C6, rcv=PIN_C7, bits=8) // Configuración del puerto RS232 // ========================================================================= // Definiciones para la librería dinámica CCS. Para la configuración dinámica // hay que definir algunos valores. Están explicados en usb.h // ========================================================================= #define USB_HID_DEVICE FALSE // Deshabilitamos el uso de las directivas HID #define USB_EP1_TX_ENABLE USB_ENABLE_BULK // Activa EP1(EndPoint1) para las transferencias IN Bulk/Interrupt #define USB_EP1_RX_ENABLE USB_ENABLE_BULK // Activa EP1(EndPoint1) para las transferencias OUT Bulk/Interrupt #define USB_EP1_TX_SIZE 4 // Tamaño reservado para el Buffer Tx EndPoint1 #define USB_EP1_RX_SIZE 3 // Tamaño reservado para el Buffer Rx EndPoint1 #include <pic18_usb.h> // Microchip PIC18Fxx5x Hardware para el CCS PIC USB Driver #include <PicUSB.h> // Configuración del USB y los descriptores para este dispositivo #include <usb.c> // Handles usb ,tokens y descriptores //MONITOREO DE ESTADO #DEFINE ESTADO PIN_C0 //SALIDAS POR EL PUERTO B #define SALIDAB OUTPUT_B #define ENTRADA INPUT_D //MODO PWM #define PWW PIN_C1 // PORTC.0 Pulso PWW //CONTROL DE SALIDAS #define LED_ON output_high // Salida en alto #define LED_OFF output_low // Salida en bajo #define CAMBIA_LED output_toggle // Conmuta salida #define PULSO_OFF output_low // Salida en bajo #define PULSO_ON output_high // Salida en alto //datos de salida de la pc #define modo recibe[0] // Byte que indica el modo de operación #define param1 recibe[1] // Primer parámetro recibdo #define param2 recibe[2] // Segundo parámetro recibdo //entradas del pic analogicas y digitales #define entrada_0 envia[0] // Byte a envíar en las entradas #define entrada_1 envia[1] // Byte a envíar en las entradas #define entrada_2 envia[2] // Byte a envíar en las entradas #define entrada_3 envia[3] // Byte a envíar en las entradas //MODOS DE OPERACION #define SALIDAS 1 // Modo de encender leds #define ENTRADAS 2 // Modo de leer las entradas
#define ANALOGICAS 3 // Modo de leer las entradas analogicas #define CONTROLPWW 4 // Modo de asignar el valor de PWW void main(void) // Función Principal int8 recibe[3]; // Declaramos la variable recibe de 3 bytes int8 envia[4]; // Declaramos la variable envía de 4 bytes int8 valorPWW=0; // Valor del pulso PWW int8 i; // Indice del bucle PWW set_tris_b(0x00); set_tris_d(0xFF); // puerto b salidas y puerto d entradas setup_adc_ports(AN0_TO_AN3); // Asigna el conversor A/D setup_adc(ADC_CLOCK_INTERNAL); // Asigna la velocidad output_d(0xff); LED_OFF(ESTADO); // ENCENDEMOS EL LED ROJO DE ESTADO Y APAGAMOS EL VERDE PULSO_OFF(PWW); // Pulso en bajo usb_init(); // Inicializamos el USB usb_task(); // Habilita el periferico usb y las interrupciones usb_wait_for_enumeration(); // Esperamos hasta que el PicUSB sea configurado por el PC LED_ON(ESTADO); // APAGAMOS EL LED ROJO DE ESTADO Y ENCENDEMOS EL VERDE while (TRUE) // Se cumple siempre (Bucle infinito) if(usb_enumerated()) // Si el PicUSB está configurado if (valorPWW!=0) // Si valorPWW no es cero if(valorPWW==0xFF) // Si es el máximo PULSO_ON(PWW); // Pulso en alto else PULSO_ON(PWW); // Pulso en alto for (i=1;i<=valorPWW;++i) // valorPWW en alto delay_us(100); // Retardo de 100us PULSO_OFF(PWW); // Pulso en bajo for (i=1;i<=(255-valorPWW);++i) // (255-valorPWW) en bajo delay_us(100); // Retardo de 100us else PULSO_OFF(PWW); // Pulso en bajo si valorPWW es cero
if (usb_kbhit(1)) // Si el EndPoint de salida contiene datos del PC usb_get_packet(1, recibe, 3); // Cojemos el paquete de tamaño 3 bytes del EP1 // y lo almacenamos en la variable recibe if (modo==SALIDAS) // Modo enviar salidas SALIDAB(PARAM1); if (modo==ENTRADAS) // Modo de leer las entradas entrada_0=ENTRADA(); usb_put_packet(1,envia,1,USB_DTS_TOGGLE); // Enviamos el paquete de tamaño 1 bytes del EP1 al PC if (modo==ANALOGICAS) // Modo de leer las entradas analógicas set_adc_channel(0); // Canal A0 delay_us(10); // Retardo entrada_0 = read_adc(); // Lee el valor set_adc_channel(1); // Canal A1 delay_us(10); // Retardo entrada_1 = read_adc(); // Lee el valor set_adc_channel(2); // Canal A2 delay_us(10); // Retardo entrada_2 = read_adc(); // Lee el valor set_adc_channel(3); // Canal A3 delay_us(10); // Retardo entrada_3 = read_adc(); // Lee el valor usb_put_packet(1,envia,4,USB_DTS_TOGGLE);
// Enviamos el paquete de tamaño 4 bytes del EP1 al PC if (modo==CONTROLPWW) // Modo de control PWW valorPWW=param1; // Asignamos el valor del PWW
EL CIRCUITO Y EL PCB DAQ
Lista de Componentes
1 PIC 18f4550 1 zócalo DIP 40 pines 2 Tira de pines 1 Cristal de 20 MHz 1 Conector USB tipo D 2 capacitores 22pF 3 diodos led 1 resistencia 10kΩ 1/2W 2 resistencias 220Ω 1/2W 1 placa fenólica 10x10 cm
Los archivos de ISIS y PROTEUS se anexan en el archivo comprimido ubicado
en la carpeta del reporte.
RA0/AN02
RA1/AN13
RA2/AN2/VREF-/CVREF4
RA3/AN3/VREF+5
RA4/T0CKI/C1OUT/RCV6
RA5/AN4/SS/LVDIN/C2OUT7
RA6/OSC2/CLKO14
OSC1/CLKI13
RB0/AN12/INT0/FLT0/SDI/SDA33
RB1/AN10/INT1/SCK/SCL34
RB2/AN8/INT2/VMO35
RB3/AN9/CCP2/VPO36
RB4/AN11/KBI0/CSSPP37
RB5/KBI1/PGM38
RB6/KBI2/PGC39
RB7/KBI3/PGD40
RC0/T1OSO/T1CKI15
RC1/T1OSI/CCP2/UOE16
RC2/CCP1/P1A17
VUSB18
RC4/D-/VM23
RC5/D+/VP24
RC6/TX/CK25
RC7/RX/DT/SDO26
RD0/SPP019
RD1/SPP120
RD2/SPP221
RD3/SPP322
RD4/SPP427
RD5/SPP5/P1B28
RD6/SPP6/P1C29
RD7/SPP7/P1D30
RE0/AN5/CK1SPP8
RE1/AN6/CK2SPP9
RE2/AN7/OESPP10
RE3/MCLR/VPP1
U1
PIC18F4550
VCC
D+
D-
GND
J1
AU-Y1007-R
X120 Mhz
C1
22p
C2
22p
C31n
INAN1
INAN2
INAN3
INAN4
OUTD1
OUTD2
OUTD3
OUTD4
OUTD5
OUTD6
OUTD7
OUTD8
OSC2
OSC1
OSC2
OSC1
D-
D+
D-
D+
ESTADO
D1LED-GREEN
D2LED-RED
R1330R
R2330R
ES
TA
DO
ES
TA
DO
R3
10KR
IND1
IND2
IND3
IND4
IND5
IND6
IND7
IND8
1
2
3
4
5
6
7
8
SALIDAS
TBLOCK-I8
1
2
3
4
5
6
7
8
ENTRADAS
TBLOCK-I8
1
2
POWER
TBLOCK-I2
INAN1
INAN2
INAN3
INAN4
C42200u
R4
220R
D3
LED-GREEN
OUTD1
OUTD2
OUTD3
OUTD4
OUTD5
OUTD6
OUTD7
OUTD8
IND1
IND2
IND3
IND4
IND5
IND6
IND7
IND8
INAN5
INAN6
INAN7
INAN8
1
2
3
4
5
6
7
8
ANALOGICAS
TBLOCK-I8
INAN5
INAN6
INAN7
INAN8
JP1JUMPER2
12345
ICSPCONN-SIL5
OU
TD
8
OU
TD
7
OU
TD
6
MC
LR
MCLR
1
2
3
4
ALIMENTACION
TBLOCK-I4
LAS LIBRERÍAS PICUSB_READ Y PICUSB_WRITE
Read_usb
VID_PID= Identificador del dispositivo ReceiveData= Datos recibidos desde el PIC. ExpectedReceiveLength= Largo de datos esperados SendDelay= Tiempo de pausa entre datos recibidos.
write usb
VID_PID= Identificador del dispositivo SendData= Datos enviados al PIC. SendLenght= Largo de datos enviados. SendDelay= Tiempo de pausa entre datos enviados.
EL PROGRAMA DE LABVIEW PANEL FRONTAL
DIAGRAMA DE BLOQUES
SELECCIONA EL MODO DE OPERACIÓN
CONTROLA LAS SALIDAS
MUESTRA LAS ENTRADAS
DIGITALES
MUESTRA LAS ENTRADAS ANALOGICAS
CONTROLA PWM