Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
ESCUELA DE INGENIERÍA
MAESTRÍA EN MECATRÓNICA
Transferencia y procesamiento de datos a alta velocidad, mediante el uso de MATLAB, el puerto
USB 2.0 y PIC18F2455 de Microchip™
PRESENTA:
ING. GABRIEL JESÚS POOL BALAM
PARA LA MATERIA:
DISEÑO MECATRÓNICO
PROFESOR:
DR. ALEJO MOSSO VAZQUEZ
MÉRIDA, YUCATÁN A 4 DE JULIO DE 2009
Agradecimientos:
JUNIO 2009
Transferencia de datos entre MATLAB, el puerto USB 2.0 y PIC18F2455 de Microchip™ 2 / 15
RESUMEN caracterización como paso previo al diseño o
selección de su controlador.
MATLAB ("matrix laboratory") es un
software de computación y desarrollo de INTRODUCCIÓN
aplicaciones, diseñado para llevar a cabo
proyectos que impliquen cálculos Hoy en día, la miniaturización de
matemáticos de nivel elevado y su componentes electrónicos, la disminución
representación gráfica. MATLAB integra de su consumo de corriente y el tamaño de
análisis numérico, cálculo matricial, proceso los semiconductores, permite la
de señal y visualización gráfica en un construcción de circuitos más complejos,
entorno tal que los problemas y sus inteligentes y eficientes. No ha sido la
soluciones son expresados del mismo modo excepción con el microcontrolador, ya que
en que se escribirían, sin necesidad de hacer éste se ha desarrollado notablemente, al
uso de la programación tradicional. MATLAB punto de hacer más grande sus capacidades
es capaz de manejar librerías y dll’s de de comunicación, memoria, circuitos de
diferentes dispositivos instalados en la PC. apoyo adicionales (ADC, oscilador interno,
puertos, etc.). Dichos microcontroladores,
Microchip™ proporciona en su requieren de muy poco componentes de
página web los drivers y archivos necesarios soporte externo para implementarse y sus
para establecer la comunicación por puerto tecnologías se han perfeccionado, de tal
USB con la familia del PIC18F2455. A través manera, que casi no fallan. Algunos
de ellos se puede efectuar transacciones de fabricantes tal como Microchip, se
hasta 64 bytes por paquete cada preocupan en desarrollar las herramientas
milisegundo, por cada túnel abierto. El PIC para su programación, tales como lenguajes
es programado mediante “PCWH Compiler de alto nivel para compilar el programa y
de CCS”, versión 3.246. Los descriptores programadores económicos para descargar
utilizados para la comunicación USB están el programa en el chip. Debido a éstas
basados en los archivos que contiene el herramientas, éste chip se ha vuelto muy
propio compilador. popular al grado que se proponen como
materias a cursar en las escuelas.
En este trabajo se muestra que, con
estas herramientas y manipulando el archivo Por otro lado, ya no basta con tener un
mpusbapi.dll, se puede transferir datos a chip inteligente que funcione de manera
alta velocidad del PIC18F2455 a la PC de autónoma, ahora se requiere que trabajen
manera bidireccional, con la finalidad de en conjunto con la PC especialmente donde
procesarlos matemáticamente y/o se requieren importar datos de eventos muy
graficarlos. Un ejemplo de esta aplicación se rápidos como por ejemplo: El arranque de
muestra en este trabajo, y consiste en la un motor (velocidad con respecto al tiempo)
obtención de curvas de arranque de que tiene una duración aproximada de 1
motores de CD sin carga, a efectos de su décima de segundo. Esto se puede lograr
con el desarrollo de un software como Visual
Transferencia de datos entre MATLAB, el puerto USB 2.0 y PIC18F2455 de Microchip™ 3 / 15
Sólo puede haber un Host en el bus que Fig. 3 Múltiple velocidad en un BUS
maneja a todos los componentes
conectados como se indica en la figura 1.
Transferencia de datos entre MATLAB, el puerto USB 2.0 y PIC18F2455 de Microchip™ 4 / 15
Transferencia de datos entre MATLAB, el puerto USB 2.0 y PIC18F2455 de Microchip™ 5 / 15
Transferencia de datos entre MATLAB, el puerto USB 2.0 y PIC18F2455 de Microchip™ 6 / 15
pEP: Input: String con el número del Como tercer procedimiento, se lee el dato
Endpoint que se va a abrir. El formato es aplicando el número de pipe asignado por
“\\MCHP_EPz” o “\MCHP_EPz” medio de la instrucción: (*MPUSBRead)
dependiendo del lenguaje de programación.
Donde z es el número del Endpoint en (HANDLE handle, // Input
decimal. Ejemplo:
“\\MCHP_EP1” o “\MCHP_EP1” Este PVOID pData, // Output
argumento puede ser NULL (nulo) para crear
lazos con Endpoints de funciones no DWORD dwLen, // Input
específicas. Las funciones específicas que
utilizan éste parámetro son: MPUSBRead, PDWORD pLength, // Output
MPUSBWrite, MPUSBReadInt.
DWORD dwMilliseconds); // Input
Nota: Para utilizar MPUSBReadInt(), el
formato de pEP tiene que ser
“\\MCHP_EPz_ASYNC”. Esta opción sólo está handle: Input: Identifica la pipe del Endpoint
disponible para un Endpoint interrupción IN. que se va a leer. La pipe unida tiene que
La pipe de datos abierta con “_ASYNC” debe crearse con el atributo de acceso MP_READ.
almacenar datos con el intervalo En conclusión, “handle” es el número de
especificado en el Endpoint descriptor con pipe que nos arrojó la instrucción anterior
un máximo de 100 recepciones. Cualquier con dwDir=1.
otro dato recibido después de llenar el
buffer del driver se ignora. La aplicación del pData: Output: Puntero al buffer que recibe
usuario tiene que llamar MPUSBReadInt() a el dato leído de la pipe. El formato del dato
menudo sin superar el máximo de 100. es un arreglo de N bytes, donde N es el
número de bytes que maneja el “device” en
dwDir: Especifica la dirección del Endpoint: el arreglo que envía a la PC, generalmente se
¢ MP_READ: para MPUSBRead y declara al inicio del programa en el PIC.
MPUSBReadInt
¢ MP_Write: para MPUSBWrite dwLen: Input: Especifica el número de bytes
que se espera leer de la pipe.
Se abre un pipe a la vez (hay que usar dos
pLenght: Output: Puntero al número de
veces ésta instrucción), con dwDir=1 se abre
bytes leídos. MPUSBRead pone este valor a
la pipe para leer y con dwDir=0 se abre la cero antes de cualquier lectura o de
pipe para escribir al PIC, el resultado que nos chequear un error.
arroja ésta instrucción es el número de pipe
que nos asigna el sistema operativo. dwMilliseconds: Input: Especifica el intervalo
de time‐out en milisegundos. La función
dwReserved: No asignado por el momento, vuelve si transcurre el intervalo aunque no
el valor por omisión es cero. se complete la operación. Si
dwMilliseconds=0, la función comprueba los
datos de la pipe y vuelve inmediatamente. Si
El formato típico de la instrucción es: dwMilliseconds es infinito, el intervalo de
MPUSBOpen(0, vid_pid, out_pipe, dwDir, 0) time‐out nunca termina.
Transferencia de datos entre MATLAB, el puerto USB 2.0 y PIC18F2455 de Microchip™ 7 / 15
Transferencia de datos entre MATLAB, el puerto USB 2.0 y PIC18F2455 de Microchip™ 8 / 15
Transferencia de datos entre MATLAB, el puerto USB 2.0 y PIC18F2455 de Microchip™ 9 / 15
Transferencia de datos entre MATLAB, el puerto USB 2.0 y PIC18F2455 de Microchip™ 10 / 15
Transferencia de datos entre MATLAB, el puerto USB 2.0 y PIC18F2455 de Microchip™ 11 / 15
Para poder iniciar el enlace con el PIC es
necesario que se haya concluido
Transferencia de datos entre MATLAB, el puerto USB 2.0 y PIC18F2455 de Microchip™ 12 / 15
Transferencia de datos entre MATLAB, el puerto USB 2.0 y PIC18F2455 de Microchip™ 13 / 15
data_in = eye(1,64,'uint8'); En caso de perderse la comunicación
con el PIC ( en casos donde el programa en
g. Escriba los datos de la pipe (solamente si MATLAB genere errores por cuestiones
la pipe está abierta) Formato:: ajenas a la comunicación) desinstale del
dispositivo “Microchip Custom USB Device”
calllib('libreria', 'MPUSBWrite',
desde el administrador de dispositivos,
my_out_pipe, data_out, uint8(64),
desconecte el PIC del puerto USB, descargue
uint8(64), uint8(10));
la librería de memoria desde el MATLAB con
De donde: “unloadlibrary librería” en la línea de
comandos de MATLAB y resetee el PIC.
data_out = eye(1,64,'uint8'); Conecte de nuevo el PIC al puerto USB de
su computadora y con eso es suficiente para
h. Cierre la(s) pipe(s) abierta(s), cada vez que restaurar las comunicaciones entre MATLAB
finalice el programa, ya que si quedan y el PIC.
abiertas windows genera errores y se pierde
3. Pruebas finales y correcciones.
la comunicación.
Antes de compilar el programa y
Formato:
grabarlo en el PIC es necesario asegurarse
calllib('libreria', 'MPUSBClose', de que antes de abrir el archivo a compilar
presione el botón “inicio” del mismo
my_in_pipe);
compilador (ubicado en la parte superior
calllib('libreria', 'MPUSBClose', izquierda) Î “Close all” . De no hacer esto
es posible que se compile el archivo anterior
my_out_pipe);
con el que Ud haya trabajado.
IMPORTANTE: Para el enlace con la PC por USB es muy
importante conectar el capacitor (C4) de
Al terminar el programa descargue
0.1uF como se indica en el diagrama, ya que,
la librería de memoria, ya que no se puede
si se omite generará un error al momento
cargar más de una vez.
del enlace. También es muy importante
Formato: habilitar el fusible VREGEN para que Vusb
sea activado.
unloadlibrary librería;
Cuidar de no invertir las terminales D‐ y
D+ del conector USB a la hora de
Una vez enlazado con el PIC, los implementar el Hardware.
datos pueden fluir las veces que sea
necesario de un sentido a otro y Es importante considerar la función del
manipularlos como se desee, ya que se tiene PLL del PIC ya que de acuerdo al valor de la
el completo control del software del PIC (por frecuencia del cristal depende el valor de la
parte del Compilador C) y en la PC (por parte multiplicación de la frecuencia del reloj para
de MATLAB). generar los 48Mhz necesarios para el USB.
Transferencia de datos entre MATLAB, el puerto USB 2.0 y PIC18F2455 de Microchip™ 14 / 15
"C:\MICROCHIP SOLUTIONS\USB
TOOLS\MCHPUSB CUSTOM
DRIVER\MCHPUSB DRIVER\ MCHPUSB
DRIVER RELEASE NOTES.HTM"
BIBLIOGRAFÍA
http://www.usb.org/developers/docs/
http://slalen.iespana.es/programacion/dato
s/MPUSBApi.pdf
www.google.com.mx búsqueda “PIC USB”.
http://www.hobbypic.com/
http://www.todopic.com.ar/foros/index.php
?topic=13418.0;do=Bookmark
Transferencia de datos entre MATLAB, el puerto USB 2.0 y PIC18F2455 de Microchip™ 15 / 15
5 4 3 2 1
SALIDAS
+5V
D D
+5V
D1 D2 D3 D4 D5 D6 D7 D8
R1 R2 R1 R2 R2 R2
10K 10K 10K 10K 10K 10K C5
0.1uF
20
R4 R5 R4 R5 R4 R5 R4 R5
2 150 150 150 150 150 150 150 150
VDD
RA0 RA0
RA1 3 RA1
RA2 4 RA2
RA3 5 RA3
RB0
RB1
RB2
RB3
RB4
RB5
RB6
RB7
RA4 6 RA4/T0CKI/C1OUT/RCV
RA5 7 RA5/SS RC6/TX/CK 17
RC7/RX/DT/SDO 18
+5V R6 R7 11
10K 100 RC0/T1OSO/T13CKI
C 1 13 Entrada del C
MCLR/VPP/RE3 RC2
cable USB
RB0 21 RB0/INT RC1 12
+5V S1 22 U2 _
RB1 RB1
SW 23 PIC18F2455
J4 RB2 RB2
RB3 24 J1
RB3
1 RB4 25 RB4 1 J1-USB
USB
OSC2/CLKO/RA6
2 RB5 26 RB5 RC4/D-/VM 15 2
27 16 1
3
28
RB6 RC5/D+/VP 3 D+ + + 2 GND
4 RB7 4 3 + + 4
OSC1/CLKI
14 D-
5 RB6 VUSB C4 Vista Inferior
RB7
0.1uF
GND
GND
ICSP
10
19
9
B
8 B
X1
12 MHz
RA0
RA1
RA2
RA3
RA4
RA5
J3 C7 C8
+5V +12V 22pF 22pF
POWER SUPPLY
S1 S1 S1 S1 S1 S1
4 SW SW SW SW SW SW
3
2
1
C2
2200uF C1 ENTRADAS
1000uF