Você está na página 1de 11

UNIVERSIDAD TECNOLOGICA DE TEHUACAN

REPORTE TARJETA DE ADQUISICION DE DATOS USB/LABVIEW


PIC 18F4550
TSU. HENOC SALINAS JUAREZ 28/10/2012

Diseo y construccin de una tarjeta de adquisicin de datos por USB monitoreada y controlada con LABVIEW.

INTRODUCCION La adquisicin de datos (DAQ) es el proceso de medir con una PC un fenmeno elctrico o fsico como voltaje, corriente, temperatura, presin 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 visualizacin y las habilidades de conectividad de las PCs estndares en la industria proporcionando una solucin de medidas ms potente, flexible y rentable.

PARTES DE UN SISTEMA DAQ

DISPOSITIVO DAQ
El hardware DAQ acta como la interfaz entre una PC y seales del mundo exterior. Funciona principalmente como un dispositivo que digitaliza seales analgicas entrantes para que una PC pueda interpretarlas. Los tres componentes clave de un dispositivo DAQ usado para medir una seal son el circuito de acondicionamiento de seales, convertidor analgico-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-analgicos (DACs) envan seales analgicas, las lneas de E/S digital reciben y envan seales digitales y los contadores/temporizadores cuentan y generan pulsos digitales

DESCRIPCION DE TARJETA El diseo de esta tarjeta consta de 8 entradas digitales, 4 entradas analgicas y 8 salidas digitales y una salida PWM.

Utiliza la librera mpusbapi.dll, proporcionada por Microchip con el controlador PicUSB.

Se realiza un programa en labview con las libreras picusb_read y picusb_write, quienes son las que controlan la librera 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 propsito general. Cuenta con 13 entradas de A / D y 18 de propsito general de E / S.

Para la construccin de la tarjeta DAQ se uitilza el puerto B como salidas y el puerto D como entradas, las entradas analgicas 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 oscilacin 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) // Configuracin del puerto RS232 // ========================================================================= // Definiciones para la librera dinmica CCS. Para la configuracin dinmica // hay que definir algunos valores. Estn 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 // Tamao reservado para el Buffer Tx EndPoint1 #define USB_EP1_RX_SIZE 3 // Tamao reservado para el Buffer Rx EndPoint1 #include <pic18_usb.h> // Microchip PIC18Fxx5x Hardware para el CCS PIC USB Driver #include <PicUSB.h> // Configuracin 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 #define LED_OFF output_low #define CAMBIA_LED output_toggle #define #define PULSO_OFF PULSO_ON output_low output_high

// Salida en alto // Salida en bajo // Conmuta salida // Salida en bajo // Salida en alto

//datos de salida de la pc #define modo recibe[0] #define param1 recibe[1] #define param2 recibe[2] //entradas del pic analogicas y digitales #define entrada_0 envia[0] #define entrada_1 envia[1] #define entrada_2 envia[2] #define entrada_3 envia[3] //MODOS DE OPERACION #define #define SALIDAS ENTRADAS 1 2

// Byte que indica el modo de operacin // Primer parmetro recibdo // Segundo parmetro recibdo

// Byte a envar en las entradas // Byte a envar en las entradas // Byte a envar en las entradas // Byte a envar en las entradas

// Modo de encender leds // Modo de leer las entradas

#define #define

ANALOGICAS 3 CONTROLPWW 4

// Modo de leer las entradas analogicas // Modo de asignar el valor de PWW // Funcin Principal // Declaramos la variable recibe de 3 bytes // Declaramos la variable enva de 4 bytes // Valor del pulso PWW // Indice del bucle PWW

void main(void) { int8 recibe[3]; int8 envia[4]; int8 valorPWW=0; int8 i; 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); usb_init(); usb_task(); usb_wait_for_enumeration(); LED_ON(ESTADO);

// Pulso en bajo // Inicializamos el USB // Habilita el periferico usb y las interrupciones // Esperamos hasta que el PicUSB sea configurado por el PC

// APAGAMOS EL LED ROJO DE ESTADO Y ENCENDEMOS EL VERDE // Se cumple siempre (Bucle infinito) // Si el PicUSB est configurado // Si valorPWW no es cero // Si es el mximo // Pulso en alto

