DIVISION DE CIENCIAS BASICAS E INGENIERIA

DEPARTAMENTO DE ELECTRONICA

LICENCIATURA EN INGENIERIA ELECTRONICA

PROYECTO INTEGRAL DE INGENIERIA ELECTRONICA

“DISEÑO E IMPLEMENTACION DE UN SISTEMA DE CONTROL POR RF PARA LA ELEVACION VERTICAL DE UN HELICOPTERO”

ALUMNO: SEGUNDO BAUTISTA PEDRO ENRIQUE 204304741

ASESORES: JORGE MIGUEL JAIMES PONCE IRMA IRASEMA SILLER ALCALA 16248 166250

FECHA DE ENTREGA: 21 DE ABRIL DEL 2010

1

OBJETIVO GENERAL: Diseñar un sistema de control utilizando lenguaje visual en una PC, que pueda recibir información por medio de un sistema digital y un sistema de RF comercial, para controlar la elevación de un helicóptero.

OBJETIVOS PARTICULARES:      Diseñar y desarrollar el software en lenguaje visual en PC para implementar una ley de control clásica. Diseñar e implementar el software de comunicación por el puerto USB de la PC hacia un sistema digital. Diseñar el software y un sistema digital que establezca comunicación por el puerto USB con la PC. Diseñar el software y hardware necesarios para poder controlar los interruptores de mando de control remoto. Diseñar el software para recibir información por medio de un modulo de RF comercial.

2

ÍNDICE
CAPITULO 1 1.1 1.2 “INTRODUCCION” Antecedentes…………………………………………………......................06 Descripción técnica........................................................................................06

CAPITULO 2 2.1 2.2 2.3 2.4

“USB” Introducción………………………………………………….......................08 Nivel físico…………………………………………………………………09 Conexión / desconexión en caliente (plug&play)…………………………..11 Arquitectura………………………………………………….......................11 2.4.1 Interconexión USB o topología USB……………….........................12 2.4.2 Dispositivos USB…………………………………….......................13 2.4.2.1 2.4.2.2 Los Hubs………………………………....................14 Las funciones……………………………………….15

2.4.3 El Host o controlador anfitrión USB…………………………………16 2.5 2.6 Protocolo USB……………………………………………………………...17 Tipos de transferencia de datos…………………………………………….18 2.6.1 Transferencia de control……………………………………………18 2.6.2 Transferencia isócrona……………………………………………19 2.6.3 Transferencia de interrupción………………………………………19 2.6.4 Transferencia bulk………………………………………………….19 2.7 2.8 2.9 Clases de dispositivos………………………………………………………20 Enumeración y descriptores de dispositivos………………………………..24 Driver……………………………………………………………………….25

CAPITULO 3 3.1

“COMUNICACION DE UN SISTEMA DIGITAL CON LA PC” Introducción………………………………………………………………...26

3

8 Creación de programas ejecutables…………………………………48 4.55 Algoritmo de control PI…………………………….2.47 4..2.2 Funciones………………………………………………………….37 3.1 Configuración PIC………………………………………………….7 Tipos de datos………………………………………………………48 4.3.44 4.2 Tipos de datos………………………………………………………28 3.3 Desarrollo de aplicación en Visual Basic 6.6 Métodos…………………………………………………………….4 Circuito del sistema digital…………………………………………………41 CAPITULO 4 4.2.58 CAPITULO 5 “MODULO RECEPTOR DE RF” 4 .1 Estructura de un programa………………………………………….2 Compilador C de CCS……………………………………………………26 3.0………………………………49 4.2 “COMUNICACIÓN DE LA PC CON UN SISTEMA DIGITAL” Introducción……………………………………………………………….2..3 Objetos y Propiedades……………………………………………45 4.2..27 3.2.2.43 4.3.32 3.2 Pantalla de Código…………………………………………………..49 4.1 4.4 Nombres de objetos………………………………………………..31 3.2.2 Formularios y Controles……………………………………………45 4.43 Visual Basic 6...1 Modo de Diseño y Modo de Ejecución…………………………….3.1 4.46 4.3 Programación del PIC18F2550…………………………………………….5 Eventos…………………………………………………………….0……………………………………………………………...51 4.2.3..1 Pantalla de Controles……………………………………………….2.2.3.47 4.3 USB CDC………………………………………………………….2 Escalamiento del Dato del sensor………………….2.3.3.30 3.2.

2 5..1 5.3 Introducción……………………………………………………………….5..60 Programación del PIC………………………………………………………61 CAPITULO 6 APENDICE A “CONCLUSIONES Y EXPECTATIVAS” “HOJAS DE DATOS DE LOS DISPOSITIVOS” 5 ..60 Circuito del modulo receptor de RF……………………………………….

solo pocos países como estados unidos y Alemania dominan la tecnología de helicóptero no tripulado. dentro de los PIC que tienen modulo USB existen el PIC 18F2550 y 18F4550. además de que existen módulos externos los cuales se pueden conectar a cualquier PIC. este compilador contiene librerías para simplificar la comunicación del PIC con la PC a través del USB 6 . en esta aplicación no se requiere más de dos puertos. por lo que se debe pensar en una alternativa para crear interfaces con las PC. realizo un experimento de despegue y aterrizaje automáticos el 27 de enero del 2008 en Anyang de la provincia de Henan. al poder controlar la altura a la que se encuentra el helicóptero. Con la realización de este proyecto se ha logrado dar un paso en el diseño e implementación de un helicóptero no tripulado.2 Descripción técnica.CAPITULO 1 “INTRODUCCIÓN” 1. la altura es una de las tantas variables que se deben controlar para lograr un diseño muy eficiente de un helicóptero no tripulado. 1. Microchip cuenta con familias de PIC que tienen módulos USB. lo que marca que China ya figura entre los países avanzados en este dominio tecnológico. en este proyecto se opto por crear una interfaz a través del USB. Ltd. Es de muy amplio uso este tipo de helicóptero capaz de realizar operaciones de detección a distancia. Para la programación del PIC se utilizo el compilador C de CCS. En la actualidad cada vez son menos las PC que tienen puertos COM (RS-232). El helicóptero no tripulado “WD100”. Para poder lograr comunicación por USB se opto por utilizar el PIC 18F2550 debido a que cuenta con modulo USB y un menor número de puertos.1 Antecedentes. desarrollado por Hexiang Aviation Technology Co. exploración de recursos y geodesia. En la actualidad.

con ayuda de esta aplicación se puede monitorear y controlar la altura del helicóptero. con la ayuda de un sensor infrarrojo.1 se puede observar el diagrama bloques del proyecto: Fig. y con otro modulo Tx-Rx se controla los motores del helicóptero con la técnica de PWM.0 para poder establecer la comunicación entre la PC y el Sistema digital. se opto por usar módulos de RF. 7 . Para controlar la distancia se ha implementado un algoritmo de control PI para obtener una mejor respuesta de todo el sistema.1 Diagrama a bloques del Proyecto. En la Fig. con un modulo Tx-Rx (transmisor-receptor) se monitorea la distancia a la que se encuentra nuestro helicóptero. El proyecto consta de cuatro bloques los cuales se irán explicando uno a uno en los capítulos siguientes. Para poder monitorear y controlar la altura del helicóptero a distancia.Del lado de la PC se desarrollo una aplicación en Visual Basic 6.

Intel.5 Mbps y esta pensada para periféricos que no requieren un gran ancho de banda. ratones. que describe un canal serie que soporta una gran variedad de periféricos de media y baja velocidad.9. 8 . se añade detalles y precisiones a la norma inicial y se vuelve el estándar mínimo que debe cumplir un dispositivo USB.0 y se establece dos tipos de conexión: La primera denominada velocidad baja (“Low speed”). como ratones o joysticks. es de 12 Mbps. ofrece 1. CD-ROMs. cámaras digitales y otros dispositivos multimedia.0. En 1995 fue publicado USB 0. y que permite mezclar dispositivos y aplicaciones isócronas y asíncronas. En la Tabla 2. Microsoft y NEC.CAPITULO 2 “USB” 2. módems.1 Introducción. impresoras. La segunda denominada velocidad completa (“Full speed”). audio y vídeo comprimido. con soporte integral para transferencias en tiempo real (isócronas) como voz. En 1996 se publica USB 1. Por lo tanto.1 se muestran características y aplicaciones del USB dependiendo su velocidad.1. monitores. entre los dispositivos USB más característicos se pueden citar teclados. escáneres. es una variación de la norma compatible con las anteriores y permite velocidades de hasta 480 Mbps denominada alta velocidad (“High speed”). En 1998 fue publicada USB 1. USB (Universal Serial Bus) es una especificación de las empresas COMPAQ. joysticks. y esta destinada a los dispositivos más rápidos. En 2000 fue publicada la versión final USB 2. dispositivos de audio (como micrófonos o altavoces digitales).

