FORMATO 1 (Anexo No.2) CARTA DE AUTORIZACIÓN DE LOS AUTORES PARA LA CONSULTA, LA REPRODUCCIÓN PARCIAL O TOTAL, Y PUBLICACIÓN ELECTRÓNICA DEL TEXTO COMPLETO. (OPCIONAL) Bogotá, D.C., Fecha Jueves, 30 de julio de 2009 Marque con una X Tesis doctoral Señores BIBLIOTECA GENERAL Cuidad Trabajo de Grado Estimados Señores: Los suscritos Javier Alejandro Salamanca Pachón, con C.C. No. 79996854, autor de la tesis doctoral y/o trabajo de grado titulado Implementación de un sistema posicional con motores tipo paso a paso y servo controlados por computador. presentado y aprobado en el año 2009 como requisito para optar al título de Informático Matemático; autorizo a la Biblioteca General de la Universidad Javeriana para que con fines académicos, muestre al mundo la producción intelectual de la Universidad Javeriana, a través de la visibilidad de su contenido de la siguiente manera: Los usuarios puedan consultar el contenido de este trabajo de grado en Biblos, en los sitios web que administra la Universidad, en Bases de Datos, en otros Catálogos y en otros sitios web, Redes y Sistemas de Información nacionales e internacionales “Open Access” y en las redes de información del país y del exterior, con las cuales tenga convenio la Universidad Javeriana. Permita la consulta, la reproducción, a los usuarios interesados en el contenido de este trabajo, para todos los usos que tengan finalidad académica, ya sea en formato CD-ROM o digital desde Internet, Intranet, etc., y en general para cualquier formato conocido o por conocer. Continúo conservando los correspondientes derechos sin modificación o restricción alguna; puesto que de acuerdo con la legislación colombiana aplicable, el presente es un acuerdo jurídico que en ningún caso conlleva la enajenación del derecho de autor y sus conexos. De conformidad con lo establecido en el artículo 30 de la Ley 23 de 1982 y el artículo 11 de la Decisión Andina 351 de 1993, “Los derechos morales sobre el trabajo son propiedad de los autores” , los cuales son irrenunciables, imprescriptibles, inembargables e inalienables. X Firma, nombre completo y documento de identificación del estudiante Javier Alejandro Salamanca Pachón C.C. 79996854 ___________________________________________________ NOTA IMPORTANTE: El autor y o autores certifican que conocen las derivadas jurídicas que se generan en aplicación de los principios del derecho de autor. C. C. FACULTAD Ciencias Básicas PROGRAMA CADÉMICO Informática Matemática FORMATO 2 (Anexo No.3) FORMULARIO DE LA DESCRIPCIÓN DE LA TESIS DOCTORAL O DEL TRABAJO DE GRADO TÍTULO COMPLETO DE LA TESIS DOCTORAL O TRABAJO DE GRADO: Implementación de un sistema posicional con motores tipo paso a paso y servo controlados por computador. AUTOR O AUTORES Apellidos Completos Salamanca Pachón Nombres Completos Javier Alejandro DIRECTOR (ES) TESIS DOCTORAL O DEL TRABAJO DE GRADO Apellidos Completos Nombres Completos Daza Figueredo Jesús TRABAJO PARA OPTAR AL TÍTULO DE: Informático Matemático FACULTAD: Ciencias Basicas PROGRAMA: Carrera X Licenciatura ___ Especialización ____ Maestría ____ Doctorado ____ NOMBRE DEL PROGRAMA: Informática Matemática NOMBRES Y APELLIDOS DEL DIRECTOR DEL PROGRAMA: Patricia A. Hernández Romero CIUDAD: BOGOTA AÑO DE PRESENTACIÓN DEL TRABAJO DE GRADO: 2009 NÚMERO DE PÁGINAS 95 TIPO DE ILUSTRACIONES: - Ilustraciones Tablas, gráficos y diagramas Número de archivos dentro del CD (En caso de incluirse un CD-ROM diferente al trabajo de grado): _________________________________________________________________________ PREMIO O DISTINCIÓN (En caso de ser LAUREADAS o tener una mención especial): _______________________________________________________________________________ DESCRIPTORES O PALABRAS CLAVES EN ESPAÑOL E INGLÉS: Son los términos que definen los temas que identifican el contenido. (En caso de duda para designar estos descriptores, se recomienda consultar con la Unidad de Procesos Técnicos de la Biblioteca General en el correo biblioteca@javeriana.edu.co, donde se les orientará). ESPAÑOL INGLÉS Motor paso a paso ___________________ Steper motor____________________________ Java ____________________________ Java___________________________________ Motor servo_________________________ Servo motor_____________________________ Interface nativa de java________________ Java Native Interface_______________________ Puertos____________________________ Potrs____________________________________ Dinámica de sistemas_________________ System Dynamics__________________________ RESUMEN DEL CONTENIDO EN ESPAÑOL E INGLÉS: (Máximo 250 palabras - 1530 caracteres): Con el uso de los lenguajes computacionales como java, desarrolladores matemáticos y mediante la programación de protocolos de comunicación, que permiten enlazar la salida y entrada de datos de los puertos paralelo y serial. Esto hace posible enviar o recibir paquetes de datos o señales activas para hacer control de sistemas externos. Con el modelamiento matemático como una representación de sistemas físicos que permite simular mediante el diseño e implementación del software que variables afectan un dispositivo y mediante el diseño e implementación del software se establece la comunicación con el dispositivo externo por medio de los puertos del computador. Las variables establecidas en el modelo matemático junto al control sobre cualquier tarea asignada exige una precisión, dependiente de un software que además de ser versátil y robusto es de fácil manejo, se puede configurar para realizar todo tipo de tareas, y para diferentes tipos de dispositivos que se le conecten. With the use of computer languages like Java, developers and through mathematical scheduling of communication protocols, which allow entry and exit link data of parallel and serial ports. This makes it possible to send or receive data packets active signals to control external systems. With the mathematical model as a representation of physical systems that can simulate the design and implementation through software variables that affect a device and through the design and implementation software establishes communication with the external device through ports of the computer. The variables in the mathematical model together with control on any task required accuracy, dependent on a software that besides be versatile and robust it is easy to use, can be configured to perform all kinds of tasks, and for different types of devices connected to it. IMPLEMENTACIÓN DE UN SISTEMA POSICIONAL CON MOTORES TIPO PASO A PASO Y SERVO CONTROLADOS POR COMPUTADOR. JAVIER ALEJANDRO SALAMANCA PACHÓN. TRABAJO DE GRADO Presentado como requisito parcial Para optar al titulo de INFORMÁTICO MATEMÁTICO PONTIFICIA UNIVERSIDAD JAVERIANA FACULTAD DE CIENCIAS CARRERA DE INFORMÁTICA MATEMÁTICA Bogotá, D.C. Julio 2009 NOTA DE ADVERTENCIA Artículo 23 de la Resolución N° 13 de Julio de 1946 “La Universidad no se hace responsable por los conceptos emitidos por sus alumnos en sus trabajos de tesis. Solo velará por que no se publique nada contrario al dogma y a la moral católica y por que las tesis no contengan ataques personales contra persona alguna, antes bien se vea en ellas el anhelo de buscar la verdad y la justicia”. 2 no. IMPLEMENTACIÓN DE UN SISTEMA POSICIONAL CON MOTORES TIPO PASO A PASO Y SERVO CONTROLADOS POR COMPUTADOR. JAVIER ALEJANDRO SALAMANCA PACHÓN. APROBADO. ________________________ Jesús Daza Figueredo. Director. ________________________ ________________________ Fernando Novoa. Orlando Acevedo. Jurado. Jurado. 3 IMPLEMENTACIÓN DE UN SISTEMA POSICIONAL CON MOTORES TIPO PASO A PASO Y SERVO CONTROLADOS POR COMPUTADOR. JAVIER ALEJANDRO SALAMANCA PACHÓN. APROBADO. ________________________ ________________________ Ingrid Schuler, Ph.D. Patricia A. Hernández Romero, MSc. Decano Académico. Director de carrera. 4 Índice general 1. MARCO TEÓRICO. 16 1.0.1. Reseña histórica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.0.1.1. Java. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.0.1.2. Motores eléctricos. . . . . . . . . . . . . . . . . . . . . . . 17 1.0.1.3. Dinámica de sistemas. . . . . . . . . . . . . . . . . . . . . . 18 1.0.2. Dinámica de sistemas. . . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.0.2.1. ¿Qué es la dinámica de sistemas?. . . . . . . . . . . . . . . . 19 1.0.2.2. Construcción de modelos en la dinámica de sistemas. . . . . 20 1.0.3. API de comunicaciones. . . . . . . . . . . . . . . . . . . . . . . . . . 20 1.0.3.1. Características del API de comunicaciones. . . . . . . . . . . 21 1.0.4. La JNI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 1.0.5. Arquitectura puerto paralelo. . . . . . . . . . . . . . . . . . . . . . . . 29 1.0.5.1. Tipos de puerto. . . . . . . . . . . . . . . . . . . . . . . . . 31 1.0.5.2. Detección del tipo de puerto. . . . . . . . . . . . . . . . . . 33 1.0.5.3. Puerto paralelo a nivel físico. . . . . . . . . . . . . . . . . . 35 1.0.5.4. Interrupciones. . . . . . . . . . . . . . . . . . . . . . . . . . 36 1.0.5.5. Canales DMA. . . . . . . . . . . . . . . . . . . . . . . . . . 36 1.0.5.6. El puerto y su hardware. . . . . . . . . . . . . . . . . . . . . 36 1.0.6. Arquitectura puerto serial. . . . . . . . . . . . . . . . . . . . . . . . . 37 1.0.6.1. Estructura de datos del puerto serie RS-232. . . . . . . . . . 38 1.0.7. Arquitectura motor paso a paso. . . . . . . . . . . . . . . . . . . . . . 40 5 1.0.7.1. Principio de funcionamiento. . . . . . . . . . . . . . . . . . 40 1.0.7.2. Secuencia para manejar motores paso a paso bipolares. . . . 42 1.0.7.3. Secuencia para manejar motores paso a paso unipolares. . . . 42 1.0.8. Servo Motores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 1.0.8.1. Funcionamiento de un servo. . . . . . . . . . . . . . . . . . 47 1.0.9. Sistemas Eléctricos. . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 1.0.9.1. Elementos de los circuitos eléctricos.[8] . . . . . . . . . . . 48 1.0.9.2. Leyes de los circuitos eléctricos.[8] . . . . . . . . . . . . . . 50 1.0.10. Modelos matemáticos. . . . . . . . . . . . . . . . . . . . . . . . . . . 53 1.0.10.1. Elaboración de modelos matemáticos (modelado matemático). 53 1.0.10.2. Simplicidad contra exactitud. . . . . . . . . . . . . . . . . . 53 1.0.10.3. Observaciones sobre la elaboración de modelos matemáticos. 54 1.0.10.4. Procedimiento para la elaboración de modelos matemáticos.[6] 54 1.0.10.5. Etapas del modelo.[10] . . . . . . . . . . . . . . . . . . . . 55 1.0.10.6. Sistemas lineales. . . . . . . . . . . . . . . . . . . . . . . . 56 1.0.10.7. Sistemas no lineales. . . . . . . . . . . . . . . . . . . . . . . 56 1.0.11. Diagrama de causa y efecto. . . . . . . . . . . . . . . . . . . . . . . . 57 2. FORMULACIÓN Y JUSTIFICACIÓN. 59 2.1. Formulación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 2.1.1. Justificación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 3. OBJETIVOS. 61 3.0.2. Objetivo general. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 3.0.3. Objetivos específicos. . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 4. METODOLOGÍA. 62 4.0.4. Procedimiento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 4.0.5. Desarrollo metodológico. . . . . . . . . . . . . . . . . . . . . . . . . . 63 4.0.5.1. Análisis de causas. . . . . . . . . . . . . . . . . . . . . . . . 6 63 4.0.5.2. La JNI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 4.0.5.3. El modelo matemático. . . . . . . . . . . . . . . . . . . . . 65 4.0.5.4. Programación de aplicaciones. . . . . . . . . . . . . . . . . 65 4.0.5.5. Diseño tarjeta de enlace. . . . . . . . . . . . . . . . . . . . . 67 5. RESULTADOS. 68 5.1. RUTINA ENCARGADA DE ESCRITURA Y LECTURA EN PUERTO. . . . 68 5.2. RUTINAS DE CONTROL DE MOTOR PaP. . . . . . . . . . . . . . . . . . . 69 5.2.1. Movimiento según el ángulo de rotación. . . . . . . . . . . . . . . . . 70 5.2.1.1. Funcionamiento. . . . . . . . . . . . . . . . . . . . . . . . . 71 5.2.2. Movimiento según distancia a recorrer. . . . . . . . . . . . . . . . . . 71 5.2.2.1. Funcionamiento. . . . . . . . . . . . . . . . . . . . . . . . . 73 5.2.3. Secuencia para el control de dos motores. . . . . . . . . . . . . . . . . 73 5.2.3.1. Funcionamiento. . . . . . . . . . . . . . . . . . . . . . . . . 77 5.2.4. Ubicación de un punto en un espacio bidimensional. . . . . . . . . . . 78 5.2.4.1. Funcionamiento. . . . . . . . . . . . . . . . . . . . . . . . . 80 5.3. RUTINA PARA CONTROL DE UN SERVO MOTOR. . . . . . . . . . . . . . 81 5.3.0.2. Funcionamiento. . . . . . . . . . . . . . . . . . . . . . . . . 83 5.4. VENTAJAS Y DESVENTAJAS DE LOS MOTORES PASO A PASO Y LOS MOTORES SERVO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 5.4.1. Motor paso a paso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 5.4.1.1. Ventajas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 5.4.1.2. Desventajas. . . . . . . . . . . . . . . . . . . . . . . . . . . 84 5.4.2. Servomotor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 5.4.2.1. Ventajas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 5.4.2.2. Desventajas. . . . . . . . . . . . . . . . . . . . . . . . . . . 85 5.4.3. Comparación de motor paso a paso y motor servo. . . . . . . . . . . . 85 5.5. MODELO MATEMÁTICO. . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 5.5.1. Descripción física motor PaP. . . . . . . . . . . . . . . . . . . . . . . 86 7 5.5.2. Descripción física servo motor. . . . . . . . . . . . . . . . . . . . . . . 86 5.5.3. Descripción matemática. . . . . . . . . . . . . . . . . . . . . . . . . . 86 5.5.3.1. Motor PaP . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 5.5.3.2. Servo motor. . . . . . . . . . . . . . . . . . . . . . . . . . . 87 5.6. TARJETA DE ENLACE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 5.7. FUTURAS MEJORAS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 6. CONCLUSIÓN. 90 8 Índice de cuadros 1.1. Conexiones DB25 y DB9 del interfaces RS-232 . . . . . . . . . . . . . . . . . 23 1.2. Conexiones DB25 del interfaces IEEE-1284 en modo SPP. . . . . . . . . . . . 26 1.3. Extensiones de la librerías dinámicas por SO. . . . . . . . . . . . . . . . . . . 28 1.4. Reglas de búsqueda de librerías de enlace dinámico de cada sistema operativo. . 29 1.5. Direcciones base puerto paralelo . . . . . . . . . . . . . . . . . . . . . . . . . 30 1.6. Direcciones base de los registros. . . . . . . . . . . . . . . . . . . . . . . . . . 31 1.7. Conexionado del puerto paralelo en modo ECP . . . . . . . . . . . . . . . . . 33 1.8. Conexionado del puerto paralelo . . . . . . . . . . . . . . . . . . . . . . . . . 35 1.9. Masas según señal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 1.10. Pins del puerto serie conexiones D25 y D9 . . . . . . . . . . . . . . . . . . . 39 1.11. Funciones de los pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 1.12. Secuencia para controlar motores paso a paso tipo bipolar. . . . . . . . . . . . 42 1.13. Secuencia normal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 1.14. Secuencia wave drive. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 1.15. Secuencia medio paso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 5.1. 85 Características comparativas de motor PaP y servo motor. . . . . . . . . . . . 9 Índice de figuras 1.1. Puerto paralelo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 1.2. Puerto RS-232. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 1.3. Conexionado mediante el uso de un ULN2803. . . . . . . . . . . . . . . . . . 41 1.4. Motor PaP con 5 cables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 1.5. Motor PaP con 6 cables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 1.6. Circuito en paralelo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 1.7. Resistores combinados en serie y en paralelo caso 1. . . . . . . . . . . . . . . 51 1.8. Resistores combinados en serie y en paralelo caso 2. . . . . . . . . . . . . . . 51 1.9. Resistores combinados en serie y en paralelo caso 3. . . . . . . . . . . . . . . 52 1.10. Caso 1 corrientes y voltajes. . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 5.1. Pantalla asignación movimiento según ángulo de rotación. . . . . . . . . . . . 71 5.2. Pantalla asignación movimiento según distancia a recorrer. . . . . . . . . . . . 73 5.3. Pantalla de control de dos motores. . . . . . . . . . . . . . . . . . . . . . . . . 78 5.4. Pantalla de ubicación en un punto bidimensional. . . . . . . . . . . . . . . . . 80 5.5. Pantalla rutina de control de servo motor. . . . . . . . . . . . . . . . . . . . . 83 5.6. 88 Tarjeta de enlace entre el computador y el motor. . . . . . . . . . . . . . . . . 10 Nomenclatura API Application Programmin Interface Interfaz de Programacion de Aplicaciones BIOS Basic Imput/Output Services Servicios básicos de la entrada-salida bit/seg bit por segundo C Capacitancia C Coulumb CAD Computer Asisted Desing Diseño Asistido por Computador CC Corriente Continua CCITT Consultive Commitee International Telegraph and Telephone Comité Consultivo Internacional de Teléfonos y Telégrafos COM puerto de comunicaciones CTS Clear to Send Limpiar para enviar DMA Direct Memory Access Acseso Directo a la Memoria DSR Data Set Ready Conjunto de datos listo DTR Data Terminal Ready Teminal de Datos Lista E/S Entrada Salida 11 ECP Enhanced Capabilities Port Puerto de capacidades realzado ECR Extended Control Register Registro Extendido de Control EIA Electronics Industry Association Asociación de Electrónica Industrial. EPP Extended Parallel Port Puerto paralelo extendido F Faradio fem Fuerza electro motriz FIFO First In First Out Primero en Entrar Primero en Salir GND Ground Tierra GUI Graphic user interfece Interface grafica de usuario H Henrios i Corriente IBM International Business Machines IEEE-1284 Standard Signaling Method for a Bi-directional Parallel Periphetral Interface for Personal Computers Estándar del Método de señalización para una interfase paralela bidireccional periferica para computadoras personales IRQ Interrupt Request Level Nivel de demanda de interrupción ISA Industry Standard Architecture Arquitectura estándar industrial JDK Java Developement Kit Kit Desarrollador de Java 12 JNI Java Native Interface Interfaz Nativa de Java kg Kilo gramos L Inductancia LAN Local Area Network Red de área local LPT Line Print Terminal Línea terminal de la impresión LTI Linear Time Invariant Tiempo lineal invariante LTV Linear Time Variant Tiempo lineal variante M Inductancia mutua mA mili amperios Mb/s Megabits por segundo MIT Massachusetts Institute Tecnology Instituto de Tecnología de Massachusetts ms mili segundos OS Operating System Sistema operativo PaP Paso a Paso PCM Pulse Codified Modulation Modulación codificada de Pulsos PWM Pulse Width Modulation Pulso con modulación R Resistencia RAM Random Access Memory Memoria de acceso aleatorio 13 RPM REVOLUCIONES POR MINUTO rpm Revoluciones por minuto rpm Revoluciones por minuto RPP REVOLUCIONES POR PULSO rpp Revoluciones por pulso rpp Revoluciones por pulso RS-232 Recommended Standard 232 Estandar Recomendado 232 RTS Request To Send Petición de enviar S Siemens SAGE Semi-Automatic Ground Equipment Equipo de tierra semiautomático SPP Standard Parallel Port Puerto Paralelo Estandar TTL Transistor to Transistor Logic Lógica Transistor a Transistor USB Universal Serial Bus V Voltio Vcc Voltaje corriente continua VM Virtual Machine Máquina virtual 14 GENERALIDADES. INTRODUCCIÓN. Con el uso de los lenguajes computacionales como java, desarrolladores matemáticos y mediante la programación de protocolos de comunicación, que permiten enlazar la salida y entrada de datos de los puertos paralelo y serial. Esto hace posible enviar o recibir paquetes de datos o señales activas para hacer control de sistemas externos. Con el modelamiento matemático como una representación de sistemas físicos que permite simular mediante el diseño e implementación del software que variables afectan un dispositivo y mediante el diseño e implementación del software se establece la comunicación con el dispositivo externo por medio de los puertos del computador. Las variables establecidas en el modelo matemático junto al control sobre cualquier tarea asignada exige una precisión, dependiente de un software que además de ser versátil y robusto es de fácil manejo, se puede configurar para realizar todo tipo de tareas, y para diferentes tipos de dispositivos que se le conecten. Todos los periféricos que establecen comunicación con los puertos requieren de interfaces que son diseñadas con herramientas tipo CAD1 y variará su diseño según las especificaciones del dispositivo requerido, en este caso el tipo de motor. 1 Computer Asisted Design-Diseño asistido por computador 15 Capítulo 1 MARCO TEÓRICO. 1.0.1. 1.0.1.1. Reseña histórica. Java. En Diciembre de 1990, Patrick Naughton, un empleado de la empresa Sun, reclutó a sus colegas James Gosling y Mike Sheridan para trabajar sobre un nuevo tema conocido como "El proyecto verde"[4]. Este a su vez estaba auspiciado por la compañía "Sun founder Bill Joy" y tenía como objetivo principal crear un lenguaje de programación accesible, fácil de aprender y de usar, que fuera universal, y que estuviera basado en un ambiente C++ ya que había mucha frustración por la complejidad y las limitaciones de los lenguajes de programación existentes. En abril de 1991, el equipo decidió introducir sistemas de software con aplicaciones para consumidores smart como plataforma de lanzamiento para su proyecto. James Gosling escribió el compilador original y lo denominó "Oak", y con la ayuda de los otros miembros del equipo desarrollaron un decodificador que mas tarde se convertiría en lenguaje Java. Cuando un grupo de Sum visito un café local e nombre de java fue sugerido[4]. Para 1992, el equipo ya había desarrollado un sistema prototipo conocido como "*7", que era una especie de cruce entre un asistente digital personalizad o y un mecanismo inteligente de control remoto. Por su parte el presidente de la compañía Sun, Scott McNealy, se dio cuenta en forma muy oportuna y estableció el Proyecto Verde como una subsidiaria de Sun. De 1993 a 1994, el equipo de Naughton se lanzó en busca de nuevas oportunidades en el mercado, mismas que se fueron dando mediante el sistema operativo base. La incipiente subsidiaria fracasó en sus intentos de ganar una oferta con Time-Warner, sin embargo el equipo concluyó que el mercado para consumidores electrónicos smart y las cajas Set-Up en particular, no eran del todo eficaces. La subsidiaria Proyecto Verde fue amortizada por la compañía Sun a mediados del 94. 16 Afortunadamente, el cese del Proyecto Verde coincidió con el nacimiento del fenómeno mundial Web. Al examinar las dinámicas de Internet, lo realizado por el ex-equipo verde se adecuaba a este nuevo ambiente ya que cumplía con los mismos requerimientos de las set-top box OS que estaban diseñadas con un código de plataforma independiente pero sin dejar de ser pequeñas y confiables. Patrick Naugthon procedió a la construcción del lenguaje de programación Java que se accionaba con un browser prototipo, más tarde se le fueron incorporando algunas mejoras y el browser Hot Java fue dado a conocer al mundo en 1995. Con el paso del tiempo el Hot Java se convirtió en un concepto práctico dentro del lenguaje Java y demostró que podría proporcionar una forma segura multiplataforma para que el código pueda ser bajado y corrido del Host del World Wide Web y que de otra forma no son seguros. Una de las características más atractivas del Hot Java fue su soporte para los "applets", que son las partes del código Java que pueden ser cargadas mediante una red de trabajo para después ejecutarlo localmente y así lograr o alcanzar soluciones dinámicas en computación acordes al rápido crecimiento del ambiente Web. Para dedicarse al desarrollo de productos basados en la tecnología Java, Sun formó la empresa Java Soft en enero de 1996, de esta forma de se dio continuidad al fortalecimiento del programa del lenguaje Java y así trabajar con terceras partes para crear aplicaciones, herramientas, sistemas de plataforma y servicios para aumentar las capacidades del lenguaje. Durante ese mismo mes, Java Soft dio a conocer el Java Developmet Kit (JDK) 1.0[13], una rudimentaria colección de componentes básicos para ayudar a los usuarios de software a construir aplicaciones de Java. Dicha colección incluía el compilador Java, un visualizador de applets, un debugger prototipo y una máquina virtual Java(JVM), necesaria para correr programas basados en Java, también incluía paquetería básica de gráficos, sonido, animación y trabajo en red[13]. 1.0.1.2. Motores eléctricos. Faraday, Michael (1791−1867), fue el que descubrió el principio de el motor eléctrico el descubrió la inducción. Inducción es la generación de una corriente eléctrica en un conductor en movimiento en el interior de un campo magnético físico. A partir de ese descubrimiento se potencio el estudio sobre la electrónica[8]. En 1834 anunció el método de descomponer las soluciones salinas, que hoy se conoce con el nombre de electrólisis, establece que el movimiento de un conductor integrante de un circuito cerrado en un campo magnético produce corriente en dicho circuito, y en ello se basa el funcionamiento del generador eléctrico. 17 Una corriente eléctrica que pasa por un conductor situado en un campo magnético crea una fuerza que tiende a desplazar al conductor con respecto al campo, esta es la base del motor eléctrico. De modo que, en esencia, una misma máquina puede emplearse como generador o como motor; si se le aplica energía mecánica, generará electricidad, y si se le aplica electricidad, producirá energía mecánica.[16] 1.0.1.3. Dinámica de sistemas. A lo largo de los años cincuenta comenzó a desarrollarse en el Instituto de Tecnología de Massachusetts (MIT) una destacada metodología de sistemas, la Dinámica de Sistemas[9]. Jay W. Forrester, ingeniero electrónico, había pasado del Laboratorio de Servomecanismos, donde inventó las memorias magnéticas de núcleos de ferrita, a coordinar un gran proyecto de defensa, el sistema SAGE (Semi-Automatic Ground Equipment). En la realización de este sistema de alerta en tiempo real se percató de la importancia del enfoque sistémico para concebir y controlar entidades complejas como las que surgen de la interacción de hombres y máquinas. Tras esta experiencia, Forrester pasaría como profesor a la Sloan School of Management del MIT, donde observó que en las empresas se producían fenómenos de realimentación que podían ser causa de oscilaciones, igual que sucede en los servomecanismos. De esta forma ideó la Dinámica Industrial1 , una metodología que permitía construir modelos cibernéticos de los procesos industriales. La peculiaridad de estos modelos residía en la posibilidad de simular su evolución temporal con la ayuda del ordenador. Posteriormente aplicaría su metodología a problemas de planificación urbana2 y la generalizaría para cualquier tipo de sistema continuo, cambiando su denominación por la de Dinámica de Sistemas3 . La Dinámica de Sistemas alcanzó gran difusión durante los años setenta, al servir de base para los estudios encargados por el Club de Roma a Forrester y su equipo para valorar el efecto del crecimiento de la población y de la actividad humana en un mundo de recursos limitados. El propio Forrester dirigió la confección de un modelo inicial del mundo4 a partir del cual se realizaría más tarde el informe definitivo5 , dirigido por D.L. Meadows y financiado por la Fundación Volkswagen. Un segundo informe, también utilizando Dinámica de Sistemas, sería encargado posteriormente a Mesarovic y Pestel6 . 1 Industrial Dynamics, 1961. Dynamics, 1969. 3 System Dynamics, 1968. 4 World Dynamics, 1971. 5 The Limits to Growth, 1973. 6 Mankind at the Turning Point, 1974 . 2 Urban 18 1.0.2. Dinámica de sistemas. La Dinámica de Sistemas es una metodología para la construcción de modelos de simulación para sistemas complejos, como los que son estudiados por las ciencias sociales, la economía, la ecología o la física. 1.0.2.1. ¿Qué es la dinámica de sistemas?. La Dinámica de Sistemas es una metodología para la construcción de modelos de simulación para sistemas complejos, como los que son estudiados por las ciencias sociales, la economía o la ecología. La Dinámica de Sistemas aplica métodos de sistemas duros, básicamente las ideas de realimentación y sistema dinámico, junto con la teoría de modelos en el espacio de estados y procedimientos de análisis numérico. Por tanto sería una metodología más entre las de sistemas duros. Sin embargo, en su punto de mira están los problemas no estructurados (blandos), como los que aparecen en los sistemas socio económicos.[6] Esto plantea dos tipos de dificultades: Cuantificación: En Dinámica de Sistemas se comienza por identificar las variables de interés y las relaciones que ligan entre sí a estas variables. A continuación es imprescindible cuantificar dichas relaciones, lo que en ocasiones plantea dificultades insalvables.[10, 11] Validación: Una vez construido el modelo hay que preguntarse si refleja razonablemente la realidad. Esta cuestión puede resolverse por ejemplo en caso de que se disponga de informaciones cuantitativas de la evolución del sistema real en el pasado. Si el modelo es capaz de generar los comportamientos característicos del sistema real, denominados modos de referencia, entonces obtendremos una cierta confianza en la validez del modelo.[10, 11] En Dinámica de Sistemas la simulación permite obtener trayectorias para las variables incluidas en cualquier modelo mediante la aplicación de técnicas de integración numérica. Sin embargo, estas trayectorias nunca se interpretan como predicciones, sino como proyecciones o tendencias.[10, 11] El objeto de los modelos de Dinámica de Sistemas es, como ocurre en todas las metodologías de sistemas blandos, llegar a comprender cómo la estructura del sistema es responsable de su comportamiento. Esta comprensión normalmente debe generar un marco favorable para la determinación de las acciones que puedan mejorar el funcionamiento del sistema o resolver los problemas observados. La ventaja de la Dinámica de Sistemas consiste en que estas acciones pueden ser simuladas a bajo coste, con lo que es posible valorar sus resultados sin necesidad de ponerlas en práctica sobre el sistema real.[7, 9] 19 1.0.2.2. Construcción de modelos en la dinámica de sistemas. Fases en la construcción de un modelo: 1. Conceptualización.[11, 10] Descripción verbal del sistema. Descripción precisa del modelo en el tiempo. Diagrama causal. 2. Formulación.[11, 10] Construcción del diagrama de Forrester. Establecimiento de las ecuaciones para la simulación. 3. Análisis y evaluación.[11, 10] Análisis del modelo (comparación, análisis de sensibilidad, análisis de políticas). Evaluación, comunicación e implementación.[11, 10] 1.0.3. API de comunicaciones. El API de comunicaciones es un paquete de java el cual permite la comunicación mediante el puerto paralelo o serial con dispositivos externos al computador. Una API7 es un conjunto de especificaciones de comunicación entre componentes software. Representa un método para conseguir abstracción en la programación, generalmente (aunque no necesariamente) entre los niveles o capas inferiores y los superiores del software. Uno de los principales propósitos de una API consiste en proporcionar un conjunto de funciones de uso general, por ejemplo, para dibujar ventanas o iconos en la pantalla. De esta forma, los programadores se benefician de las ventajas de la API haciendo uso de su funcionalidad, evitándose el trabajo de programar todo desde el principio. El API de comunicaciones es una extensión estándar que permite realizar comunicaciones con los puertos serie RS-232 y el paralelo IEEE-1284, esto permite realizar aplicaciones de comunicaciones que utilizan los puertos de comunicaciones independientes de la plataforma[12]. 7 Application Programming Interface - Interfaz de Programación de Aplicaciones 20 1.0.3.1. Características del API de comunicaciones. En el paquete de comunicaciones javax.comm tenemos una serié de clases que nos permiten tratar varios niveles de programación, estos niveles son los siguientes: Nivel alto: En este nivel tenemos las clases CommPortIdentifier y CommPort que nos permiten el acceso a los puertos de comunicación[12]. Nivel medio: Con las clases SerialPort y ParallelPort que cubren la interfaz física RS-232 para el puerto serie y IEEE-1284 para el puerto paralelo[12]. Nivel bajo: Este nivel ya toca el sistema operativo y en el se encuentra el desarrollo de drivers[12]. Los servicios que nos proporciona este paquete son: Poder obtener los puertos disponibles así como sus características. Abrir y mantener una comunicación en los puertos. Resolver colisiones entre aplicaciones. Gracias a este servicio podremos tener varias aplicaciones Java funcionando y utilizando los mismos puertos y no solo sabremos que el puerto esta ocupado sino que podremos saber que aplicación lo esta utilizando. Disponemos de métodos para el control de los puertos de entrada / salida a bajo nivel, de esta forma no solo nos limitamos a enviar y recibir datos sino que podemos saber en que estado esta el puerto. Así en un puerto serie podremos no solo cambiar los estados sino que podemos programar un evento que nos notifique el cambio de cualquier estado. Programación a alto nivel. Para esta programación se cuenta con la clase CommPortIdenti- fier. Se encuentra ante la clase principal del paquete ya que lo primero que se debe hacer antes de empezar a utilizar un puerto es descubrir si esta libre para su utilización. Lo primero que se debe hacer antes de intentar abrir un puerto será ver si ya tiene o no un propietario y para obtener la información de esto se debe obtener el objeto de CommPortIdentifier correspondiente al puerto que se realizara con alguno de los siguientes métodos: getPortIdentifiers() es el método utilizado en nuestro programa y que nos entregará un enumerado con tantos objetos CommPortIdentifier como puertos dispongamos.[12] 21 getPortIdentifier(String) Nos dará el objeto correspondiente al puerto que se le pase como parámetro, este será el método que normalmente usaremos ya que lo normal es que siempre nos conectemos por el mismo puerto. Este método deberá saber tratar la excepción NoSuchPortException que saltara en el caso de que solicitemos un puerto inexistente.[12] Una vez que se tiene el objeto del puerto se tiene una serie de métodos que nos permiten obtener información del puerto y abrirlo para poder iniciar una comunicación. Estos métodos son los siguientes: getName() dará el nombre del puerto. En el caso de haber utilizado el método getPortIdentifier(String) será el mismo valor que pasamos como parámetro.[12] getPortType() devuelve un entero que nos informa del tipo de puerto (serie o paralelo), para no tener que acordarnos del valor de cada tipo de puerto disponemos de las constantes PORT_PARALLEL y PORT_SERIAL.[12] isCurrentlyOwned() nos informa si esta libre o no el puerto. En caso de que este ocupado se podrá saber quien lo esta utilizando mediante el método getCurrentOwner().[12] open(String, int) abre y por lo tanto reserva un puerto, en el caso de que intentemos abrir un puerto que ya se encuentre en uso saltara la excepción PortInUseException. Los parámetros que le debemos pasar son un String con el nombre de la aplicación que reserva el puerto y un int que indica el tiempo de espera para abrir el puerto.[12] Una vez que se tiene este objeto se deberán encaminar sus salidas a OutputStream y las entradas a InputStream una vez realizado esto la escritura y lectura de los puertos será tan fácil como utilizar los métodos de estas clases que pertenecen al estándar del JDK. addPortOwnershipListener(CommPortOwnershipListener) permite añadir una clase que escuche los cambios de propietarios en los puertos. Si una vez que se tiene registrado un oyente de eventos se quiere eliminar se debe de utilizar el comando removePortOwnershipListener(CommPortOwnershipListerner).[12] Clase CommPort. Esta es una clase abstracta que describe los métodos comunes de comunicación y serán las clases que hereden de ellas (SerialPort y ParallelPort) la que añadan métodos y variables propias del tipo del puerto. Entre los métodos que se interesa conocer se tienen: close() nos permitirá liberar el puerto que se reservo con open, este notificara el cambio de dueño a las clases que se hubiesen registrado con el método addPortOwnershipListener que se explico anteriormente.[12] 22 getInputStream() nos permitirá enlazar la entrada del puerto al InputStream que nos devuelve para leer del puerto.[12] getOutputStream() nos permitirá enlazar la salida del puerto al OutputStream que nos devuelve para poder escribir en el puerto de la misma forma que si se escribiera en un fichero.[12] getInputBufferSize() nos informa del tamaño que tiene el buffer de entrada del puerto. Este tamaño se puede modificar con el método setInputBufferSize(int). Estos métodos no siempre dan el resultado esperado ya que será la memoria disponible y el sistema operativo quien al final decida si realizar o no correctamente la operación.[12] getOutputBufferSize() nos informa del tamaño que tiene el buffer de salida, como en el caso anterior contamos con un método para modificar el tamaño que es setOutputBufferSize(int). Al igual que pasaba con los métodos anteriores su correcto funcionamiento dependen del sistema operativo en sí y del desarrollo del driver.[12] Clase SerialPort . En esta clase encontramos las interfaces de bajo nivel del puerto paralelo que cumple el estándar RS-232. En la Tabla 1 se puede ver la descripción de las patitas del conector de 25 contactos. En la emisión de un carácter se realizarán las siguientes comprobaciones: PIN (DB25) 2 3 4 5 6 7 8 20 22 PIN (DB9) 2 3 7 8 6 5 1 4 9 Descripción TD: Canal de transmisión. RD: Canal de recepción. RTS: Petición para transmitir. CTS: Preparado para emitir. DSR: Equipo preparado. Masa DCD: Conexión establecida. DTR: Terminal preparado. RI: Indicador de llamada. Cuadro 1.1: Conexiones DB25 y DB9 del interfaces RS-232 1. Poner el DTR. Indicando que estamos preparados. 2. Poner RTS. Solicito permiso para emitir. 3. Comprobar que esta DSR. Mira sí el destinatario esta listo. 4. Esperar a CTS. Se espera a que me autoricen a enviar datos. 23 5. Enviar datos. La clase SerialPort hereda de la clase abstracta CommPort y por lo tanto cuenta con sus métodos pero además de estos se dispone de otros métodos y variables especificas para el tratamiento de los puertos serie. setSerialPortParams(int, int, int, int) permite configurar los parámetros del puerto serie, este método deberá tratar la excepción UnsupportedCommOperationException que saltara en el caso de que se le introduzcan valores no soportados.[12] Los parámetros del método son: 1. La velocidad en el caso de que se le pase un valor no valido. Si se pasa 1210 se produciría la excepción y no se modificarían los datos. 2. El segundo parámetro son los bit de datos. Para indicar el valor se utilizaran las constantes de la clase que se tiene para lo mismo (DATABITS_5, DATABITS_6, DATABITS_7 o DATABITS_8). 3. El bit o bits de stop que se utilizan y que puede ser 1,2 o uno y medio. Las constantes que definen estas configuraciones son: STOPBITS_1, STOPBITS_2 y STOPBITS_1_5 respectivamente. 4. Paridad que se utilizará y que puede ser PARITY_NONE en el caso de no utilizar paridad, PARITY_ODD para la paridad impar, PARITY_EVEN paridad par, PARITY_MARK paridad por marca y PARITY_SPACE paridad por espacio. Las funciones del mètodo son: getBaudrate() da la velocidad a la que esta preparada para transmitir y que se puede cambiar con el método setSerialPortParams(int, int, int, int).[12] getDataBits() da la configuración de número de datos y al igual que el método anterior se puede cambiar con el mismo método, los valores posibles son los mismos que utiliza el método de configuración de parámetros.[12] getStopBits() indica la configuración de bits de parada y al igual que en los métodos anteriores se puede configurar con el mismo método. 4. getParity() indica la paridad que utiliza.[12] getParity() indica la paridad que utiliza.[12] 24 getFlowControlMode() da la configuración del control de flujo que se puede cambiar con el método setFlowControlMode(int) y los valores posibles son: FLOWCONTROL_NONE no existe control de flujo, (FLOWCONTROL_RTSCTS_IN o FLOWCONTROL_RTSCTS_OUT) para el control de flujo por hardware y ( FLOWCONTROL_XONXOFF_IN o FLOWCONTROL_XONXOFF_OUT) para control de flujo por software. El método setFlowControlMode(int al igual que pasaba con setSerialPortParams(int, int, int, int) deberá de saber capturar la excepción UnsupportedCommOperationException.[12] 6. addEventListener(SerialPortEventListener) permite escuchar los cambios de estado del puerto, si se desea quitar este oyente se utiliza el método removeEventListener().[12] Mediante los métodos notifyOnXXX(boolean) permitirá habilitar o deshabilitar la notificación de los diferentes cambios que pueden ser: • DataAvailable existen datos en la entrada. • OutputEmpty el buffer de salida esta vacío. • CTS cambio de Clear To Send. • DSR cambio de Data Set Ready. • RingIndicator cambio en RI. • CarrierDetect cambio en CD. • ParityError se ha producido un error de paridad. • BreakInterrupt se detecta una rotura en la línea. La clase oyente deberá de tener el método serialEvent(SerialPortEvent) que recibirá un objeto que trata los eventos del puerto serie con tres métodos importantes: getEventType() informara del evento que se ha producido.[12] getNewValue() devuelve el nuevo estado.[12] getoldValue() dará el estado anterior al cambio.[12] isDTR() informará del estado terminal que se podrá cambiar con setDTR(boolean).[12] isRTS() dice si ha solicitado permiso para transmitir o no y para cambiar su estado tenemos el método setRTS(boolean).[12] isCTS() informa si podemos transmitir, isDSR() dará el estado en el que se encuentra el pin DSR. IsRI() informa de sí esta el indicador de timbre, isCD() nos indicara si tenemos portadora.[12] 25 Clase ParallelPort. En esta clase tenemos las interfaces de bajo nivel del puerto paralelo que cumple la norma IEEE-1284. El estándar IEEE-1284 cuenta con 8 líneas de datos, 5 entrada de estado y 4 salidas de control. Los contactos del conector se definen en la Tabla 2 con sus funciones en el modo SPP que es el modo compatible de trabajo para la impresora. PIN 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 NOMBRE STROBE D0 D1 D2 D3 D4 D5 D6 D7 ACK BUSY PE SLCT AUTO FD ERROR INIT SLCT IN Descripción Indica que existen datos validos en las líneas de datos D0-7 Dato bit 0 Dato bit 1 Dato bit 2 Dato bit 3 Dato bit 4 Dato bit 5 Dato bit 6 Dato bit 7 Indica que el ultimo carácter se recibió. Indica que la impresora esta ocupada y no puede recoger datos. Sin papel. Indica que la impresora esta en línea. Indica a la impresora que realice una alimentación de línea. Existe algún error en la impresora. Pide a la impresora que se inicie. Indica a la impresora que esta seleccionada. Cuadro 1.2: Conexiones DB25 del interfaces IEEE-1284 en modo SPP. Este estándar se puede trabajar con 5 modos de funcionamiento: Compatible o SPP. Modo Nibble, este modo reserva el canal de datos y se combina con el modo SPP. Byte Mode, este modo es bidireccional utilizado por IBM y tiene la capacidad de deshabilitar los drivers usando la línea de datos. EPP (Extended Parallel Port) es el modo extendido y se utiliza para periféricos que principalmente no son impresoras. ECP (Enhanced Capabilities Port) al igual que el modo EPP es bidireccional y se utiliza para comunicar diversos tipos de periféricos, este modo es una propuesta de Hewlett Packard y Microsoft. 26 La clase ParallelPort es una clase que se hereda de CommPort. Esta clase cuenta con una serie de métodos que facilitan el uso del puerto paralelo: addEventListener(ParallelPortEventListener ev) mediante este método se puede asignar un oyente para cuando aparezca un error en el puerto y no lo notifique, exactamente nos informara de cuando el buffer de salida este lleno o cuando la impresora indique error. Los métodos que permiten habilitar o deshabilitar estos avisos son: notifyOnError(boolean) y notifyOnBuffer(boolean). Si se desea quitar el oyente se puede utilizar el método removeEventListener().[12] getOutputBufferFree() informa de los bytes que se tienen disponibles en el buffer de salida.[12] isPaperOut() devolverá un valor true en el caso de que se quede sin papel la impresora, esto es lo mismo que preguntar por el estado de la seña PE 1.2 en la página anterior.[12] isPrinterBusy() devolverá un valor true en el caso de que la impresora este ocupada y se corresponde con el estado BUSY.[12] isPrinterSelected() informa sí la impresora esta seleccionada.[12] isPrinterError() chequea si ocurre un error en la impresora y esto se refleja con el estado de ERROR que esta en el pin 15 1.2 en la página anterior.[12] restart() realiza un reinicio en la impresora.[12] suspend() suspende la salida.[12] getMode() dice el modo configurado del puerto paralelo y los valores posibles son:[12] • LPT_MODE_SPP modo compatible unidireccional. • LPT_MODE_PS2 modo Byte. • LPT_MODE_EPP modo extendido. • LPT_MODE_ECP modo mejorado. • LPT_MODE_NIBBLE modo nibble. setMode(int) configuramos el modo del puerto paralelo, los valores que puede tomas son los anteriores y además LPT_MODE_ANY que será el mejor modo disponible. Este método deberá ser capaz de tratar la excepción UnsupportedCommOperationException que saltara en el caso de que se introduzca un modo no soportado.[12] 27 1.0.4. La JNI. Otra manera de establecer la comunicación por medio de los puertos serial o paralelo desde el computador a un dispositivo externo es mediante el uso de la JNI. La JNI es una interfase de programación. Esta permite al código de java correr dentro de la maquina virtual de java (VM) y se interpole con aplicaciones, funciones y librerías escritas en otros lenguajes de programación, tales como C, C++ y assembler.[13] El código nativo son funciones escritas en un lenguaje de programación como C o C++ para el sistema operativo (SO) donde se esta ejecutando la maquina virtual. JNI tiene un interfaz bidireccional que permite a las aplicaciones Java llamar código nativo y viceversa. Es decir JNI soporta dos tipos de interfaces: 1. Native methods. Que permiten a Java llamar a funciones implementadas en librerías nativas.[13] 2. Invocation Interface. Nos permite incrustar una maquina virtual Java en una aplicación nativa. La aplicación nativa llama a librerías nativas de la maquina virtual y luego usa el llamado invocation interface para ejecutar métodos java en la VM.[13] Las librerías de enlace dinámico son ficheros cuyas funciones no se incrustan en el ejecutable durante la fase de enlazado, sino que en tiempo de ejecución el programa busca el fichero, carga su contenido en memoria y enlaza su contenido según va siendo necesario. Esto tiene la ventaja de que varios programas pueden compartir las mismas librerías, lo cual reduce el gasto del disco duro, especialmente con las llamadas al sistema (APIs) que suelen ser usadas por muchas aplicaciones a la vez. Su extensión también varía dependiendo del SO en que estemos. Extensiones típicas son: Sistema Operativo Mac OS X UNIX Windows Extensión .dylib .so .dll Cuadro 1.3: Extensiones de la librerías dinámicas por SO. Para que los programas encuentren las librerías de enlace dinámico, estas deben ponerse en unos determinados directorios. 28 Cada SO sigue sus reglas: Cuadro 1.4: Reglas de búsqueda de librerías de enlace dinámico de cada sistema operativo. El más importante beneficio de las JNI es que este no posee restricciones en la implementación de la subyacente java VM. Mientras se pueda escribir aplicaciones enteramente en java, hay algunas situaciones donde java sólo no encuentra las necesidades de su aplicación. Los programadores usan las JNI para escribir métodos nativos de java que manejan estas situaciones cuando una aplicación no puede ser escrita totalmente en java. Lo siguiente ilustra cuando se necesita usar los métodos nativos de java. Las librerías estándar de java no pueden soportar las características plataforma-dependientes necesarias para la aplicación. Se tienen librerías escritas en otros lenguajes, y se desea hacer este accesible al código de java con el JNI. Se quiere implementar una pequeña porción de código tiempo-critico en un lenguaje de bajo nivel como assembler. 1.0.5. Arquitectura puerto paralelo. Físicamente el puerto paralelo es identificado por el usuario por su característico conector de 25 pines (hembra).[14] 29 Figura 1.1: Puerto paralelo. Es posible que una computadora posea más de un puerto paralelo, generalmente se pueden tener hasta tres, aunque Windows y otros programas tienen la capacidad para manejar hasta cuatro de ellos. Cada puerto paralelo posee una dirección Base, es decir, una dirección con la que se identifica al puerto, y según el tipo de puerto de que se trate, podrá tener además otras direcciones8 . Actualmente las direcciones por defecto para los puertos son las siguientes: Puerto LPT1 LPT2 LPT3 Dirección Base 0x378 0x278 0x3BC Cuadro 1.5: Direcciones base puerto paralelo 8 Base+1, Base+2, ... 30 El BIOS9 construye una tabla en memoria cuando arranca la computadora desde la dirección 40:08h a 40:0Dh que contiene las direcciones base de cada puerto paralelo instalado, leyendo esta tabla ordenada se puede conocer la dirección base de cada puerto.[5] 1.0.5.1. Tipos de puerto. Es posible encontrar los siguientes tipos de puertos, por orden de aparición. 1. SPP. Es el puerto más sencillo, tiene tres buses o registros, en la dirección Base: bus de datos, este es de 8 bits y todos sus pines son salidas; en la dirección Base+1: bus de estado, en este registro solo 5 pines se encuentran cableados al conector, y todos ellos son entradas, en las impresoras son los que llevan la información de papel atascado, falta de papel,... , una de las entradas (el bit 7) está complementada; por ultimo en la dirección Base+2: bus de control, este bus tiene cuatro salidas, de las cuales tres están negadas.[14] Dirección Base + 0: registro o bus de datos. Dirección Base + 1: registro o bus de estado. Dirección Base + 2: registro o bus de control. Bus de datos Bus de Estado Bus de Control LPT1 0x378 0x379 0x37A LPT2 0x278 0x279 0x27A LPT3 0x3BC 0x3BD 0x3BE Cuadro 1.6: Direcciones base de los registros. 2. Bidireccional (PS/2). Este puerto tienen las mismas características que el SPP con la diferencia que el bus de datos es bidireccional, es decir que cambiando el estado de algunos bits del bus de control se puede actuar sobre el bus de datos haciendo que trabaje en su totalidad como entradas o como salidas10 .[14] Entrada: para configurar el bus de datos como entradas, se deben poner en nivel alto del bit 5 y 7 del bus de control y en nivel bajo el bit 6 del bus de control. 9 Basic Imput/Output Services 10 no se puede configurar algunos pines como entrada y otros como salida 31 Salida: para configurar el bus de datos como entradas, se deben llevar a nivel bajo el bit 5 y 7 del bus de control y a nivel alto el bit 6 del bus de control. 3. EPP (Enhaced Parallel Port). Este tipo de puerto tiene la característica de ser tan rápido como el bus del sistema (ISA), alcanzando velocidades de transferencia de hasta 1Mb por segundo, fue desarrollado por Intel, Xircom y Zenith y tuvo amplia aceptación por el resto de los fabricantes, quienes comenzaron a construir sus puertos de tipo EPP, aunque no totalmente compatibles, con los creados por Intel, lo que llevo a que se produjera un estándar denominado EPP 1.7, que tiempo después se combinó con el estándar IEEE 1284, que describe los puertos bidireccionales de alta velocidad para impresoras y se formo un estándar que actualmente se denomina IEEE 1284 EPP. un puerto paralelo del estilo IEEE 1284 soporta múltiples modos: SPP, bidireccional PS/2, EPP y ECP. otra particularidad de este puerto es que posee otras cinco direcciones11 , aunque esto hace que no pueda existir un tercer puerto den la dirección 3BCh, ya que de ser así se solaparía con las direcciones asignadas a vídeo. es por esto que cuando se creo el puerto EPP, la dirección que antes solía ser el primer puerto, paso al tercero.[14] 4. ECP (Extended Capabilities Port). Puede al igual que el EPP, escribir y leer a la velocidad del Bus, fue desarrollado por Microsoft y Hewlett Packard, y se distingue del anterior por tener DMA (Direct Memory Access), FIFO (First In First Out) y compresión de datos. A su vez puede emular los puertos de tipo SPP y bidireccional, y si bien la norma no contempla los EPP, algunos fabricantes suelen usar algún bit no utilizado por ECP para la conflagración del puerto como EPP. el puerto ECP agrega además los registros desde Base+400h; a Base+402h, en el cual esta el registro ECR (Extended Control Register), mediante el cual se pueden configurar los diferentes modos, el significado de los bits es el siguiente: 11 desde Base+3 a Base+7 32 Bit 7:5 4 3 2 1 0 Significado 000 SPP (compatible ISA) 001 Bidireccional (Compatible PS/2) 010 Centronics rápido (compatible ISA FIFO) 011 ECP 100 Reservado 101 Reservado (EPP) 110 Prueba 111 Configuración Deshabilita interrupciones de ERROR Habilita DMA Deshabilita el servicio de interrupción FIFO/Terminal Count Sólo lectura (FIFO lleno) Sólo lectura (FIFO vació) Cuadro 1.7: Conexionado del puerto paralelo en modo ECP 1.0.5.2. Detección del tipo de puerto. El puerto puede ser de tipo SPP, bidireccional12 , EPP o ECP, para conocer que tipo de puerto es el que se tiene se debe comenzar testeando el de mayor complejidad y seguir en orden hasta el de menor complejidad. Puerto ECP. Para detectar si el puerto es de tipo ECP se debe leer el registro de control extendido (ECR) en la dirección Base+402h y verificar que el bit 0 este en uno y el bit 1 este en cero; estos bits no deben ser susceptibles de los cambios producidos en los bits 0 y 1 del bus de control, por lo que otra prueba a realizar es poner en bajo el bit 0y en alto el bit 1 del bus mencionado, verificar que los bits del registro extendido de control no haya cambiado; por último, los bits 0 y 1 del registro extendido de control son de sólo lectura, lo que implica que no sera posible hacerlos cambiar de estado, entonces podemos escribir un dato que conmute los estados de los bits 0 y 1 y luego leer el estado de esos bits, como lo que se lee es lo que hay en el registro y no lo que se envió, podemos decir que si los bits no han cambiado de estado y se han verificado las pruebas anteriores, estamos en presencia de un puerto ECP.[5] Puerto EPP. Si el puerto fallase en las pruebas para determinar si es ECP, debemos proseguir efectuando pruebas para determinar si es EPP. Para esto, se pone en nivel bajo el bit 7 del bus de 12 Compatible con el estándar IBM PS/2 33 estado y el bit de TimeOut (bit 0 del registro de estado), debido a la diversidad de fabricantes existen diversos métodos para limpiar este ultimo bit, por eso debemos contemplar todos ellos para asegurar el funcionamiento en la mayor cantidad de maquinas posible, lo primero que haremos será escribir el bit dos veces con un uno y luego pasarlo a cero, podemos verificar ahora que el bit en cuestión este en el nivel bajo, de no ser así, ya podemos descartar que se trate de un puerto tipo EPP. La segunda parte de la prueba consiste en escribir un dato en el registro Base+3, y al no haber ningún periférico que responda a la escritura realizada, el bit de TimeOut deberá cambiar su estado lógico a un uno, de no ser así debemos seguir con las pruebas para determinar si el puerto es bidireccional o SPP.[5] Puerto Bidireccional (PS2 Compatible) En esta prueba lo que haremos sera configurar el bus de datos como entrada y verificar que al sacar un dato por el puerto no sea retenido.[5] Puerto SPP. Para detectar si un puerto es SPP verificamos la retención de los daros enviados, para lo cual enviamos un par de valores al bus de datos y comprobamos (en la dirección base) que los valores leídos sean los que se escribieron, es decir que el dato enviado haya sido retenido por el puerto.[5] 34 1.0.5.3. Puerto paralelo a nivel físico. Cuadro 1.8: Conexionado del puerto paralelo Cuando se transmite información por un cable multipar (con varios conductores aislados), cada conductor genera un campo electromagnético que influye en los otros conductores, para reducir tal efecto se confecciona enroscando un conductor sobre su entorno, de manera que los campos generados por cada conductor se anulen entre si y no afecten a los otros; a su ves estos pares trenzados se enroscan nuevamente para evitar la interferencia con los otros cables. También hay otras opciones que complementan la antes mencionada a la hora de transmitir datos por un cable: para poder aumentar la longitud del cable es necesario que el mismo posea mayor inmunidad al ruido, especialmente los de baja frecuencia como los de la red eléctrica, lo que se logra con una malla metálica que envuelve a todos los conductores conectada a masa (chasis de 35 la computadora), pero cuando la longitud es considerable y los datos se transmiten a gran velocidad el cable debe ser considerado como una linea de transmisión, con todas las propiedades que esta posee, es entonces donde se observa la necesidad de que el cable tenga un terminador para evitar los rebote de señal hacia su fuente. Cuando se diseño el puerto paralelo también se dividieron las masas según las señales como lo indica la siguiente tabla, aunque actualmente es muy común observarlas todas unidas, puesto que los circuitos de salida contienen todos la misma masa, ya que con el nivel de integración de hoy en día todos los buffer de salida están practica mente en un mismo integrado, y de esta manera la corriente tomará el camino con menor impedancia para su retorno. Pin Pin 18 Pin 19 Pin 20 Pin 21 Pin 22 Pin 23 Pin 24 Pin 25 Retorno de Masa Retorno de masa correspondiente a: C0 y D0 Retorno de masa correspondiente a: D1 y D2 Retorno de masa correspondiente a: D3 y D4 Retorno de masa correspondiente a: D5 y D6 Retorno de masa correspondiente a: D7 y S6 Retorno de masa correspondiente a: C3 Retorno de masa correspondiente a: S7 Retorno de masa correspondiente a: C2 Cuadro 1.9: Masas según señal 1.0.5.4. Interrupciones. La mayoría de los puertos paralelos son capaces de detectar interrupciones generadas por el periférico que se encuentre conectado. Para que el microprocesador detecte la interrupción el puerto debe tener asignado un Interrupt Request Level (IRQ). Generalmente se utiliza IRQ7 para LPT1 e IRQ5 para LPT2, aunque este ultimo suele estar asociado con la placa de sonido, por lo que es posible observar que los puertos tengan configurado otro IRQ.[14] 1.0.5.5. Canales DMA. Los puertos de tipo ECP utilizan Direct Memory Access (DMA) para una transferencia a mayor velocidad, utilizando DMA, mientras se produce la transferencia el microprocesador está libre para ejecutar otra acción, el rango que utiliza el puerto paralelo es de cero a tres.[14] 1.0.5.6. El puerto y su hardware. El puerto trabaja con lógica TTL de baja potencia de tipo Schottky, aunque en puertos viejos es posible encontrar algunos que trabajen con salidas de tipo colector abierto. La corriente drenada 36 del puerto puede tomar valores de hasta 2, 6mA y la entregada hasta un máximo de 24mA. En cuanto a las tensiones de salida, el nivel bajo corresponde a una tensión entre 0V y 0,8V , y para el nivel alto la tensión de salida es de 2, 4V a 5, 5V . En algunos de los puertos se pueden encontrar también capacitores de 2, 2nF entre las lineas de E/S y masa, lo que ayuda a establecer los tiempos de subida y de bajada de la señal. En el bus de control, generalmente, las salidas son de tipo TTL a colector abierto, con resistencias de colector de 4, 7KΩ y teniendo en cuenta que lo que se lee por programa es el estado del pin del puerto, es posible utilizar este bus como entradas, aunque esto no es recomendable.[14] 1.0.6. Arquitectura puerto serial. Figura 1.2: Puerto RS-232. El puerto seria o RS-232 es un estándar para realizar la transmisión de datos. El RS-232 consiste en un conector tipo DB-25 de 25 pines, aunque es normal encontrar la versión de 9 pines DB-9. Las señales con las que trabaja este puerto son digitales, de 12V (0 lógico) y −12V (1 lógico), para la entrada y salida de datos, y a la inversa en las señales de control. El estado de reposo en la entrada y salida de datos es −12V . 37 Los ordenadores se conectan con cualquier equipo periférico, a través de sus puertos paralelo o serie, o los más recientes como el USB (Universal Serial Bus, el cual deja desbancados a los otros con 12 Mb/s), pero en éste caso solo analizaremos el puerto serie RS-232 por ser un estándar impuesto en todos los equipos informáticos. En un ordenador puede haber varios puertos series, a los que normalmente se les denomina COM 1, COM 2, COM 313 , por defecto el COM 1 suele pertenecer al ratón usando éste el IRQ 4, aunque también es posible encontrarle en el COM 2, así que lo normal es encontrarnos libre el puerto serie del COM 2 utilizando el IRQ 3. Para realizar una conexión en serie de datos ó información, se requiere como mínimo un cable de dos alambres, una conexión del tipo full-duplex como la de telefonía. Si se quiere tener una comunicación bidireccional por un par de hilos y esta consiste en una serie de bits de información, se requieren otras terminales que indiquen al Interface cuál de los aparatos interconectados transmite y cuál recibe, que tipo de información es, cuándo el aparato receptor esta listo para recibir, cuando el transmisor esta listo para transmitir, a que velocidad va ser la comunicación. Esto hace que el puerto serie tenga otras terminales que se usan para coordinar la comunicación entre los equipos. Los equipos terminales de datos, envían señales en 0´s y 1´s lógicos binarios, que el módem debe convertir a señales analógicas y enviarlas por la línea telefónica o canal de comunicación pero también es posible que se comuniquen siempre en digital. Éste Interface o puerto RS-232 trabaja entre +12 voltios y -12 voltios, de manera que un cero lógico es cuando la terminal esté entre +9 y +12 voltios, y un uno lógico cuando este entre -9 y -12 voltios de manera que un puerto serie que no esta transmitiendo, mantiene la terminal de transmisión en un 1 lógico es decir entre -9 y -12 volts. El conector estándar RS-232 sea éste hembra ó macho, es el DB-25, aunque también se usa el DB-9. 1.0.6.1. Estructura de datos del puerto serie RS-232. La comunicación de datos en un puerto serie, se usa normalmente para efectuar comunicaciones asíncronas, o sea sin tiempo preestablecido para iniciarse. Los datos llegan en paquetes de información, normalmente cada paquete es de 8 bits=1 byte, algunos equipos envían carácter por carácter, otros guardan muchos caracteres en la memoria y cuando les toca enviarlos los envían uno tras otro. 13 muchas veces los puertos serie a partir del COM 2 se denominan puertos virtuales o son debidos a ampliaciones de los puertos por tarjetas controladoras del tipo PCI 38 Uno de los parámetros más importantes en la comunicación serie, es la velocidad con la que los datos se transmiten, para el caso del RS-232, pueden transmitir de los 300 bit/seg hasta 115,200 bit/seg. Otro de los parámetros importantes es el bit de inicio que le indica al puerto receptor que va a llegar un byte de información. Hay dos tipos de paridad adicional que se usan y estos son: Marca (mark) El bit de paridad que se intercala siempre es un uno. Espacio (space) El bit de paridad que se intercala siempre es un cero. El estándar RS-232-EIA, es equivalente al V.24 del CCITT14 . Las especificaciones eléctricas del puerto serie están contenidas en el EIA15 RS232C estándar. En las cuales se encuentran parámetros como: 1. A "Space" que es por defecto 0 está entre +3 y +25 Voltios. 2. A "Mark" que es por defecto 1 está entre -3 y -25 Voltios. 3. La región entre +3 y -3 voltios está sin definir. 4. Un circuito de voltaje abierto no debe superar 25 voltios. 5. Un circuito corto de corriente no debe exceder los 500mA. El driver debe utilizarse sin problema. Pin DB-25 2 3 4 5 6 7 8 20 22 Pin DB-9 3 2 7 8 6 5 1 4 9 Abreviación TD RD RTS CTS DRS SG CD DTR RI Nombre completo Transmit data Receive data Request to send Clear to send Data set ready Signal ground Carrier detect Data terminal ready Ring indicador Cuadro 1.10: Pins del puerto serie conexiones D25 y D9 14 Consultive 15 Electronics Commitee International Telegraph and Telephone Industry Association-Asociación de Electrónica Industrial. 39 Abreviación TD RD CTS DCD DSR DTR RTS RI Nombre completo Transmit data Receive data Clear to send Data carrier detect Data set ready Data terminal ready Request to send Ring indicator Función Salida de datos serie TXD Entrada de datos serie RXD Indica si el módem está preparado para recibir y mandar datos Detecta si hay una conexión con el otro extremo Dice si la UART está preparada para la conexión Dice al módem si la UART está preparada para la conexión Informa que la UART está preparada para la conexión Se activa cuando el módem detecta una llamada del PSTN Cuadro 1.11: Funciones de los pins 1.0.7. Arquitectura motor paso a paso. Los motores paso a paso son ideales para la construcción de mecanismos en don de se requieren movimientos que requieran precisión. A diferencia de los motores de corriente continua (CC) que gira a todo lo que dan cuando son conectados a la fuente de alimentación, los motores paso a paso (PaP) solamente giran un ángulo determinado, los CC sólo disponen de dos terminales de conexión, mientras los PaP pueden tener 4, 5 ó 6, según el tipo de motor que se trate, por otro lado los motores de corriente continua no pueden quedar enclavados en una sola posición, los motores paso a paso tienen la posibilidad de quedar enclavados en una posición o bien totalmente libres. Si una o más de sus bobinas están energizadas, el motor estará enclavado en la posición correspondiente y por el contrario quedará completamente libre sino circula energía por ninguna de sus bobinas.[1, 2] El ángulo de giro de estos motores es muy variado pasando desde los 90 hasta los 1,8 e incluso 0,72, cada ángulo de giro, se afecta enviando un pulso en una de sus terminales. 1.0.7.1. Principio de funcionamiento. El motor está constituido por un rotor sobre el que van aplicados distintos imanes permanentes y por un cierto número de bobinas exitadoras, bobinas en su estator. Las bobinas son parte del estator y el rotor es un imán permanente. La exitación de las bobinas debe ser manejada por un controlador. Los motores PaP suelen ser clasificados en dos tipos, según su diseño y fabricación pueden ser bipolares o unipolares: Bipolar. 40 Estos tienen, generalmente, cuatro cables de salida. Necesitan ciertos trucos para ser controlados, debido a que requieren del cambio de dirección del flujo de corriente a través de las bobinas en la secuencia apropiada para realizar un movimiento.[1, 2] Unipolares. Estos motores suelen tener 6 ó 5 cables de salida, dependiendo de su conexionado interno. Este tipo se caracteriza por ser más simple de controlar. En la figura 2 se puede apreciar un ejemplo de conexionado para controlar un motor paso a paso unipolar mediante el uso de un ULN2803, el cual es un arreglo de 8 transistores tipo Darlington capaces de manejar cargas de hasta 500mA. Las entradas de activación 16 pueden ser directamente activadas por un microcontrolador.[1, 2] Figura 1.3: Conexionado mediante el uso de un ULN2803. Figura 1.4: Motor PaP con 5 cables. 16 Activa A, B, C y D. 41 Figura 1.5: Motor PaP con 6 cables. 1.0.7.2. Secuencia para manejar motores paso a paso bipolares. Estos motores necesitan una inversión de la corriente que circula en sus bobinas en una secuencia determinada. Cada inversión de la polaridad provoca el movimiento del eje un paso, cuyo sentido de giro está determinado por la secuencia seguida.[1, 2] Paso A +V +V -V -V 1 2 3 4 Terminal B C -V +V -V -V +V -V +V +V D -V +V +V -V Cuadro 1.12: Secuencia para controlar motores paso a paso tipo bipolar. 1.0.7.3. Secuencia para manejar motores paso a paso unipolares. Existen tres secuencias posibles para este tipo de motores. Todas las secuencias comienzan por el paso 1 una vez alcanzado el paso final. Para revertir el sentido de giro, simplemente se deben ejecutar las secuencias en modo inverso.[1, 2] Secuencia Normal. Es la secuencia más usada y la que generalmente recomienda el fabricante. Con esta secuencia el motor avanza un paso por vez debido a que siempre hay dos bobinas activadas, se obtiene un alto torque de paso y de retención. 42 Paso Bobina A Bobina B Bobina C Bobina D 1 On On Off Off 2 Off On On Off 3 Off Off On On 4 On Off Off On Cuadro 1.13: Secuencia normal. Secuencia del tipo wave drive. En esta secuencia se activa sólo una bobina a la vez. En algunos motores esto brinda un funcionamiento más suave. La contrapartida es que al estar sólo una bobina activada, el torque de paso y retención es menor. 43 Paso Bobina A Bobina B Bobina C Bobina D 1 On Off Off Off 2 Off On Off Off 3 Off Off On Off 4 Off Off Off On Cuadro 1.14: Secuencia wave drive. Secuencia del tipo medio paso. En esta secuencia se activan las bobinas de tal forma de brindar un movimiento igual a la mitad del paso real. Para ello se activan primero 2 bobinas y luego sólo 1 y así sucesivamente. 44 Paso Bobina A Bobina B Bobina C Bobina D 1 On Off Off Off 2 On On Off Off 3 Off On Off Off 4 Off On On Off 5 Off Off On Off 6 Off Off On On 7 Off Off Off On 8 On Off Off On Cuadro 1.15: Secuencia medio paso. 45 Debido a que los motores paso a paso son dispositivos mecánicos y como tal deben vencer ciertas inercias, el tiempo de duración y la frecuencia de los pulsos aplicados es un punto muy importante a tener en cuenta. En tal sentido el motor debe alcanzar el paso antes que la próxima secuencia de pulsos comience. Si la frecuencia de pulsos es muy elevada, el motor puede reaccionar en alguna de las siguientes formas: Puede que no realice ningún movimiento en absoluto. Puede comenzar a vibrar pero sin llegar a girar. Puede girar errática mente. Puede llegar a girar en sentido opuesto. Para obtener un arranque suave y preciso, es recomendable comenzar con una frecuencia de pulso baja y gradualmente ir aumentándola hasta la velocidad deseada sin superar la máxima tolerada. El giro en reversa debería también ser realizado previamente bajando la velocidad de giro y luego cambiar el sentido de rotación. 1.0.8. Servo Motores. Los servos son un tipo especial de motor de C.C. que se caracterizan por su capacidad para posicionarse de forma inmediata en cualquier posición dentro de de su intervalo de operación.[15] Un Servo es un dispositivo pequeño que tiene un eje de rendimiento controlado. Este puede ser llevado a posiciones angulares específicas al enviar una señal codificada. Con tal de que una señal codificada exista en la línea de entrada, el servo mantendrá la posición angular del engranaje. Cuando la señala codificada cambia, la posición angular de los piñones cambia. En la práctica, se usan servos para posicionar superficies de control como el movimiento de palancas, pequeños ascensores y timones. Ellos también se usan en radio control, títeres, y por supuesto, en robots.[3] Los Servos son sumamente útiles en robótica. Los motores son pequeños, tiene internamente una circuitería de control interna y es sumamente poderoso para su tamaño. Un servo normal o estándar como el HS-300 de Hitec tiene 42 onzas por pulgada o mejor 3kg por cm de torque que es bastante fuerte para su tamaño. También una potencia proporcional para cargas mecánicas. Un servo, por consiguiente, no consume mucha energía. Podrá observar la circuitería de control, el motor, un juego de piñones, y la caja. También puede ver los 3 alambres de conexión externa. Uno es para alimentación Vcc17 , conexión a tierra GND y el alambre blanco es el alambre de control.[3] 17 +5volts. 46 1.0.8.1. Funcionamiento de un servo. El motor del servo tiene algunos circuitos de control y un potenciómetro18 esta es conectada al eje central del servo motor. Este potenciómetro permite a la circuitería de control, supervisar el ángulo actual del servo motor. Si el eje está en el ángulo correcto, entonces el motor está apagado. Si el circuito chequea que el ángulo no es el correcto, el motor girará en la dirección adecuada hasta llegar al ángulo correcto. El eje del servo es capaz de llegar alrededor de los 180 grados. Normalmente, en algunos llega a los 210 grados, pero varía según el fabricante. Un servo normal se usa para controlar un movimiento angular de entre 0 y 180 grados. Un servo normal no es mecánicamente capaz de retornar a su lugar, si hay un mayor peso que el sugerido por las especificaciones del fabricante.[3] La cantidad de voltaje aplicado al motor es directamente proporcional a la distancia que éste necesita viajar. Si el eje necesita regresar una distancia grande, el motor regresará a toda velocidad. Si este necesita regresar sólo una pequeña cantidad, el motor correrá a una velocidad más lenta. A esto se le llama control proporcional. El cable de control se usa para comunicar el ángulo. El ángulo está determinado por la duración de un pulso que se aplica al alambre de control. A esto se le llama PCM Modulación codificada de Pulsos ó PWM Pulse Width Modulation. La modulación por anchura de pulso es uno de los sistemas mas empleados para el control de servos. Este sistema consiste en generar una onda cuadrada en la que se varía el tiempo que el pulso esta a nivel alto, manteniendo el mismo periodo, con el objetivo de modificar la posición del servo según se desee. [3, 11, 15] El servo espera ver un pulso cada 20 milisegundos o 0,02 segundos. La longitud del pulso determinará los giros de motor. Un pulso de 1.5 ms, por ejemplo, hará que el motor se torne a la posición de 90 grados o posición neutra. Si el pulso es menor de 1.5 ms, entonces el motor se acercará a los 0 grados. Si el pulso es mayor de 1.5ms, el eje se acercará a los 180 grados. Para controlar un servo, se le ordena un cierto ángulo, medido desde 0 grados. Se le envía una serie de pulsos. En un tiempo ON de pulso indica el ángulo al que debe posicionarse; 1ms = 0 grados, 2.0ms = máx. grados19 y algún valor entre ellos da un ángulo de salida proporcional. Generalmente se considera que en 1.5ms está el "centro". Entre los límites de 1 ~ 2ms son las recomendaciones de los fabricantes; normalmente se puede usar un rango mayor de 1.5ms para obtener un ángulo mayor e incluso de 2ms para un ángulo de rendimiento de 180 grados o más. El factor limitante es el tope del potenciómetro y los límites mecánicos construidos en el servo. Un sonido de zumbido normalmente indica que se está forzando por encima al servo, entonces debe disminuir un poco.[3, 15] 18 una resistencia variable. de 120°. 19 Cerca 47 El tiempo de OFF en el servo no es crítico; puede estar alrededor de los 20ms. Los pulsos que ocurren frecuentemente en el tiempo de OFF pueden interferir con el sincronismo interno del servo y podría escucharse un sonido de zumbido o alguna vibración en el eje. Si el espacio del pulso es mayor de 50ms, depende del fabricante, entonces el servo podría estar en modo SLEEP entre los pulsos. Entraría a funcionar en pasos pequeños y el rendimiento no sería el óptimo.[15] 1.0.9. Sistemas Eléctricos. Las leyes de Kirchhoff para circuitos eléctricos.[8] Voltaje. Es la fuerza electromotriz requerida para producir un flujo de corriente. La unidad de voltaje es el volt(V ). Carga. Es la integral de corriente con respecto al tiempo. La unidad de carga es el coulumb(C). Un coulumb es la cantidad de carga que experimenta una fuerza de un Newton en un campo eléctrico de un volt por metro o Coulumb = Newton ∗ metro/volt. Corriente. Es la razón de cambio del flujo de carga. La unidad de corriente es el ampére. si una carga de dq coulumbs cruza un área dada en dt segundos, la corriente i es i= dq dt una corriente de un ampére, la carga es transferencia a razón de un coulumb por segundo. 1.0.9.1. Elementos de los circuitos eléctricos.[8] Resistencias. La resistencia se define como el cambio de voltaje requerido para producir un cambio en la corriente cambio en voltaje resistencia R = cambio en corriente VA La resistencia R lineal se da por R= eR i donde eR es el voltaje a través del resitor e i es la corriente que fluye por el resistor. La unidad de resistencia es el Ohm(Ω). 48 El recíproco de la resistencia se llama conductancia. La unidad de conductancia es el siemens(S). Los resistores no almacenan energía eléctrica pero la disipan en forma de calor. Capacitores. El capacitancia es el cambio en la cantidad de carga eléctrica requerida para producir un cambio en el voltaje. cambio en cantidad de carga electrica C Capacitancia C = V. cambio en voltaje La capacitancia de un capacitor puede darse entonces por C= q eC donde q es la cantidad de carga de carga almacenada y eC es el voltaje a través del capacitor. La unidad de capacitancia es el farad(F). dq dt Como i = y eC = Cq entonces i = deCC dt despejando deC = C1 idt ´t eC (t) = C1 idt + eC (0). 0 Inductancias. Es la relación entre el voltaje inducido y la razón de cambio de la corriente cambio en voltaje inducido V Inductancia= cambio en corriente por segundo A/s . La autoinductancia es la propiedad de una bobina particular que ocurre cuando el campo magnético establecido por una corriente de la bobina enlazada a la propia bobina, la razón de cambio del flujo es proporcional a di dt . La autoinductancia L, es la constante de proporcionalidad entre el voltaje inducido eL volts y la razón de cambio de la corriente L= eL di dt La unidad de inductancia es el henry(H). Como di eL = L dt luego de iL (t) = 1 L ´t eL dt + iL (0). 0 49 La inductancia mutua es la influencia entre inductores que resulta de la interacción de sus campos. Cuando un cambio de corriente de un ampére por segundo en cualquiera de dos inductores induce una fem de un volt en el otro inductor, su inductancia mutua M es de un henry. 1.0.9.2. Leyes de los circuitos eléctricos.[8] Ley de Ohm. Establece que la corriente en un circuito es proporcional a la fuerza electromotriz total que actúa sobre el circuito e inversamente proporcional a la resistencia total del circuito. i= e R donde i es la corriente , e es la fem y R la resistencia. Circuitos en serie. La resistencia combinada de resistores conectados en serie de las suma de las resistencias por separado. Circuitos en paralelo. Figura 1.6: Circuito en paralelo. i1 = e R1 , i2 = e R2 , i3 = e R3 como i = i1 + i2 + i3 , luego i= 1 R e R1 = R= + Re2 + Re3 = 1 R1 e R donde R es la resistencia combinada, luego + R12 + R13 1 1 1 1 R1 + R2 + R3 = R1 R2 R3 R1 R2 +R2 R3 +R3 R1 . Resistencia de resistores combinados en serie y paralelo. 50 Figura 1.7: Resistores combinados en serie y en paralelo caso 1. La resistencia combinada R2,3 = R2 R3 R2 +R3 luego la resistencia total R = R1 + R2,3 = R1 + R2 R3 R2 +R3 . Figura 1.8: Resistores combinados en serie y en paralelo caso 2. R1,2 = R1 R2 R1 +R2 R3,4 = R3 R4 R3 +R4 la resistencia combinada R = R1,2 + R3,4 = 51 R1 R2 R1 +R2 R4 + RR33+R . 4 Figura 1.9: Resistores combinados en serie y en paralelo caso 3. El circuito se puede considerar como paralelo que consta de las resistencias (R1 + R3 ) y (R2 + R4 ), la resistencia combinada R = (R1 +R3 )(R2 +R4 ) R1 +R2 +R3 +R4 . Corrientes y voltajes de circuitos en serie y en paralelo. Figura 1.10: Caso 1 corrientes y voltajes. La caída de voltaje e2,3 = iR2,3 donde R2,3 = R2 R3 R2 +R3 de donde la corriente i1 que fluye a través de la resistencia R2 es i1 = e2,3 R2 =i R2,3 R2 3 = i R2R+R 3 la corriente i2 que fluye por la resistencia R3 es i2 = e2,3 R3 =i R2,3 R3 2 = i R2R+R . 3 52 Leyes de Kirchhoff.[8] • Ley de corrientes de Kirchhoff. Un nodo en un circuito eléctrico es un punto donde tres o más conductores se unen entre si. La ley establece que la suma algebraica de todas las corrientes que entran al nodo o salen del él, es cero. • Ley de voltajes de Kirchhoff. Establece que en cualquier instante dado el tiempo la suma algebraica de los voltajes alrededor de una malla cualquiera en un circuito eléctrico es cero. Se puede expresar también como la suma de las caídas de voltaje es igual a la suma de elevaciones de voltaje alrededor de una malla. 1.0.10. Modelos matemáticos. El modelado de sistemas físicos debe empezar a partir de una predicción de su funcionamiento antes de que el sistema pueda diseñarse en detalle o construirse físicamente. Tal predicción se basa en una descripción matemática de las características dinámicas del sistema. A esta descripción matemática se le llama modelo matemático.[10] Para los sistemas físicos, la mayoría de los modelos matemáticos que resultan útiles se describen en términos de ecuaciones diferenciales.[7] 1.0.10.1. Elaboración de modelos matemáticos (modelado matemático). Al aplicar leyes físicas a un sistema especifico, es posible desarrollar un modelo matemático que describa al sistema. Tal sistema puede incluir parámetros desconocidos, los cuales deben evaluarse mediante pruebas reales. Sin embargo, algunas veces las leyes físicas que gobiernan el comportamiento de un sistema no están completamente definidas, y la formulación de un modelo matemático puede resultar imposible. Debe ser así, se puede utilizar un procedimiento de modelado experimental. En este procedimiento, se somete al sistema a un conjunto de entradas conocidas y se miden sus salidas. a partir de las relaciones de entrada y salida se deriva entonces el modelo matemático.[10] 1.0.10.2. Simplicidad contra exactitud. Cuando se intenta construir un modelo, debe establecerse un equilibrio entre la simplicidad del modelo y la exactitud de los resultados del análisis. Es importante notar que los resultados obtenidos en el análisis son validos en la medida en que el modelo se aproxime al sistema físico dado. 53 La rapidez con la cual una computadora digital puede realizar operaciones aritméticas nos permite incluir cientos de ecuaciones para describir un sistema y para construir un sistema exacto, pero muy complicado. Si no se requiere de una exactitud extrema, es preferible desarrollar un modelo razonablemente simplificado. Para determinar un modelo razonablemente simplificado, se necesita decidir cuales de las variables y relaciones físicas pueden despreciarse y cuales son cruciales en la exactitud del modelo. Con el objeto de obtener un modelo en la forma de ecuaciones diferenciales lineales, se deben despreciar cualesquiera parámetros distribuidos y las no lineales que pueden estar presentes en el sistema físico. Si los efectos que estas propiedades ignoradas tienen en la respuesta son pequeños , entonces los resultados del análisis del modelo matemático y los resultados del estudio experimental del sistema físico serán satisfactorios. El que cualquiera de las características particulares sea importante puede no ser obvio en algunos casos, y en otros, puede requerir de penetración física en intuición.[10] En relación con lo mencionado. Cuando se resuelve un problema nuevo, usualmente conviene construir primero un modelo simplificado para obtener una idea general entorno a la solución. Posterior mente puede construirse un modelo matemático más detallado y usarlo para un análisis más completo. 1.0.10.3. Observaciones sobre la elaboración de modelos matemáticos. Ningún modelo matemático puede representar cualquier componente o sistema físico con precisión. Siempre se involucran aproximaciones y suposiciones. Tales aproximaciones y suposiciones restringen el nivel de validez del modelo matemático. Al hacer una predicción acerca del funcionamiento del sistema, debe tenerse presente cualquier aproximación o suposición involucrada en el modelo.[6] 1.0.10.4. Procedimiento para la elaboración de modelos matemáticos.[6] 1. Dibujar un diagrama esquemático del sistema y definir las variables. 2. Utilizando leyes físicas, escribir ecuaciones para cada componente, combinándolos de acuerdo con el diagrama del sistema y obtener un modelo matemático. 3. Para verificar la validez del modelo, la predicción acerca del funcionamiento obtenida al resolver las ecuaciones del modelo, se compara con resultados experimentales. Si los resultados experimentales se alejan de la predicción en forma considerable, debe modificarse el modelo. Entonces se obtiene un nuevo modelo y las nuevas predicciones se comparan con los resultados experimentales. El proceso se repite hasta que se obtiene una concordancia satisfactoria entre la predicción y los resultados experimentales. 54 1.0.10.5. Etapas del modelo.[10] Etapa uno: modelado físico. El objetivo de la especificación de sistemas y el modelado físico consiste en proporcionar una descripción del sistema que sea lo más precisa posible, aunque lo bastante sencilla como para permitir el análisis y diseño subsecuentes. En general, un modelo físico se construye aislando una parte del universo como el sistema de interés y luego dividiendo conceptualmente su comportamiento en componentes conocidos. Dos temas dominan las etapas de modelado físico y modelado de sistemas: el compromiso y la aproximación. Los compromisos se realizan con base en la intención o meta original del estudio, con el fin de especificar un sistema más sencillo o un conjunto de interacciones simples en el limite entre el sistema y el resto del mundo. Las aproximaciones se hacen en las descripciones del comportamiento de los componentes del modelo físico, con el fin de aprovechar las teorías existentes y bien desarrolladas, así como para reducir al mínimo la complejidad de las herramientas analíticas necesarias. El primer paso en el aislamiento del sistema del resto del mundo es inherente al concepto de sistemas. El segundo paso es el proceso de enlace. Es preciso tener un conjunto suficiente de comportamientos teóricos con los cuales poder relacionar los componentes del comportamiento conceptual. Etapa dos: construcción de modelos. El proceso de descomposición de sistemas es necesario para la construcción sistemática de los modelos matemáticos de los sistemas dinámicos. Una vez descompuesto el sistema, la conducta de cada uno de sus componentes e interacciones se pueden aproximar utilizando las teorías conocidas. Las aproximaciones que se hacen al pasar del modelo físico al de sistemas tiene ciertas características bien definidas, de modo que se pueden estudiar de manera individual. • Descomposición del sistema. Es el proceso de separar los componentes más sencillos y analizar sus partes, puede hacerse de manera formal así: ◦ Identificar los componentes. Asignar nombre y trazar un diagrama de cuerpo libre que muestre las entradas y las salidas, así como las interacciones internas y externas. Indicar todos las variables necesarias. ◦ Separar los componentes en sus elementos estáticos y dinámicos. ◦ Escribir las relaciones de entrada y salida. 55 Describir el comportamiento de estos componentes. Observar que las relaciones que describen a los elementos estáticos son bastantes distintas de las expresiones dinámicas. Etapa tres: solución de modelos. Se resuelven las ecuaciones representando el modelo del sistema como una forma para estudiar su comportamiento dinámico. Se determina si el modelo del sistema es bueno o malo. La solución del modelo es fundamental para estudiar los sistemas dinámicos. 1.0.10.6. Sistemas lineales. Los sistemas lineales son aquellos en los que las ecuaciones del moldeo son lineales. Una ecuación diferencial es lineal si los coeficientes son constantes o funciones únicamente de la variable independientemente. La propiedad más importante de los sistemas lineales es que se le puede aplicar el principio de superposición, el cual establece que la respuesta producida por la aplicación simultanea de dos funciones excitadoras distintas, es la suma de las dos respuestas individuales. Por tanto, para sistemas lineales se puede calcular la respuesta a diversas entradas, tratando una entrada por vez y añadiendo o sumando los resultados. Este principio es el que nos permite construir complicadas soluciones a las ecuaciones diferenciales lineales, a partir de soluciones simples. Los sistemas lineales pueden ser invariables en el tiempo y variables en el tiempo. Los sistemas dinámicos que son lineales y están construidos por coeficientes concentrados e invariables en el tiempo, pueden ser descritos por ecuaciones diferenciales lineales, invariantes en el tiempo. Estos sistemas reciben el nombre de lineales e invariantes en el tiempo (o lineales de coeficiente constante), también usualmente se utilizan para describir este tipo de sistemas las siglas LTI, del Inglés “Linear Time Invariant”. Los sistemas representados por ecuaciones diferenciales, cuyos coeficientes son funciones del tiempo, reciben el nombre sistemas lineales variables en el tiempo o LTV, del Inglés “Linear Time Variant”.[10] 1.0.10.7. Sistemas no lineales. Sistemas no lineales son aquellos representados por ecuaciones no lineales. Ejemplo: z = x 2 + y3 . Una ecuación diferencial recibe el nombre de no lineal si no es lineal. Ejemplo: d2x dt 2 3 + dx dt + x + x = 0. 56 Aunque muchas relaciones físicas son frecuentes representadas por ecuaciones lineales, en la mayor parte de los casos realmente las relaciones no son muy lineales. De hecho, un estudio cuidadoso de los sistemas físicos indica que aún los denominados sistemas lineales son realmente lineales solamente en restringidos rangos de operación. En la práctica, muchos sistemas electromecánicos, hidráulicos, neumáticos, etc., involucran relaciones no lineales entre las variables. Por ejemplo, la salida de un componente puede saturarse para niveles elevados de señal de entrada. Puede haber una franja o zona muerta que afecta la señal pequeña20 . En algunos componentes puede haber no linealidades cuadráticas, por ejemplo, los amortiguadores utilizados en sistemas físicos pueden ser lineales para operaciones de baja velocidad, pero son no lineales en velocidades altas, porque la fuerza de amortiguación se vuelve proporcional al cuadrado de la velocidad de funcionamiento.[10] La característica más importante de los sistemas no lineales es que no es aplicable el principio de superposición. En general, los procedimientos para hallar soluciones de problemas que involucran sistemas no lineales, son extremadamente complicados. Debido a ésta dificultad matemática, inherente a los sistemas no lineales, a menudo se encuentra necesario introducir sistemas lineales equivalentes en reemplazo de los no lineales. Estos sistemas lineales equivalentes son válidos solamente en un restringido rango de operación. Una vez que se ha aproximado un sistema no lineal con un modelo matemático lineal, se puede utilizar cierto número de herramientas lineales para su análisis y diseño. 1.0.11. Diagrama de causa y efecto. Un diagrama de causa y efecto es la representación de varios elementos de un sistema que pueden contribuir a un problema. Es una herramienta efectiva para estudiar procesos y situaciones, y para desarrollar un plan de recolección de datos. Es utilizado para identificar las posibles causas de un problema específico. La naturaleza gráfica del diagrama permite que se organice grandes cantidades de información sobre el problema y determinar exactamente las posibles causas. El diagrama de causa y efecto se debe utilizar cuando se pueda contestar “si” a una o a las dos preguntas siguientes: 1. ¿Es necesario identificar las causas principales de un problema? 2. ¿Existen ideas y/u opiniones sobre las causas de un problema? 20 Las franja muerta de un componente no es sensible. 57 El desarrollo y uso de diagramas de causa y efecto son más efectivos después de que el proceso ha sido descrito y el problema esté bien definido. Los diagramas de causa y efecto pueden ser utilizados para otros propósitos diferentes al análisis de la causa principal. El diagrama causa efecto no ofrece una respuesta a una pregunta, como lo hacen otras herramientas. Herramientas como el análisis de Pareto21 , Diagramas Scatter22 e histogramas, pueden ser utilizadas para analizar datos estadísticamente. 21 El nombre de Pareto fue dado por el Dr. Joseph Juran en honor del economista italiano Vilfredo Pareto (1848 − 1923) 22 Herramienta de análisis que dibuja pares relacionados de variables para representar un patrón de relación o correlación. 58 Capítulo 2 FORMULACIÓN Y JUSTIFICACIÓN. 2.1. Formulación. Con el auge en las últimas décadas de la tecnología en el mundo, surge la necesidad de actualizar y obtener las herramientas adecuadas para competir a nivel tecnológico en el área industrial como en el área de la investigación científica, de una forma económica y que cumpla con los estándares mínimos establecidos. El problema del desarrollo de nuestras tecnologías radica, en el desconocimiento de herramientas que el mismo computador contiene. Pocos usuarios conocen el manejo de los puertos del computador, las rutinas de comunicación y programación al igual que los programas de diseño tipo CAD. Resulta útil hacer de estas herramientas un uso frecuente en tareas de control y precisión en el desarrollo o reconstrucción de equipos con procesos paralelos y progresivos, es común considerar a estas funciones como una automatización y control de los sistemas. 2.1.1. Justificación. Dado que el control de los motores en desplazamiento posicional se puede realizar desde un computador, es necesario el uso de lenguajes de programación de alto nivel, los cuales permiten implementar las funciones ó rutinas que controlan el movimiento con la precisión de las tareas a realizar, con la comunicación por los puertos y mediante el desarrollo e implementación computacional de las ecuaciones diferenciales que describen el modelo matemático del sistema mecánico que permita la búsqueda de coordenadas con exactitud de posición y tiempo controlada por motores, este proceso permite establecer una interrelación usuario-dispositivo de forma amigable y sencilla. 59 Este tipo de control permite ser implementado en interrupciones neumáticas seriadas y paralelas, en ordenes de encendido y apagado en mecanismos de comparación de estados de posición y tiempo manejo de precisiones y vacíos y para estados emergentes y de capturas de información. 60 Capítulo 3 OBJETIVOS. 3.0.2. Objetivo general. Establecer un método de manejo de periféricos por puertos del computador. Desarrollar e implementar un software capaz de realizar tareas de precisión y ubicar una coordenada especifica por instrucciones sobre diferentes tipos de motores servo y paso a paso por puertos paralelo y serial del computador. 3.0.3. Objetivos específicos. Implementar los protocolos para envió de señales desde los puertos del computador. Determinar el modelo matemático del sistema mecánico del motor servo y paso a paso. Manejar secuencia de información de variables que intervienen en el control. Diseñar e implementar la interfase de conexión entre el puerto y el motor. Desarrollar algoritmos computacionales encargados del manejo controlado de los motores. 61 Capítulo 4 METODOLOGÍA. Las fases propuestas para el estudio metodológico son: la investigación del funcionamiento de las JNI y los paquetes java comm, analizar la estructura mecánica de los motores paso a paso para determinar las instrucciones que mueven el motor, realizar el modelamiento matemático del sistema mecánico del motor, establecer un método de comunicación con los puertos paralelo y serial que permite implementar una rutina de enlace para entrada y salida de datos a través de los puertos, diseñar un algoritmo de comunicación a través de los puertos para hacer control en dispositivos externos. El manejo de las JNI requiere una programación cuidadosa que no interfiera con el control interno del ordenador, por medio de esta herramienta se tiene acceso a la RAM a la LAN a los discos duros y a todos los dispositivos y recursos del computador. Al programar en JAVA, se tienen dos maneras de generar aplicaciones, la primera y la más común es la generación de un applet el cual es utilizado en aplicaciones tipo web, este tipo de aplicaciones no admite el uso de las JNI y los paquetes java comm están restringidos al comando de puertos ya que no es permitido y pierde la seguridad de acceso a los recursos internos del computador desde la web. La segunda es la creación de una aplicación básica la cual y puede usar las JNI y los paquetes java comm. Al programar la rutina de movimiento de los motores hay que tener en cuenta el tiempo de retardo entre dato y dato, si el primer dato no alcanza a ejecutar una acción sobre el motor se regresa y acumula la información en el puerto sobrecargándolo. entre dato y dato que se envía ya que si el motor no alcanza a ejecutar la secuencia anterior se empezara a generar un error de ejecución, que el dato enviado rebote devuelta al puerto sobrecargando este. 4.0.4. Procedimiento. El programa que administra el movimiento de motores debe contemplar: 62 1. Una implementación del programa de comunicación mediante los puertos paralelo o serial. 2. Activación de bobinas y control de pulso para motor PaP y servo correspondientemente. 3. Elaboración del modelo matemático de motor tipo paso a paso y servo. 4. Simulación del modelo matemático. 5. Implementación del programa que controla el motor desde el computador. 4.0.5. 4.0.5.1. Desarrollo metodológico. Análisis de causas. Se realiza el análisis de causas mediante un diagrama de causa-efecto1 , para determinar que factores intervienen en la elaboración del dispositivo. Con solo el manejo de correcto de los datos por puertos, no garantiza la correcta funcionalidad del prototipo con el programa, este se garantiza con la combinación de las rutinas controladoras y la tarjeta de enlace. El primer factor que afecta el funcionamiento y el ideal a alcanzar es el tipo de puertos existentes y sus modos de funcionamiento, para el caso de los pap el puerto paralelo, este tiene varios tipos de hardware el mas común y el que se encuentra en los computadores es el estándar que se adapta al modo de funcionamiento bidireccional es el que mas se adapta a lo que se realizó. Con la programación en java se cuenta con el paquete javacomm con el cual no es sencillo manejar puertos estándar ya que al inicia la conexión desde el paquete este inicia en modo unidireccional y al intentar cambiar el modo quesera un mensaje de el hardware no es compatible con modo, la única manera de llegar al modo bidireccional es pasando del modo unidireccional a modo byte y por ùltimo a bodo bidireccional, lo que hace frustrante la utilización de este paquete. Con la utilización de la JNI enlazar la entrada y salida de datos es más sencilla y es más versátil ya que no solo se limita al puerto paralelo sino que cambiando la dirección base este puede enlazar el serial y el USB, no es necesario cambiar de modo, su funcionamiento se basa en tres funciones sencillas: una de asignación del bus de datos otra de lectura y la ultima de escritura. El programa diseñado tiene el protocolo de comunicación, basado en la JNI, con el puerto paralelo y las rutinas básicas para el control de los puertos, diseñado de tal forma que cualquier modificación futura no afecte el funcionamiento de las funciones existentes, a partir de este se puede diseñar los protocolos de comunicación y de conexión con puertos y dispositivos basados en conexión USB. 1 Diagrama Ishikawa, Desarrollado en 1943 por el profesor Kaoru Ishikawa 63 Los componentes electrónicos en si no fueron un obstáculo para la consecución de el diseño del prototipo, uno de los cuidados que se tiene que tener es en la elección del cable de conexión a utilizar que un cable que no cumpla con los estándares, ya que si esto no se cumple la información que se envía llegaría distorsionada al motor provocando funcionamiento errático o en el peor de los caso que la información rebote hacia el puerto causando sobrecarga en este, otro factor es la frecuencia con la que se envía la información si esta es muy alta no alcanza a ser procesada y se provoca funcionamiento errático o en el peor de los casos que la información que se envía se devuelva hacia el puerto causando daños a este. Aunque las tarjetas buffer diseñadas te tal manera que: protejan al puerto de una sobre carga esto no garantiza que en algún momento el voltaje sobre este se exceda del máximo que resisten estos, su otra función es de al momento de activar una bobina esta tenga el voltaje de entrada máximo de la tarjeta y no el voltaje de salida del puerto ya que este solo funciona de indicador de activación y es muy bajo para alcanzar el máximo rendimiento del motor. La programación de procesos en paralelo para el control de dos motores pap con el uso de multihilos que inicialmente controlan la velocidad de envío de la secuencia de pulsos de activación de las bobinas y mediante la interacción con interfaz grafica la ubicación espacial en un plano bidimensional, este pone limitaciones al desplazamiento, si no se colocaran estas limitaciones se producirá un funcionamiento errático no solo de los motores sino del aplicativo en sí. Una de tareas es la de calibrar el programa con los motores, ya que el programa se diseño basado en condiciones ideales del funcionamiento del motor aparte se programo basado en la utilización de motores de 12V con 1.8° de rotación por pulso, en el caso de cambiar de motor se vería afectado el funcionamiento correcto del las tareas o procesos ejecutados, la solución es sencilla ya que internamente se pueden cambiar las variables encargadas de esto o que por medio de la GUI se realice este cambio sin que esto afecte el resto de procesos que este realiza. Ver anexo 1. 4.0.5.2. La JNI Con la JNI se tienen las rutinas básicas de comunicación que están en el lenguaje nativo del computador, el cual está en lenguaje C. Para utilizar la JNI es necesario ubicar las librerías en las cuales están las funciones que se desean utilizar. Lo primero es la identificación de los puertos que se tienen instalados y sus direcciones base, en particular el la dirección del bus de datos 1.6 en la página 31, al identificar la dirección base ya se puede enlazar la entrada y la salida de datos del puerto. Una limitante de la JNI es que no se puede detectar si el puerto esta o no disponible por lo cual se puede presentar errores de comunicación. 64 4.0.5.3. El modelo matemático. Lo primero es identificar las variables intervienen en el movimiento mecánico del motor luego mediante que leyes físicas interactúan las variables entre ellas este proceso lleva a la ecuación de estado correspondiente con el sistema que se quiere describir. Con la solución del modelo matemático se tiene la función de estado con la cual se puede realizar una simulación y determinar el grado de exactitud del modelo al sistema real. El sistema al cual se desea identificar las variables es a un sistema rotacional. Un sistema rotacional esta constituido de un rotor o eje impulsado mediante bobinas. Para sistemas mecánicos de rotación se cumple la segunda Ley de Newton de la siguiente forma: ΣM = Jα Donde: J Momento de inercia. α Aceleración angular. M Par, troqué o momento. Puede formularse en función de la variación angular (w) ya que α = dw dt ΣM = J dw dt . También en función de la variación de la posición angular ya que α = d2θ dt 2 2 ΣM = J ddtθ2 . 4.0.5.4. Programación de aplicaciones. Con la interfaz nativa de comunicación con los puertos y el modelo matemático de cada motor, se procede a diseñar los algoritmos que permitan el control de dispositivos mecánicos conectados a los puertos. Como la comunicación se hace mediante secuencia de bits es necesario definir el tipo de datos en el algoritmo. La interfaz nativa toma los datos de tipo hexadecimal para enviarlos ya que C trabaja de esta forma. Para definir la secuencia de datos a enviar hay que tener en cuenta los bits que tienen que estar activos en el puerto en el cual se escriben, si es el puerto paralelo se tienen 8 bits de salida, en el serial RS-232 se tienen 4 bits de salida. 65 Aplicación motor PaP. Para este tipo de motor es necesario enviar un arreglo de bits para el control del mismo, el arreglo de datos debe estar ordenado de acuerdo con el orden de secuencia de activación de las bobinas del motor y la secuencias deben estar diseñadas de modo tal que se acoplen con los tres modos de funcionamiento de los PaP unipolares 1.0.7.3 en la página 42 que son: Secuencia normal, Wave Drive y Secuencia de Medio paso. Es aquí donde toma fuerza la utilización de vectores y la programación en JAVA utilizando los hilos como secuencia de control ya que poseen control de velocidad y permiten el manejo sincrónico y asincrónico de la secuencia de datos escrita en el puerto. Para crear la aplicación se crea una clase tipo hilo para el control del motor, esta clase se extiende la de clase Thread por lo tanto hereda todos los métodos de la clase Thread y lo que se hace es sobre escribir el método run, que es donde se escribe el código encargado del cálculo del dato de la secuencia a enviar. Luego se crea otra clase de control tipo hilo extendida de la clase Thread y al igual que la anterior clase se sobre escribe el método run que es donde se envía el dato calculado. Este procedimiento de varios hilos uno para cálculo del dato y otro de envió de dato es útil para el trabajo de dos motores de modo sincrónico ó asincrónico, esto se hace variando en cada clase de calculo del dato a enviar para cada motor el tiempo del método sleep el cual es el intervalo de espera entre dato y dato, este método es independiente de la clase en que se modifique el tiempo lo cual le da a la aplicación la facilidad de cambiar la velocidad de envió de datos de forma individual. Aplicación motor servo. A diferencia del PaP este motor funciona mediante una señal que este dentro de su rango de trabajo, esto facilita la programación de la secuencia de datos que se escribe en el puerto ya que sólo hay que utiliza un dato a diferencia del PaP que hay que utilizar un arreglo de datos, el tiempo del dato enviado se puede controlar fácilmente con la utilización de dos hilos los cuales permiten mantener el dato el tiempo necesario para hacer mover el servo el ángulo deseado, para esto un hilo se encarga de la escritura en el puerto y el otro se encargara de la duración del mismo en el puerto. Para la implementación de la aplicacion de control para los servos se crean tres hilos cada uno extendido de la clase Thread y sobre escribiendo el método run. El primer hilo determinal el tiempo OFF, el segundo hilo controla el tiempo ON, la señal activa, y este lo hace por control del primer hilo, cuando el primier hilo está en estado sleep, el segundo hilo envía una señal durante el tiempo que se encuentre el primer hilo en estado sleep, cuando cambia el estado del 66 primer hilo el segundo hilo deteiene el envio de la señal. El tercer hilo es el encargado de enviar el dato que esta generando el primer hilo, este hilo envía continuamente el dato generado por el primer hilo. 4.0.5.5. Diseño tarjeta de enlace. Por medio del paquete de diseño asistido ORCAD, el cual con el programa Layout permite hacer el diseño de la tarjeta, inicialmente solo muestra los componentes de la tarjeta desconectados y acomodados por defecto, una de las precauciones que hay que tener es al realizar las conexiones, ya que se pueden estar conectando de manera errónea los componentes y cuando se genere la tarjeta se pueden tener cortos, lo primero es acomodar los componentes de acuerdo con la disposición de la entrada de datos y la salida de datos al motor, después de colocados los componentes se procedió al ruteado de los mismos. Para esto se puede utilizar el Autoroute que posee el Layout o utilizar SPECCTRA, otro de los programas que hacen parte de ORCAD, el cual hace un ruteado optimizado. Otra posibilidad para esto es hacer el ruteado manualmente. Layout tiene la capacidad de cambiar el grosor de los caminos de conexión de conexión. 67 Capítulo 5 RESULTADOS. 5.1. RUTINA ENCARGADA DE ESCRITURA Y LECTURA EN PUERTO. Mediante el uso de las JNI y la librería jnpout32.dll se desarrollo una rutina la cual permite enlazar la salida del puerto paralelo para enviar las serie de datos los cuales permiten al motor tipo paso a paso y al servo cambiar de estado. El programa se desarrollo en java con el editor jcreator. Descripción del código: La programación de la JNI: package jnpout32 ; public class ioPort { / / d e c l a r a c i ó n d e l método n a t i v o j n p o u t 3 2 . d l l p u b l i c n a t i v e v o i d Out32 ( s h o r t P o r t A d d r e s s , s h o r t d a t a ) ; / / s a l i d a d e l v a l o r e s p e c i f i c o d e l nombre d e l p u e r t o p u b l i c n a t i v e s h o r t Inp32 ( s h o r t PortAddress ) ; / / a s i g n a c i ó n de un v a l o r a una d i r e c c i ó n de un p u e r t o s t a t i c { System . l o a d L i b r a r y ( " j n p o u t 3 2 p k g " ) ; } / / c a r g a de l a l i b r e r í a j n p o u t 3 2 . d l l p a r a e l p a q u e t e } 68 5.2. RUTINAS DE CONTROL DE MOTOR PaP. Mediante la programación de la JNI y la rutina de escritura en el puerto y la modelación matemática se puede diseñar una algoritmo implementado en java que envíe una secuencia de pulsos por el puerto, el cual puede controlar desde el computador un motor PaP, los algoritmos diseñados son: Movimiento según ángulo de rotación. Movimiento según el numero de vueltas a girar. Movimiento según distancia a recorrer. Secuencia para control de dos motores. Ubicación de un punto en un espacio bidimensional. La clase básica que todas estas rutinas usan para el enlace con el puerto seleccionado es la siguiente: class puerto { s t a t i c short dato ; s t a t i c s h o r t addr ; s t a t i c pPort port ; public puerto () { p o r t = new p P o r t ( ) ; a d d r =0 x378 ; / / d i r e c c i ó n d e l p u e r t o que d e s e a m o s u s a r } public void e s c r i b e ( s h o r t dato ) { p o r t . o u t p u t ( a d d r , d a t o ) ; / / l a f u n c i ó n que toma e l d a t o a enviar y el puerto } public short lee () { d a t o =( s h o r t ) p o r t . i n p u t ( addr ) ; / / c a p t u r a e l d a t o que e s t a a c t u a l m e n t e en e l p u e r t o return ( dato ) ; 69 } } 5.2.1. Movimiento según el ángulo de rotación. Para esta rutina es necesario conocer el ángulo de rotación del motor el cual permite establecer el algoritmo basado en modelo matemático correspondiente, esta rutina funciona con un solo hilo de control y un hilo de enlace de datos. El código es el siguiente: c l a s s ang / / e s t a e s l a c l a s e que r e t o r n a e l número de p u l s o s p a r a que e l m o t o r s e mueva e l á n g u l o r e q u e r i d o por e l u s u a r i o { s t a t i c Double p u l s o s ; s t a t i c i n t pul ; s t a t i c d o u b l e ang ; p u b l i c i n t c a l c ( d o u b l e angu ) / / e s t e método de l a c l a s e ang r e c i b e como p a r á m e t r o l a d i s t a n c i a a r e c o r r e r y d e t e r m i n a e l número de p u l s o s p a r a c o n s e g u i r l o p u b l i c i n t c a l c a n ( d o u b l e angu ) { i f ( angu % 0 . 9 = = 0 ) / / d e t e r m i n a s i e l v a l o r o b t e n i d o s e a c o p l a con l o s d a t o s d a d o s s i n o r e d o n d e a r { p u l s o s =new Double ( angu / 0 . 9 ) ; pul=pulsos . intValue ( ) ; } else { p u l s o s =new Double ( ang / 0 . 9 ) ; pul=pulsos . intValue ( ) ; } r e t u r n pul ; } } 70 5.2.1.1. Funcionamiento. El funcionamiento es muy sencillo ya que lo único que hay que hacer es designar el ángulo de rotación y el programa internamente con vierte esa distancia en el numero de pulsos que tiene que realizar para completar la tarea y dar clic en inicio, si no se quiere que recorra esa ángulo y ya se dio clic en inicio solo se detiene con el botón de pausa. Figura 5.1: Pantalla asignación movimiento según ángulo de rotación. Este es el funcionamiento interno del aplicativo: Se inicia en la clase App2Frame es la encargada de la interface grafica de recibir y trasformar el dato que le llega por pantalla y se envía a la clase ang la cual en la función calc lo convierte en pulsos, lo devuelve por medio de esta función a la variable vueltas para el ciclo de la acción donde se envían los datos al puerto. 5.2.2. Movimiento según distancia a recorrer. En este caso es también es necesario conocer el ángulo de rotación de un paso del motor y mediante el cálculo de recorrido de este ángulo de rotación es posible establecer un algoritmo 71 que permita determinar la rotación del motor. c l a s s ang / / e s t a e s l a c l a s e que r e t o r n a e l número de p u l s o s p a r a que e l m o t o r s e mueva l a d i s t a n c i a r e q u e r i d a por e l u s u a r i o { s t a t i c Double p u l s o s ; s t a t i c i n t pul ; s t a t i c d o u b l e ang ; p u b l i c i n t c a l c ( d o u b l e d i s t ) / / e s t e método de l a c l a s e ang r e c i b e como p a r á m e t r o l a d i s t a n c i a a r e c o r r e r y d e t e r m i n a e l número de p u l s o s p a r a c o n s e g u i r l o { ang = d i s t / 0 . 2 5 ; / / 0 . 2 5 e s e l r a d i o de e l e j e de r o t a c i ó n d e l m o t o r c o n v i e r t o l a d i s t a n c i a en una e x p r e s i ó n en r a d i a n e s ang = ( ang * 1 8 0 ) / ( Math . P I ) ; / / l a e x p r e s i ó n l a c o n v i e r t o en á n g u l o i f ( ang % 0 . 9 = = 0 ) / / d e t e r m i n a s i e l v a l o r o b t e n i d o s e a c o p l a con l o s d a t o s d a d o s { p u l s o s =new Double ( ang / 0 . 9 ) ; pul=pulsos . intValue ( ) ; } r e t u r n pul ; } p u b l i c i n t c a l c a n ( d o u b l e angu ) { i f ( angu %0.9==0) { p u l s o s =new Double ( angu / 0 . 9 ) ; pul=pulsos . intValue ( ) ; } else { p u l s o s =new Double ( angu / 0 . 9 ) ; pul=pulsos . intValue ( ) ; } r e t u r n pul ; } 72 } 5.2.2.1. Funcionamiento. El funcionamiento es muy sencillo ya que lo único que hay que hacer es designar la distancia a recorrer el programa internamente con vierte esa distancia en el numero de pulsos que tiene que realizar para completar la tarea y dar clic en inicio, si no se quiere que recorra esa distancia y ya se dio clic en inicio solo se detiene con el botón de pausa. Figura 5.2: Pantalla asignación movimiento según distancia a recorrer. Se inicia en la clase App2Frame es la encargada de la interface grafica de recibir y enviar el dato de la distancia a la clase ang la cual trasforma el dato que le llega en la función calc y lo convierte ángulo y luego en pulsos, lo devuelve por medio de esta función a la variable vueltas para el ciclo de la acción donde se envían los datos al puerto. 5.2.3. Secuencia para el control de dos motores. Para este tipo de rutina es necesario hacer el programa con varios hilos de control como el anterior, este permite calcular individualmente los datos de cada motor a la velocidad corre73 spondiente da cada uno de ellos y un hilo el cual toma los datos calculados, este hilo trabaja independientemente de la velocidad de los otros y es el que controla la comunicación con el puerto. Para el primer motor : c l a s s h i l o 1 e x t e n d s Thread implements Runnable { p r i v a t e s h o r t d a t o e [ ] = { 0 x01 , 0 x03 , 0 x02 , 0 x06 , 0 x04 , 0 x0c , 0 x08 , 0 x09 } ; public short dato1 ; p u b l i c h i l o 1 ( l o n g m, i n t n , i n t vu ) / / c o n s t r u c t o r de l a c l a s e { m i l l i s =m; n a n o s =n ; v u e l t =vu ; ant =0; } p u b l i c v o i d d e t e n e r 1 ( ) / / e s t a f u n c i ó n d e t i e n e e l h i l o de c o n t r o l de d a t o s d e l p r i m e r m o t o r . { try { suspend ( ) ; } catch ( SecurityException e ){ e . printStackTrace ( ) ; } } public void continuar1 ( ) / / Esta función r e i n i c i a el h i l o de c o n t r o l de d a t o s d e l p r i m e r m o t o r { try { resume ( ) ; } catch ( SecurityException e ){ e . printStackTrace ( ) ; } } p u b l i c v o i d r u n ( ) / / E s t e e s e l método que s e r e e s c r i b e p a r a e l e l c a l c u l o de l o s d a t o s { while ( c o r r e r ) 74 { f o r ( i n t i = 0 ; i <= v u e l t ; i ++) { f o r ( i n t c o n t = 0 ; c o n t < d a t o e . l e n g t h ; c o n t ++) { dato1=datoe [ cont ] ; try { s l e e p ( m i l l i s , nanos ) ; } catch ( InterruptedException e ){ e . printStackTrace ( ) ; } } } } } p u b l i c s h o r t s e c 1 ( ) / / E s t a f u n c i ó n e s l a que s e l l a m a p a r a poder e n v i a r e l dato { r e t u r n ( dato1 ) ; } } Para el segundo motor. c l a s s h i l o 2 e x t e n d s Thread implements Runnable { p r i v a t e s h o r t d a t o e [ ] = { 0 x10 , 0 x30 , 0 x20 , 0 x60 , 0 x40 , 0 xc0 , 0 x80 , 0 x90 } ; p r i v a t e s h o r t d a t o i [ ] = { 0 x90 , 0 x80 , 0 xc0 , 0 x40 , 0 x60 , 0 x20 , 0 x30 , 0 x10 } ; public short dato1 ; public long m i l l i s ; p u b l i c i n t nanos , v u e l t ; public boolean c o r r e r ; p u b l i c h i l o 2 ( l o n g m, i n t n , i n t vu ) / / a s i g n a v e l o c i d a d i n i c i a l a este hilo { m i l l i s =m; n a n o s =n ; v u e l t =vu ; correr=true ; 75 } p u b l i c v o i d Vmil ( l o n g m ) / / m o d i f i c a l a v e l o c i d a d en m i l i s e g u n d o s de e s t e h i l o { m i l l i s =m; } p u b l i c v o i d Vna ( i n t n ) / / m o d i f i c a l a v e l o c i d a d de e s t e h i l o en nano s e g u n d o s { n a n o s =n ; } p u b l i c v o i d Vuel ( i n t vu ) / / c a m b i a e l numero de c i c l o s d e l motor 2 { v u e l t =vu ; } public void detener2 ( ) / / d e t i e n e el proceso del h i l o 2 { try { suspend ( ) ; } catch ( SecurityException e ){ e . printStackTrace ( ) ; } } public void continuar2 ( ) / / reanuda el proceso del h i l o 2 { try { resume ( ) ; } catch ( SecurityException e ){ e . printStackTrace ( ) ; } } p u b l i c v o i d r u n ( ) / / e s t e e l e l método que s e r e e s c r i b e p a r a e l c á l c u l o de l o s d a t o s { while ( c o r r e r ) { f o r ( i n t i = 0 ; i <= v u e l t ; i ++) 76 { f o r ( i n t c o n t = 0 ; c o n t < d a t o e . l e n g t h ; c o n t ++) { dato1=datoe [ cont ] ; try { s l e e p ( m i l l i s , nanos ) ; } catch ( InterruptedException e ){ e . printStackTrace ( ) ; } } } } } p u b l i c s h o r t s e c 2 ( ) / / método a l que s e l e h a c e llamado para obtener e l dato . { r e t u r n ( dato1 ) ; } } 5.2.3.1. Funcionamiento. Se designa la velocidad del primer y segundo motor en milesimas y en nanosegundos el programa internamente asigna estos tiempos al sistema de hilos encargados de los datos de cada motor, dar clic en inicio, si no se quiere que recorra esa distancia y ya se dio clic en inicio solo se detiene con el botón de pausa. 77 Figura 5.3: Pantalla de control de dos motores. El funcionamiento de este mucho más complejo y se estructura diferente de los anteriores ya que este incluye una ejecución de procesos en paralelo, inicia con la clase PruebaFrame la cual se encarga sólo de la interface grafica en donde mediante las clases Scrollbar se generan las barras de cambio de velocidad las cuales envían la información a la clase prog la cual funciona de puente con la clase escribir esta es la encargada de escribir los datos en el puerto los que recibe de las clases hilo1 e hilo2, los cuales tienen las rutinas de cálculo de dato a enviar. 5.2.4. Ubicación de un punto en un espacio bidimensional. Para esta aplicación se usa la rutina de control de dos motores y se le añade un algoritmo de retroceso y por medio de la interfaz gráfica del usuario se le da el control bidimensional, el cual esta restringido a valores positivos y es una representación del estado físico en el cual se mueven los motores. El control bidimensional es parte de la interfaz gráfica, este control se realiza con los métodos MouseListener y MouseMotionListener. p a n e l . a d d M o u s e L i s t e n e r ( / / Se l e a d i c i o n a a l un p a n e l e l 78 método M o u s e L i s t e n e r new M o u s e L i s t e n e r ( ) / / Lo que s e h a c e e s s o b r e e s c r i b i r e l método { p u b l i c v o i d m o u s e P r e s s e d ( MouseEvent e ) / / r e g i s t r a e l l u g a r donde s e h a g a c l i k { e . consume ( ) ; x1 = e . getX ( ) ; / / c a p t u r a l a p o s i c i ó n en x . y1 = e . getY ( ) ; / / c a p t u r a l a p o s i c i ó n en y . r u n n e r . d i s t ( x1 , y1 ) ; / / Se l e e n v í a a l H i l o que e s t a e n c a r g a d o de e n v i a r l o s d a t o s p a r a que e s t e l o e n v í e a s u s respectivos hilos . } p u b l i c v o i d m o u s e E n t e r e d ( MouseEvent e ) { } p u b l i c v o i d m o u s e E x i t e d ( MouseEvent e ) { } }); p a n e l . a d d M o u s e M o t i o n L i s t e n e r ( / / Se a d i c i o n a e l método M o u s e M o t i o n L i s t e n e r new M o u s e M o t i o n L i s t e n e r ( ) / / Lo que s e h a c e e s s o b r e e s c r i b i r e l método { p u b l i c v o i d mouseDragged ( MouseEvent e ) / / r e g i s t r a e l p o r donde s e va o p r i m i e n d o c o n t i n u a m e n t e { e . consume ( ) ; x2 = e . getX ( ) ; / / Se c a p t u r a l a p o s i c i ó n en x y2 = e . getY ( ) ; / / Se c a p t u r a l a p o s i c i ó n en y r u n n e r . d i s t ( x2 , y2 ) ; / / Se l e e n v í a a l H i l o que e s t a e n c a r g a d o de e n v i a r l o s d a t o s p a r a que e s t e l o e n v í e a s u s respectivos hilos . } p u b l i c v o i d mouseMoved ( MouseEvent e ) / / r e g i s t r a p o r donde s e mueve e l mouse { 79 } p u b l i c v o i d m o u s e E n t e r e d ( MouseEvent e ) { } p u b l i c v o i d m o u s e E x i t e d ( MouseEvent e ) { } }); 5.2.4.1. Funcionamiento. Mediante la selección de un punto en la pantalla el programa envía esta información y la convierte en el número de pulsos para el movimiento de los motores y que estos se ubique en la posición deseada, dar clic en inicio, si no se quiere que recorra esa distancia y ya se dio clic en inicio solo se detiene con el botón de pausa. Figura 5.4: Pantalla de ubicación en un punto bidimensional. El de este es parecido al anterior y es una recopilación de rutinas anteriores, inicia con la clase 80 EspacialFrame la cual se encarga sólo de la interface grafica en donde mediante las clases Scrollbar se generan las barras de cambio de velocidad y la combinación de las clases Panel con MouseListener se envía la información a la clase prog de la ubicación espacial donde se desea que se desplacen los motores, la cual funciona de puente con la clase escribir esta es la encargada de escribir los datos en el puerto los que recibe de las clases hilo1 e hilo2, los cuales tienen las rutinas de cálculo de dato a enviar. 5.3. RUTINA PARA CONTROL DE UN SERVO MOTOR. Dado que el movimiento del servo motor se requiere de una señal activa de determinada amplitud1 y el modelo matemático de este tipo de dispositivo es lineal, lo cual facilita su programación, y que se puede enviar una señal activa por el puerto de una determinada amplitud, permite diseñar un programa en java que controle en servo dependiendo de los rangos de señales de los mismos. El programa esta constituido por tres hilos de control, el hilo general que es el encargado de enviar la información al puerto, los otros dos hilos son lo que determinan la amplitud de la señal activándose y desactivándose dependiendo del estado del otro hilo. c l a s s h i l o 1 e x t e n d s Thread implements Runnable / / Clase de c o n t r o l de s e ñ a l { public hilo2 runner ; public long m i l l i ; public short dato1 ; p u b l i c h i l o 1 ( l o n g m ) / / C o n s t r u c t o r de l a c l a s e { m i l l i =2; r u n n e r =new h i l o 2 (m ) ; } p u b l i c void run ( ) { runner . s t a r t ( ) ; while ( t r u e ) { i f ( r u n n e r . g e t S t a t e ( ) = = T h r e a d . S t a t e . TIMED_WAITING ) / / Si e l o t r o h i l o e s t á dormido e s t e h i l o 1 La cual depende del el fabricante. 81 envía la señal activa { d a t o 1 =0 x01 ; try { sleep ( milli ); } catch ( InterruptedException e ){ e . printStackTrace ( ) ; } } e l s e / / en c a s o c o n t r a r i o a p a g a l a s e ñ a l a c t i v a { d a t o 1 =0 x00 ; try { sleep ( milli ); } catch ( InterruptedException e ){ e . printStackTrace ( ) ; } } } } public short datoe () { r e t u r n ( dato1 ) ; } } c l a s s h i l o 2 e x t e n d s Thread implements Runnable / / C l a s e que c o n t r o l a e l e n c e n d i d o de l a s e ñ a l { public long m i l l i ; p u b l i c h i l o 2 ( l o n g m ) / / C o n s t r u c t o r de l a c l a s e { m i l l i =m; } p u b l i c void run ( ) { while ( t r u e ) { try { 82 sleep ( milli ); } catch ( InterruptedException e ){ e . printStackTrace ( ) ; } } } } c l a s s e s c r i b i r e x t e n d s Thread implements Runnable / / Clase que e n v í a l a s e ñ a l a l p u e r t o . { private puerto lpt ; p u b l i c h i l o 1 h1 ; p u b l i c e s c r i b i r ( l o n g m ) / / C o n s t r u c t o r de l a c l a s e e l que g e n e r a e l e n l a c e con e l p u e r t o { h1=new h i l o 1 (m ) ; l p t =new p u e r t o ( ) ; } p u b l i c void run ( ) { h1 . s t a r t ( ) ; while ( t r u e ) { l p t . e s c r i b e ( h1 . d a t o e ( ) ) ; } } } 5.3.0.2. Funcionamiento. Para este motor, dada la condición de no poder hacer que se devuelva, solo cuenta con la variación de velocidad y de desplazamiento, dar clic en inicio, si no se quiere que recorra esa distancia y ya se dio clic en inicio solo se detiene con el botón de pausa. Figura 5.5: Pantalla rutina de control de servo motor. 83 5.4. VENTAJAS Y DESVENTAJAS DE LOS MOTORES PASO A PASO Y LOS MOTORES SERVO. 5.4.1. Motor paso a paso. 5.4.1.1. Ventajas. Puesto que la operación del motor paso a paso se sincroniza con las señales de pulso del comando generadas de los pulsos en enviados por los puertos, son convenientes para el control exacto de su rotación. Se puede controlar fácilmente su velocidad desde el computador. Es fácil de invertir el sentido de rotación del motor paso a paso. Bajo costo. 5.4.1.2. Desventajas. El flujo actual de un driver a la bobina del motor no se puede aumentar o disminuir durante la operación. Por lo tanto, si el motor se carga con una carga más pesada que la característica diseñada del esfuerzo de torsión del motor, saldrá de paso con los pulsos. El motor paso a paso produce mas ruido y vibración que los servos. El motor paso a paso no se puede utilizar para tareas de rotación de alta velocidad. 5.4.2. Servomotor. 5.4.2.1. Ventajas. Si una carga pesada se pone en el motor, el driver aumentará la corriente a la bobina del motor como intento de rotar el motor.2 Se puede usar en operaciones de alta velocidad. De fácil manejo desde el computador. Bajo consumo de energía. 2 sin embargo, una carga demasiado pesada puede causar un error. 84 5.4.2.2. Desventajas. Puesto que el servomotor intenta rotar según los pulsos del comando, pero se retrasa, no es conveniente para el control de la precisión de la rotación. Costo alto. Cuando está parado, el rotor del motor se continúa moviendo hacia adelante y hacia atrás un pulso, de modo que no sea conveniente si usted necesita prevenir la vibración. 5.4.3. Comparación de motor paso a paso y motor servo. Cuadro 5.1: Características comparativas de motor PaP y servo motor. 5.5. MODELO MATEMÁTICO. El comportamiento físico del sistema mecánico de los motores paso a paso esta basado en el tipo la secuencia de señales que se le administre y el servo en el tiempo que se mantenga una señal activa, ese pulso o señal administrada hace que el motor gire en un ángulo especificado por el fabricante. 85 5.5.1. Descripción física motor PaP. Al recibir una secuencia de señales el motor PaP, este realiza un desplazamiento el cual se moverá un paso completo o medio paso, la distancia del paso dependerá del ángulo mínimo del motor. 5.5.2. Descripción física servo motor. Al recibir una señal de una amplitud que este entre los rangos de funcionamiento del servo este realiza un desplazamiento dependiendo de el tiempo de amplitud de la señal. 5.5.3. Descripción matemática. Las variables que intervienen en el proceso de movimiento del motor son: Momento de inercia. Amortiguación mecánica. Constante elástica de la barra. Momento de torsión aplicado. Inductancia Resistencia. Recíproco de la capacidad, llamado elastancia. Tensión aplicada. El diagrama de estados del sistema de control del motor es: La interacción de las variables eléctricas se da mediante las ecuaciones de las leyes de Kirchhoff : 2 1 L ddt 2q + R dq dt + C q = E (t) donde q (t) es la carga instantánea del capacitor y E (t) es el voltaje aplicado. La interacción de las variables mecánicas son: 2 I ddtθ2 + c dθ dt + kθ = T (t) donde θ (t) representa la magnitud de la torsión. 86 5.5.3.1. Motor PaP El modelo matemático de este motor esta afectado por las siguientes variables: el voltaje constante que induce la rotación del rotor el cual se enclava en la posición en donde se activen las bobinas, este funcionamiento lo que afecta el la velocidad de cambio entre bobina y bobina. La secuencia de activación, esta secuencia designa el ángulo de rotación que da entre dos bobinas, el cual puede ser secuencia de medio paso, normal o wave drive, con estas secuencia cambia la rotacion por ejemplo: si el motor pap es un motor de 12V y 7.5º de rotación, con la secuencia normal un paso es de 7.5º asi como con secuencia wave drive lo que varia entre cada una de estas es la manera cono se enclava ya que con la secuencia normal es nesesario tener dos bobinas activas, y para un giro completo se necesitarían 48 pulsos, para la secuencia de medio paso los pasos serian de 3.75º y para un giro completo se nesecitarian 96 pulsos. 5.5.3.2. Servo motor. El modelo matemático de este tipo de motor es muy particular, ya que este basado en su funcionamiento se puede determinar un modelo el cual es lineal, lo que facilita su programación, luego para conseguir un ángulo de torción θ estará dado por la siguiente fórmula: θ t = µ + 100 Donde t es el tiempo de duración de la señal en milisegundos. µ es la duración de señal que pone al servo en posición inicial 0. θ es el ángulo de torción en grados. 87 5.6. TARJETA DE ENLACE. Figura 5.6: Tarjeta de enlace entre el computador y el motor. El tarjeta es el enlace entre el computador y el motor PaP, consta de los siguientes componentes: Cuatro resisteancias de 1K. Un condensador de 2200µ y 25v. Una compuerta de tipo buffer de enlace 74LS07. Cuatro transistores tipo darlington TIP 122. Un regulador positivo de voltaje de 12v LM7812C. La tarjeta de enlace funciona de la siguiente manera: 88 1. Se envía una señal desde el puerto a la tarjeta, la cual entra por el buffer. 2. La señal sale del buffer hacia la resistencia y de la resistencia al transistor. 3. El transistor al recibir la señal se activa y envía el voltaje hacia la salida del la bobina del motor correspondiente. 5.7. FUTURAS MEJORAS. Una de las mejoras que se le puede realizar al programa y al dispositivo es la integración la integración con los puertos USB y el diseño de los protocolos de comunicación utilizando los mismos. La visualización en el aplicativo bidimensional no ver esa pantalla gris sino poder enlazar la salida de video y en ese espacio visualizar el punto donde se están ubicando los motores, hacer mas interactivo el programa. 89 Capítulo 6 CONCLUSIÓN. 1. Aunque los sevomotores tienen una mayor potencia, para el tamaño que estos tienen, algunos carecen de la posibilidad de cambiar su sentido de rotacion, aun asi son utiles para trabajos pesados en los que se requieran de velocidad y potencia. Los motores PaP tienen una gran ventaja que radica en su manera de funcionar ya que es muy sencillo cambiar el sentido de rotación e incluso cambiando el intervalo de las señales de activación llevarlo a su máxima velocidad, son motores de gran versatilidad utilizados en todo tipo de dispositivos desde robots hasta unidades de CD recomendables para cualquier tarea de precisión. 2. El resultado final no solo es de componentes electrónicos, si no de la combinación de la programación avanzada y la modelización matemática. En donde la electrónica nos brinda la posibilidad de enlazar los motores con el computador, la modelización matemática nos brinda una descripción del funcionamiento en forma matemática y así establecer que factores afectan el sistema y como a partir de estos hacerlo computable, la programación da la posibilidad de controlar y manipular los motores a nuestra voluntad mediante lo visualizado en el modelo matemático que permitió crear las rutinas que son de gran funcionalidad debido a su diseño y a sus posibles mejoras. 3. Aunque la mecánica de estos motores sea sencilla al combinarlos para tareas diversas se convierte en sistemas de gran complejidad, versatilidad y de precisión que junto con los programas controladores y un sistema funcional y práctico que facilita al usuario final realizar tareas de precisión que manualmente no darían los resultados esperados o de generación de rutinas las cuales manualmente seria un proceso largo y tedioso. 4. Con la combinación de las aéreas de la electrónica de los sistemas y la matemática de una forma tan básica, si se profundiza en esta combinación los resultados obtenidos serán 90 grandiosos, dispositivos que realicen tareas más complejas pero que su valor radique en la sencillez de los mismos. 91 ANEXOS Anexo1. Diagrama causa-efecto del proceso de implementación del sistema. 92 Bibliografía [1] P. P. Acarnley. Stepping motors : a guide to modern theory and practice. London : Peter Peregrinus, 2nd ed. edition, 1984. [2] Paul P. Acarnley. Stepping motors : a guide to theory and practice. London : The Institution of Electrical Enginners, 2002. [3] Antonio Barrientos. Fundamentos de robótica. McGraw Hill. Madrid, España, 1997. [4] H. M. Deitel. Java How to Program. Editorial Prentice Hall, New Jersey, United States, sexta edición edition, 2004. [5] Electrónica Digital. Tutorial puerto paralelo, 2007. perso.wanadoo.es, Consulta 31 de Agosto de 2007. [6] Stubberud y Williams DiStefano III. Feedback and control systems. Editorial Schaum, New York, 1967. [7] Umez-Eronini Eronini. Dinámica de Sistemas y Control. Editorial Thomson Learning, México, 2001. [8] Arthur Eugene Fitzgerald. Electric machinery. McGraw-Hill, 2003. [9] Juan Martín García. Teoría y ejercicios prácticos de Dinámica de Sistemas. Sysware, 2003. [10] Ogata Katsuhiko. Dinámica de sistemas. Editorial Prentice-Hall, México, 1987. [11] Ogata Katsuhiko. Ingenieria de Control Moderna. Pearson, Prentice Hall. Madrid, 2003. [12] Sum Microsystems. Sum microsystems, java.comm, 2006. http://java.sun, Consulta: 21 de Julio de 2006. [13] Sum Mycrosystems. Jdk 6 documentation, 2006. http://java.sun.com/javase/6/docs/, Consulta: 21 de Julio de 2006. 93 [14] Virgilio Gómez Negrete. El puerto paralelo de la pc. Virtech, 3:10, 2005. [15] Norman Nise. Control Systems Engineering. John Wiley & Sons Inc, 4 edition, 2004. [16] E.H. Wernick. Electric motor handbook. New York : MacGraw-Hill, 1978. 94 Autor: Javier Alejandro Salamanca Pachón A J i Al j d S l P hó Trabajo de grado para optar al titulo de: Informático Matemático. Trabajo dirigido por: Ing. Jesús Daza Coordinador centro de p electrónica. Pontificia Universidad microscopia Javeriana Facultad de Ciencias. INTRODUCCIÓN Con el uso de los lenguajes computacionales como java, desarrolladores matemáticos y mediante la programación de protocolos t l los cuales permiten enlazar la salida y entrada de datos de los puertos paralelo y serial lo cual hace posible enviar o recibir paquetes de datos o señales activas por medio de estos para el control de sistemas externos. OBJETIVOS Objetivo general. Establecer E t bl un método ét d d de manejo j d de periféricos por puertos del computador. D Desarrollar ll e iimplementar l t un software ft capaz de realizar tareas de precisión y ubicar bi una coordenada d d especifica ifi por instrucciones sobre diferentes tipos de motores t servo y paso a paso por puertos t paralelo y serial del computador. Objetivos específicos. • Implementar los protocolos para envió de señales desde los puertos del computador. • Determinar el modelo matemático del sistema mecánico del motor servo y paso a paso. • Manejar secuencia de información de que intervienen en el control. variables q • Diseñar e implementar la interface de conexión entre el puerto y el motor. • Desarrollar algoritmos computacionales encargados del manejo controlado de los motores. Con el auge en las últimas décadas de la tecnología en el mundo, mundo surge la necesidad de actualizar y obtener las herramientas adecuadas para competir a nivel tecnológico en el área industrial como en el área de la investigación científica, de una forma económica y que cumpla q p con los estándares mínimos establecidos. El problema del desarrollo de nuestras tecnologías radica, en el d desconocimiento i i t d de h herramientas i t que el mismo computador contiene. MARCO TEORICO Puerto paralelo. Cada puerto paralelo posee una dirección Base, es decir, una p p p , , dirección con la que se identifica al puerto, y según el tipo de puerto de que se trate, podrá tener además otras direcciones Actualmente las direcciones por defecto para direcciones. Actualmente las direcciones por defecto para los puertos son las siguientes: Puerto Dirección base LPT1 0x378 LPT2 0x278 LPT LPT3 0x3BC BC Tipos de puerto. Tipos de puerto SPP. Es el puerto más sencillo, tiene tres SPP Es el puerto más sencillo tiene tres buses o registros, en la dirección Base: bus de datos, este es de 8 bits y todos sus pines son salidas Bidireccional (PS/2). Este puerto tienen las mismas características que el SPP con la í l l diferencia que el bus de datos es bidi bidireccional, es decir que cambiando el i l d i bi d l estado de algunos bits del bus de control se puede actuar sobre el bus de datos haciendo que trabaje en su totalidad como entradas o como salidas EPP (Enhaced Parallel Port). Este tipo de puerto tiene la característica de ser tan rápido como el bus del sistema, alcanzando velocidades de transferencia de hasta 1Mb l id d d f i d h Mb por segundo ECP (Extended Capabilities Port). Puede al igual que el EPP, escribir y leer a la velocidad del Bus. P Puerto serial. t i l El puerto seria o RS‐232 es un estándar para realizar la transmisión de datos. El RS‐232 consiste en un conector tipo DB‐25 de 25 pines, aunque es normal encontrar la versión d i DB de 9 pines DB‐9. Las señales con las que trabaja este puerto L ñ l l b j son digitales, de 12V(0 lógico) y ‐12V(1 lógico) para la entrada y salida de datos y a lógico), para la entrada y salida de datos, y a la inversa en las señales de control. El estado de reposo en la entrada y salida de datos es ‐ 12V. En un ordenador puede haber varios puertos p p series, a los que normalmente se les denomina COM 1, COM 2, COM 3, por defecto el COM 1 suele pertenecer al ratón usando éste el IRQ 4, aunque también es posible encontrarle en el COM 2, así que lo í normal es encontrarnos libre el puerto serie d l COM tili d l IRQ del COM 2 utilizando el IRQ 3. Motor paso a paso. A diferencia de los motores de corriente A dif i d l d i continua (CC) que gira a todo lo que dan cuando son conectados a la fuente de alimentación, los motores paso a paso (PaP) solamente giran un ángulo determinado los solamente giran un ángulo determinado, los CC sólo disponen de dos terminales de conexión, mientras los PaP pueden tener 4, 5 ó 6, según el tipo de motor que se trate Por otro lado los motores de corriente continua no pueden quedar enclavados en una sola posición, los motores paso a paso tienen la posibilidad de quedar enclavados en una posición o bien totalmente libres. i ió bi l lib Principio de funcionamiento. El motor está constituido por un rotor sobre El á i id b el que van aplicados distintos imanes permanentes y por un cierto número de bobinas exitadoras, bobinas en su estator. Las bobinas son parte del estator y el rotor es un imán permanente. Bipolar. Estos tienen, generalmente, cuatro cables de salida. Necesitan ciertos trucos para ser controlados, debido a que requieren del cambio de dirección del flujo de corriente a través de las bobinas en la secuencia apropiada para realizar un movimiento. Unipolares. U i l Estos motores suelen tener 6 ó 5 cables de salida, dependiendo de su conexionado ld d d d d d interno. Este tipo se caracteriza por ser más simple de controlar. i l d t l Secuencia para manejar motores paso a paso bi l bipolares. A B C D +V ‐V +V ‐V +V ‐V ‐V +V ‐V +V ‐V +V ‐V +V +V ‐V Secuencia para manejar motores paso a paso unipolares. Secuencia Normal. Secuencia Normal Con esta secuencia el motor avanza un paso por vez debido a que siempre hay dos bobinas activadas, se obtiene un alto torque de paso y de retención. de paso y de retención PASO BOBINA A BOBINA B BOBINA C BOBINA D 1 ON ON OFF OFF 2 OFF ON ON OFF 3 OFF OFF ON ON 4 ON OFF OFF ON Secuencia del tipo wave drive. S i d l i d i En esta secuencia se activa sólo una bobina a l la vez. En algunos motores esto brinda un l b d funcionamiento más suave. La contrapartida es que al estar sólo una bobina activada, el l t ól b bi ti d l torque de paso y retención es menor. PASO BOBINA A BOBINA B BOBINA C BOBINA D 1 ON OFF OFF OFF 2 OFF ON OFF OFF 3 OFF OFF ON OFF 4 OFF OFF OFF ON Secuencia del tipo medio paso. S i d l i di En esta secuencia se activan las bobinas de tal f forma de brindar un movimiento igual a la d b d l l mitad del paso real. Para ello se activan primero 2 bobinas y luego sólo 1 y así i b bi l ól í sucesivamente. PASO BOBINA A BOBINA B BOBINA C BOBINA D 1 ON OFF OFF OFF 2 ON ON OFF OFF 3 OFF ON OFF OFF 4 OFF O ON O ON O OFF O 5 OFF OFF ON OFF 6 OFF OFF ON ON 7 OFF OFF OFF ON 8 ON OFF OFF ON Servo Motores. Los servos son un tipo especial de motor de L i i l d d C.C. que se caracterizan por su capacidad para posicionarse de forma inmediata en cualquier posición dentro de de su intervalo de operación. de operación Un Servo es un dispositivo pequeño que tiene un eje de rendimiento controlado. Este puede ser llevado a posiciones angulares específicas ll d i i l ífi al enviar una señal codificada. Con tal de que una señal codificada exista en la línea de entrada, el servo mantendrá la posición angular del engranaje Cuando la señala angular del engranaje. Cuando la señala codificada cambia, la posición angular de los piñones cambia. Funcionamiento de un servo. El motor del servo tiene algunos circuitos de El motor del ser o tiene alg nos circ itos de control y un potenciómetro esta es conectada al eje central del servo motor. al eje central del servo motor METODOLOGÍA Las fases propuestas para el estudio as ases p opuestas pa a e estud o metodológico son: la investigación del funcionamiento de las JNI y los paquetes java comm, analizar la estructura mecánica de los motores t t á i d l t paso a paso para determinar las instrucciones que mueven el motor, realizar el modelamiento matemático del sistema mecánico del motor establecer un método de comunicación estab ece u étodo de co u cac ó con los puertos paralelo y serial que permite implementar una rutina de enlace para entrada y salida de datos a través de los puertos, diseñar un t é d l t di ñ algoritmo de comunicación a través de los puertos para hacer control en dispositivos externos. p Procedimiento. El programa que administra el movimiento de p g q motores debe contemplar: 1. Una implementación del p programa de comunicación mediante los puertos paralelo o serial. 2. Activación de bobinas y control de pulso para motor PaP y servo correspondientemente. 33. Elaboración del modelo matemático de motor tipo paso a paso y servo. paso y servo 4. Simulación del modelo 4 matemático. 5 Implementación del programa 5. que controla el motor desde el computador. 1. Aunque los sevomotores tienen una mayor potencia, para el tamaño que estos tienen, algunos carecen de la posibilidad de cambiar su sentido de rotación, aun así son útiles para trabajos pesados en los que se requieran de velocidad y potencia. Los motores PaP tienen una gran ventaja g j que radica en su manera de funcionar ya q y que es muy sencillo cambiar el sentido de rotación e incluso cambiando el intervalo de las señales de activación llevarlo a su máxima velocidad, son motores de gran versatilidad utilizados en todo tipo de p dispositivos recomendables para cualquier p tarea de precisión. 2. El resultado final no solo es de componentes electrónicos si no de la componentes electrónicos, si no de la combinación de la programación avanzada y la modelización matemática. avanzada y la modelización matemática En donde la electrónica nos brinda la posibilidad de enlazar los motores con el computador, la modelización matemática nos brinda una descripción del funcionamiento en forma matemática y así establecer que factores afectan el sistema y como a partir de estos hacerlo computable la programación da la posibilidad de controlar y manipular los motores a nuestra voluntad mediante lo visualizado en el modelo matemático que permitió crear las rutinas que son de gran funcionalidad debido a su diseño y a sus posibles mejoras. 3. Aunque la mecánica de estos motores p sea sencilla al combinarlos para tareas diversas se convierte en sistemas de g gran complejidad, versatilidad y de p j , y precisión que junto con los programas y controladores y un sistema funcional y práctico que facilita al usuario final realizar tareas de precisión que manualmente no darían los resultados esperados o de generación de rutinas las cuales manualmente seria un proceso l l largo y tedioso. 4. Con la combinación de las aéreas de la electrónica de los sistemas y la matemática de una forma tan básica, si se profundiza en esta combinación los resultados obtenidos serán grandiosos dispositivos que realicen tareas más complejas pero que su valor radique en la sencillez de los mismos. RECOMENDACIONES Una de las mejoras que se le puede realizar al U d l j l d li l programa y al dispositivo es la integración la i t integración con los puertos USB y el diseño ió l t USB l di ñ de los protocolos de comunicación utilizando l i los mismos. La visualización en el aplicativo bidimensional no ver esa pantalla gris sino poder enlazar la salida de video y en ese espacio visualizar el punto donde se están ubicando los motores hacer mas donde se están ubicando los motores, hacer mas interactivo el programa.