Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
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.
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
//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
#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);
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 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); }
// 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
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+
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
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.
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.
DIAGRAMA DE BLOQUES
CONTROLA PWM