A nivel físico. Facilidad de uso. Imágenes Facilidad de uso. Periféricos de Juegos.1 Características y aplicaciones de USB 2. dependiendo de sus características eléctricas). Plug and Play. Video Alta Velocidad Almacenamiento 25x10 MBPS Video. Existen dos tipos de conectores USB: El conector de serie A. Los dispositivos LS van obligatoriamente equipados con un cable de longitud adecuada (hasta unos 3m. Almacenamiento. Plug and Play. Ancho de Banda Garantizado. Múltiples Dispositivos Tabla 2. 9 . Interactivos 10/100KBPS Telefonía. conector plano es el conector usado por los dispositivos USB para conectarse directamente a un host o a un puerto ascendente de un hub. Todos los dispositivos USB deben tener el estándar Serie A. USB utiliza un cable de 4 conductores para transmitir una señal diferencial (D+ y D-) y alimentación (VBus = 5V y GND) por medio de conexiones punto a punto. Audio Facilidad de uso.2 Nivel físico. Gran Ancho de Banda. POTS. mientras que los FS pueden ir equipados con un cable o utilizar cables independientes de hasta 5m (también dependiendo de sus características eléctricas). presentan los cuatro conectores correspondientes a los cuatro conductores alineados. Audio Media Velocidad Video Comprimido 500 KBPS/10 MBPS RDSI. Impresora. Ratón. Múltiples Dispositivos Bajo Costo. Múltiples Periféricos Bajo Costo. Baja Velocidad Plug and Play. Periféricos de Realidad Virtual ESPECIFICACIONES Bajo Costo. PBX.Velocidad Características Dispositivos Aplicaciones Teclado.

2 Identificación de Cables.El conector Serie B es la parte de conexión del dispositivo al host como descendente. y se emplean en los dispositivos que deben conectarse a un cable USB.2 se puede ver la identificación de cables dependiendo el número de Pin o color del cable. presentan los contactos distribuidos en dos planos paralelos. el conector de la izquierda es el de serie A y el de la derecha es el de la serie B. Numero de Pin Nombre de la señal Color de identificación 1 2 3 4 VUSB DD+ Gnd Rojo Blanco Verde Negro Tabla 2. 2. 2.1 Conectores USB En la Tabla 2. 10 . Por ejemplo impresoras. Fig. En la Fig. dos en cada plano.1 se muestran los dos tipos de conectores USB. y módems. scanner.

necesario para permitir transferencias semi-dúplex. para indicar el EOP (fin de paquete) y para generar reset. la polarización del transmisor fuerza un estado SE0. para asegurar transiciones en la línea y permitir que la PLL del receptor se mantenga sincronizada). Detección de dispositivo y discriminación FS/LS: cuando el transmisor deja la línea en IDLE. La comunicación es bidireccional y semi-dúplex. Esta basada en tres áreas de responsabilidad: La interconexión USB Los dispositivos USB 11 . Cuando un Hub detecta una nueva conexión se lo comunica al Controlador USB. El EOP (fin de paquete) se indica mediante una secuencia SE0 (2 bits) + J (1 bit) + IDLE. El SOP (principio de paquete) se indica mediante una transición IDLE a K. y utiliza codificación auto reloj NRZI (la línea cambia de nivel si se transmite un 0 y no cambia si transmite un 1) con "bit stuffing" (inserción de un cero tras la transmisión de 6 unos.a 0V. Reset: transmisión de SE0 durante >= 10 ms. el sistema interroga al nuevo dispositivo.  2. 2. detectar la conexión y desconexión de dispositivos y discriminar entre dispositivos FS y LS. Se utiliza para detectar la conexión/desconexión de dispositivos. USB permite conectar y desconectar un nuevo dispositivo sin tener que reiniciar el sistema. receptores diferencial y S/E y resistencias de terminación con los que pueden transmitir y detectar varios estados eléctricos distintos en la línea:       Transmisión/Recepción diferencial de bits: Estados DIFF0 y DIFF1. Adicionalmente el sistema carga el manejador adecuado al tipo de dispositivo con lo que el usuario puede empezar a trabajar con el mismo inmediatamente. denominados también estados J y K. si hay un dispositivo conectado su polarización fuerza un estado J (DIFF0 si LS ó DIFF1 si FS).4 Arquitectura. Algunos sistemas operativos llaman a este proceso "Bus Enumeration". IDLE: reposo o línea en alta impedancia. y si no lo hay. determina sus propiedades y posibilidades y lo configura. SE0 (Single-Ended 0): Ambas señales D+ y D.3 Conexión/desconexión en caliente (Plug&Play). Los dispositivos disponen de un transmisor diferencial.El USB soporta diferentes tamaños de paquetes de información esto permite el poder conectar diferentes tipos de dispositivos de almacenamiento y proporciona diferentes tipos de velocidades de transmisión de datos para adaptarse a los diferentes tamaños de los buffers controlando el flujo de almacenamiento.

El estándar presenta un ámbito de interconexión. un disco duro. El hecho de que sean siete capas esta basado en la perdida de señal que podría generar los accesos jerarquizados.4. para conectar los dispositivos USB con el host USB o controlador anfitrión. En la Fig.1 Interconexión USB o topología USB. Fig. esto quiere decir que cada dispositivo tiene una funcionalidad específica. Esta estructura permite conectar hasta 127 dispositivos a la vez. que en la figura se identifica como función. estructurando la interconexión en siete capas en estrella y cada estrella tiene como centro un Hub raíz.El host o controlador anfitrión USB 2. 2. denominándolo como dispositivo compuesto ya que proporciona un modo de unión y una funcionalidad añadida que en ningún caso pueden separarse. Cada segmento es una conexión punto a punto entre el host y un Hub o entre el host y un dispositivo que proporciona una nueva facilidad al host tal como un micrófono digital.2 se detalla esta estructura y se presenta un elemento que puede considerarse la conjunción de un Hub y una función. etc. 12 . 2.2 Conexión de 7 capas en estrella.

dispositivos de almacenamiento y otros. De un modo genérico podemos distinguir dos grupos.   Los Hub. impresoras.3 se presenta el modo de interconexión y la forma en que se realizan dichas conexiones. Fig. cámara digital.2. el monitor asume las funcionalidades dadas a través del teclado y añade al bus funcionalidades de sonido e imagen.2 Dispositivos USB. interfaces humanos (HID). 13 . tales como la facilidad de conexión para un joystick digital. Bajo la denominación de dispositivos USB se enmarcan los Hub. Las Funciones. 2. y el ratón. Estos pueden ser Hubs que proporcionan conexiones al USB o dispositivos que añaden funcionalidades al sistema.3 Interconexión de varios Hub. 2. disco duro integrado. de tal modo que a través del teclado se insertan en el bus las funcionalidades de un lápiz. tales como operaciones de configuración y liberación. por último los puertos del PC atienden por un lado el bus de teclado y monitor y por otro la funcionalidad de telefonía por otro puerto y la posible conexión de otros periféricos vía un Hub para otras funcionalidades diferentes.4. En la Fig. para altavoces o para dispositivos de almacenamiento. Estos dispositivos presentan un interfaz estándar de modo que entienden el protocolo de USB y tienen la capacidad para responder a operaciones propias del estándar USB. etc. Así mismo.

para pasar información entre el puerto Upstream y los puertos Downstreams. USB permite hasta 6 niveles. De una forma selectiva reparten datos y alimentación hacia sus puertos Downstream y permiten la comunicación hacia su puerto de retorno o Upstream. acepta datos del PC para un periférico por su puerto Dowstream de y los distribuye a los 4 puertos Upstream si fuera necesario. Como a los Hub se conectan los dispositivos en estrella.4 se puede observar un Hub. por ejemplo. En la Fig. de forma que se pueden encadenar varios Hubs para formar una topología en varios niveles. unos elementos esenciales y especiales son los Hubs (concentradores). 2.1 Los Hubs. generan alimentación hacia los dispositivos e incorporan la terminación de las líneas. y también estarán disponibles como elementos independientes. y en el nivel 0 (Raíz o Root) se encuentra el Controlador USB. Los Hubs podrán ir integrados en algunos dispositivos (del estilo de teclados. completa y baja velocidad. 2. que proveen conectividad (los dispositivos no se conectan entre sí directamente. Los Hubs disponen de una conexión "Upstream" hacia el ordenador y una o varias conexiones "Downstreams" hacia dispositivos u otros Hubs. impresoras y monitores). 14 . Los aspectos más relevantes de su funcionalidad son:      Proporcionar un dominio de conectividad Gestionar la alimentación eléctrica Detectar la conexión y desconexión de los dispositivos Detectar las caídas del bus y las recuperaciones del mismo Soportar dispositivos de alta.2. Los Hubs son como distribuidores inteligentes de datos y alimentación.Es importante resaltar que solamente los Hub tienen la capacidad de proporcionar punto de acceso adicional al USB y las Funciones dan nuevas facilidades al host directamente o a través del Hub. que incorpora un juego de registros a través de los cuales el Controlador USB configura el hub y controla y monitoriza los puertos Downstream. y de un Controlador. sino cada uno a un Hub). que controla todo el tráfico de información en el bus.4. y hacen posible la conexión de 127 dispositivos a un único puerto USB. la topología USB se denomina Estrella en Niveles. aunque bajo ciertas restricciones topológicas podrían utilizarse Hubs alimentados desde el bus. detectan la conexión y desconexión (plug&play) de dispositivos y si son FullSpeed o LowSpeed. Dentro de la arquitectura USB. Normalmente los Hubs serán autoalimentados. Un hub de 4 puertos. El Hub dispone de un Repetidor.

Un hub esta formado por tres componentes:  El Hub Repetidor es responsable de la funcionalidad de conexión y desconexión entre los puertos Upstream y Downstream y gestiona la señalización para situaciones excepcionales tales como la detección de conexión y desconexión del bus y de la conexión y desconexión de los periféricos que estén conectados.4 Hub de 6 y 4 puertos. de modo que hace posible la unión entre dispositivos de alta y baja velocidad. Es identificada como un dispositivo periférico que con un cable se conecta a un puerto de un hub.   2.2 Las funciones. Una función es un dispositivo USB que esta diseñado para transmitir y recibir datos o información de control sobre el bus USB. Cada Función tiene información de la configuración que describe sus facilidades y funcionalidades y no puede funcionar si antes el host no lo ha configurado en base a esa 15 . que es visto por el host como un hub con uno o más dispositivos USB que no pueden ser desconectados o conectados de modo individual.2. El Traductor de transacciones realiza la adaptación de transacciones que sean de diferente velocidad. monitorizar y controlar los flujos de información de los puertos de este. El Hub Controlador proporciona el mecanismo de comunicación hacia y desde el host y mediante información de los estados de un Hub y algunos comandos de control puede configurar. 2.Fig. sin embargo físicamente puede incorporar múltiples funciones e incluso llevar dentro un hub en cuyo caso se conoce como un dispositivo compuesto.4. Presenta un puerto Upstream que le conecta al hub ascendente en dirección del host y varios puertos descendentes que conceden conexiones a otros hub de nivel inferior o a otras funciones.

El controlador también es responsable del control de flujo de datos entre el periférico y la CPU. Una vez se ha producido la conexión correctamente. Un ejemplo de Función seria en lo relativo al interfaz humano un ratón. 16 . 2. pudiendo ser una combinación de hardware. En lo relativo al almacenamiento masivo un CD-ROM. floppy o un DVD. lo que significa asignar ancho de banda y selección de las opciones de configuración de su función específica. reside dentro del PC y es responsable de las comunicaciones entre los periféricos USB y la CPU del PC.4. que a su vez. tanto si se detecta una conexión como una desconexión. En la Fig. el controlador lo comunica a la CPU. Es también responsable de la admisión de los periféricos dentro del bus.5 Ejemplos de funciones USB.3 El Host o controlador anfitrión USB. el controlador asigna al periférico los recursos del sistema que éste precise para su funcionamiento. En lo relativo a dispositivos de tratamiento de imágenes seria un scanner o una cámara. el controlador determina su tipo y le asigna una dirección lógica para utilizarla siempre en las comunicaciones con el mismo. Fig. firmware y software. El controlador es único. 2. Para cada periférico añadido. un controlador de un juego. etc. lo transmite al usuario.información.5 se pueden observar algunos ejemplos de las funciones antes mencionadas. En lo relativo a comunicaciones seria un periférico que aporta la filosofía de comunicaciones Bluetooth. 2. Si se producen errores durante la conexión.

Esto es posible añadiendo concentradores adicionales. Conectando otro hub de 4 puertos a uno de los 4 puertos del primero. 17 . Este es el primer concentrador de toda la cadena que permite a los datos y a la energía pasar a uno o dos conectores USB del PC. el PC puede soportar hasta 127 periféricos USB. 2.5 Protocolo USB. 2. si el PC tiene un único puerto USB y a este le conectamos un Hub de 4 puertos. Esta arquitectura permite el diseño de dispositivos extremadamente simples y de bajo costo. y controlando la conexión lógica entre el sistema y las funciones internas de cada dispositivo. generando los tokens de transferencias de datos a 12 Mbps o a 1. por medio de las cuales controla los modos Reposo/Activo de los dispositivos. Sin embargo. y el dispositivo que detecta su dirección en el token responde y lleva a cabo la transferencia de datos con el controlador. como máximo. El controlador USB transmite tokens que incluyen la dirección del dispositivo destino. El controlador USB también maneja el consumo en el bus a través de las funciones Suspender/Continuar. y de allí a los 127 periféricos que.6 se representa la creación de los 7 puertos comentados a través de dos hub.6 Creación de 7 puertos con 2 Hub. puede soportar el sistema. el Controlador USB maneja la parte más compleja del protocolo. Por ejemplo. el hub de 4 puertos permite realizar 4 conexiones descendentes. De esta manera. De esta forma. Fig.5 Mbps. habremos creado un total de 7 puertos a partir de un puerto del PC. añadiendo concentradores. El protocolo a nivel físico se basa en tokens (testigos). el PC también contiene el concentrador raíz o root. 2. En la Fig. el PC se queda sin más puertos disponibles.Además del controlador.

cámaras fotográficas.   La fase de Datos (opcional) se compone de los paquetes de datos que se transfieren entre el Controlador USB y el dispositivo. Cada paquete se compone de los campos PID. USB soporta 4 tipos de transferencias de datos:     Control. para transferencias de pocos datos.1 Transferencia de control. y CRC5.USB divide el tiempo en Tramas de 1ms. etc. las cuales se componen a su vez de Paquetes. como impresoras. para transmisión de información con ancho de banda y latencia garantizadas. Dato y Validación (Handshake):  La fase de Token se compone de un paquete de Token enviado por el Controlador USB. El paquete contiene los campos: o PID (Product-ID. Se compone sólo de un campo PID. Todos los PIDs van protegidos por bits redundantes. y siempre está presente en toda transacción. Permite una comunicación periódica y continua entre el sistema y el dispositivo. el Controlador USB indica el principio de cada Trama y la transmisión hacia dispositivos LS mediante tokens especiales. identifica el tipo de paquete). no periódicas. de baja frecuencia pero con unos ciertos límites de latencia. durante las cuales se llevan a cabo las comunicaciones a través de Transacciones. y CRC16.6. para configuración y control de dispositivos y para manejo del bus. o Dirección del elemento destino (7 bits de dispositivo + 4 bits de elemento interno al dispositivo). telefonía y vídeo. 2. Se utiliza un sistema de detección y corrección de errores bastante robusto tipo CRC ("Cyclical Redundancy Check"). escáneres.Las transacciones se componen de 3 fases Token. para transferencias de grandes cantidades de datos con dispositivos asíncronos. La fase de Validación (opcional) se usa para indicar el resultado de la transacción. Adicionalmente. Se desarrollan en 3 Transacciones: 18 . Interrupción. Bulk. necesario para aplicaciones como audio. 2. Datos.6 Tipos de transferencias de datos. Isócrono.

en la que se envía al dispositivo un paquete que específica la operación a ejecutar. Sólo son utilizables por dispositivos FS.   Transacción de Configuración (Setup). 32 ó 64 bytes para Endpoints FS. y de 8 bytes para Endpoints LS.2 Transferencia isócrona Este proceso se utiliza cuando es necesario enviar datos en tiempo real. 2. La información útil por paquete puede ser de 8. en las que se transfieren los paquetes de datos en el sentido indicado por la Transacción de Configuración. Ocupa 8 bytes.6. Transacción de Estado.4 Transferencia bulk. La información útil por paquete puede oscilar entre 1 y 64 bytes para dispositivos FS y entre 1 y 8 bytes para dispositivos LS.3 Transferencia de interrupción. y se puede utilizar tiempo adicional siempre que las necesidades de los tráficos isócrono y de interrupción lo permitan. Las transacciones se procesan por medio de un mecanismo "best effort". Cero o más Transacciones de Datos. Aseguran una transacción (paquete).6. Si el sistema no puede garantizar tiempo suficiente como para manejar una nueva conexión de interrupción (transmitir un nuevo paquete dentro del periodo máximo requerido). simplemente no se establece la conexión. y los LS entre 10 y 255ms de periodo máximo de servicio). Incorpora detección de errores y retransmisión de datos.6. según el cual el Controlador USB las va procesando en función del tiempo disponible en cada Trama. en la que el receptor informa del estado final de la operación. Se procesan por medio de un mecanismo "good effort". 16. en el que el sistema aprovecha cualquier ancho de banda disponible y en el momento en que esté disponible (en otras palabras. El sistema puede asignar como máximo el 90% del tiempo de Trama para transferencias isócronas y de interrupción. no se garantiza una latencia ni un ancho 19 . Los errores no se recuperan de tal modo que cuando la información no llega a su tiempo se descarta. Los datos son enviados con una cadencia exacta ajustada a un reloj. Como mínimo se reserva el 10% del tiempo de Trama. dentro de un periodo máximo (los dispositivos FS pueden solicitar entre 1 y 255ms. Es utilizada por dispositivos de full speed y la información útil por paquete es de 1 a 1023 bytes. 2. de modo que la transmisión es a velocidad constante. 2. También incorporan mecanismos de detección de errores (CRC) y de recuperación/retransmisión de datos.

como la funcionalidad del dispositivo. denominada “pipe”. Existe una relación entre driver y dispositivo que opera del siguiente modo: En USB solo se permite que la comunicación entre el driver y el hardware del dispositivo sea a través de una vía de comunicación. Esto hace que dicha información pueda utilizarse para que el sistema localice un driver que pueda controlar tanto la conectividad entre el interfaz y el sistema. 16. 32 ó 64 bytes. el dispositivo queda organizado como un conjunto de interfaces donde cada interfaz específica que partes del hardware del dispositivo interactúa con el sistema USB (se denominan endpoint) y el sistema establece todas las vías de comunicación (pipes) necesarias entre el sistema y cada uno de los endpoint disponibles en esa configuración del dispositivo.de banda mínimos). etc.7 se puede observar la representación de las pipes para cuatro endpoint: 20 . estos son los Drivers de Clase. Incorporan mecanismos de control de errores para garantizar la entrega de datos. La información útil por paquete puede ser de 8. 2. Es importante resaltar que el dispositivo puede contemplar varias configuraciones con distintos conjuntos de “endpoint”. Cuando un dispositivo USB se conecta a un sistema y este lo reconoce y lo configura. la misma forma de comunicarse. tanto a nivel de datos como a nivel de control. A aquellos grupos de dispositivos que tienen similares características tales como formatos de datos similares. Una Clase se utiliza para describir la forma en que un interfaz se comunica con el sistema. 2. proporcionando información sobre la funcionalidad del interfaz. En la Fig. Se puede utilizar el tiempo de Trama reservado y no consumido por transferencias de Control (10%).7 Clases de dispositivos. se le denomina Clase USB. Las distintas Especificaciones de Clase USB permite que los fabricantes desarrollen dispositivos que puedan trabajar con drivers que controlan a los dispositivos en base a la información descriptiva dada por el propio dispositivo. para el intercambio entre aplicaciones que se ejecutan en el host y los distintos endpoints de los dispositivos USB. El sistema elige una configuración en base a la funcionalidad específica que se precise del dispositivo.

En resumen lo denominado como Descriptores. Sobre estas pipes pueden llevarse a cabo diferentes tipos de transacciones y existen dos tipos de pipes: Pipe de Control o Mensaje: Es una vía de comunicación bidireccional entre el host y dos endpoint de control en un dispositivo USB. que veremos más adelante.Fig. número y tipo de endpoint que tiene en cada configuración. siendo uno de Salida y otro de Entrada y todos los dispositivos disponen de estos endpoint en al dirección 0 para que siempre el sistema pueda establecer una pipe de control. incluso antes de la configuración. 2. pudiendo a través de ella leer toda la información descriptiva del dispositivo para saber el tipo de dispositivo. 2. 21 . posibles configuraciones.7 Representación de Pipes. Los datos que se mueven a través de este pipe tienen una estructura caracterizada por las especificaciones del Bus USB. protocolo que soporta. En la Fig.8 se puede observar la representación de una Pipe de control o mensaje. etc.

entre el host y un endpoint con transferencias tipo Bulk. Interrupción o Isócrono es decir los datos no están estructurados como indica USB.9 se puede observar la representación de una Pipe de Stream.Fig. En la Fig. Pipe de Stream: Es una vía de comunicación unidireccional. 2.8 Pipe de control o mensaje. 22 . 2.

9 Pipe de Stream En la Tabla 2. Tabla 2.3 Características de las Pipes. 23 .Fig.3 se muestran las características de cada tipo de pipe. 2.

Las configuraciones pueden ser activadas usando una transferencia de control estándar SET_CONFIGURATION. Por ejemplo sobre un dispositivo multifunción tal como una videocámara puede tener tres configuraciones alternativas. Un Descriptor es una estructura de datos que identifica toda la información descriptiva del dispositivo al sistema Existen cinco descriptores estándar: Descriptor de Dispositivo: Describe información de carácter general sobre el dispositivo USB y es único por dispositivo. de tal manera que un Dispositivo de USB es una colección de posibles Configuraciones. configuraciones. cada Configuración es una colección de Interfaces y cada interfaz es una colección de Endpoint. Para seleccionar las configuraciones alternativas puede hacerse uso de la transferencia estándar SET_INTERFACE. según se activen. Tal como se describió en la transferencia de control. Un interfaz puede incluir configuraciones alternativas que permiten a los endpoint variar después de que el dispositivo haya sido configurado.Es importante definir el dispositivo USB en base a las clases. el micrófono o ambos a la vez.8 Enumeración y descriptores de dispositivos. Tiene la información que se aplica al dispositivo y a todas sus posibles configuraciones. La configuración por defecto es la cero. Descriptor de Configuración: Describe información sobre una configuración específica. esta es la enumeración que va desde 1 a 127 y en base a esto se puede leer el descriptor que contiene la estructura de datos sobre el dispositivo y sus propiedades. 24 . cuando un dispositivo se conecta por primera vez el controlador de host envía un paquete notificándole el número que le ha asignado. Existen varias clases de dispositivos:       Clase de Dispositivos de Almacenamiento Masivo Clase de Dispositivos de Impresión Clase de Dispositivos de Comunicaciones Clase de Dispositivos de Interconexión Clase de Dispositivos de Interfaz Humano Clase de Dispositivos de Tratamiento de Audio y video 2. interfaces y endpoint. la cámara. Cada configuración tiene una o más interfaces y cada interfaz puede tener 0 o más endpoints. Descriptor de Interfaz: Describe un interfaz específico dentro de una configuración. Estos no son compartidos entre interfaces dentro de una misma configuración a menos que el endpoint se utilice con configuraciones alternativas de la misma interfaz.

del dispositivo o el número de serie. es decir no es estándar USB entonces hay que navegar por datos de: Fabricante. puede ser necesario que un dispositivo precise varios drivers para controlarlos. Estos descriptores pueden ser vistos por las personas en formato Unicode. Subclase y Protocolo o Clase y Subclase Si no es localizado y el campo de Clase indica que pertenece a una Clase específica del fabricante.9 Driver. Producto y Versión del producto o Fabricante y Producto. 2.Descriptor de endpoint: Definen los requisitos de transmisión de cada dispositivo. El endpoint cero se usa parta las transferencias de control y no hay descriptor para este. el Sistema Operativo seleccionara una configuración para el dispositivo y seguirá buscando un driver para cada interfaz que haya en dicha configuración. Como ya se comento el driver es el conjunto de instrucciones con las que se controla el dispositivo y dado que un dispositivo puede estar formado por distintas interfaces. de modo que se simplifique el modelo común para los Sistemas Operativos y para los fabricantes de dichos drivers. Continuando por: Clase. 25 . Dado que los descriptores disponen de toda la información. luego es lógico que exista un forma de localizar y asociar drivers a dispositivos e interfaces. Subclase y Producto o Fabricante y Subclase. es a ellos a los que hay que acudir y la información a que se recurre dentro de la proporcionada por el driver es: Fabricante. Descriptores de cadenas: Son opcionales y proporcionan información adicional tal como el nombre acerca del fabricante. En caso de no localizar ningún driver.

basado en el microcontrolador PIC18F2550. Además suministra los drivers para diversos dispositivos como LCD.2 Compilador C de CCS. Un compilador convierte el lenguaje de alto nivel a instrucciones en código maquina. 3. El compilador C de CCS ha sido desarrollado específicamente para programar PIC. debido a la facilidad para lograr comunicación USB del PIC18F2550 con la PC y también la poca complejidad del lenguaje C ya que es un lenguaje muy común. relojes en tiempo real. 26 . En este capitulo se puede observar la realización de un software para poder comunicar un sistema digital. situado en el helicóptero. convertidores AD. obteniendo la máxima optimización del compilador con estos dispositivos. Dispone de una amplia librería de funciones predefinidas.CAPITULO 3 “COMUNICACION DE UN SISTEMA DIGITAL CON LA PC” 3.1 Introducción. un cross-compiler es un compilador que funciona en un procesador (normalmente en un PC) diferente al procesador de objeto. EEPROM serie. para el control de los motores del helicóptero. Los programas son editados y compilados a instrucciones maquina en el entorno de trabajo del PC. El software para el sistema digital se desarrollo con la ayuda del compilador de lenguaje C de CCS. con la PC a través del puerto USB. programas de preprocesado y ejemplos. Este sistema digital también puede recibir datos de un modulo receptor de RF para enviarlos al PC y del PC recibe datos para enviarlos por un modulo transmisor de RF a otro modulo receptor. etc. El compilador CCS C es un cross-compiler. el código maquina puede ser cargado del PC al sistema PIC mediante cualquier programador y puede ser depurado desde el entorno de trabajo del PC.

El tipo de dato se indica en la definición de la función. Utilizando /* y */ se debe utilizar al inicio y al final de comentario respectivamente. tan solo con la llave de cierre ”}”. Puede haber uno o varios. 3.). Comentarios: los comentarios en el programa facilitan la comprensión de las distintas expresiones tanto para el programa como para quien tiene que interpretar dicho programa. La forma de devolver un valor es mediante la sentencia RETURN. puede recibir parámetros o argumentos. donde la expresión debe manejar el mismo tipo de dato que el indicado en la definición de la función. Para escribir un programa en C con el CCS C se deben tener en cuenta una serie de elementos básicos de su estructura: Directivas de procesado: controlan la conversión del programa a código maquina por parte del compilador. En el caso de no devolver nada se finaliza con RETURN.2. las funciones deben definirse antes de utilizarse. además incluye funciones especificas (bit_set(). todas las sentencias se deben enmarcar dentro de las funciones. etc.). Instrucciones o Sentencias: indican como se debe comportar el PIC en todo momento. Al igual que las variables. Se suministra con un editor que permite controlar la sintaxis del programa. También se puede finalizar la función sin RETURN. suministra unas directivas especificas para PIC (#device. No afectan a la compilación por lo que pueden ser tan extensos como el programador quiera. etc. en el caso de no indicarse nada se entiende que es un int8 y en el caso de no devolver un valor se debe especificar el valor VOID. pero no pueden repetirse dentro del mismo comentario. 27 .1 Estructura de un programa. Una función puede ser llamada desde una sentencia de otra función. en cualquier caso siempre debe de haber uno definido como principal en lenguaje C la función principal es la llamada main(). etc.El CCS es C estándar y. Programas o funciones: las funciones son bloques de sentencias. al encontrar esta sentencia el compilador vuelve a la ejecución de la sentencia de llamada. La función. Se pueden colocar en cualquier parte del programa y con dos formatos: Utilizando // al colocar estos signos se comienza el comentario y finaliza en el final de la línea. Una función puede devolver un valor a la sentencia que la ha llamado. además de las directivas estándar (#include. además de devolver un valor.).

3.2.2 se puede observar la forma de especificar constantes. en la Tabla 3.1 Tipos de datos en C de CCS.175x10-38 a +3.2 Tipos de datos.1 se pueden observar los tipos de datos que acepta el compilador C de CCS Tipo Int1 Short Int Tamaño 1 bit Rango 0a1 Descripción Entero de 1 bit 8 bits Int8 Int16 16 bits Long Int32 Float char void Signed Int8 Signed Int16 Signed Int32 32 bits 32 bits 8 bits 8 bits 16 bits 32 bits 0 a 255 Entero 0 a 65535 0 a 4294967295 +1. hexadecimal o en binario. En la Tabla 3. Las constantes se pueden especificar en decimal.402x1038 0 a 255 -128 a +127 -32768 a +32767 -231 a +(231-1) Entero de 16 bits Entero de 32 bits Coma flotante Carácter Sin valor Entero con signo Entero largo con signo Entero 32 bits con signo Tabla 3. 28 . octal.

También se definen caracteres especiales. en la Tabla 3. Int8 Long Signed Int16 Float Char 127U 80UL 80L 3.123 0123 0x123 0b010010 „x‟ „\010‟ „\xA5‟ Decimal Octal (0) Hexadecimal (0x) Binario (0b) Carácter Carácter octal Carácter hexadecimal Tabla 3.4 se puede observar algunos de estos caracteres especiales. 29 . Además se pueden definir constantes con sufijo. en la Tabla 3.3 se puede observar la forma en que se definen las constantes.3 Definición de constantes. \n Cambio de línea \r \t \b Retorno de carro Tabulación Backspace Tabla 3.2 Tipos de constantes.14F Con comillas simples „C‟ Tabla 3.4 Caracteres especiales.

así que es necesario suministrar este archivo cuando se conecta un dispositivo USB por primera vez al sistema. bit de paridad y control de flujo para el RS-232 ya no importan. Otra ventaja es que utilizan drivers suministrados por Windows. con la ventaja de que el PC vera la conexión USB como una conexión COM RS-232 y no requerirá cambios en el software existente. La interfaz serie RS-232 esta desapareciendo de los PC y esto se vuelve un problema. La especificación Clase de Dispositivo de Comunicación (CDC) define algunos modelos de comunicación.2. Microchip suministra su VIP y los PID para cada familia de PIC con USB. ya que muchas de las aplicaciones con microcontroladores utilizan este bus para su comunicación con el PC. por lo que no es necesario desarrollar uno. Windows suministra el driver usber. Esta interfaz es utilizada para transferir los datos que normalmente deberían ser transferidos a través de la interfaz RS-232.3. Debido a que el protocolo USB maneja comunicaciones de bajo nivel.inf necesario para sus dispositivos PIC. los conceptos baud rate. 30 .sys. estos drivers son el usbser. Pic_18usb.sys para esta especificación. PIC18F4550 o el PIC16C765) o mediante dispositivos externos al PIC (del tipo USBN9603). La primera información que necesita es la del fabricante y producto (USB vendor ID-VID y el product ID-PID).h: driver de la familia PIC16 C765. incluyendo la comunicación serie.h: driver de la familia PIC18F4550. Para permiten al sistema clasificar al dispositivo y asignarle un driver se necesita alguna información dentro de los descriptores. Microsoft Windows (2000 o XP) no tiene un archivo *. La solución ideal es migrar a una interfaz USB y existen distintas formas de hacerlo. CCS suministra librerías para comunicar PIC con el PC utilizando el bus USB mediante periféricos internos (familia PIC18F2550. El método más sencillo es emular RS-232 con el USB.3 USB CDC. El VIP es un numero de 16 bits asignado por el USB implementers product (USB-IF) y debe ser obtenido por el fabricante del dispositivo USB. Microchip suministra el archivo mchpcdc. Las librerías suministradas son:   Pic_usb. cada VID puede contener 65536 PID diferentes al ser también un numero de 16 bits. primero la interfaz Communication Class usando un IN interrupt endpoint de interrupción y el segundo es la interfaz Data Class usando un OUT bulk endpoint y un IN bulk endpoint.sys y el ccport. Para la especificación CDC se necesitan dos interfaces USB.inf estándar para el driver CDC.

5Mbps. El total de ancho de banda que posee el bus de este dispositivo es de 1. Habilita y utiliza la interrupción USB. que maneja las interrupciones USB y el USB Setup Requests en Endpoint 0. 3. Usb_cdc_putc(): Es idéntica a putc() y envía un carácter. La distribución de pines del PIC18F2550 se puede observar en la Fig. incluso perdidas de tiempo en comportamiento del PIC ya que este también recibe y envía datos a módulos de RF. emulando un dispositivo RS-232 y lo muestra como un puerto COM en Windows. pero es imposible que el PIC se comunique con el Host a esa velocidad debido a que hay perdidas de tiempo por el protocolo. De esta forma. se pude utilizar el bus en cualquier PIC. Usb_cdc.h: driver que permite utilizar una clase de dispositivo CDC USB. 3.h: definiciones y prototipos utilizados en el driver USB. Usb. otros periféricos conectados al Host. el dispositivo entra en un modo de operación normal y puede enviar y recibir paquetes de datos.c: El USB stack.h: driver para el dispositivo externo USBN9603/USBN9604. En la mayoría de los casos nos vamos a poder comunicar a 64Kbps. Coloca un carácter en el buffer de transmisión. Para lograr la comunicación por USB se utiliza el PIC18F2550. Las funciones más importantes son: Usb_init(): Inicializa el hardware USB. Cuando el PIC es conectado o desconectado del bus. Espera en un bucle infinito hasta que el periférico USB es conectado al bus (aunque eso no significa que ha sido enumerado por el PC).3 Programación del PIC18F2550. esta función inicializa el puerto USB o resetea el USB stack y el puerto. 31 .1.    Usbn960x. entonces se debe llamar periódicamente a esta función para controlar el pin de detección de conexión. Usb_enumerated(): Devuelve un TRUE si el dispositivo ha sido enumerado por el PC y. Usb. en este caso. etc. Usb_task(): Si se utiliza una detección de conexión para la inicialización. en el caso de que este lleno esperara hasta que pueda enviarlo.

motor2. NODEBUG.h" int8 motor1. A continuación se muestra el código de configuración: #include <18F2550. Funciones. VREGEN.1 PIC18F2550 El programa realizado en C CCS hace que el PIC se comunique con la PC por USB enviando y recibiendo datos. PLL3. NOPROTECT. NOPBADEN #use delay(clock=48000000) #include "usb_cdc. CPUDIV1. MCLR.1 Configuración PIC. A continuación se detalla cada uno de ellos: 32 .h> #fuses HSPLL. Este programa se explicara en dos partes:   Configuracion PIC. Primero se necesita configurar los fuses del PIC.3.h" #include "usb_desc_cdc. NOWDT.Fig. En esta parte veremos la configuración del PIC detallando librerías y fuses que se utilizan. USBDIV. al recibir datos desde la PC los envía por un modulo de RF y a través del puerto B recibe el valor del sensor de distancia el cual es mandado al PC para su procesamiento. 3. NOLVP. 3. //variables globales Para la definición de registros internos del PIC se utiliza la librería #include<18F2550.h>.

A continuación se muestra el código de esta librería: /////////////////////////////////////////////////////////////////////////////////////////////////////////////// //// usb_desc_cdc. NOWDT: No se utiliza el Watchdog. pero en caso de que estemos usando un controlador externo se desactiva este bit y se utiliza una fuente externa. Este pin se puede activar o desactivar en caso de que se necesite el pin para otras funciones pero solamente se podrá usar como entrada. como se requiere 48MHZ se deja como está. En este caso significa que el clock del usb se tomará del PLL/2 = 96MHz/2 = 48MHz. La librería #include "usb_desc_cdc. NOPBADEN: No se utilizan las entradas analógicas del puerto B por lo que el puerto B queda como I/O digital. NOPROTECT: Se desactiva la protección de código contra lecturas. En este caso se utiliza un cristal de 12MHz por lo que el factor de división va a ser 3.h //// ////////////////////////////////////////////////////////////////////////////////////////////////////////////// //// Bulk endpoint sizes updated to allow more than 255 byte packets.h" describe las funciones que incluye el compilador para lograr comunicación USB. utilizando la frecuencia del cristal seleccionado o del PLL/2. En este caso se habilita el regulador de 3. Con #use delay(clock=48000000) se determina la frecuencia máxima de trabajo del PIC en este caso debe ser de 48MHz. en caso de que se este usando el USB interno. Se necesitan 4MHz en la entrada del PLL para que este genere 96MHz.3v para el puerto USB. CPUDIV1: El PLL postscaler decide la división en 2 de la frecuencia de salida del PLL de 96MHZ. PLL3: Aquí se selecciona el factor de división del postcaler.10 //// ///////////////////////////////////////////////////////////////////////////////////////////////////////////// #IFNDEF __USB_DESCRIPTORS__ #DEFINE __USB_DESCRIPTORS__ #include <usb.h" describe el dispositivo USB y este contiene el VID.           HSPLL: Se utiliza un cristal HS de alta velocidad. VREGEN: Se utiliza para habilitar el regulador interno de 3.3 volts que usa el módulo USB.h> 33 . NOLVP: Se desactiva la programación a bajo voltaje. //// //// Changed device to USB 1. Significa que el PLL prescaler dividirá en 3 la frecuencia del cristal para generar 4MHz: HS = 12Mhz/3 = 4MHz. La librería #include "usb_cdc. NODEBUG: No se utiliza el modo debug. MCLR: Se utiliza reset por hardware. USBDIV: Este bit puede ser 1 o 0 y con el se selecciona la fuente de oscilación del periférico USB. el PID y el nombre del dispositivo. en conjunto con el PLL para generar los 48Mhz de operación del dispositivo. el mismo se seleccionará teniendo en cuenta el valor del cristal que se utiliza.

class. //number of endpoints ==13 0x02. //identifier for this configuration. //length of descriptor size ==0 USB_DESC_CONFIG_TYPE. //constant INTERFACE (INTERFACE 0x04) =10 0x00. 1 = v. //bit 6=1 if self powered. (IF we had more than one configurations) ==5 0x00. //capabilities ==26 //we support Set_Line_Coding. //index of string descriptor for interface ==17 //class descriptor [functional header] 5. //number defining this interface (IF we had more than one interface) ==11 0x00. //number of interfaces this device supports ==4 0x01. * //class descriptor [call mgmt header] 5. /// ////////////////////////////////////////////////////////////////// #DEFINE USB_TOTAL_CONFIG_LEN 67 //config+interface+class+endpoint+endpoint (2 endpoints) const char USB_CONFIG_DESC[] = { //IN ORDER TO COMPLY WITH WINDOWS HOSTS. Get_Line_Coding. //length of descriptor ==27 0x24. designated as the masteror controlling interface for the union.22 //cdc version //class descriptor [acm header] 4. //maximum bus power required (maximum milliamperes/2) (0x32 = 100mA) ==8 //interface descriptor 0 (comm class interface) USB_DESC_INTERFACE_LEN. //dscriptor type (0x24 == ) ==19 0. //length of descriptor ==23 0x24. and endpoint goes into this array. //dscriptor type (0x24 == ) ==33 1. //class descriptor [union header] 5. THE ORDER OF THIS ARRAY MUST BE: // config(s) // interface(s) // class(es) // endpoint(s) //config_descriptor for config index 1 USB_DESC_CONFIG_LEN. //dscriptor type (0x24 == ) ==24 2. 02 = Comm Interface Class ==14 0x02. 2 = Abstract ==15 0x01. // ==21. and the notification Serial_State. //sub type (1=call mgmt) ==34 34 . //length of descriptor ==32 0x24. //length of descriptor =9 USB_DESC_INTERFACE_TYPE. //sub type (2=ACM) ==25 2. //class code. //size of all data returned for this config ==2. bits 0-4 unused and bit7=1 ==7 0x32. //constant CONFIGURATION (CONFIGURATION 0x02) ==1 USB_TOTAL_CONFIG_LEN. Set_Control_Line_State. //index of string descriptor for this configuration ==6 0xC0. //subclass code.////////////////////////////////////////////////////////////////// /// /// start config descriptor /// right now we only support one configuration descriptor. //length of descriptor ==18 0x24. /// the config. //protocol code.0.0x01. 1. //dscriptor type (0x24 == ) ==28 6. //master intf ==30 //The interface number of the Communication or Dat a Cl ass interface. //sub type (6=union) ==29 0.25ter ==16 0x00.3 2. //save intf0 ==31 //Interface number of first slave or associated interface in the union. bit 5=1 if supports remote wakeup (we don't). interface. //sub type (0=functional header) ==20 0x10. //alternate setting ==12 1.

//subclass code ==50 0x00.0x00. if config 1 has 1 interface and config 2 has 2 interfaces you must define this as 2 #define USB_MAX_NUM_INTERFACES 2 //define how many interfaces there are per config. //constant ENDPOINT (ENDPOINT 0x05) ==61 USB_CDC_DATA_OUT_ENDPOINT. (cant be smaller than 10) ==59 }. (cant be smaller than 10) ==43 //interface descriptor 1 (data class interface) USB_DESC_INTERFACE_LEN. //maximum packet size supported ==64. //polling interval. //capabilities ==35 //device does not handle call management itself 1. (USB_CDC_DATA_IN_SIZE >> 8) & 0xFF. //constant INTERFACE (INTERFACE 0x04) =45 0x01. 65 250. 65 250. //length of descriptor =44 USB_DESC_INTERFACE_TYPE. //polling interval. //****** BEGIN CONFIG DESCRIPTOR LOOKUP TABLES ******** //since we can't make pointers to constants in certain pic16s. in ms. //length of descriptor ==53 USB_DESC_ENDPOINT_TYPE. //number of endpoints ==48 0x0A. //length of descriptor ==37 USB_DESC_ENDPOINT_TYPE. [0] is the first config. etc. //class code. //maximum packet size supported ==57. this is an offset table to find // a specific descriptor in the above table. //maximum packet size supported ==41. //length of descriptor ==60 USB_DESC_ENDPOINT_TYPE. //maximum packet size supported ==64. //index of string descriptor for interface ==52 //endpoint descriptor USB_DESC_ENDPOINT_LEN.make8(USB_CDC_DATA_OUT_SIZE. //data interface ==36 //interface number of data class interface //endpoint descriptor USB_DESC_ENDPOINT_LEN.0). (USB_CDC_DATA_OUT_SIZE >> 8) & 0xFF.make8(USB_CDC_DATA_IN_SIZE. //maximum packet size supported ==64. //define where to find class descriptors //first dimension is the config number //second dimension specifies which interface //last dimension specifies which class in this interface to get. 0A = Data Interface Class ==49 0x00. //transfer type supported (0x03 is interrupt) ==40 USB_CDC_COMM_IN_SIZE. (cant be smaller than 10) ==66 //endpoint descriptor USB_DESC_ENDPOINT_LEN. //constant ENDPOINT (ENDPOINT 0x05) ==38 USB_CDC_COMM_IN_ENDPOINT | 0x80.1). //transfer type supported (0x02 is bulk) ==56 // make8(USB_CDC_DATA_IN_SIZE. 58 USB_CDC_DATA_IN_SIZE & 0xFF. //transfer type supported (0x02 is bulk) ==63 // make8(USB_CDC_DATA_OUT_SIZE. set the value to 0xFFFF const int16 USB_CLASS_DESCRIPTORS[USB_NUM_CONFIGURATIONS][USB_MAX_NUM_INTERFACES][4]= { 35 . //endpoint number and direction 0x03. //endpoint number and direction (0x02 = EP2 OUT) ==62 0x02.0. //protocol code ==51 0x00. //alternate setting ==47 2. in ms.0). in ms. //constant ENDPOINT (ENDPOINT 0x05) ==54 USB_CDC_DATA_IN_ENDPOINT | 0x80.42 250. but most will only have 1 class per interface //if a class descriptor is not valid. //number defining this interface (IF we had more than one interface) ==46 0x00. const char USB_NUM_INTERFACES[USB_NUM_CONFIGURATIONS]={2}.1). //endpoint number and direction (0x82 = EP2 IN) ==55 0x02. 65 USB_CDC_DATA_OUT_SIZE & 0xFF. //polling interval. //the maximum number of interfaces seen on any config //for example.

//product id ==10. //class code. //interface 1 //no classes for this interface 0xFFFF. //the constant DEVICE (DEVICE 0x01) ==1 0x10. 0x02=Communication Device Class ==4 0x00.9 0x0B.0.0x04. //device release number ==12. can leave this alone.11 0x00. //index of string descriptor of the product ==15 0x00.23. (SLOW SPEED SPECIFIES 8) ==7 0xD8.0xFFFF }. etc.0x01. and must be defined.13 0x01. //Microsoft Defined for US-English //string 1 8.32. //index of string description of manufacturer. or is it 0x0461 ??) ==8.0x00.0xFFFF. //usb version in bcd ==2. //length of string index USB_DESC_STRING_TYPE.0xFFFF. //index of string descriptor of serial number ==16 USB_NUM_CONFIGURATIONS //number of possible configurations ==17 }. /// /// You must define the length else get_next_string_character() will not see the string /// Current code only supports 10 strings (0 thru 9) /// ////////////////////////////////////////////////////////////////// //the offset of the starting location of each string. 36 . char USB_STRING_DESC_OFFSET[]={0. //subclass code ==5 0x00. #if (sizeof(USB_CONFIG_DESC) != USB_TOTAL_CONFIG_LEN) #error USB_TOTAL_CONFIG_LEN not defined correctly #endif ////////////////////////////////////////////////////////////////// /// /// start device descriptors /// ////////////////////////////////////////////////////////////////// const char USB_DEVICE_DESC[USB_DESC_DEVICE_LEN] ={ //starts of with device configuration.A.27.12}. //length of string index USB_DESC_STRING_TYPE. //max packet size for endpoint 0. ////////////////////////////////////////////////////////////////// /// /// start string descriptors /// String 0 is a special language string.0x01.3 0x02. //descriptor type 0x03 (STRING) 'C'. offset[1] is the start of string 1. //descriptor type 0x03 (STRING) 0x09. //protocol code ==6 USB_MAX_EP0_PACKET_LENGTH. therefore we point to string_1 array (see below) ==14 0x02. offset[0] is the start of string 0.0x04. //the length of this report ==0 0x01.4. only one possible USB_DESC_DEVICE_LEN. People in U. char const USB_STRING_DESC[]={ //string 0 4.//config 1 //interface 0 //class 1-4 18. //vendor id (0x04D8 is Microchip.S.

'C',0, 'S',0, //string 2 24, //length of string index USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING) 'C',0, 'D',0, 'C',0, '_',0, 'U',0, 'S',0, 'B',0, '_',0, 'P',0, 'I',0, 'C',0, }; #ENDIF

3.3.2 Funciones. Este programa solo hay tres funciones, dos para enviar datos a través del modulo RF y la función principal (main()). A continuación se describe cada función: Función void clave(void) Esta función se utiliza para comunicar el receptor y el transmisor del modulo de RF mediante una clave de reconocimiento y sincronización.

void clave(void) { output_high(PIN_A2); //pone en alto el pin 2 del Puerto A. Delay_us(350); // tiempo de espera para la sincronización. output_low(PIN_A2); Delay_us(350); output_high(PIN_A2); Delay_us(350); output_low(PIN_A2); Delay_us(350); output_high(PIN_A2); Delay_us(350); output_low(PIN_A2); Delay_us(350); }

Función void datamotor(void) Esta función se utiliza para enviar los datos recibidos, por el PIC desde la PC, hacia el modulo de RF para el control de los motores. Este dato se envía bit por bit por lo que si un

37

bit es “1” pone el pin en alto y si es “0” pone el pin en bajo con cierto tiempo de espera entre bit y bit.

void datamotor(void) { // valor para el motor 1 if (bit_test(motor1, 7)==1){ output_high(PIN_A2); Delay_us(350); } else { output_low(PIN_A2); Delay_us(350); } if (bit_test(motor1, 6)==1){ output_high(PIN_A2); Delay_us(350); } else { output_low(PIN_A2); Delay_us(350); } if (bit_test(motor1, 5)==1){ output_high(PIN_A2); Delay_us(350); } else { output_low(PIN_A2); Delay_us(350); } if (bit_test(motor1, 4)==1){ output_high(PIN_A2); Delay_us(350); } else { output_low(PIN_A2); Delay_us(350); } if (bit_test(motor1, 3)==1){ output_high(PIN_A2); Delay_us(350); } else { output_low(PIN_A2); Delay_us(350); } if (bit_test(motor1, 2)==1){ output_high(PIN_A2); Delay_us(350);

38

} else { output_low(PIN_A2); Delay_us(350); } if (bit_test(motor1, 1)==1){ output_high(PIN_A2); Delay_us(350); } else { output_low(PIN_A2); Delay_us(350); } if (bit_test(motor1, 0)==1){ output_high(PIN_A2); Delay_us(350); } else { output_low(PIN_A2); Delay_us(350); } // valor para el motor 2 if (bit_test(motor2, 7)==1){ output_high(PIN_A2); Delay_us(350); } else { output_low(PIN_A2); Delay_us(350); } if (bit_test(motor2, 6)==1){ output_high(PIN_A2); Delay_us(350); } else { output_low(PIN_A2); Delay_us(350); } if (bit_test(motor2, 5)==1){ output_high(PIN_A2); Delay_us(350); } else { output_low(PIN_A2); Delay_us(350); } if (bit_test(motor2, 4)==1){ output_high(PIN_A2); Delay_us(350); }

39

} if (bit_test(motor2. 2)==1){ output_high(PIN_A2). Delay_us(350). 3)==1){ output_high(PIN_A2). 40 . } if (bit_test(motor2. } if (bit_test(motor2. Delay_us(350). void main() { int16 envia. Delay_us(350).else { output_low(PIN_A2). Delay_us(350).b. } else { output_low(PIN_A2). Delay_us(350). } } Función principal void main() Esta función contiene el programa principal. } else { output_low(PIN_A2). Delay_us(350). Rep. } if (bit_test(motor2. int1 a. 1)==1){ output_high(PIN_A2). Delay_us(350). } else { output_low(PIN_A2). desde esta función se hacen llamadas a las funciones anteriores para la transmisión a través del modulo de RF y también se hacen llamadas al los buffer de escritura y lectura del puerto USB. } else { output_low(PIN_A2). Delay_us(350). Delay_us(350). 0)==1){ output_high(PIN_A2).

9). 8). datamotor(). // Se ha conectado el USB. el cual cuenta con modulo USB y tres puertos. SET_TRIS_B( 0xFF ). output_low(PIN_A2). motor2=0. Delay_us(1400). output_low(PIN_A2). // el dato se envia por USB Rep=envia. output_low(PIN_A2). Delay_us(1400). Delay_us(1400). // comienza la transmisión por RF para control del helicoptero datamotor(). // recibe dato del Puerto USB motor2= motor1/2. // Funciones necesarias para iniciar el módulo USB. envia= input_B(). while(!usb_cdc_connected()) { // Mientras el USB no esté conectado. // ciclo eterno } 3. output_high(PIN_A0). 8). SET_TRIS_A( 0xF0 ). } motor1 = usb_cdc_getc(). clave(). usb_cdc_init(). A través del puerto B y los pines 4 y 5 del puerto A recibe el valor del sensor de distancia. desde el modulo receptor de RF. // Funciones necesarias para iniciar el módulo USB. clave(). usb_init(). como ya se ha mencionado. (Enciende LED rojo) output_low(PIN_A1). clave(). "%04Lu". if (usb_enumerated()){ // Si el puerto ya fue enumerado por el host : if(usb_cdc_kbhit()){ // en espera de nuevo caracter en el buffer. else bit_clear(envia. // (Apaga LED verde) } output_high(PIN_A1). if(envia!=Rep){ printf(usb_cdc_putc.4 Circuito del Sistema Digital. if(input(pin_A4)) bit_set(envia. 9). // recibe valor del sensor de distancia a traves del Puerto B if(input(pin_A5)) bit_set(envia. // El USB no se ha conectado. Este circuito esta basado en el PIC18F2550. se utilizan 10 bits debido a 41 . envia). else bit_clear(envia. // (Apaga LED rojo) do{ usb_task(). motor1=0. } } }while (TRUE). (Enciende LED verde) output_low(PIN_A0). datamotor().Rep=0.

