Congreso Nacional de Ingeniería Electrónica del Golfo CONAGOLFO 2009 Instituto Tecnológico de Orizaba
ISBN: -1 / 5-
Resumen—En este artículo se presenta una metodología
para realizar la comunicación entre LabVIEW y un
microcontrolador PIC18F4550 de Microchip. Con las
herramientas presentadas en este trabajo se pueden adquirir y
enviar datos masivos de información hasta una velocidad de
12Mb/s. La comunicación se realiza mediante la herramienta
Call Library Fuction de LabVIEW, la cual hace uso de la
librería mpusbapi que nos proporciona Microchip. El puente
que establece la comunicación entre el microcontrolador y la
PC se realiza mediante las librerías usb del software CCS C
Compiler y el driver mchpusb para Microsoft Windows XP.
Por último se realizan pruebas de adquisición y envió de datos.
Palabras clave: Call Library Function, Mpusbapi.dll, USB,
Bulk Transfers USB, LabVIEW-USB.
I. INTRODUCCIÓN
Muchas compañías en la industria de la manufactura
usan computadoras personales en sus plantas y laboratorios
para probar sus productos, tomar mediciones y automatizar
procesos. Al crear sistemas basados en computador, los
usuarios están aprovechando las ventajas de las tecnologías
de la computación más recientes tales como tarjetas de
adquisición de datos.
La técnica de instrumentos virtuales mediante tarjetas
de adquisición de datos, es cada vez más utilizada en la
industria. Esta metodología consiste en realizar paneles de
control en computador, tradicionalmente hechas por
software que utiliza instrumentos virtuales como LabVIEW.
A través de estos instrumentos virtuales (Vis) se pueden
supervisar en tiempo real las variables del proceso
(Temperatura, Humedad, Presión, entre otros.) y controlar
actuadores (válvulas, termoresistencias, entre otros). Estos
VIs brindan al usuario una gran flexibilidad de operación
debido a que no requieren de ninguna circuitería para
realizar complicados procedimientos de control, simulación
y supervisión.
Actualmente la obtención de datos en LabVIEW, se
realiza mediante tarjetas de adquisición (TAD) que National
Instrument desarrolla. Estas TAD generalmente son muy
costosas y de uso limitado, esto es, que no puede utilizarse
en ningún otro software. El costo es la principal limitante
que hace difícil adquirirlas por estudiantes, universidades y
centros de investigación.
Considerando las problemáticas planteadas
anteriormente, en este artículo se presenta una metodología
para establecer la comunicación vía USB entre LabVIEW y
un microcontrolador. El artículo está dividido de la
siguiente forma: en la sección II se presenta el desarrollo de
la comunicación entre la PC y el microcontrolador. En la
sección III contiene la vía y tipo de comunicación USB y en
la IV se presenta el funcionamiento de librería mpusbapi1 de
microchip y la comunicación con LabVIEW, Por último, en
la sección V se hace la validación de la comunicación USB,
censando datos de temperatura y activando leds, que
simbolizan unas electroválvulas.
II. COMUNICACIÓN ENTRE LA PC Y EL DISPOSITIVO USB
Existen tres maneras de establecer la comunicación por
USB (Bus Universal en Serie):
1. Bulk Transfers: transferencia bidireccional masiva
de información.
2. CDC: clase de dispositivos de comunicación
(emulación del protocolo RS232).
3. HID: dispositivos de interfaz humana (plug-and-
play).
En este trabajo se opto por la opción Bulk Transfers,
debido a que permite la transmisión de datos de alta
velocidad (Full Speed) de 12Mb/s. Las transferencias Bulk
están diseñadas para soportar aquellos dispositivos que
precisan enviar o recibir grandes cantidades de datos.
Interconexión
Fig. 1. Etapas de comunicación entre la PC y el Dispositivo USB.
En el diagrama de la Figura. 1 se ilustra el flujo de datos
USB a partir del software LabVIEW que manipula al
1 Mpusbapi es una librería creada por Microchip para utilizar el
microcontrolador.
Comunicación USB de Alta Velocidad entre LABVIEW y un
Microcontrolador para la Adquisición de Datos en Tiempo Real
J. A. Pérez Cueto, F.R López Estrada
Departamento de electrónica, Instituto Tecnológico De Tuxtla Gutiérrez, México
Teléfono: 961 1241592 E-mail: [email protected]
PC Dispositivo USB
Tarje LabVIEW
Host USB
Función
Librería Mpusbapi
Controlador del
dispositivo USB
TAD
Microcontrolador
Firmware
CONAGOLFO 2009
-2 / 5-
dispositivo USB a través de la librería mpusbapi. La librería
realiza la transmisión de datos a la dirección del dispositivo
que el host USB configuro al usar el driver. El driver
establece el puente entre la PC y el microcontrolador. Dentro
del microcontrolador se ejecuta el firmware el cual se
comunica con elementos de la TAD, que realizan algunas
funciones útiles para el usuario o lo que se desea controlar.
Una descripción formal de los principales procesos o
elementos que realizan la comunicación entre el dispositivo
USB y la PC se enumeran a continuación.
A. Interconexión
El dispositivo USB dispone de 2 tipos de conectores (A
y B) como se observa en la figura 2, que pueden ser a su vez
macho o hembra [2].
A B Fig. 2. Conectores USB
De esta forma el típico cable USB sería el modelo
US09. La velocidad soportada por estos cables es de 12
Mbps, hasta 480Mbps en el caso de los cables para USB
2.0. El cable está compuesto por solo cuatro cables, Vbus,
D+, D- y GND (Ver Tabla1). La información y los datos se
mueven por los cables D+ y D-.
TABLA 1.
Pines de conexión USB
A través de esos cables se genera un tipo de señal
diferencial. La transferencia de información lo realiza de
manera bidireccional, pero no al mismo tiempo. En la misma
señal diferencial entre D+ y D- se envía y se recibe las
tramas de datos. Dentro de esta señal se observa una señal
Sync, PID y Opcional, estas tres forman el paquete de trama
donde va incluida la información que se desea trasmitir (Ver
Fig. 3).
Fig. 3. Composición de un paquete de información
La señal Sync es utilizada por receptor para sincronizarse
con el host. El PID es un paquete identificador, que definirá
de cómo los bytes de información debe ser interpretado o
tratados. Y por ultimo esta la opcional donde contiene los
datos enviados y recibidos, que va desde 1 byte hasta 124
bytes.
B. Microcontrolador PIC
Para establecer la interfaz de comunicación USB se
selecciono el microcontrolador PIC18F4550. Este
dispositivo soporta la comunicación vía USB, es decir,
incluyen un controlador USB interno y cuenta con pines para
conectarse a la PC sin la necesidad de pull-ups o circuitería
externa [5]. En la Figura. 4 se observa la estructura interna
del controlador de periférico USB.
Fig. 4. Característica del PIC18F4550
El firmware 2 que se implemento en el PIC18F4550
para establecer la comunicación USB con la PC, se realizo a
través de las siguientes instrucciones de programación.
No
Si
Si
No
Fig.5. Diagrama de flujo del firmware
2Firmware: instrucciones de programa que establece la lógica de bajo
nivel para el control de circuitos electrónicos.
Pin Nombre Color de cable
1 +5.0V Rojo
2 Data- Blanco
3 Data+ Verde
4 Tierra Negro
Inicio
Inicializa el USB
Habilita el Periférico USB
Espera que sea configurado por la PC
¿Datos
Recibido?
Almacena el dato recibido
Toma de decisiones del dato recibido
Control y Adquisición de datos
Trasmisión de datos a la PC
Fin
¿Conexión con
Windows Xp?
1 2 3 4
1 2
3 4
Full Speed
Interfaz USB 2.0
USB Regulador de
Voltaje
Transferencia USB
Full Speed
PIC18F4550
MCU Core
12MIPS 48MHZ
32 Kbytes Enhanced Flash
2 Kbytes RAM
LIN-UART
16-bit Captura
I2C/SPI
Quad. PWM
256 Bytes EEPROM
10-bit ADC
CONAGOLFO 2009
-3 / 5-
El firmware hace uso de las librerías usb de CCS C
Compiler, para configurar el dispositivo y establecer la
comunicación entre la PC.
Para que el host USB reúna la información necesaria e
identifique al dispositivo y lo configure, el firmware debe
contener descriptores. Los descriptores contienen
información básica del dispositivo como el número de serie,
la clase de dispositivo, el protocolo soportado, la capacidad
de transmisión, las funciones del dispositivo, entre otros.
Con el propósito de que el sistema identifique al dispositivo
y encuentre al driver que debe utilizar.
C. Driver del dispositivo
Cuando el dispositivo se conecta por primera vez a la
PC, el sistema pedirá el controlador (driver) correspondiente,
en este caso el driver mchpusb creado por Microchip. Para
que el dispositivo sea reconocido por el sistema, este driver
debe contener los mismos descriptores que el firmware.
III.VIA DE COMUNICACIÓN Y TIPO DE TRANSFERENCIAS
La interfaz de tipo USB 2.0 define las vías de
comunicación entre las aplicaciones que se ejecutan en el
host (clientes) y los distintos endpoint3 en los dispositivos
USB (servidores), y las denomina Pipes4. Cuando un
dispositivo USB se conecta a un sistema, y el sistema lo
reconoce y lo configura, el dispositivo queda organizado
como un cierto conjunto de endpoints. El sistema establece
todas las vías de comunicación (pipes) necesaria entre el
sistema y cada uno de los endpoint disponible en dicha
configuración. El sistema elige una cierta configuración en
función de la funcionalidad particular que se precise del
dispositivo.
Existen 4 tipos de endpoints (Bulk, Control, Interrupcion e
Isocrono) y 2 tipos de pipe (Conrol o Mensaje y Stream), de
las cuales se utiliza la Pipe Stream y Endpoint Bulk. A
continuación se describe cada una de ellas.
A. Pipe Stream
La Pipe Stream es una vía de comunicación
unidireccional entre el host y el endpoint de los tipos Bulk,
Interrupción o Isócrono. Si un dispositivo necesita realizar
transferencias bidireccionales de un tipo de endpoint
concreto el sistema debe establecer dos pipes, una de salida
y una pipe de entrada. A través de estas pipes, el sistema
puede leer del dispositivo toda la información descriptiva
necesaria para identificar el tipo de dispositivo, posibles
configuraciones, protocolo que soporta, número y tipos de
enpoints que soporta en cada posible configuración, etc.
3 Endpoint: Buffer (bloque de datos) o un registro que almacena
bytes que se encuentran en el dispositivo. 4 Pipes: Enlace virtual o Asociación entre el host y el Endpoints.
B. Transferencia Bulk
Las transferencias Bulk están diseñadas para soportar
aquellos dispositivos que precisan enviar o recibir grandes
cantidades de datos con latencias que pueden tener amplias
variaciones, y en que las transacciones pueden utilizar
cualquier ancho de banda disponible. Para ellos las
transacciones Bulk proporcionan:
Acceso al bus en función del ancho de banda disponible.
Reintento de trasferencias en caso de errores de entrega.
Entrega garantizada de datos, pero sin garantía de
latencia máxima ni de ancho de banda.
Las transferencias Bulk se realizan relativamente rápidas si
el bus dispone de mucho ancho de banda libre. En un bus
USB con mucho ancho de banda reservado, la transferencia
puede alargarse durante periodos de tiempo relativamente
grandes.
IV. LIBRERÍA MPUSBAPI
Como se menciono en la sección II, las funciones de
acceso al puerto USB con el microcontrolador PIC18F4550
se realizan mediante la librería mpusbapi. Para hacer uso de
esta librería en labview se utiliza el VI Call Library Fuction
Node (Ver Fig.6).
Fig. 6. Call Library Fuction Node
Con este VI podemos asignarle parámetros a las
funciones que contiene la librería mpusbapi para enviar y
recibir datos. Los pasos para utilizar la librería mpusbapi en
LabVIEW se muestran en el diagrama siguiente.
Si
No
Fig. 7. Diagrama de configuración de librería mpusbapi
Las funciones de la librería mpusbapi se analizan a
continuación:
Mpusbopen: (instance, pVID_PID, pEP, dwDir,
dwReserved)
Fin
mpusbopen
mpusbwrite
mpusbread
mpusbclose
¿Continuar?
Inicio
CONAGOLFO 2009
-4 / 5-
Devuelve el acceso al pipe del endpoints con el
VID_PID5 asignado.
Instance (Input): Un número de dispositivo para abrir.
Normalmente, se utiliza primero la llamada de
MPUSBGetDeviceCount para saber cuántos
dispositivos hay.
pVID_PID (Input): String que contiene el PID&VID
del dispositivo objetivo. El formato es
“vid_xxxx&pid_yyyy”. Donde xxxx es el valor del
VID el yyyy el del PID, los dos en hexadecimal.
Ejemplo:
Si un dispositivo tiene un VID=0x04d8 y un
PID=0x0010, el string de entrada es:
“vid_0x04d8&pid_0x0010”.
pEP: (Input): String con el número del Endpoint que
se va a abrir. El formato es “\\MCHP_EPz” o
“\MCHP_EPz” dependiendo del lenguaje de
programación. Donde z es el número del Endpoint en
decimal.
Ejemplo: “\\MCHP_EP1” o “\MCHP_EP1”
Este argumento puede ser NULL (nulo) para crear
lazos con endpoints de funciones no específicas.
dwDir: Especifica la dirección del endpoint:
MP_READ: para MPUSBRead y
MPUSBReadInt. Y MP_Write: para MPUSBWrite.
dwReserved: indica un número reservado para el
dispositivo.
Mpusbwrite: (handle, pData, dwLen, pLenght,
dwMilliseconds)
handle (Input): Identifica la pipe del endpoint que se
va a escribir. La pipe unidad tiene que crearse con el
atributo de acceso MP_WRITE.
pData (Output): Puntero al buffer que contiene los
datos que se van a escribir en la pipe.
dwLen (Input): Especifica el número de bytes que se
van a escribir en la pipe.
pLenght (Output): Puntero al número de bytes que se
escriben al llamar esta función. MPUSBWrite pone
este valor a cero antes de cualquier lectura o de
chequear un error.
dwMilliseconds (Input): Especifica el intervalo de
time-out en milisegundos. La función vuelve si
transcurre el intervalo, aunque no se complete la
operación. Si dwMilliseconds=0, la función
comprueba los datos de la pipe y vuelve
inmediatamente. Si dwMilliseconds es infinito, el
intervalo de time-out nunca termina.
Mpusbread (handle, pData, dwLen, pLenght,
dwMilliseconds):
5 VID_PID es la unión entre la identificación del dispositivo (PID) y del
vendedor (VID), en número hexadecimal de 16bits.
handle (input): Identifica la pipe del Endpoint que se va
a leer. La pipe unidad tiene que crearse con el atributo
de acceso MP_READ.
pData (output): Puntero al buffer que recibe el dato
leído de la pipe.
dwLen (input): Especifica el número de bytes que hay
que leer de la pipe.
pLenght (output): Puntero al número de bytes leídos.
MPUSBRead pone este valor a cero antes de cualquier
lectura o de chequear un error.
dwMilliseconds (input): Especifica el intervalo de time-
out en milisegundos. La función vuelve si transcurre el
intervalo aunque no se complete la operación. Si
dwMilliseconds=0, la función comprueba los datos de
la pipe y vuelve inmediatamente. Si dwMilliseconds es
infinito, el intervalo de time-out nunca termina.
Mpusbclose (handle):
Cierra una determinada unión.
handle (Input): Identifica la pipe del endpoint que se
va a cerrar.
VI. ADQUISICION DE DATOS EN LABVIEW
LabVIEW es una herramienta de programación gráfica
que permite realizar simulaciones, pruebas, control y diseño
de procesos y sistema. El lenguaje que usa se llama lenguaje
G (Gráfico).Los programas desarrollados con LabVIEW se
llaman Instrumentos Virtuales (Vis).
Para probar la recepción de datos entre LABVIEW y el
exterior, se realizó la siguiente prueba: Se midió la
temperatura ambiental de forma continua utilizando el
sensor LM35.
Fig. 8. Diagrama electrónico del Proyecto
La transmisión de datos vía USB se realizo
manipulando el encendido de forma intencionada de unos
leds(Ver Fig. 8). Estos leds representan el encendido digital
de actuadores como válvulas de paso.
CONAGOLFO 2009
-5 / 5-
La programación en LabVIEW se realizo a través de un
subVI (PicUSB-Labview) que permite manipular de manera
más fácil al dispositivo. El subVI creado se muestra en la
siguiente figura.
Fig. 9. VI PicUSB-LabVIEW
En la Figura 10, se muestra la programación
estructurada con el respectivo subVI creado y en la Figura.
11, se muestran la programación virtual del proyecto.
Fig. 10. Diagrama Bloque
Fig. 11. Panel Frontal
VI. CONCLUSIONES
En este artículo se presento una metodología que
permite la comunicación entre un microcontrolador
PIC18F4550 y LabVIEW para tareas de adquisición de
datos. Los resultados obtenidos demuestran que la
metodología implementada funciona perfectamente, se logra
trasferir datos de alta velocidad. Con esta técnica se pretende
que estudiante e investigadores puedan construir una tarjeta
de adquisición de datos y que pueda implementarse para
tareas de simulación, supervisión y control.
REFERENCIAS
[1] Gary W. Johnson, R. J. (2006). LabVIEW Graphical Programming,
Fourth Edition. New York: McGraw-Hill.
[2] Jan Axelson. (2001). USB Complete Everything You Need to
Develop Custom USB Peripherals,Third Edition. Madison, WI: Lakeview Research.
[3] Lazaro, A. M. (2005). LABVIEW 7.1: PROGRAMACION
GRAFICA PARA EL CONTROL DE INSTRUMENTACION, Cuarta Edición. Texas: Thomson.
[4] National Instruments (2008). http://www.ni.com
[5] Universal Serial Bus (2008). http://www.usb.org [6] Microchip (2008). http://www.microchip.com