while (TRUE) { if(usb_enumerated()) { if (valorPWW!=0) { if(valorPWW==0xFF) { PULSO_ON(PWW); } else { PULSO_ON(PWW); for (i=1;i<=valorPWW;++i) { delay_us(100); } PULSO_OFF(PWW); for (i=1;i<=(255-valorPWW);++i) { delay_us(100); } } } else { PULSO_OFF(PWW); }

// Pulso en alto // valorPWW en alto // Retardo de 100us

// Pulso en bajo // (255-valorPWW) en bajo // Retardo de 100us

// Pulso en bajo si valorPWW es cero

if (usb_kbhit(1)) { usb_get_packet(1, recibe, 3); if (modo==SALIDAS) { SALIDAB(PARAM1); }

// Si el EndPoint de salida contiene datos del PC // Cojemos el paquete de tamao 3 bytes del EP1 // y lo almacenamos en la variable recibe // Modo enviar salidas

if (modo==ENTRADAS) // Modo de leer las entradas { entrada_0=ENTRADA(); usb_put_packet(1,envia,1,USB_DTS_TOGGLE); // Enviamos el paquete de tamao 1 bytes del EP1 al PC } if (modo==ANALOGICAS) { set_adc_channel(0); delay_us(10); entrada_0 = read_adc(); set_adc_channel(1); delay_us(10); entrada_1 = read_adc(); set_adc_channel(2); delay_us(10); entrada_2 = read_adc(); set_adc_channel(3); delay_us(10); entrada_3 = read_adc(); // Modo de leer las entradas analgicas // Canal A0 // Retardo // Lee el valor // Canal A1 // Retardo // Lee el valor // Canal A2 // Retardo // Lee el valor // Canal A3 // Retardo // Lee el valor

usb_put_packet(1,envia,4,USB_DTS_TOGGLE); // Enviamos el paquete de tamao 4 bytes del EP1 al PC } if (modo==CONTROLPWW) { valorPWW=param1; } } } } } // Modo de control PWW // Asignamos el valor del PWW

EL CIRCUITO Y EL PCB DAQ

Lista de Componentes
1 PIC 18f4550 1 zcalo 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 fenlica 10x10 cm

C2
22p

X1
20 Mhz
ESTADO

330R

330R

C1
OSC1 22p

DD+

GND DD+ VCC AU-Y1007-R

D2

D1

LED-RED LED-GREEN

U1 JP1
JUMPER2 INAN1 INAN2 INAN3 INAN4 INAN5 INAN6 OSC2 OSC1 OUTD1 OUTD2 OUTD3 OUTD4 OUTD5 OUTD6 OUTD7 OUTD8
OUTD8 OUTD7 OUTD6 MCLR

2 3 4 5 6 7 14 13 33 34 35 36 37 38 39 40

RA0/AN0 RC0/T1OSO/T1CKI RA1/AN1 RC1/T1OSI/CCP2/UOE RA2/AN2/VREF-/CVREF RC2/CCP1/P1A RA3/AN3/VREF+ RC4/D-/VM RA4/T0CKI/C1OUT/RCV RC5/D+/VP RA5/AN4/SS/LVDIN/C2OUT RC6/TX/CK RA6/OSC2/CLKO RC7/RX/DT/SDO OSC1/CLKI RB0/AN12/INT0/FLT0/SDI/SDA RB1/AN10/INT1/SCK/SCL RB2/AN8/INT2/VMO RB3/AN9/CCP2/VPO RB4/AN11/KBI0/CSSPP RB5/KBI1/PGM RB6/KBI2/PGC RB7/KBI3/PGD RD0/SPP0 RD1/SPP1 RD2/SPP2 RD3/SPP3 RD4/SPP4 RD5/SPP5/P1B RD6/SPP6/P1C RD7/SPP7/P1D RE0/AN5/CK1SPP RE1/AN6/CK2SPP RE2/AN7/OESPP RE3/MCLR/VPP

15 16 17 23 24 25 26

ESTADO

DD+ OUTD1 OUTD2 OUTD3 OUTD4 OUTD5 OUTD6 OUTD7 OUTD8

ESTADO

OSC2

J1

R1

R2

SALIDAS
1 2 3 4 5 6 7 8 TBLOCK-I8

19 20 21 22 27 28 29 30 8 9 10 1

IND1 IND2 IND3 IND4 IND5 IND6 IND7 IND8 INAN7 INAN8

ENTRADAS
IND1 IND2 IND3 IND4 IND5 IND6 IND7 IND8 1 2 3 4 5 6 7 8 TBLOCK-I8

18

R3

VUSB PIC18F4550

10KR

C3
1n MCLR

ICSP
CONN-SIL5 INAN1 INAN2 INAN3 INAN4 INAN5 INAN6 INAN7 INAN8

5 4 3 2 1

ANALOGICAS
1 2 3 4 5 6 7 8 TBLOCK-I8

R4
220R

POWER
2 1 TBLOCK-I2

C4
2200u

ALIMENTACION D3
LED-GREEN 1 2 3 4 TBLOCK-I4

Los archivos de ISIS y PROTEUS se anexan en el archivo comprimido ubicado en la carpeta del reporte.

LAS LIBRERAS 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 OPERACIN

MUESTRA LAS ENTRADAS ANALOGICAS

CONTROLA LAS SALIDAS

MUESTRA LAS ENTRADAS DIGITALES

CONTROLA PWM

Você também pode gostar