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 Trabajo de Grado Señores
BIBLIOTECA GENERAL Cuidad
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.
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.
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 Nombres Completos
Salamanca Pachón 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): _________________________________________________________________________
_______________________________________________________________________________
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 [email protected], 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
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.
NOTA DE ADVERTENCIA
Artículo 23 de la Resolución N° 13 de Julio de 1946
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.
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.
Í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.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.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.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
Í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
Í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
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
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
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
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
GENERALIDADES.
INTRODUCCIÓN.
Con el uso de los lenguajes computacionales como java, desarrolladores matemáticos y medi-ante 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 im-plementación del software que variables afectan un dispositivo y mediante el diseño e imple-mentació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.
Capítulo 1
MARCO TEÓRICO.
1.0.1. Reseña histórica.
1.0.1.1. 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 con-sumidores 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.
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 acciona-ba 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 progra-ma 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 con-struir aplicaciones de Java. Dicha colección incluía el compilador Java, un visualizador de ap-plets, 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 des-cubrió 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].
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 Mas-sachusetts (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 in-ventó 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 con-trolar 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ámi-ca 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 urbana2y 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.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 reali-mentación y sistema dinámico, junto con la teoría de modelos en el espacio de estados y pro-cedimientos 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 in-teré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 mode-lo es capaz de generar mode-los comportamientos característicos del sistema real, denomina-dos modenomina-dos de referencia, entonces obtendremos una cierta confianza en la validez del modelo.[10, 11]
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 progra-madores 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 comu-nicaciones que utilizan los puertos de comucomu-nicaciones independientes de la plataforma[12].
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 apli-caciones 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 propi-etario 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:
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 siem-pre 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 getPor-tIdentifier(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 con-stantes 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 even-tos 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 comuni-cació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:
getInputStream() nos permitirá enlazar la entrada del puerto al InputStream que nos de-vuelve 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 setOutputBuffer-Size(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) PIN (DB9) Descripción 2 2 TD: Canal de transmisión. 3 3 RD: Canal de recepción. 4 7 RTS: Petición para transmitir. 5 8 CTS: Preparado para emitir. 6 6 DSR: Equipo preparado.
7 5 Masa
[image:27.612.114.381.434.578.2]8 1 DCD: Conexión establecida. 20 4 DTR: Terminal preparado. 22 9 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.
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 se-rie, 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]
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
FLOW-CONTROL_XONXOFF_OUT) para control de flujo por software. El método setFlow-ControlMode(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 notifi-cació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 ten-emos el método setRTS(boolean).[12]
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 NOMBRE Descripción
1 STROBE Indica que existen datos validos en las líneas de datos D0-7 2 D0 Dato bit 0
3 D1 Dato bit 1 4 D2 Dato bit 2 5 D3 Dato bit 3 6 D4 Dato bit 4 7 D5 Dato bit 5 8 D6 Dato bit 6 9 D7 Dato bit 7
10 ACK Indica que el ultimo carácter se recibió.
11 BUSY Indica que la impresora esta ocupada y no puede recoger datos. 12 PE Sin papel.
13 SLCT Indica que la impresora esta en línea.
14 AUTO FD Indica a la impresora que realice una alimentación de línea. 15 ERROR Existe algún error en la impresora.
[image:30.612.89.464.189.445.2]16 INIT Pide a la impresora que se inicie. 17 SLCT IN 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 desha-bilitar los drivers usando la línea de datos.
EPP (Extended Parallel Port) es el modo extendido y se utiliza para periféricos que prin-cipalmente no son impresoras.
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: notifyOn-Error(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.
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 Extensión
Mac OS X .dylib UNIX .so Windows .dll
Cuadro 1.3: Extensiones de la librerías dinámicas por SO.
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 pro-gramadores 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.
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 Dirección Base LPT1 0x378 LPT2 0x278 LPT3 0x3BC
Cuadro 1.5: Direcciones base puerto paralelo
8
El BIOS9construye 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.
[image:35.612.219.424.419.480.2]LPT1 LPT2 LPT3 Bus de datos 0x378 0x278 0x3BC Bus de Estado 0x379 0x279 0x3BD Bus de Control 0x37A 0x27A 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
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:
Bit Significado
7:5
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
4 Deshabilita interrupciones de ERROR 3 Habilita DMA
2 Deshabilita el servicio de interrupción FIFO/Terminal Count 1 Sólo lectura (FIFO lleno)
[image:37.612.113.419.83.285.2]0 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 efectuan-do pruebas para determinar si es EPP. Para esto, se pone en nivel bajo el bit 7 del bus de
estado y el bit de TimeOut (bit 0 del registro de estado), debido a la diversidad de fabri-cantes 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 pode-mos 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.
1.0.5.3. Puerto paralelo a nivel físico.
Cuadro 1.8: Conexionado del puerto paralelo
la computadora), pero cuando la longitud es considerable y los datos se transmiten a gran ve-locidad 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 Retorno de Masa
[image:40.612.84.335.243.375.2]Pin 18 Retorno de masa correspondiente a: C0 y D0 Pin 19 Retorno de masa correspondiente a: D1 y D2 Pin 20 Retorno de masa correspondiente a: D3 y D4 Pin 21 Retorno de masa correspondiente a: D5 y D6 Pin 22 Retorno de masa correspondiente a: D7 y S6 Pin 23 Retorno de masa correspondiente a: C3 Pin 24 Retorno de masa correspondiente a: S7 Pin 25 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.
del puerto puede tomar valores de hasta 2,6mAy 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,2nFentre 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 resisten-cias 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]
[image:41.612.116.462.281.581.2]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),
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.
13muchas veces los puertos serie a partir del COM 2 se denominan puertos virtuales o son debidos a ampliaciones
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 EIA15RS232C 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.
[image:43.612.114.393.513.683.2]Pin DB-25 Pin DB-9 Abreviación Nombre completo 2 3 TD Transmit data 3 2 RD Receive data 4 7 RTS Request to send 5 8 CTS Clear to send 6 6 DRS Data set ready 7 5 SG Signal ground 8 1 CD Carrier detect 20 4 DTR Data terminal ready 22 9 RI Ring indicador
Cuadro 1.10: Pins del puerto serie conexiones D25 y D9
14Consultive Commitee International Telegraph and Telephone
Abreviación Nombre completo Función
TD Transmit data Salida de datos serie TXD RD Receive data Entrada de datos serie RXD
CTS Clear to send Indica si el módem está preparado para recibir y mandar datos DCD Data carrier detect Detecta si hay una conexión con el otro extremo
DSR Data set ready Dice si la UART está preparada para la conexión DTR Data terminal ready Dice al módem si la UART está preparada para la conexión
[image:44.612.84.536.86.212.2]RTS Request to send Informa que la UART está preparada para la conexión RI Ring indicator 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:
Estos tienen, generalmente, cuatro cables de salida. Necesitan ciertos trucos para ser con-trolados, 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ón16 pueden ser directamente
[image:45.612.115.488.280.489.2]activadas por un microcontrolador.[1, 2]
Figura 1.3: Conexionado mediante el uso de un ULN2803.
Figura 1.4: Motor PaP con 5 cables.
[image:45.612.113.270.542.652.2]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 secuen-cia 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 Terminal
1 2 3 4
A B C D +V -V +V -V +V -V -V +V -V +V -V +V -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.
[image:46.612.84.236.367.458.2]Paso Bobina A Bobina B Bobina C Bobina D
1 On On Off Off
2 Off On On Off
3 Off Off On On
[image:47.612.112.439.85.376.2]4 On Off Off On
Cuadro 1.13: Secuencia normal.
Secuencia del tipo wave drive.
Paso Bobina A Bobina B Bobina C Bobina D
1 On Off Off Off
2 Off On Off Off
3 Off Off On Off
[image:48.612.83.411.85.377.2]4 Off Off Off On
Cuadro 1.14: Secuencia wave drive.
Secuencia del tipo medio paso.
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
[image:49.612.112.440.77.645.2]8 On Off Off On
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óx-ima 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 posi-cionarse 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]
1.0.8.1. Funcionamiento de un servo.
El motor del servo tiene algunos circuitos de control y un potenciómetro18esta 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 veloci-dad. 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]
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 oCoulumb=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 dedqcoulumbs cruza un área dada endtsegundos, la corrienteies
i=dqdt
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
resistenciaR=cambio en corrientecambio en voltaje V A
La resistenciaRlineal se da por R=eR
i
dondeeR es el voltaje a través del resitor eies la corriente que fluye por el resistor. La
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.
CapacitanciaC=cambio en cantidad de carga electricacambio en voltaje VC.
La capacitancia de un capacitor puede darse entonces por
C=eq
C
dondeqes la cantidad de carga de carga almacenada yeCes el voltaje a través del
capac-itor. La unidad de capacitancia es el farad(F). Comoi=dqdt
yeC=Cq
entoncesi=deCC
dt
despejando
deC=C1idt
eC(t) =C1 t
´
0
idt+eC(0).
Inductancias.
Es la relación entre el voltaje inducido y la razón de cambio de la corriente Inductancia=cambio en corriente por segundocambio en voltaje inducido V
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 autoinductanciaL, es la constante de
proporcionalidad entre el voltaje inducidoeLvolts y la razón de cambio de la corriente
L=eL di dt
La unidad de inductancia es el henry(H). Como
eL=Ldidt
luego de
iL(t) = 1L t
´
0