3. En la Fig. En el puerto C se encuentra el USB con el cual se hace la comunicación con el PC. 42 .que las conversiones Analógico-Digital en los PIC‟s se hacen en registros de 10 bits. 3.2 Diagrama del Sistema digital.2 se muestra el diagrama del circuito del sistema digital. Para poder controlar los motores del helicóptero se envían los datos bit a bit por el pin A2 el cual esta conectado a un modulo transmisor de RF. Fig.

menús y cualquier otro elemento de Windows de una forma fácil e intuitiva. El lenguaje de programación que se utiliza es el Basic. etc.). gráficas termodinámicas. botones. Al algoritmo de control se le pueden modificar las constantes de control para poder obtener diferentes respuestas.. pasando por un procesador de textos o cualquier otra aplicación que se le ocurra al programador.0 se comunica con el puerto USB para recibir y transmitir datos. Una vez obtenida la respuesta del algoritmo de control se envía este dato para poder controlar los motores variando su velocidad para aumentar o disminuir la altura del helicóptero.CAPITULO 4 “COMUNICACIÓN DE LA PC CON UN SISTEMA DIGITAL” 4. 43 . simulación de circuitos.1 Introducción. para crear una aplicación. Para la realización de la comunicación de la PC con el sistema Digital se utiliza Visual Basic 6. En este capitulo primero se explica el entorno de Visual Basic y después la aplicación creada para la comunicación por USB con el Sistema Digital 4.. la cual se comunica con el puerto USB como si fuera un puerto COM RS-232 debido a que el PIC se ha programado para realizar la emulación de RS-232 con el puerto USB. Cuando reciba un dato este será procesado para determinar el valor de la distancia arrojada por el sensor y este valor será procesado por un algoritmo de control PI (proporcional-integral) para mejorar la respuesta del sistema.2 Visual Basic 6.0. Con ella se puede crear desde una simple calculadora hasta una hoja de cálculo de la talla de Excel (en sus primeras versiones.0 es una excelente herramienta de programación que permite crear aplicaciones propias (programas) para Windows 95/98 o Windows NT.0. La aplicación realizada en Visual Basic 6. Este programa permite crear ventanas. Visual Basic 6. Sus aplicaciones en Ingeniería son casi ilimitadas: representación de movimientos mecánicos o de funciones matemáticas.

botones de opción y de selección. pero la difusión de los PCs ha puesto de actualidad otros tipos de programación. Estos programas requieren de un tipo especial de programación “la programación orientada a eventos”. pero carece de los mecanismos de herencia y polimorfismo propios de los verdaderos lenguajes orientados a objetos como Java y C++. barras de desplazamiento. Existen distintos tipos de programas. gráficos.0 de un modo muy sencillo.Visual Basic 6. Un ejemplo de programa interactivo podría ser Matlab.0 es también un programa basado en objetos. también llamado lenguaje de 4ª generación. En ocasiones bastan unas pocas operaciones con el ratón y la introducción a través del teclado de algunas instrucciones para disponer de aplicaciones con todas las características de Windows 95/98/NT. Los programas interactivos limitan y orientan la acción del usuario.0 utiliza objetos con propiedades y métodos. realiza los cálculos e imprime o guarda en el disco los resultados. lo único que hace es quedarse a la espera de las acciones del usuario. etc. pero Visual Basic 6. Esto quiere decir que un gran número de tareas se realizan sin escribir código. pudiendo incorporar todos los elementos de este entorno: ventanas. 44 . Este tipo de programación es más complicada que la secuencial y la interactiva. que en este caso son llamadas eventos. La diferencia está en que Visual Basic 6. menús. botones.2.0 es un lenguaje de programación visual. lee los datos que necesita. Prácticamente todos los elementos de interacción con el usuario de los que dispone Windows 95/98/NT pueden ser programados en Visual Basic 6. Los programas interactivos exigen la intervención del usuario en tiempo de ejecución. o si quiere crear un archivo desde el principio. Excel y PowerPoint.1 Modo de diseño y modo de ejecución. Mientras un programa secuencial está ejecutándose no necesita ninguna intervención del usuario. para suministrar datos o para indicar al programa lo que debe hacer por medio de menús. a este tipo de programas se les llama también programas basados u orientados a procedimientos o a algoritmos (procedural languages). aunque no orientado a objetos como C++ o Java. Cuando uno de estos programas ha arrancado. Visual Basic 6.0 está orientado a la realización de programas para Windows. cajas de diálogo y de texto.0 la hace sencilla. El usuario dice si quiere abrir y modificar un archivo existente. Visual Basic 6. En los primeros tiempos de los ordenadores los programas eran de tipo secuencial (también llamados tipo batch) Un programa secuencial es un programa que se arranca. Estos programas pasan la mayor parte de su tiempo esperando las acciones del usuario (eventos) y respondiendo a ellas. Word. simplemente con operaciones gráficas realizadas con el ratón sobre la pantalla. tales como Netscape. Este tipo de programas siguen utilizándose ampliamente en la actualidad. 4. Por su parte los programas orientados a eventos son los programas típicos de Windows.

las propiedades de un objeto son datos que tienen valores lógicos (True. propios de ese objeto y distintos de las de otros objetos de su clase. pero muchas otras pueden cambiarse en tiempo de ejecución desde el programa escrito en Visual Basic 6. También hay propiedades que sólo pueden establecerse en modo de ejecución y que no son visibles en modo de diseño. 45 . por ejemplo). La aplicación se prueba en modo de ejecución. en un programa puede haber varios botones. Los formularios deben también tener un nombre. Hay algunas propiedades de los controles que deben establecerse en modo de diseño. los menús. 4. Por lo general. los gráficos. Cada control debe tener un nombre a través del cual se puede hacer referencia a él en el programa. las barras de desplazamiento horizontales y verticales. tipo de objeto o control tiene su conjunto de propiedades. 4. Por ejemplo. cada uno de los cuales es un objeto del tipo de control command button.2 Formularios y Controles. En la terminología de Visual Basic 6. las cajas de selección desplegables. Cada formulario y cada tipo de control tienen un conjunto de propiedades que definen su aspecto gráfico (tamaño.) y su forma de responder a las acciones del usuario (si está activo o no. False) o numéricos concretos. tipo y tamaño de letra. los botones de opción y de selección. y desarrollando funciones para gestionar los eventos. En programación basada en objetos se llama clase a estas entidades genéricas. Cada uno de los elementos gráficos que pueden formar parte de una aplicación típica de Windows 95/98/NT es un tipo de control: los botones. y muchos otros tipos de elementos son controles para Visual Basic 6. etc.2. posición en la ventana. Los formularios y los distintos tipos de controles son entidades genéricas de las que puede haber varios ejemplares concretos en cada programa. que sería la clase.2. En modo de diseño el usuario construye interactivamente la aplicación. mientras que se llama objeto a cada ejemplar de una clase determinada. definiendo sus propiedades. Una aplicación puede tener varios formularios. Un formulario puede ser considerado como una especie de contenedor para los controles. color. Cada propiedad tiene un nombre que viene ya definido por el lenguaje.0. En pocas palabras cada clase.La aplicación Visual Basic de Microsoft puede trabajar de dos modos distintos: en modo de diseño y en modo de ejecución. que puede crearse siguiendo las mismas reglas que para los controles.3 Objetos y Propiedades. colocando controles en el formulario. pero un único formulario puede ser suficiente para las aplicaciones más sencillas. las cajas de diálogo y de texto.0.0 se llama formulario (form) a una ventana. y cada objeto o control tiene valores determinados para las propiedades de su clase. En ese caso el usuario actúa sobre el programa (introduce eventos) y prueba cómo responde el programa.

Se puede acceder a una propiedad de un objeto por medio del nombre del objeto a que pertenece.vertical. junto con la nomenclatura inglesa de la que derivan. 46 .1 muestra las abreviaturas de los controles más usuales.0 debe tener un nombre. para una barra de desplazamiento -scroll bar. seguido de un punto y el nombre de la propiedad.2. En este segundo caso se accede a sus valores por medio de las instrucciones del programa.). en forma análoga a como se accede a cualquier variable en un lenguaje de programación. Existe una convención ampliamente aceptada que es la siguiente: se utilizan siempre tres letras minúsculas que indican el tipo de control. El nombre puede ser el que el usuario desee. La Tabla 4. como por ejemplo optColor. que tienen que hacer referencia al uso que se va a dar a ese control.Casi todas las propiedades de los objetos pueden establecerse en tiempo de diseño y también en tiempo de ejecución.4 Nombres de objetos. seguidas por otras letras (la primera mayúscula. a modo de separación) libremente escogidas por el usuario. 4. Estos nombres por default hacen referencia al tipo de control y van seguidos de un número que se incrementa a medida que se van introduciendo más controles de ese tipo en el formulario (por ejemplo VScroll1. En principio cada objeto de Visual Basic 6. etc. HScroll1. Para ciertas propiedades ésta es la única forma de acceder a ellas. para una barra horizontal. e incluso Visual Basic 6.0 proporciona nombres por default para los diversos controles.objName. por medio del cual se hace referencia a dicho objeto.

Los métodos realizan tareas típicas. Cada vez que se produce un evento sobre un determinado tipo de control. el escribir en una caja de texto. separados por el carácter (_). 47 . 4. Los métodos son funciones que también son llamadas desde programa. el pulsar una tecla o combinación de teclas.5 Eventos. Cada tipo de objeto o de control tiene sus propios métodos.0 arranca una determinada función o procedimiento que realiza la acción programada por el usuario para ese evento concreto. 4. Estos procedimientos se llaman con un nombre que se forma a partir del nombre del objeto y el nombre del evento.Abreviatura Control chk cmd drv frm hsb lbl lst opt shp tmr Check box Command button Drive list box form Abreviatura Control cbo dir fil fra Combo y drop-list box Dir list box File list box frame image Line menu Picture box Text edit box Vertical scroll bar Horizontal scroll bar img label list Option button shape timer lin mnu pct txt vsb Tabla 4. o simplemente mover el ratón. el hacer doble clic sobre el nombre de un archivo para abrirlo. que es el nombre del procedimiento que se ocupará de responder al evento click en el objeto txtBox. Visual Basic 6. pero a diferencia de los procedimientos no son programadas por el usuario.6 Métodos. previsibles y comunes para todas las aplicaciones. el arrastrar un icono.1 Abreviaciones de controles.2. sino que vienen ya pre-programadas con el lenguaje.2. De ahí que vengan con el lenguaje y que se libere al usuario de la tarea de programarlos. Ya se ha dicho que las acciones del usuario sobre el programa se llaman eventos. Son eventos típicos el clicar sobre un botón. como por ejemplo txtBox_click. el elegir una opción de un menú.

8 Creación de programas ejecutables.2 Tipos de datos en Visual Basic. los controles gráficos tienen un método llamado Line que se encarga de dibujar líneas rectas. la siguiente tarea suele consistir en la creación de un programa ejecutable para su distribución e instalación en cuantos ordenadores se desee.DLL esté instalado en el directorio c:\Windows\System o 48 .Por ejemplo. La Tabla 4. 4.2 muestra los tipos de datos disponibles en Visual Basic. aplicables tanto para constantes como para variables. Para crear un programa ejecutable se utiliza el comando Make nombreProyecto. Para que este programa funcione en un ordenador solamente se necesita que el archivo MSVBVM60. Tipo Boolean Byte Integer Long Single Double Descripción Binario Entero corto Entero (2 bytes) Entero largo (4 bytes) Real simple precisión (4 bytes) Real doble precisión (8 bytes) Carácter declaración de Intervalo True o False 0 a 255 % & ! # -32768 a 32767 -2147483648 2147483647 a -3.79D+308 -9.0.79D+308 1.4E+38 -1.exe.2.7 Tipos de datos.22E+14 a a Currency Numero con punto decimal fijo (8 @ bytes) String Cadena de caracteres (4bytes + 1 $ byte/car hasta 64K) Tabla 4.2. Visual Basic dispone de distintos tipos de datos. Una vez finalizada la programación de la nueva aplicación.4E+38 a 3.22E+14 9.exe … en el menú File. incluso aunque en ellos no esté instalado Visual Basic 6. Al igual que C y otros lenguajes de programación. De esta manera se generará un archivo cuya extensión será *. De la misma forma existe un método llamado Circle que dibuja circunferencias y arcos de circunferencia. 0 a 65500 caracteres 4.

3. *.c:\Winnt\System32. Fig.1 Pantalla de controles. En la Fig. las cuales explicaremos por separado: Pantalla de controles. Para saber en cada caso cuáles son los archivos necesarios se puede consultar el archivo *. 4. 4. Casi todos esos archivos necesarios se instalan automáticamente al instalar el compilador de Visual Basic 6.3 Desarrollo de aplicación en Visual Basic 6. la mayoría de ellos con extensiones *.0. para desarrollar programas ejecutables en Visual Basic.dll. Como se explico anteriormente.ocx. 4. Pantalla de Código. 4.0 en el ordenador.vbx o *.1 Pantalla de Controles. 49 .1 se puede observar la pantalla de controles de la aplicación realizada en Visual Basic 6.vbp que contiene la descripción completa del proyecto. se trabaja en dos pantallas. En el caso de proyectos más complejos en los que se utilicen muchos controles pueden ser necesarios más archivos.0.

50 . en el primero se muestra el valor de la distancia en cm y en el segundo se muestra el valor asignado por el convertidor Analógico-Digital a el valor de voltaje generado por sensor. Este se configura para un Baud rate de 9600. se empieza la conexión teniendo acceso al puerto. El Comand button produce un evento en el cual se configura la conexión.A continuación se explicara cada elemento de la pantalla de controles y algunas de sus propiedades: Estos dos elementos se utilizan para la conexión del puerto el primero es un combo box en el cual se muestra una lista de los posibles puertos a los cuales se le puede asignar el sistema digital y el segundo es un Comand button. Como el puerto USB es visto como un puerto COM es necesario insertar un control MSComm. La configuración de este Timer se realiza en la pantalla de código. Se utiliza un Timer para un mejor control del programa durante el tiempo en que no ocurren nuevos eventos. Para poder monitorear la conexión entre el puerto USB y el sistema digital se utiliza un indicador. a la cual se desea que este el helicóptero. con el cual después de haber seleccionado el puerto en el combo box. sin paridad. el cual se muestra de color rojo cuando no se establece comunicación con el sistema digital y de color verde cuando hay comunicación con el sistema digital. En este cuadro de texto el usuario debe indicar la altura en cm. Estos dos cuadros de texto muestran el dato arrojado por el sensor de distancia. 8 bits de datos y 1 bit de paro.

z.ListIndex = 2 Then MSComm1. el código para ajustar el dato del sensor etc. Er. Ct As Integer 'Variables globales Private Sub conectar_Click() 'comprueva que el puerto este cerrado para poder abrirlo If MSComm1. 4. A continuación se muestra todo el código de la aplicación y después se irán explicando algunos segmentos del código: Option Explicit Dim value As Long Dim bandera As Boolean Dim cont1.En este cuadro de texto el usuario debe indicar el valor de la constante del control proporcional que se desea. En este cuadro de texto el usuario debe indicar el valor de la constante del control integral que se desea. configuración del MSComm y también se encuentra el código del algoritmo del control PI. En esta pantalla se encuentra todo el código de la aplicación.CommPort = 1 End If If puerto.ListIndex = 1 Then MSComm1.2 Pantalla de Código. If puerto.CommPort = 2 End If If puerto. y. En este cuadro de texto se muestra el valor arrojado por el algoritmo de control PI y con el cual se activaran los motores del helicóptero.CommPort = 3 51 . dentro de este código se encuentran algunas configuraciones como por ejemplo la configuración del Timer. x. p(2). d.ListIndex = 0 Then MSComm1. Este Comand button genera un evento con el cual se cierra la aplicación y se finaliza la conexión con el sistema digital. i.PortOpen = False Then 'determina el puerto que hemos seleccionado.3.

MSComm1.ListIndex = 3 Then MSComm1.AddItem "COM3" puerto.AddItem "COM11" puerto. cont1 = 0 x=0 y=0 z=0 p(0) = 0 p(1) = 0 p(2) = 0 i=0 Er = 0 Ct = 0 Timer1.ListIndex = 5 Then MSComm1.ListIndex = 8 Then MSComm1.ListIndex = 6 Then MSComm1.InBufferSize = 4 MSComm1.AddItem "COM4" puerto.InputMode = comInputModeText MSComm1. puerto.ListIndex = 0 ' Configuramos COM1.ListIndex = 9 Then MSComm1.AddItem "COM10" puerto.ListIndex = 4 Then MSComm1.CommPort = 8 End If If puerto.RThreshold = 4 End Sub Private Sub Form_Load() puerto.AddItem "COM8" puerto. como predeterminado.CommPort = 11 End If End If MSComm1.CommPort = 10 End If If puerto.AddItem "COM1" ' Añadimos diferentes numeraciones para el puerto serie.CommPort = 9 End If If puerto.CommPort = 6 End If If puerto.End If If puerto.ListIndex = 10 Then MSComm1.PortOpen = True MSComm1.AddItem "COM7" puerto.Interval = 50 52 .AddItem "COM6" puerto.AddItem "COM5" puerto.CommPort = 5 End If If puerto.CommPort = 4 End If If puerto.AddItem "COM9" puerto.CommPort = 7 End If If puerto.OutBufferSize = 4 'tamaño del dato a transmitir.AddItem "COM2" puerto.ListIndex = 7 Then MSComm1.

6954 + 230.Text z = 4000 .8138 .BackColor = &HFF00& Debug.0071987 * txtKi.Output = Chr(Ct) End If End If MSComm1. v As String On Error GoTo Tratamiento_errores DoEvents If MSComm1.PSet (x.Print InBuff txtValor.20 * txtRef.Text = Ct If Ct > 255 Then MSComm1.3422 + v ^ 4 * 90.Text .CommEvent Case comEvReceive InBuff = MSComm1. v As String Select Case MSComm1.PortOpen = True Then DoEvents estado.Output = Chr(0) Else MSComm1.PSet (x.Print "Conectado" cont1 = cont1 + 10 53 .Input v = InBuff * 5 / 1023 d = -v ^ 5 * 11.v ^ 3 * 289.Timer1.AutoRedraw = True x=0 End If Er = Er + txtRef.Output = Chr(255) ElseIf Ct < 0 Then MSComm1. 4) ' se recorta los caracteres basura p(i) = d d = (p(0) + p(1) + p(2)) / 3 txtAlt. (&HFF0000) Graf.d) + 0.PortOpen = False 'cierra el puerto y vacia el buffer End Select End Sub Private Sub Salir_Click() Beep End End Sub Private Sub Timer1_Timer() Dim InBuff.1869 If d <= 120 And d >= 20 Then Debug.20 * d Graf.v * 440.5986 + v ^ 2 * 476.Text .Text * Er txtp3. End Sub Private Sub MSComm1_OnComm() Dim InBuff.Text = Left$(InBuff.Text * (txtRef. (&HFF) If x = 5000 Then Graf.d Ct = txtKp.Cls Graf. y).3524 . z).Text = "" txtValor.Enabled = True 'activamos el ciclo de escan.Text = d i=i+1 If i = 3 Then i=0 End If y = 4000 .

x=x+1 Graf. y).BackColor = &HFF0000 Case 8012 '8012 el dispositivo no está abierto DoEvents estado.Cls Graf.BackColor = &HFF& Case 8015 DoEvents ' para evitar retardos en bucles estado.Number Case 8002 'Número de puerto no válido DoEvents estado. (&HFF) If x = 5000 Then Graf.PSet (x.AutoRedraw = True x=0 End If If Ct > 255 Then MSComm1.PSet (x. Private Sub Form_Load() 54 .BackColor = &HFF& Case 8005 'el puerto ya está abierto DoEvents estado.PortOpen = False Exit Sub Else DoEvents MSComm1. (&HFF0000) Graf.Output = Chr(255) ElseIf Ct < 0 Then MSComm1.Description Select Case Err.PortOpen = False End If End Sub Private Sub conectar_Click() Cuando se genera un evento debido a oprimir el Comand Button para conectar con el puerto el programa se va a este segmento de código.Output = Chr(Ct) End If 'MSComm1.Number & ": " & Err. primero comprueba que el puerto este cerrado después verifica el puerto que se ha seleccionado y se le asigna este puerto al MSComm.PortOpen = True Exit Sub End If Tratamiento_errores: Debug.PortOpen = True Then MSComm1.BackColor = &HFF& End Select End Sub Private Sub Form_Unload(Cancel As Integer) If MSComm1. z). Después de hacer eso se configuran los buffers de lectura y escritura del MSComm y se abre el puerto para iniciar la comunicación con este puerto.Print Err.Output = Chr(0) Else MSComm1.

2. por lo que para la poder obtener una mejor función que describiera el comportamiento del sensor solo se tomaron en cuenta estas mediciones. haciendo varias mediciones a diferentes distancias se observo que tiene un mejor funcionamiento en un intervalo de 20 a 120 cm de distancia. Private Sub Timer1_Timer() Desde el momento en que activamos el Timer el programa se dirige a esta parte del código y en esta parte se esta censando el estado del puerto. Para poder obtener la distancia a la que se encuentra el helicóptero se utilizo un sensor infrarrojo.Cuando se inicia la aplicación este es el primer segmento de código al que accede el programa. después este valor e procesa por el algoritmo de control PI y el resultado se manda al buffer de escritura del MSComm y se cierra el puerto para vaciar el los buffer. El Timer se configura con un valor de 50 y se inicializa habilitándolo. como la interferencia generada por las turbulencias de las hélices o la complejidad del funcionamiento de distintos tipos de sensores así como la alimentación requerida por estos.1 Escalamiento del Dato del sensor. si han ocurrido eventos y se mando al buffer de escritura el último valor generado por el algoritmo de control PI. En este segmento se le asigna la lista de posibles puertos al combo box donde se selecciona el asignado al sistema digital.3. teniendo en cuenta varias posibles fuentes de ruido. Private Sub MSComm1_OnComm() Cuando se genera un evento por el MSComm el programa se dirige a esta parte del código. Si se han generado errores durante el tiempo de ejecución del programa se verifica que tipo de error ocurrió y se cierra el programa. 55 . 4. Al caracterizar el sensor. En esta parte del código se verifica que tipo de evento fue el que se genero y si fue debido a que el puerto recibió un nuevo dato este es procesado para obtener el valor de la altura en cm. debido a que fue la mejor opción.3 se puede observar los valores de las distancias y el voltaje promedio generado por el sensor a estas distancias. también se inicializan las variables globales y el Timer. En la Tabla 4. Se realizaron 5 mediciones en intervalos de 5cm de distancia y de estos datos se saco un promedio para cada una de las diferentes distancias.

178 1.2 se puede observar la grafica de los datos y la grafica de la ecuación de quinto orden.4036 0.402 1.8408 0.55 2. 56 .9168 0. 75 80 85 90 95 100 105 110 115 120 0.096 1.0042 0.86 1.Distancia (cm) Voltaje (v) Distancia (cm) Voltaje (v) 20 25 30 35 40 45 50 55 60 65 70 2.6148 0.6772 0.3 Datos para caracterización del sensor.7304 0.606 1.4262 0.553 0. En la Fig.4652 0.4142 0. 4.7752 Tabla 4.5078 0.399 Para obtener una ecuación que describiera el funcionamiento del sensor se graficaron los datos en MATLAB y se genero una ecuación realizando una interpolación con ayuda de MATLAB y se encontró que la más aproximada a la grafica fue una de quinto orden.236 1.

3524 ∙ 𝑣 2 − 440. estos promedios se hacen con tres valores distintos.8138 ∙ 𝑣 4 − 289. y con esto menos fuentes de errores. por lo que nuestra aplicación recibe el valor digital del voltaje. además de que los valores del sensor se restringen a distancias entre 20cm y 120cm. cuando se tiene 0v su valor digital es 0 y cuando se tiene 5v su valor digital es 1023. por lo que para poder convertir de nuevo a analógico solo se utiliza una regla de tres dentro del programa. La ecuación obtenida en MATLAB es la siguiente: 𝑑 = −11. Para poder obtener el valor de la distancia en cm primero se debe convertir el valor digital del voltaje a analógico y después evaluar la ecuación de quinto grado con este valor.2 Grafica de la caracterización del sensor. Para no obtener muchas variaciones.5986 ∙ 𝑣 3 + 476. Dentro del programa el código que se usa para obtener el valor de la distancia en cm es el siguiente: v = InBuff * 5 / 1023 57 .3422 ∙ 𝑣 5 + 90.6954 ∙ 𝑣 + 230. 4. en los valores de distancia se utilizan promedios dinámicos.Fig.1869 Como ya se ha mencionado el sensor genera un voltaje dependiendo de la distancia y este valor de voltaje es digitalizado por un PIC.

En un controlador tipo proporcional la salida o acción de control depende del error generado al comparar el valor real y el valor deseado como se muestra en la siguiente expresión: 𝐶𝑡 = 𝑘𝑝 ∙ 𝜀(𝑡) Donde: kp es una constante denominada constante proporcional 𝜀 𝑡 = 𝑑𝑖𝑠𝑡𝑎𝑛𝑐𝑖𝑎 𝑑𝑒𝑠𝑒𝑎𝑑𝑎 − 𝑑𝑖𝑠𝑡𝑎𝑛𝑐𝑖𝑎 𝑟𝑒𝑎𝑙 El principal inconveniente de un controlador que solo tiene acción proporcional es que siempre deja un error por corregir debido a la constante proporcional.1869 If d <= 120 And d >= 20 Then Debug.Text = Left$(InBuff.Text = "" txtValor. 4) ' se recorta los caracteres basura p(i) = d d = (p(0) + p(1) + p(2)) / 3 txtAlt.Text = d 4. Después de obtener el valor de la distancia del sensor en cm.5986 + v ^ 2 * 476.2 Algoritmo de control PI.2. La acción integral se muestra en la siguiente expresión: 𝐶𝑡 = 𝑘𝑖 𝑖=𝑥 𝑖=0 𝜀 𝑡𝑖 ∙ (𝑡𝑖 − 𝑡𝑖−1 ) Por lo que la expresión para la acción PI es la suma de las anteriores como se muestra en la siguiente expresión: 58 . se puede decir que la acción integral tiende a anular el error promedio. La función principal de un controlador es comparar el valor real del parámetro a controlar (en este caso distancia) con el valor deseado y generar la señal de control más adecuada para minimizar los errores y obtener una respuesta lo más rápida posible.v ^ 3 * 289. este valor es procesado por un algoritmo de control.Print InBuff txtValor. en este caso se utiliza una acción Proporcional-Integral para poder obtener una respuesta más rápida y estable del sistema. Existen modelos básicos de comportamientos o también denominados acciones básicas de control.3.8138 .3422 + v ^ 4 * 90.3524 . Cuando se implementan algoritmos de control en sistemas digitales las señales se deben muestrear a una frecuencia de dos a cuatro veces superior a la máxima frecuencia de variación de las mismas. La acción integral permite anular este error haciendo que la señal de control crezca proporcionalmente al producto del error con el tiempo.6954 + 230.v * 440. de lo contrario se puede perder información.d = -v ^ 5 * 11.

d) + 0. entonces se podría decir que: 0 ≤ 𝐶𝑡 ≤ 255 59 .Text .Output = Chr(Ct) End If Para poder controlar los motores se usa PWM el cual se genera con un PIC.Text * (txtRef.d Ct = txtKp.𝐶𝑡 = 𝑘𝑝 ∙ 𝜀 𝑡 + 𝑘𝑖 𝑖=𝑥 𝑖=0 𝜀 𝑡𝑖 ∙ (𝑡𝑖 − 𝑡𝑖−1 ) Dentro del programa el código correspondiente al algoritmo de control es el siguiente: Er = Er + txtRef. debido a esto cuando la señal de control del algoritmo PI es mayor a 255 se envía 255 y cuando es menos a 0 se envía 0y cuando esta entre estos valores se envía tal cual.Text = Ct If Ct > 255 Then MSComm1.Text . para determinar el ciclo de trabajo del PWM se utilizan valores de 0 a 255 siendo 255 un ciclo de trabajo del 100%.0071987 * txtKi.Output = Chr(0) Else MSComm1.Output = Chr(255) ElseIf Ct < 0 Then MSComm1.Text * Er txtp3.

En la Fig. el PIC recibe esta señal y la decodifica para obtener los datos del sensor y estos datos después son desplegados por el puerto B y los pines C6 y C7 hacia el sistema digital que hace la comunicación por USB con la PC. En este circuito se utiliza el modulo RX334 y para la decodificación de los datos se utiliza el PIC16F877A.CAPITULO 5 “MODULO RECEPTOR DE RF” 5.1 se puede observar el circuito de este modulo 60 . 5.1 Introducción.2 Circuito del modulo receptor de RF. 5. En este capitulo se explicara el funcionamiento de este modulo receptor de RF y la forma en que recibe los datos. Como ya se ha mencionado en el helicóptero se encuentra un sensor infrarrojo y el valor de voltaje generado por este sensor dependiendo la distancia a que se encuentra se digitaliza con un PIC con modulo ADC y después de digitalizar este valor se envía por un modulo transmisor de RF hasta un modulo receptor de RF y este va conectado a un PIC y después de que el PIC recibió el dato lo manda por un puerto a nuestro sistema digital. después de que el modulo RX334 recibe la señal transmitida por el RX334.

3 Programación del PIC.0 = 1 then Delay_us(350) break end if 61 . 5.1 Circuito modulo receptor RF. 5. el código es el siguiente: program receptor dim valor1 as byte dim valor2 as byte dim valor3 as byte dim valor11 as byte dim valor22 as byte dim valor33 as byte dim alto as byte dim bajo as byte SUB PROCEDURE lecturaclave while TRUE if PORTC. en este caso es necesario no perder mucho tiempo para una mejor sincronización entre los módulos receptor y transmisor de RF. Para una programación más sencilla se utilizo el compilador Mikrobasic debido a que tiene instrucciones más sencillas y no se pierde mucho tiempo en la ejecución de las mismas.Fig.

7) Delay_us(350) else Clearbit(valor1. 0) Delay_us(350) end if if PORTC. 5) Delay_us(350) else Clearbit(valor1. 6) Delay_us(350) else Clearbit(valor1.0 = 1 then Delay_us(350) break end if wend while TRUE if PORTC.0 = 1 then SetBit(valor1. 0) Delay_us(350) else Clearbit(valor11.0 = 1 then SetBit(valor11. 5) Delay_us(350) 62 .wend while TRUE if PORTC. 1) Delay_us(350) else Clearbit(valor11. 1) Delay_us(350) end if if PORTC. 6) Delay_us(350) end if if PORTC.0 = 1 then SetBit(valor1.0 = 1 then Delay_us(350) break end if wend END SUB SUB PROCEDURE lecturadatos1 if PORTC.0 = 1 then SetBit(valor1.0 = 1 then SetBit(valor11.0 = 1 then Delay_us(350) break end if wend while TRUE if PORTC. 7) Delay_us(350) end if if PORTC.

1) Delay_us(350) else Clearbit(valor1. 1) Delay_us(350) end if if PORTC.0 = 1 then SetBit(valor1. 0) Delay_us(350) end if if PORTC. 0) Delay_us(350) else Clearbit(valor1.0 = 1 then SetBit(valor22. 0) Delay_us(350) else Clearbit(valor22. 4) Delay_us(350) end if if PORTC. 3) Delay_us(350) end if if PORTC.0 = 1 then SetBit(valor1.0 = 1 then SetBit(valor22. 2) Delay_us(350) end if if PORTC. 1) Delay_us(350) else Clearbit(valor22.0 = 1 then SetBit(valor1.end if if PORTC. 1) Delay_us(350) end if if PORTC. 3) Delay_us(350) else Clearbit(valor1.0 = 1 then SetBit(valor1. 0) Delay_us(350) end if END SUB SUB PROCEDURE lecturadatos2 if PORTC. 2) Delay_us(350) else Clearbit(valor1. 7) Delay_us(350) 63 . 4) Delay_us(350) else Clearbit(valor1.0 = 1 then SetBit(valor1.0 = 1 then SetBit(valor2.

1) Delay_us(350) else Clearbit(valor2. 2) Delay_us(350) else Clearbit(valor2.3) Delay_us(350) end if if PORTC.0 = 1 then SetBit(valor2.0 = 1 then SetBit(valor2.0 = 1 then SetBit(valor2. 5) Delay_us(350) else Clearbit(valor2. 0) Delay_us(350) else Clearbit(valor2.0 = 1 then SetBit(valor2. 3) Delay_us(350) else Clearbit(valor2.4) Delay_us(350) end if if PORTC.0 = 1 then SetBit(valor2.else Clearbit(valor2.6) Delay_us(350) end if if PORTC.1) Delay_us(350) end if if PORTC.0 = 1 then SetBit(valor2.0) Delay_us(350) end if END SUB SUB PROCEDURE lecturadatos3 64 . 4) Delay_us(350) else Clearbit(valor2.0 = 1 then SetBit(valor2.2) Delay_us(350) end if if PORTC.7) Delay_us(350) end if if PORTC. 6) Delay_us(350) else Clearbit(valor2.5) Delay_us(350) end if if PORTC.

0 = 1 then SetBit(valor3. 2) Delay_us(350) else Clearbit(valor3. 3) Delay_us(350) else Clearbit(valor3.0 = 1 then SetBit(valor3. 4) Delay_us(350) else Clearbit(valor3. 5) Delay_us(350) else Clearbit(valor3. 6) Delay_us(350) else Clearbit(valor3.0 = 1 then SetBit(valor3.2) Delay_us(350) end if 65 .0 = 1 then SetBit(valor33. 1) Delay_us(350) else Clearbit(valor33. 0) Delay_us(350) end if if PORTC.4) Delay_us(350) end if if PORTC. 0) Delay_us(350) else Clearbit(valor33.7) Delay_us(350) end if if PORTC.0 = 1 then SetBit(valor33.6) Delay_us(350) end if if PORTC.0 = 1 then SetBit(valor3. 1) Delay_us(350) end if if PORTC.3) Delay_us(350) end if if PORTC.0 = 1 then SetBit(valor3.if PORTC.0 = 1 then SetBit(valor3.5) Delay_us(350) end if if PORTC. 7) Delay_us(350) else Clearbit(valor3.

0 = 1 then SetBit(valor3. 0) end if end if end if ' valida datos mas significativos if valor11 = valor22 then alto = valor11 PORTB = bajo PORTC.6 = alto. 1) Delay_us(350) else Clearbit(valor3.0 SetBit(PORTC. 0) Delay_us(350) else Clearbit(valor3.7 = alto.1) Delay_us(350) end if if PORTC.0 = 1 then SetBit(valor3.0) Delay_us(350) end if END SUB main: TRISB = 0x00 TRISC = 0x0F valor1 = 0 valor2 = 0 valor3 = 0 while TRUE ' primer lectura lecturaclave lecturadatos1 ' segunda lectura lecturaclave lecturadatos2 ' tercera lectura lecturaclave lecturadatos3 ' valida datos menos significativos if valor1 = valor2 then bajo = valor1 else if valor1 = valor3 then bajo = valor1 else if valor2 = valor3 then bajo = valor2 else PORTB = 0 ClearBit(PORTC.1 PORTC. 1) ClearBit(PORTC.if PORTC. 5) Delay_us(50) 66 .

7 = alto. 6) ClearBit(PORTC. para evitar errores de transmisión de datos.0 SetBit(PORTC.6 = alto.1 PORTC. 7) ClearBit(PORTC. estos pines del puerto C y el puerto B están conectados al sistema digital que se comunica con la PC por USB. después se mandan llamar las subrutinas de lectura de clave y lectura de datos. 5) end if end if end if wend end.1 PORTC.else if valor11 = valor33 then alto = valor11 PORTB = bajo PORTC. SUB PROCEDURE lecturaclave: En esta subrutina del programa se verifica la clave de transmisión con la que se enviaron los datos para sincronizar y comunicar el receptor con el transmisor. main: Esta es la parte principal del programa primero se inicializan variables. 67 . 5) Delay_us(50) else PORTB = 0 ClearBit(PORTC.0 SetBit(PORTC. si el dato se recibió tres veces entonces lo manda desplegar al puerto B y a los pines 6 y 7 del puerto C. Después de que se recibieron los datos el programa verifica que se haya recibido el mismo dato tres veces.7 = alto.6 = alto. 5) Delay_us(50) else if valor22 = valor33 then alto = valor22 PORTB = bajo PORTC. SUB PROCEDURE lecturadatos: En esta subrutina del programa el PIC recibe el dato bit a bit y los va acomodando en un registro de 10 bits.

cosa que puede pasar cuando se utiliza un puerto COM RS-232.CAPITULO 6 “CONCLUSIONES Y EXPECTATIVAS” Como se ha podido observar se han logrado los objetivos planteados para la realización de este proyecto. además de que no se mostraron perdidas de datos. pero en sistemas que deben ser más automáticos no es muy recomendable ya que se puede tener inestabilidad del sistema. Al realizar la comunicación del sistema digital con la PC por el USB se puede observar que la comunicación se puede mejorar. se pueden obtener diferentes tipos de respuestas del sistema. En general se ha realizado un sistema muy rápido y de gran alcance.5Mbps. ya que los módulos de radiofrecuencia pueden llegar a tener un alcance de hasta 100m. utilizando una aplicación realizada en Visual Basic 6. esto genera una comunicación entre la PC y el PIC más veloz que si fuera un puerto COM y aunque se trabaja como un puerto COM no importan sus propiedades como el baud rate. Al tener la opción de poder modificar los valores de las constantes del control PI. tanto con la comunicación USB como con la transmisión por RF. en cuanto a velocidad. programando el dispositivo como HID debido a que hay mayor velocidad de transmisión de datos y se necesitan menos configuraciones para poder realizar comunicación entre el sistema digital y el Host. bit de paridad y mucho menos el tamaño del buffer. desde respuestas muy lentas hasta respuestas muy rápidas. dependiendo de la antena y la fuente de alimentación de los módulos.0. esto es bueno en sistemas en donde el usuario esta interactuando constantemente. 68 . Esto es una ventaja ya que si nosotros contamos con aplicaciones en la PC que se comunican con dispositivos externos a través del COM RS-232 se pueden utilizar para comunicar con dispositivos externos a través del puerto USB y también se podría mejorar la eficiencia de estas aplicaciones debido a que se pueden tener velocidades de transmisión de datos de hasta 1. Nuestro sistema se puede considerar un sistema de tiempo real debido a las altas velocidades de transmisión que se lograron. lo cual puede tomarse como un mayor numero de velocidades del helicóptero. Se logro establecer comunicación entre un sistema digital basado en el PIC18F2550 y la PC a través del USB. para lograr esta comunicación se emulo el puerto USB como si fuera un puerto COM RS-232.

En cuanto al algoritmo de control PI. se podrían evitar configuraciones del MSComm y la configuración del puerto con el cual se realiza la conexión debido a que un dispositivo HID se conecta automáticamente sin la necesidad de elegir el puerto al que se conecto este dispositivo. El realizar la comunicación de la PC con el sistema digital también seria más sencillo si se utiliza el dispositivo USB como HID. ya que no se tendrían que hacer configuraciones de baud rate el cual limita la velocidad de transmisión de datos entre la PC y el sistema digital y nuestra aplicación en Visual Basic necesitaría menos configuraciones. se podría mejorar la respuesta del sistema si se realizara un análisis de todo el sistema para poder obtener las constantes de control adecuadas para una respuesta más rápida y estable. la respuesta del sensor utilizado no es muy estable además de que solo tendría un buen funcionamiento en superficies totalmente planas debido a que una pequeña variación en el ángulo del sensor puede llegar a significar una gran variación de distancia y esto puede afectar de manera muy considerable a la respuesta de todo el sistema. ya que en este trabajo las constantes podían ser cambiadas y esto complica la obtención de una mejor respuesta de todo el sistema.También se puede utilizar compiladores con un lenguaje de programación menos estricto y más dinámico para la programación del PIC como por ejemplo lenguaje Basic. Además de conseguir un sensor con una mejor respuesta también se podría conseguir un sensor con un intervalo de distancias de operación mucho más grandes. ya que tienen instrucciones más simples y un mayor número de librerías especificas para PICs. debido a que con el sensor utilizado no se puede controlar el helicóptero a distancias pequeñas y esto genera problemas para iniciar el vuelo. También se puede mejorar la velocidad de transmisión y recepción de datos de los módulos de RF. utilizando módulos más veloces y otras técnicas de codificación de datos para la transmisión y recepción como por ejemplo código Manchester entre otras. ya que al sincronizar y comunicar los módulos mediante claves se pierde tiempo. Otra cosa que se podría mejorar es el encontrar un sensor que tenga una mejor respuesta. 69 .

APENDICE A “HOJAS DE DATOS TECNICOS DE LOS DISPOSITIVOS” 70 .

71 .

72 .

73 .

74 .

75 .

76 .

Sign up to vote on this title
UsefulNot useful