El presente trabajo de tesis consiste en diseñar un brazo robótico de 4 grados de libertad (GDL), utilizando servomotores como actuadores, y como elemento terminal cuenta con un gripper que tiene la función de manipular objetos. El robot tiene como objetivo ser fácil de operar por el usuario utilizando un Joystick frecuentemente usado por consolas de videojuegos.
El prototipo es fabricado en acrílico, así como la programación se realiza en lenguaje de descripción de hardware VHDL, implementado en una tarjeta Nexys-2 que cuenta con una FPGA Xilinx Spartan-3E que consta de 500 000 compuertas lógicas. Tiene una interfaz VGA de resolución 640 x 480 pixeles en la cual se visualizaran instrucciones e indicaciones del proceso de operación, así como el control de mando “Joystick” que será el instrumento en el cual el usuario podrá ingresar de forma manual las instrucciones al robot.
El funcionamiento básico consiste en que el usuario pueda asignarle hasta 31 puntos de posición al robot, estas serán guardadas en una memoria RAM tipo FIFO
(lo primero que entra es lo primero que sale) contenida en el FPGA. Cuando el usuario ya haya ingresado los puntos de posición necesarios, los datos serán leídos de la
memoria RAM y enviados a los servomotores de forma sincronizada. La secuencia de movimiento podrá ejecutarse solo una vez o de manera cíclica.
La tarea principal del robot es llevar un objeto de un punto a otro, esto de manera manual o completamente automática y reprogramable. A excepción del momento en
que se programa el FPGA, el robot es totalmente independiente de una PC.
Contenido
AGRADECIMIENTOS
RESUMEN
CONTENIDO
ÍNDICE DE FIGURAS
ÍNDICE DE TABLAS
CAPÍTULO 1 INTRODUCCIÓN
1.1 ESTADO DEL ARTE
CAPÍTULO 2 FUNDAMENTO TEÓRICO
2.1 ROBOT
2.1.1 Definición de robot industrial
2.1.2 Morfolog í a del robot
2.1.2.1 Estructura Mecánica
2.2 CINEMÁTICA DEL ROBOT
2.2.1 Cinem á tica Directa
2.2.1.1 Matriz de transformación homogénea
2.2.1.2 Algoritmo de Denavit Hartenberg
2.3 CONTROL
2.3.1 PLC
2.3.2 Microprocesador
2.3.2.1 Diagrama básico de un microprocesador
2.3.3 CPLD
2.3.3.1 Circuitos PLD complejos
2.3.3.2 Arreglo de compuertas programables en campo (FPGA)
2.3.4 Memoria RAM
2.3.5 VGA
Contenido
2.3.6 Joystick
2.3.7 Servomotor
2.3.7.1 Modulación por ancho de pulsos
CAPÍTULO 3 PROCEDIMIENTO
3.1 CINEMÁTICA
3.1.1 Cinem á tica Directa
3.2 CONTROL
3.2.1 Joystick
3.2.2 Funcionamiento del robot
3.2.3 Diagramas de bloques
3.2.3.1 Caja negra final
3.2.3.2 General_VGA
3.2.3.3 General_Total
CAPÍTULO 4 PRUEBAS Y RESULTADOS
4.1 ANÁLISIS DE COSTOS
CAPÍTULO 5 CONCLUSIONES Y RECOMENDACIONES
5.1 CONCLUSIONES
5.2 RECOMENDACIONES
BIBLIOGRAFÍA
Índice de figuras
Figura 1. Principales configuraciones de robot
Figura 2. Robot planar de 2 grados de libertad
Figura 3. Parámetros D H para un eslabón giratorio
Figura 4. Estructura de un PLC
Figura 5. Diagrama de componentes que integran un microprocesador
Figura 6. Macro celda de un PLD
Figura 7. PLD típico
Figura 8. Diagrama de bloques de un CPLD
Figura 9. Celda lógica típica en un FPGA
Figura 10. Celda entrada/salida
Figura 11. Celda de distribución
Figura 12. Interconectividad de un FPGA
Figura 13. Diagrama conceptual de un monitor CRT
Figura 14. Patrón de exploración del CRT
Figura 15. Diagrama de tiempos de un barrido horizontal
Figura 16. Joystick
Figura 17. Circuito de control del servomotor
Figura 18. Señal PWM
Figura 19. Asignación de ejes de referencia para el robot
Figura 20. Diagrama de bloques de conexiones físicas
Figura 21. Potenciómetros del Joystick
Figura 22. Modificación de potenciómetros
Figura 23. Circuito usado para cada botón
Figura 24. Esquema general del Joystick
Figura 25. Pantalla al Encender el robot
Figura 26. Pantalla en modo manual
Figura 27. Pantalla al tener una posición grabada
Figura 28. Pantalla al ejecutar secuencia
Figura 29. Pantalla que se mostrara cuando el robot este en reposo
Figura 30. Diagrama de bloques final
Figura 31. Diagrama de bloques del controlador de la pantalla VGA
Figura 32. Señales de sincronización
Figura 33. Carácter almacenado en la memoria ROM
Figura 34. Bloque de lógica General_Total
Figura 35. Bloque de lógica General_Contador
Figura 36. Rebotes en un interruptor al cambio de estado
Figura 37. Simulación de “Retardo_V”
Figura 38. Bloque de lógica General_RAM
Figura 39. Estructura general de registros de una memoria RAM
Figura 40. Bloques de memoria
Figura 41. Bloque de lógica General_PWM
Figura 42. Máquina de estados del PWM
Figura 43. Count_PWM
Figura 44. Señales de General_PWM
Figura 45. Brazo robótico
Figura 46. Joystick conectado al FPGA
Figura 47. Muestra de pantalla VGA
Figura 48. Nexys 2 con FPGA programado
Figura 49. Nexys 2 conectado al Joystick y fuente de poder
Figura 50. Sistema completo funcionando
Índice de tablas
Tabla 1. Principales características de la tarjeta de desarrollo Nexys
Tabla 2. Combinaciones de colores
Tabla 3. Márgenes de operación de los servomotores
Tabla 4. Parámetros D H para el robot
Tabla 5. Conexiones físicas al FPGA
Tabla 6. Arreglos de puertos
Agradecimientos
Agradezco a mis padres que gracias a ellos he podido realizar mis estudios y llegar hasta donde estoy, a mi abuela que siempre me llena de calidez, a mis hermanos por su eterno apoyo incondicional. A familiares y amigos por sus motivaciones.
Agradezco a mi asesor Ing. Ismael Urbina por su guía y su siempre disponibilidad en el desarrollo de la presente tesis. También al Ing. Ricardo Valdivia por compartirme su tiempo y conocimiento.
Al grupo de Optomecatrónica por permitirme ser parte de su equipo y especialmente quiero agradecer al Instituto Tecnológico Superior de Guanajuato que gracias a los años en los que estudie en sus aulas, me dotaron con los conocimientos y sobre todo con los valores que ahora me conforman.
Resumen
El presente trabajo de tesis consiste en diseñar un brazo robótico de 4 grados de libertad (GDL), utilizando servomotores como actuadores, y como elemento terminal cuenta con un gripper que tiene la función de manipular objetos. El robot tiene como objetivo ser fácil de operar por el usuario utilizando un Joystick frecuentemente usado por consolas de videojuegos.
El prototipo es fabricado en acrílico, así como la programación se realiza en lenguaje de descripción de hardware VHDL, implementado en una tarjeta Nexys-2 que cuenta con una FPGA Xilinx Spartan-3E que consta de 500 000 compuertas lógicas. Tiene una interfaz VGA de resolución 640 x 480 pixeles en la cual se visualizaran instrucciones e indicaciones del proceso de operación, así como el control de mando “Joystick” que será el instrumento en el cual el usuario podrá ingresar de forma manual las instrucciones al robot.
El funcionamiento básico consiste en que el usuario pueda asignarle hasta 31 puntos de posición al robot, estas serán guardadas en una memoria RAM tipo FIFO (lo primero que entra es lo primero que sale) contenida en el FPGA. Cuando el usuario ya haya ingresado los puntos de posición necesarios, los datos serán leídos de la memoria RAM y enviados a los servomotores de forma sincronizada. La secuencia de movimiento podrá ejecutarse solo una vez o de manera cíclica.
La tarea principal del robot es llevar un objeto de un punto a otro, esto de manera manual o completamente automática y reprogramable. A excepción del momento en que se programa el FPGA, el robot es totalmente independiente de una PC.
Capítulo 1 Introducción
Conforme pasa el tiempo, se ve en aumento la exigencia por nuevos y mejores procesos en diferentes tipos de industria, pues siempre se busca la mejora en tiempos, potencia y calidad. En ocasiones existe la necesidad de reemplazar al hombre por brazos robóticos, pues se eliminan cuestiones como el error humano, fatiga e incluso poder llegar a donde el hombre no llegaría, ya sea en ambientes radioactivos, altas temperatura, etc. El uso de brazos robóticos no se limitan solamente a la industria, también se utilizan como asistentes de cirugías, exploración espacial, desactivación de explosivos, etc.
En esta tesis se presenta un brazo robótico con un sistema de control totalmente programado en hardware, pues aprovechando las ventajas del diseño en VHDL aplicado al FPGA, se crea tecnología con derechos de propiedad intelectual.
Como ya se mencionó anteriormente el prototipo del robot es fabricado en acrílico usando servomotores como actuadores y a excepción del momento en que se programa el FPGA, el robot es totalmente independiente de una PC, aunque si puede ser conectado a una pantalla de computadora, pues los monitores y las más nuevas pantallas de plasma, LCD o Led cuentan con una entrada con el protocolo VGA para el muestreo de imágenes o videos. El diseño también cuenta con una fuente de poder que alimenta al robot y al FPGA y los controladores de la interfaz VGA y del Joystick son diseñados desde cero.
1.1 Estado del arte
Otro propósito del robot es que sea fácil de usar, pues como dispositivo de control cuenta con un joystick comúnmente usado en las consolas de videojuegos y como es bien sabido, la mayoría de las personas ha usado por lo menos en algún momento de su vida este tipo de consolas, haciendo así más familiar el uso del robot y la pantalla muestra instrucciones muy fáciles de comprender.
El robot cuenta con dos modos principales de operar: el modo manual permite mover el robot con las palancas del Joystick, teniendo la opción de moverlo a diferentes velocidades, pudiendo programar hasta 31 puntos de posición. En el modo automático, el robot ejecuta la secuencia asignada en el modo manual, es importante aclarar que el robot se moverá de un punto a otro sin importar la trayectoria que tome. También se cuenta con la opción de cambiar el color del fondo de pantalla así como el de las letras desde 6 switchs deslizables en la tarjeta Nexys-2.
1.1 Estado del arte
El concepto de robot industrial (brazo robótico) en sí mismo no es nuevo. Los estudios acerca del control del robot industrial son extensos, todos estos con tecnologías típicas como lo son PLC’s o PIC’s. Sin embargo con el frecuente desarrollo de nuevas tecnologías, se amplían las opciones para el uso de dispositivos de control. Los dispositivos FPGAs ofrecen más velocidad de procesamiento así como el uso del paralelismo de hardware, el uso de estas tecnologías se ha ido extendiendo en muchos campos de estudio y aplicaciones desarrolladas por institutos de investigación, identidades educativas e industria. A continuación se muestran algunos desarrollos en brazos robóticos usando FPGAs como dispositivos de control.
Malagón Soldara (2011) presenta una tesis que contempla la interacción entre una FPGA Cyclone II y un DSP eZdsp TMS320F2812 por medio de la interfaz McBSP como una tarjeta de control para un robot PUMA (Programmable Universal Machine for Assembly). Utilizando como actuadores motores DC con encoders. Dentro de la FPGA se programa un algoritmo adaptativo para medir la velocidad en los encoders, mientras que en el DSP se desarrolla un control PID (Proportional Intergral Derivative) con un diseño obtenido del PMSM 3.1 Control Motor System de Texas Instruments.
Basanta (2008) publica un artículo de un brazo mecánico con 2 GDL usando una tarjeta de desarrollo Digilent 2SB-DIO4 con una FPGA Xilinx XC2S200E, acelerómetros Analog Divices ADXL202E y servomotores como actuadores, el robot se mueve de un punto a otro sin importar la trayectoria que tome.
Laskshmi Pravalika (2013) presenta un brazo robótico de 6 GDL usando como dispositivo de control una FPGA Spartan 3 de Xilinx y servomotores como actuadores. También una interfaz gráfica usando VB.NET. El usuario puede mover manualmente el robot mediante la interfaz gráfica en una PC, también cuenta con un modo automático el cual el robot puede ser programado para que el robot ejecute una secuencia.
Capítulo 2 Fundamento teórico
2.1 Robot
2.1.1 Definición de robot industrial
Existen ciertas dificultades a la hora de establecer una definición formal de lo que es un robot industrial. La primera de ellas surge de la diferencia conceptual entre el mercado japonés y el euro-americano de lo que es un robot y lo que es un manipulador. Así, mientras que para los japoneses un robot industrial es cualquier dispositivo mecánico dotado de articulaciones móviles destinado a la manipulación, el mercado occidental es más restrictivo, exigiendo una mayor complejidad, sobre todo en lo relativo al control.
En segundo lugar, y centrándose ya en el concepto occidental. Aunque existe una idea común acerca de lo que es un robot industrial, no es fácil ponerse de acuerdo a la hora de establecer una definición formal. Además, la evolución de la robótica ha ido obligando a diferentes actualizaciones de su definición.
La definición más comúnmente aceptada posiblemente sea la de la Asociación de Industrias Robóticas (RIA), según la cual:
- Un robot industrial es un manipulador multifuncional reprogramable, capaz de mover materias, piezas, herramientas o dispositivos especiales, según trayectorias variables, programadas para realizar tareas diversas.
Esta definición, ligeramente modificada, ha sido adoptada por la Organización Internacional de Est á ndares (ISO) que define al robot industrial como:
- Manipulador multifuncional reprogramable con varios grados de libertad (GDL), capaz de manipular materias, piezas, herramientas o dispositivos especiales según trayectorias variables programadas para realizar tareas diversas.
Se incluye en esta definición la necesidad de que el robot tenga varios grados de libertad. Una definición más completa es la establecida por la Asociación Francesa de Normalización (AFNOR) que define primero el manipulador y, basándose en dicha definición, el robot:
- Manipulador: mecanismo formado generalmente por elementos en serie, articulados entre sí, destinados al agarre y desplazamiento de objetos. Es multifuncional y puede ser gobernado directamente por un operador humano o mediante dispositivo lógico.
- Robot: manipulador automático servocontrolado, reprogramable, polivalente, capaz de posicionar y orientar piezas, útiles o dispositivos especiales, siguiendo trayectorias variables reprogramables, para la ejecución de tareas variadas. Normalmente tiene la forma de uno o varios brazos terminados en una muñeca. Su unidad de control incluye un dispositivo de memoria y ocasionalmente de percepción del entorno. Normalmente su eso es el de realizar una tarea de manera cíclica, pudiéndose adaptar a otra sin cambios permanentes en su materia.
Por último, la Federación Internacional de Robótica (IFR) en su informe técnico ISO/TR 83737 (septiembre 1988) distingue entre robot industrial de manipulación y otros robots:
- Por robot industrial de manipulación se entiende a una máquina de manipulación automática, reprogramable y multifuncional con tres o más ejes que pueden posicionar y orientar materias, piezas, herramientas o dispositivos especiales para la ejecución de trabajos diversos en las diferentes etapas de la producción industrial, ya sea en una posición fija o en movimiento. (Barrientos, Peñín, Balaguer, & Aracil, 1997)
2.1.2 Morfología del robot
Un robot está formado por los siguientes elementos: estructura mecánica, transmisiones, sistema de accionamiento, sistema sensorial, sistema de control y elementos terminales.
En este caso solo se enfoca en la estructura mecánica y el sistema de control. Como elemento terminal cuenta con un gripper. En el caso de las transmisiones, estas van incluidas en los servomotores que tienen la función de actuadores (sistema de accionamiento) y se profundizara en ellos en otro capítulo.
Mecánicamente, un robot está formado por una serie de elementos o eslabones unidos mediante articulaciones que permiten un movimiento relativo entre cada dos eslabones consecutivos. La constitución física de la mayor parte de los robots industriales guarda cierta similitud con la anatomía del brazo humano, por lo que enocasiones, para hacer referencia a los distintos elementos que componen el robot, se usan términos como cuerpo, brazo, codo y muñeca.
El movimiento de cada articulación puede ser de desplazamiento, de giro, o de una combinación de ambos. (Barrientos, Peñín, Balaguer, & Aracil, 1997)
2.1.2.1 Estructura Mecánica
Cada uno de los movimientos independientes que puede realizar cada articulación con respecto a la anterior, se denomina grado de libertad (GDL). El número de grados de libertad del robot viene dado por la suma de los grados de libertad de las articulaciones que lo componen. El número de GDL del robot suele coincidir con el número de articulaciones de que se compone.
El empleo de diferentes combinaciones de articulaciones en un robot, da lugar a diferentes configuraciones, con características a tener en cuenta tanto en el diseño y construcción del robot como en su aplicación. Las combinaciones más frecuentes son las representadas en la figura 1 donde se atiende únicamente a las tres primeras articulaciones del robot, que son las más importantes a la hora de posicionar su extremo en un punto del espacio.
Puesto que para posicionar y orientar un cuerpo de cualquier manera en el espacio son necesarios seis parámetros, tres para definir la posición y tres para la orientación, si se pretende que un robot posicione y oriente su extremo (y con él la pieza o herramienta manipulada) de cualquier modo en el espacio, se precisarán al menos seis GDL.
En la práctica, a pesar de ser necesarios los seis GDL comentados para tener total libertad en el posicionado y orientación del extremo del robot, muchos robots industriales cuentan con sólo cuatro o cinco GDL (en este caso cuenta con cuatro GDL), por ser estos suficientes para llevar a cabo las tareas que se les encomiendan. (Barrientos, Peñín, Balaguer, & Aracil, 1997). En la presente tesis se enfocara al Robot angular o antropomórfico.
Abbildung in dieser Leseprobe nicht enthalten
Figura 1. Principales configuraciones de robot (Barrientos, Pe ñí n, Balaguer, & Aracil, 1997)
2.1.2.1.1 Robot angular o antropomórfico (configuración angular)
Esta configuración es una estructura con tres articulaciones de rotación (3G o RRR). La posición del extremo final se especifica de forma natural en coordenadas angulares.
La estructura tiene un mejor acceso a espacios cerrados y es fácil desde el punto de vista constructivo. Es muy empleada en robots manipuladores industriales, especialmente en tareas de manipulación que tengan una cierta complejidad.
La configuración angular es la más utilizada en educación y actividades de investigación y desarrollo. En esta estructura es posible conseguir un gran volumen de trabajo. Si la longitud de sus tres enlaces es de “ L ”, suponiendo un radio de giro de 360 grados, el volumen de trabajo seria de una esfera de radio de “2L”. (Groover, Weiss, Roger, & Odrey , 1990)
2.2 Cinemática del robot
La cinemática del robot estudia el movimiento del mismo con respecto a un sistema de referencia. Así, la cinemática se interesa por la descripción analítica del movimiento espacial del robot como una función del tiempo, y en particular por las relaciones entre la posición y la orientación del extremo final del robot con los valores que toman sus coordenadas articulares.
Uno de los problemas a resolver en la cinemática del robot es la cinemática directa, la cual consiste en determinar cuál es la posición y orientación del extremo final del robot, con respecto a un sistema de coordenadas que se toma como referencia, conocidos los valores de las articulaciones y los parámetros geométricos de los elementos del robot.
Denavit y Hartenberg propusieron un método sistemático para describir y representar la geometría espacial de los elementos de una cadena cinemática, y en particular de un robot, con respecto a un sistema de referencia fijo. Este método utiliza una matriz de transformación homogénea para describir la relación espacial entre dos elementos rígidos adyacentes, reduciéndose el problema cinemático directo a encontrar una matriz de transformación homogénea 4 x 4 que relacione la localización espacial del extremo del robot con respecto al sistema de coordenadas de su base. (Barrientos, Peñín, Balaguer, & Aracil, 1997)
2.2.1 Cinemática Directa
Se utiliza fundamentalmente el álgebra vectorial y matricial para representar y describir la localización de un objeto en el espacio tridimensional con respecto a un sistema de referencia fijo. Dado que un robot se puede considerar como una cadena cinemática formada por objetos rígidos o eslabones unidos entre sí mediante articulaciones, se puede establecer un sistema de referencia fijo situado en la base del robot y describir la localización de cada uno de los eslabones con respecto a dicho sistema de referencia. De esta forma, el problema cinemático directo se reduce a encontrar una matriz homogénea de transformación T que relacione la posición y orientación del extremo del robot respecto del sistema de referencia fijo situado en la base del mismo. Esta matriz T será función de las coordenadas articulares. (Barrientos, Peñín, Balaguer, & Aracil, 1997)
2.2.1.1 Matriz de transformación homogénea
La resolución del problema cinemático directo consiste en encontrar las relaciones que permiten conocer la localización espacial del extremo del robot a partir de los valores de sus coordenadas articulares.
Así, si se han escogido coordenadas cartesianas y ángulos de Euler para representar la posición y orientación del extremo de un robot de seis grados de libertad, la solución al problema cinemático directo vendrá dada por las relaciones:
Abbildung in dieser Leseprobe nicht enthalten
La obtención de estas relaciones no es en general complicada, siendo incluso en ciertos casos (robots de pocos GDL) fácil de encontrar mediante simples consideraciones geométricas. Por ejemplo, para el caso de un robot con 2 GDL (figura 2), es fácil comprobar que:
Abbildung in dieser Leseprobe nicht enthalten
Para robots de más grados de libertad puede plantearse un método sistemático basado en la utilización de las matrices de transformación homogénea.
En general, un robot de n grados de libertad está formado por n eslabones unidos por n articulaciones, de forma que cada par articulación-eslabón constituye un grado de libertad. A cada eslabón se le puede asociar un sistema de referencia solidario a él y utilizando las transformaciones homogéneas, es posible representar las rotaciones y traslaciones relativas entre los distintos eslabones que componen el robot. Normalmente, la matriz de transformación homogénea que representa la posición y orientación relativa entre los sistemas asociados a dos eslabones consecutivos del robot se suele denominar matriz Así pues[Abbildung in dieser Leseprobe nicht enthalten], describe la posición y orientación del sistema de referencia solidario al primer eslabón con respecto al sistema de referencia solidario a la base, [Abbildung in dieser Leseprobe nicht enthalten]describe la posición y orientación del segundo & eslabón respecto del primero, etc. Del mismo modo, denominando [Abbildung in dieser Leseprobe nicht enthalten]( a las matrices resultantes del producto de las matrices [Abbildung in dieser Leseprobe nicht enthalten] con i desde 1 hasta k, se puede representar de forma total o parcial la cadena cinemática que forma el robot. Así, por ejemplo, la posición y orientación del sistema solidario con el segundo eslabón del robot con respecto al sistema de coordenadas de la base se puede expresar mediante
Abbildung in dieser Leseprobe nicht enthalten
Figura 2. Robot planar de 2 grados de libertad. (Barrientos, Pe ñí n, Balaguer, & Aracil, 1997)
Abbildung in dieser Leseprobe nicht enthalten
De manera análoga, la matriz [Abbildung in dieser Leseprobe nicht enthalten] tercer eslabón:
Abbildung in dieser Leseprobe nicht enthalten
representa la localización del sistema del
Abbildung in dieser Leseprobe nicht enthalten
Cuando se consideran todos los grados de libertad, a la matriz denominar T. Así, dado un robot de seis grados de libertad, se tiene que la posición y orientación del eslabón final vendrá dada por la matriz T:
Abbildung in dieser Leseprobe nicht enthalten
Aunque para describir la relación que existe entre dos elementos contiguos se puede hacer uso de cualquier sistema de referencia ligado a cada elemento, la forma habitual que se suele utilizar en robótica es la representación de Denavit-Hartenberg (D-H). Denavit y Hartenberg (Denavit & Hartenberg, 1955) propusieron en 1955 un método matricial que permite establecer de manera sistemática un sistema de coordenadas {." } ligado a cada eslabón i de una cadena articulada, pudiéndose determinar a continuación las ecuaciones cinemáticas de la cadena completa (Paul, 1981). (Barrientos, Peñín, Balaguer, & Aracil, 1997)
Según la representación de D-H, escogiendo adecuadamente los sistemas de coordenadas asocia- dos a cada eslabón, será posible pasar de uno al siguiente mediante 4 transformaciones básicas que dependen exclusivamente de las características geométricas del eslabón.
Estas transformaciones básicas consisten en una sucesión de rotaciones y traslaciones que permiten relacionar el sistema de referencia del elemento i con el sistema del elemento i-1. Las transformaciones en cuestión son las siguientes (es importante recordar que el paso del sistema [Abbildung in dieser Leseprobe nicht enthalten] mediante estas 4 transformaciones está garantizado sólo si los sistemas [Abbildung in dieser Leseprobe nicht enthalten] han sido definidos de acuerdo a unas normas determinadas que se expondrán posteriormente):
1. Rotación alrededor del [Abbildung in dieser Leseprobe nicht enthalten] un ángulo 0".
2. Traslación a lo largo de [Abbildung in dieser Leseprobe nicht enthalten]una distancia 1" ; vector 1" 2 2 1" .
3. Traslación a lo largo de 3" una distancia 4" ; vector 4" 2 2 4" .
4. Rotación alrededor del eje 3" un ángulo ".
Dado que el producto de matrices no es conmutativo, las transformaciones se han de realizar en el orden indicado. De este modo se tiene que:
Abbildung in dieser Leseprobe nicht enthalten
Y realizando el producto entre matrices:
Abbildung in dieser Leseprobe nicht enthalten
Donde [Abbildung in dieser Leseprobe nicht enthalten] son los parámetros D-H del eslabón i. De este modo, basta con identificar los parámetros [Abbildung in dieser Leseprobe nicht enthalten] para obtener las matrices A y relacionar así todos y cada uno los eslabones del robot.
Como se ha indicado, para que la matriz [Abbildung in dieser Leseprobe nicht enthalten] definida en (7) relacione los sistemas [Abbildung in dieser Leseprobe nicht enthalten], es necesario que los sistemas se hayan escogido de acuerdo a unas determinadas normas. Estas, junto con la definición de los 4 parámetros de Denavit Hartenberg, conforman el siguiente algoritmo para la resolución del problema cinemático directo (Barrientos, Peñín, Balaguer, & Aracil, 1997)
2.2.1.2 Algoritmo de Denavit - Hartenberg.
D-H 1 Numerar los eslabones comenzando con 1 (primer eslabón móvil de la cadena) y acabando con n (último eslabón móvil). Se numerará como eslabón 0 a la base fija del robot.
D-H 2 Numerar cada articulación comenzando por 1 (la correspondiente al primer grado de libertad) y acabando en n.
D-H 3 Localizar el eje de cada articulación. Si ésta es rotativa, el eje será su propio eje de giro. Si es prismática, será el eje a lo largo del cual se produce el desplazamiento.
D-H 4 Para i de 0 a n-1 situar el eje [Abbildung in dieser Leseprobe nicht enthalten] sobre el eje de la articulación i+1.
D-H 5 Situar el origen del sistema de la base [Abbildung in dieser Leseprobe nicht enthalten] en cualquier punto del [Abbildung in dieser Leseprobe nicht enthalten]. Los ejes 3[Abbildung in dieser Leseprobe nicht enthalten] se situarán de modo que formen un sistema dextrógiro con [Abbildung in dieser Leseprobe nicht enthalten]
D-H 6 Para i de 1 a n-1, situar el sistema [Abbildung in dieser Leseprobe nicht enthalten] (solidario al eslabón i) en la intersección del eje[Abbildung in dieser Leseprobe nicht enthalten] con la línea normal común a [Abbildung in dieser Leseprobe nicht enthalten] . Si ambos ejes se cortasen se situaría [Abbildung in dieser Leseprobe nicht enthalten] en el punto de corte. Si fuesen paralelos [Abbildung in dieser Leseprobe nicht enthalten] se situaría en la articulación i+1.
D-H 7 Situar [Abbildung in dieser Leseprobe nicht enthalten] en la línea normal común a [Abbildung in dieser Leseprobe nicht enthalten] .
D-H 8 Situar [Abbildung in dieser Leseprobe nicht enthalten] de modo que forme un sistema dextrógiro con [Abbildung in dieser Leseprobe nicht enthalten].
D-H 9 Situar el sistema [Abbildung in dieser Leseprobe nicht enthalten] en el extremo del robot de modo que [Abbildung in dieser Leseprobe nicht enthalten] coincida con la dirección de [Abbildung in dieser Leseprobe nicht enthalten] sea normal a [Abbildung in dieser Leseprobe nicht enthalten].
D-H 10 Obtener[Abbildung in dieser Leseprobe nicht enthalten] como el ángulo que hay que girar en torno [Abbildung in dieser Leseprobe nicht enthalten] para que [Abbildung in dieser Leseprobe nicht enthalten] queden paralelos.
D-H 11 Obtener [Abbildung in dieser Leseprobe nicht enthalten] como la distancia, medida a lo largo de [Abbildung in dieser Leseprobe nicht enthalten] que habría que desplazar [Abbildung in dieser Leseprobe nicht enthalten] para que [Abbildung in dieser Leseprobe nicht enthalten] quedasen alineados.
D-H 12 Obtener [Abbildung in dieser Leseprobe nicht enthalten] como la distancia medida a lo largo de [Abbildung in dieser Leseprobe nicht enthalten] (que ahora coincidiría con [Abbildung in dieser Leseprobe nicht enthalten] que habría que desplazar el nuevo [Abbildung in dieser Leseprobe nicht enthalten] para que su origen coincidiese con [Abbildung in dieser Leseprobe nicht enthalten].
D-H 13 Obtener [Abbildung in dieser Leseprobe nicht enthalten] como el ángulo que habría que girar entorno a 3" (que ahora coincidiría con [Abbildung in dieser Leseprobe nicht enthalten], para que el nuevo[Abbildung in dieser Leseprobe nicht enthalten] coincidiese totalmente con [Abbildung in dieser Leseprobe nicht enthalten]
D-H 14 Obtener las matrices de transformación [Abbildung in dieser Leseprobe nicht enthalten] definidas en (7).
D-H 15 Obtener la matriz de transformación que relaciona el sistema de la base con el del extremo del robot [Abbildung in dieser Leseprobe nicht enthalten]
D-H 16 La matriz T define la orientación (submatriz de rotación) y posición (submatriz de traslación) del extremo referido a la base en función de las n coordenadas articulares. (Barrientos, Peñín, Balaguer, & Aracil, 1997)
Abbildung in dieser Leseprobe nicht enthalten
Figura 3. Par á metros D-H para un eslabón giratorio. (Barrientos, Pe ñí n, Balaguer, & Aracil, 1997)
2.3 Control
2.3.1 PLC
Según lo define la Asociación Nacional de Fabricantes Eléctricos de los Estados Unidos un PLC - Programable Logic Controller (Controlador Lógico Programable) es un dispositivo digital electrónico con una memoria programable para el almacenamiento de instrucciones, permitiendo la implementación de funciones específicas como ser: lógicas, secuenciales, temporizadas, de conteo aritméticas; con el objeto de controlas máquinas y procesos.
También se puede definir como un equipo electrónico, el cual realiza la ejecución de un programa de forma cíclica. La ejecución del programa puede ser interrumpida momentáneamente para realizar otras tareas consideradas más prioritarias, pero el aspecto más importante es la garantía de ejecución completa del programa principal. (Moreno)
Figura 4. Estructura de un PLC
Abbildung in dieser Leseprobe nicht enthalten
2.3.2 Microprocesador
Los microprocesadores son circuitos integrados que contienen millones de transistores en su interior, los cuales crean circuito complejos encargados de realizar diferentes tareas. También se les denomina unidad de procesamiento central CPU, ya que muchos de ellos pueden actuar como el “cerebro” de un sistema computacional, administrando todas las tareas que este realice y llevando a cabo las operaciones con los datos.
Los microprocesadores esta diseñados para interpretar y ejecutar las instrucciones que nosotros indiquemos y que suelen ser operaciones simples como sumar, restar, multiplicar y dividir. Pero también existen instrucciones lógicas, como AND, OR, NOT, entre otras. (RedUSERS, 2011)
2.3.2.1 Diagrama básico de un microprocesador
En la figura 5 podemos observar el diagrama básico de un microprocesador. El elemento principal es la ALU (unidad aritmética lógica), que se encarga de llevar a cabo todas las operaciones lógicas y aritméticas que requieran los procesos que se ejecuten. También podemos ver los registros para almacenamiento temporal de los datos, el contador de programa, que contiene la dirección de memoria de la siguiente instrucción por ejecutar, un registro de instrucciones que almacena el código de la instrucción en ejecución y el bloque de control. (RedUSERS, 2011)
Abbildung in dieser Leseprobe nicht enthalten
Figura 5. Diagrama de componentes que integran un microprocesador (RedUSERS, 2011)
2.3.3 CPLD
Los PLD son dispositivos programables donde se puede llevar a cabo síntesis de un circuito, partiendo de un diseño terminar en un circuito integrado que realice la función especificada.
Cada PLD (Programmable Logic Device, dispositivo lógico programable) cuenta con varias estructuras de denominadas macro-celdas. Las macro-celdas pueden ser de diversos tipos y no se pueden cubrir todas las posibilidades en este espacio, por lo que solamente se presenta una macro celda- típica de los PLD, mostrada en la figura 6.
Como se puede notar en la figura 6, la macro-celda consta de una sección AND con fusibles (rompiendo los fusibles correspondientes, se logra la programación de la función lógica deseada), una sección OR fija y un selector (multiplexor) de salida que permite seleccionar si la salida es combinacional, secuencial, directa o invertida. Además se proporciona una retroalimentación de la señal de salida hacia adentro de la macro-celda y de las demás macro-celdas. El diagrama de bloques de un circuito PLD se muestra en la figura 7 y se puede ver que consta de varias macro-celdas.
Abbildung in dieser Leseprobe nicht enthalten
Figura 6. Macro-celda de un PLD (Romero Troncoso, 1997)
Abbildung in dieser Leseprobe nicht enthalten
Figura 7. PLD t í pico (Romero Troncoso, 1997)
La característica más importante de los circuitos PLD es la de mantener un retardo equivalente a dos niveles de compuertas más inversores, independientemente de la función sintetizada. (Romero Troncoso, 1997)
2.3.3.1 Circuitos PLD complejos
Los circuitos CPLD (Complex Programmable Logic Device) son dispositivos que integran, en una sola pastilla PLDs con interconectividad adicional. Este incremento en los recursos disponibles permite a los diseñadores el poder desarrollar sistemas más grandes y complejos, principalmente en aplicaciones de diseño de interfaces para sistemas de cómputo y microprocesadores. Un circuito CPLD típico se muestra, en diagrama de bloques, en la figura 8.
Abbildung in dieser Leseprobe nicht enthalten
Figura 8. Diagrama de bloques de un CPLD (Romero Troncoso, 1997)
El retardo en los CPLDs se mantiene igual que en los PLDs, solo que ya puede sintetizar funciones más complejas que requieran la interconexión de diferentes sistemas en un solo encapsulado. Es típico encontrar dispositivos CPLD en versiones que van de las 32 macro-celdas (aproximadamente 4 PLDs o 600 compuertas lógicas equivalentes) hasta las 4096 macro-celdas (aproximadamente 400 PLDs o 60,000 compuertas lógicas equivalentes). (Romero Troncoso, 1997)
2.3.3.2 Arreglo de compuertas programables en campo (FPGA)
Con el objeto de optimizar aún más los recursos de los bloques digitales disponibles en los dispositivos programables, una nueva familia de arreglos lógicos fue creada. Mientras que los circuitos tipo ROM son poco recomendables para la síntesis de funciones lógicas debido a su muy bajo nivel de utilización y que los circuitos PLD aún tienen grandes desperdicios de recursos, se buscó una alternativa que permitiera el uso de una mayor cantidad de componentes y una eficiencia superior. Estos circuitos son conocidos por el acrónimo FPGA (Field Programmable Gate Array, arreglo de compuertas programables en campo) y se basan en una cantidad muy grande de celdas lógicas, muy elementales, y una mucho mayor interconectividad que sus contrapartes. Mientras más pequeñas resulten las celdas, mayor aprovechamiento se puede tener de las mismas, aunque los retardos pueden aumentar.
Las celdas básicas de un FPGA son mucho más simples que las macro-celdas de un PLD, y dependiendo del proveedor de circuitos, esta será su constitución. Cada proveedor y cada familia de FPGA ofrecen una versión diferente de la celda básica y en el texto solo se presentan un ejemplo típico de las mismas. Todo FPGA tiene tres grupos de celdas básicas que son:
1. Celda lógica.
2. Celda de entrada/salida
3. Celda de distribución
La celda lógica es la que existe en mayor cantidad y son pequeños bloques lógicos de compuertas programables. Las celdas de entrada/salida están dedicadas a proporcionar la interconectividad entre el FPGA y el exterior. Finalmente, las celdas de distribución se encargan de manejar las señales de reloj hacia dentro del circuito. En la figura 9 se muestra una celda lógica típica de un FPGA y en las figura 10 y figura 11 se muestran la celda de entrada/salida y de distribución, respectivamente.
Abbildung in dieser Leseprobe nicht enthalten
Figura 9. Celda lógica t í pica en un FPGA (Romero Troncoso, 1997)
Abbildung in dieser Leseprobe nicht enthalten
Figura 10. Celda entrada/salida (Romero Troncoso, 1997)
Abbildung in dieser Leseprobe nicht enthalten
Figura 11. Celda de distribución (Romero Troncoso, 1997)
Al contrario de lo que ocurre en los PLDs, la interconectividad de un FPGA (figura 12) está restringida a celdas adyacentes exclusivamente. Con esto se permite un mucho menor consumo de potencia y por consiguiente, un mayor nivel de integración. El diagrama de bloques de la interconectividad típica de un FPGA se muestra en la figura. Cabe mencionar que este tipo de dispositivo es el que ha ganado un mayor mercado en las aplicaciones modernas de diseño digital y se pueden contar con unidades que van desde las 50,000 hasta los 10’000,000 de compuertas lógicas equivalentes. (Romero Troncoso, 1997).
Abbildung in dieser Leseprobe nicht enthalten
Figura 12. Interconectividad de un FPGA (Romero Troncoso, 1997)
Tabla 1. Principales caracter í sticas de la tarjeta de desarrollo Nexys-2
Abbildung in dieser Leseprobe nicht enthalten
2.3.3.2.1 Comparación entre FPGA y otros dispositivos
Dado la naturaleza diferente de cada dispositivo, cada uno cuenta con sus ventajas y desventajas.
Una de las principales ventajas de los FPGA´s es la posibilidad de realizar diseños de hardware libre, así como el diseño de “cores IP” (núcleos de propiedad intelectual).
A diferencia de soluciones en software, el FPGA puede ejecutar instrucciones en paralelo y realizar más operaciones por cada ciclo de reloj mejorando así la potencia y la velocidad. Su funcionalidad puede ser completamente reprogramada y el diseñador no tendrá que buscar productos que más se adapten a sus diseños, sino que se diseña a la medida y con la posibilidad de reutilizar o modificar los diseños ya existentes, soluciones en software ya cuentan con un set de instrucciones prestablecidas y se estará limitado por estas.
Comparando CPLD tradicionales con FPGA, estos últimos contienen una mayor densidad de lógica permitiendo sistemas más complejos además de consumir menor potencia eléctrica y el costo por unidad lógica es menor aunque el precio por circuito integrado sea mayor.
Aunque los FPGAs y los ASICs aprovechan el paralelismo del hardware, sus diferencias pueden ser notables. Un FPGA es reprogramable, evitando el largo proceso de fabricación por el que pasa un diseño en ASIC, disminuyendo considerablemente el tiempo y el costo de dicho diseño. Así mismo, un ASIC es más rápido y puede abarcar sistemas más complejos, sin embargo existe la posibilidad de mudar un diseño terminado en FPGA a ASIC.
Sin embargo, para aplicaciones sencillas un FPGA puede resultar excesivamente potente y por lo tanto, más costoso en comparaciones con otras opciones en el mercado. Otra de las desventajas es que las herramientas clásicas de diseño se realizan con lenguajes de descripción de hardware como VHDL y verilog, siendo estos de bajo nivel y con un mayor nivel de complejidad. Aunque ya existen herramientas de diseño de alto nivel, estas pueden consumir demasiados recursos del FPGA y crear dependencia al fabricante de dichas herramientas.
2.3.4 Memoria RAM
Una memoria de acceso aleatorio o RAM consiste en un conjunto de registros los cuales pueden accederse en forma arbitraria por el usuario y sirve para almacenar datos en forma temporal, conforme se desarrolla un proceso determinado. A estas memorias también se les conoce como volátiles porque solamente conservan la información almacenada mientras tenga suministro de energía.
La estructura general de una memoria RAM tiene la forma de un sistema de transferencia de registros con entrada común y salida común, cuenta con un control de transferencia, denominados decodificador de entrada, y un selector de salida.
2.3.5 VGA
El VGA (video graphics array) es un estándar de visualización de video introducido a finales de los 80’s por IBM y es ampliamente soportado por los hardware gráficos de PC’s y monitores.
El boceto conceptual de un monitor CRT monocromo se muestra en la figura 13. El cañón de electrones (cátodo) genera un haz de electrones enfocado, que atraviesa un tubo al vacío y finalmente llega a la pantalla fosforescente. La luz se emite en el instante en que los electrones golpean un punto de fósforo en la pantalla. La intensidad del haz de electrones y el brillo del punto se determina por el nivel de tensión de la señal de entrada externa de vídeo, etiquetado en la figura 13 como “mono”. La señal “mono” es una señal analógica cuyo nivel de tensión es entre 0 y 0,7 V.
Una bobina de deflexión vertical y una bobina de deflexión horizontal fuera del tubo producen campos magnéticos para controlar la trayectoria del haz de electrones y para determinar dónde golpean los electrones en la pantalla. En los monitores de hoy en día, las travesías del haz de electrones (es decir, tomografías) son de forma sistemática, un patrón fijo, de izquierda a derecha y de arriba abajo en la pantalla como se muestra en la figura 14.
Figura 13. Diagrama conceptual de un monitor CRT. (Pong, 2008)
Abbildung in dieser Leseprobe nicht enthalten
Figura 14. Patrón de exploración del CRT. (Pong, 2008)
Abbildung in dieser Leseprobe nicht enthalten
Los osciladores y amplificadores internos del monitor generan ondas en forma de diente de sierra para el control de las dos bobinas de deflexión. Por ejemplo, el haz de electrones se mueve desde el borde izquierdo al borde derecho como el voltaje aplicado a la bobina de deflexión horizontal aumenta gradualmente. Después de alcanzar el borde derecho, el haz retorna rápidamente a la orilla izquierda (es decir, vuelve a trazar) cuando el voltaje cambia a 0. La relación entre la onda de diente de sierra y la exploración se muestra en la figura 15. Dos señales de sincronización externas, hsync y vsync, controlan la generación de las formas de onda de diente de sierra. Estas señales son señales digitales. La relación entre la señal HSYNC y el diente de sierra horizontal también se muestra en la figura 15. Tener en cuenta que “1” y “0” de los períodos de la señal hsync corresponden a las rampas de subida y bajada de la forma de onda de diente de sierra.
Figura 15. Diagrama de tiempos de un barrido horizontal. (Pong, 2008)
Abbildung in dieser Leseprobe nicht enthalten
El funcionamiento básico de un color en CRT es similar excepto en que este tiene tres haces de electrones, que se proyectan en los puntos de fósforo rojo, verde y azul en la pantalla. Los tres puntos se combinan para formar un píxel. Podemos ajustar los niveles de tensión de las tres señales de entrada de video para obtener el color deseado de píxeles. (Pong, 2008)
Tabla 2. Combinaciones de colores. (Pong, 2008)
Combinaciones de color de los 3 bits del VGA Rojo ® Verde (G) Azul (B) Color resultante
Abbildung in dieser Leseprobe nicht enthalten
2.3.6 Joystick
Un joystick o palanca de mando son dispositivos comúnmente usados para video juegos en computadoras o consolas de videojuegos, aunque cabe mencionar que últimamente se han estado utilizando para controlar desde aviones, transbordadores espaciales, así como maquinaria de construcción pesada, grúas de carga o porta contenedores.
Consta de botones y en algunas ocasiones con palancas de varios ejes, pueden se analógicos o digitales. Los modelos más recientes pueden incluir vibradores y hasta algunos diodos led.
Los joystick se utilizaban originalmente para controlar los alerones y el plano de profundidad de una aeronave experimental. El nombre parece deberse al piloto francés Robert Esnault-Pelterie. También se les atribuye a los pilotos Robert Loraine y James Henry Joyce.
Figura 16. Joystick
Abbildung in dieser Leseprobe nicht enthalten
2.3.7 Servomotor
Existen varios tipos de servomotores como lo alimentados por corriente continua o corriente alterna. En este caso nos enfocaremos en servomotores DC utilizados frecuentemente en robótica y modelismo.
Un servomotor del tipo que se usa en la presente tesis, es un dispositivo actuador con la capacidad de posicionarse en un rango de 0° a 180° y mantenerse estable en dicha posición. Consta de un motor DC, una caja reductora y un sistema de control.
Figura 17. Circuito de control del servomotor
Abbildung in dieser Leseprobe nicht enthalten
2.3 Control
El FPGA manda la señal PWM y esta es convertida en voltaje, el ancho del pulso es proporcional al ángulo de posición del servomotor, una señal con pulsos más anchos es transformada en un voltaje más alto. Este voltaje es tomado como referencia y comparado con el voltaje del potenciómetro. Si existe una diferencia entre los dos voltajes, este error es amplificado y el motor tendrá que moverse hasta que el error sea igual a cero. El potenciómetro esta acoplado mecánicamente a la caja reductora, cuando el motor gire, el potenciómetro también lo hará.
El voltaje de alimentación varía entre los 4 y 8 volts. En este caso son alimentados con 5v, entre los 4 motores como máximo una exigencia de 2 amperes, aunque esto se presenta solo en picos de corriente.
2.3.7.1 Modulación por ancho de pulsos
La modulación por ancho de pulsos (PWM por sus siglas en inglés, pulse-width modulation) de una señal es una técnica en la que se modifica el ciclo de trabajo de una señal periódica (en este caso cuadrada).
El ciclo de trabajo de una señal periódica es el ancho de su parte positiva en relación con el periodo, representado en la siguiente ecuación:
Abbildung in dieser Leseprobe nicht enthalten
Donde:
Abbildung in dieser Leseprobe nicht enthalten
Figura 18. Se ñ al PWM
Abbildung in dieser Leseprobe nicht enthalten
Dependiendo del fabricante, cada servomotor tiene sus propios márgenes de operación. En este caso se utilizan dos marcas diferentes, 2 motores son Tower Pro mg 995 y los otros 2 son DS3115 de fabricante chino. Estos motores fueron escogidos por ser muy económicos. A continuación se muestran sus márgenes de operación:
Tabla 3. M á rgenes de operación de los servomotores.
Abbildung in dieser Leseprobe nicht enthalten
Capítulo 3 Procedimiento
3.1 Cinemática
3.1.1 Cinemática Directa
Figura 19. Asignación de ejes de referencia para el robot.
Abbildung in dieser Leseprobe nicht enthalten
Tabla 4. Par á metros D-H para el robot
Abbildung in dieser Leseprobe nicht enthalten
En la tabla 4 los parámetros 0" representan las rotaciones de los servomotores, sin embargo, en 0' se le agregan 90° para cumplir la rotación necesaria y situar el siguiente sistema de referencia, así mismo, en 0) se le restan 90° para situar el sistema de referencia en el lugar correspondiente. Al sumar un número constante a otro variable, el resultado sigue siendo un número variable, es por eso que se sigue representando como 0.
Ahora al ya haber calculado los parámetros D-H para cada eslabón se calculan las matrices A sustituyendo en las expresiones 8, 9, 10 y 11 de la siguiente manera:
Abbildung in dieser Leseprobe nicht enthalten
3.2 Control
Como ya se mencionó anteriormente, el control del robot se realiza mediante una tarjeta FPGA-Nexis-2 con el leguaje de descripción de hardware VHDL. Consta de 5 elemento principales (figura 20) en el que el elemento de entrada es el Joystick con el cual se ingresan las instrucciones y movimientos al robot, el siguiente es el control en el cual se programa el FPGA y realiza todas las funciones lógicas, este tiene dos salidas, una va a la pantalla VGA en el cual se muestran las indicaciones al usuario y la otra va hacia los servomotores del robot mediante 4 PWM. Así mismo el robot debe de estar alimentado mediante una fuente externa, aunque el FPGA podría dotarlo de energía, esta no sería suficiente, pues la corriente eléctrica que consume el robot sobre pasa la capacidad del FPGA y esta podría sufrir daños.
Figura 20. Diagrama de bloques de conexiones f í sicas.
Abbildung in dieser Leseprobe nicht enthalten
3.2.1 Joystick
Se ha optado por una conexión paralela para el funcionamiento del joystick. Las palancas funcionan con 4 potenciómetros (2 para cada palanca), mostrado en la figura 21. Cada palanca consta de 2 ejes de movimiento, pero solo se utilizan 3 (2 ejes de la primera y 1 de la segunda palanca).
Figura 21. Potenciómetros del Joystick.
Abbildung in dieser Leseprobe nicht enthalten
Los potenciómetros se han modificado para que funcionen solo como contactos eléctricos. El potenciómetro en su estado de fábrica se muestra en la parte izquierda de la figura 22, para poder adaptarlo se lijo el material resistivo en la parte central del carril del potenciómetro para que el terminal izquierdo sea independiente del terminal derecho.
Figura 22. Modificación de potenciómetros
Abbildung in dieser Leseprobe nicht enthalten
Cuando la palanca se encuentra en el centro del carril envía un 0 lógico, pues careciendo de contacto con cualquier material conductor, no transmite corriente eléctrica. Cuando se mueve a cualquiera de sus dos lados la salida es un 1 lógico.
Para cada botón se utiliza el circuito mostrado en la figura 23, la resistencia de 220 tiene el propósito de eliminar la estática que hace funcionar el circuito de manera indeseable cuando el botón se encuentra desactivado.
Figura 23. Circuito usado para cada botón.
Abbildung in dieser Leseprobe nicht enthalten
Como ya se mencionó, la conexión se ha modificado para que sea paralela, de forma que se tendrán 18 conexiones, incluyendo un led que indica cuando el robot se encuentra en modo cíclico, se numeran a continuación: 9 de botones, 6 de las palancas, 1 de led, 1 de voltaje, 1 de tierra.
En la figura 24 se muestra la función de cada botón del Joystick. Como se puede observar no se utilizan 7 botones, estos están señalados con la palabra “NULL”.
Figura 24. Esquema general del Joystick
Abbildung in dieser Leseprobe nicht enthalten
3.2.2 Funcionamiento del robot
Al encender el robot, la pantalla VGA mostrara la siguiente imagen:
Figura 25. Pantalla al Encender el robot.
El botón “RESET” es el primero que se debe oprimir al encender el robot, pues este coloca los PWMs en su posición de referencia e inicia todos los módulos de la programación del robot. Lo siguiente es oprimir el botón “INICIO DE MOTORES” pues aunque el sistema ya está funcionando, los PWMs aún no son mandados a los servomotores, ya que si se diera el caso, el robot puede dañar a alguna persona que se encontrara en el espacio de movimiento o este mismo pudiera dañarse al impactarse con un objeto cercano. La pantalla VGA mostrara la figura 26.
Figura 26. Pantalla en modo manual.
Abbildung in dieser Leseprobe nicht enthalten
Lo siguiente es colocar al robot en “modo grabar”, para esto se oprime el botón “X” en el Joystick. El led “J15” de la Nexys-2 se encenderá. Cuando el robot se encuentre en la posición que se desea grabar se oprime nuevamente “X” (la posición se grabara justo en el momento en el que se suelte el botón). La primera posición se grabara y en la pantalla aparecerá la figura 27 y el led “J15” se apagara.
Para grabar más posiciones, el robot se debe colocar en el punto deseado y oprimir “X”. El robot puede tener al menos una posición grabada o hasta 31 (la posición de descanso está grabada por default y puede ser omitida en el modo cíclico). El número de posiciones grabadas se reflejara en la pantalla entre el paréntesis de la oración “Posición grabada ()”.
Figura 27. Pantalla al tener una posición grabada.
Abbildung in dieser Leseprobe nicht enthalten
Cuando se hayan ingresado todas las posiciones deseadas, se deberá oprimir “START” y el robot comenzara inmediatamente la secuencia asignada. La secuencia la realizara en el orden en el que se hayan ingresado las posiciones a una velocidad constante. El led “J14” se encenderá. En la pantalla aparecerá la figura 28.
Cuando el robot haya terminado de realizar la secuencia asignada, este regresara a la posición de descanso y la pantalla mostrara la figura 29. Si se desea que el robot realice nuevamente la secuencia, se deberá oprimir “triangulo” u oprimir “R1” para que el robot realice la secuencia de forma repetitiva (modo secuencia cíclica). El led que se encuentra en el Joystick se encenderá y se apagara hasta que se desactive el modo “secuencia cíclica”.
Mientras el robot se encuentra ejecutando la secuencia, la oración “Oprima para ejecutar secuencia o “R1” para secuencia cíclica” no aparecerá en la pantalla.
Abbildung in dieser Leseprobe nicht enthalten
Figura 28. Pantalla al ejecutar secuencia.
Abbildung in dieser Leseprobe nicht enthalten
Figura 29. Pantalla que se mostrara cuando el robot este en reposo.
3.2.3 Diagramas de bloques
Una forma simple de explicar la programación es mediante cajas negras o diagramas de bloques, pues es más práctico mostrar las conexiones visualmente. También es importante mencionar que se utiliza una programación por jerarquías. Se entiende por diseño jerárquico al proceso de planeación en el desarrollo de un circuito mediante su distribución de bloques funcionales (Romero Troncoso, 1997).
Los elementos más usados se muestran a continuación:
Abbildung in dieser Leseprobe nicht enthalten
Las entradas se utilizan para ingresar señales a los bloques de lógica, las salidas son señales que salen de los bloques de lógica después de que estos hacen su procesamiento, las Inout realizan la función de ambos, la diferencia entre una simple conexión y una Inout es que la primera queda interna en el bloque de lógica y la segunda deja una conexión disponible para ser utilizada por bloques de lógica de mayor jerarquía. Las conexiones azules son solo de un bit, en cambio las conexiones de color café representan buses con transferencia de 2 o más bits.
3.2.3.1 Caja negra final
En la figura 30 se muestra el diagrama de bloques de más alta jerarquía, en donde se puede observar las conexiones entre el controlador de la pantalla VGA y el control de los servomotores, aquí las entradas y salidas representan las conexiones físicas en el FPGA. EL bloque General_Total realiza la función de control de los servomotores y General_VGA es el controlador de la pantalla VGA.
Figura 30. Diagrama de bloques final.
Abbildung in dieser Leseprobe nicht enthalten
En la tabla 5 se muestra un listado de las conexiones físicas al FPGA, así como su sitio y su función básica.
Abbildung in dieser Leseprobe nicht enthalten
3.2.3.2 General_VGA
Figura 31. Diagrama de bloques del controlador de la pantalla VGA.
Abbildung in dieser Leseprobe nicht enthalten
El primer bloque de lógica es VGA_SYNC, se encarga de mandar las señales de sincronización. Las señales de sincronización vsync y hsync van conectadas físicamente a la pantalla VGA, estas controlan la generación de la onda de diente de sierra para el barrido de pixeles en vertical y horizontal. La señal video_on está en alto cuando las señales de sincronización se encuentran dentro del área visible y se coloca en bajo cuando las señales entran en el área no visible.
La señal CLK_pixel es la base de tiempo que se encarga de la frecuencia de muestreo de la imagen en la pantalla VGA. El ojo humano observa un efecto de parpadeo en frecuencias menores de 50 Hz, para evitar esto, la frecuencia de muestreo de la imagen se realiza a 60 Hz. Utilizando una resolución de 640 x 480 pixeles y sumando los “Front porch”, “Back porch” y los retrasos de horizontal y vertical (ver Figura 32) da un total de 800 x 525 pixeles. Para que se pueda hacer un barrido de todos estos pixeles a la frecuencia de 60Hz, la base de tiempo debe ser de 25 MHz aproximadamente.
Pixel_x y Pixel_y son los contadores horizontal y vertical respectivamente. Los bits de Pixel_x(9:3) corresponden a una línea de caracteres (en la área visual solo se muestra 80 caracteres), Pixel_x(2:0) corresponden a los pixeles en horizontal que hay en un carácter (8 pixeles).
Para la parte vertical Pixel_y(8:4) se utilizan para las líneas de caracteres que caben dentro de la pantalla (30 para el área visual) y Pixel_y(3:0) se utilizan para los pixeles en vertical que contiene un solo carácter (16 pixeles), Pixel_y(9) no se utiliza en el área visual.
El bloque de lógica Titulo_ROM es la memoria ROM que contiene los caracteres que aparecerán en la pantalla VGA, en la cual, su salida salida_renglon(7:0) corresponde a la trama de 8 bits para seleccionar un carácter del código ASCII que se encuentran almacenados en el bloque de lógica “Font_ROM”.
Figura 32. Se ñ ales de sincronización.
Abbildung in dieser Leseprobe nicht enthalten
La salida letra(7:0) corresponde a la línea horizontal de 8 bits de un carácter (ver figura 33) y en la que se va seleccionando mediante las entradas Salida_renglon(7:0) y Pixel_y(3:0).
Figura 33. Car á cter almacenado en la memoria ROM
EL bloque de lógica “Multiplexor_TEXT” se encarga de escoger un solo bit de la trama letra(7:0) mediante la entrada Pixel_x(2:0) y hacer una pequeña corrección para que el carácter se muestra correctamente.
El bloque “TEXT_RGB” se encarga de alternar colores entre el fondo de la pantalla y las letras, además de mostrarlos solo en el área visible.
Los bloque de lógica “RIT_VGA”, “RIT_Inicio” y “RIT_START” se encargan de reescribir en la memoria ROM de “Titulo_ROM” para que aparezcan nuevos caracteres en la pantalla VGA al momento de ingresar nuevas instrucciones al robot, mientras que el bloque “Sync_VGA” se encarga de sincronizar estos últimos bloques.
Por último, cuando se oprime el botón “reset” desde el Joystick para reiniciar las instrucciones ingresadas, los caracteres reescritos en “Titulo_ROM” siguen apareciendo en la pantalla, para solucionar esto, se realiza un barrido en el área que no aparece por default borrando los caracteres reescritos. Esta es la función del bloque de lógica “RESET_VGA”.
3.2.3.3 General_Total
Figura 34. Bloque de lógica General_Total
Abbildung in dieser Leseprobe nicht enthalten
Como ya se mencionó anteriormente, la función de este bloque de lógica es la de controlar los servomotores del robot.
El bloque “General_PWM” utiliza una trama de 18 bits en binario para variar el ancho de pulso del PWM. Por simplicidad, el procesamiento antes del bloque “Conversor” se realiza con números decimales que van del 0 al 400. El bloque “Conversor” utiliza la expresión (17) y el número decimal resultante lo convierte en la trama de 18 bits en sistema binario.
Abbildung in dieser Leseprobe nicht enthalten
El bloque “General_Contador” ya tiene incluido un bloque de lógica que reduce la velocidad de los motores, pero cuando se alterna el control de estos con el bloque “General_RAM”, se tiene que agregar otro bloque de lógica que se encargue de regular la velocidad, este es el propósito de “Redu_vel” utilizando como base de tiempo a “\Timer_20ms(2)\”. Así mismo, el bloque “Multiplexor” se encarga de alternar el control entre “General_Contador” y “General_RAM” según la señal R este en alta o en baja.
3.2.3.3.1 General_Contador
Figura 35. Bloque de lógica General_Contador
Abbildung in dieser Leseprobe nicht enthalten
“Control_Counter” funciona como la interfaz del Joystick. Al activarse “PAD” el motor 1 mueve el robot hacia a la derecha desde el primer eslabón, así como “PAI” lo mueve a la izquierda. “PAB” mueve el motor 2 provocando que este levante el robot desde el segundo eslabón, de manera contraria, “PAR” lo baja. “PSR” y “PSB” trabajan de manera similar, subiendo y bajando el robot respectivamente pero estos desde el tercer eslabón.
“Timer_31” funciona como base de tiempo y es utilizado para regular la velocidad de los servomotores junto con 4 contadores (uno para cada motor) que se encuentran dentro de “Control_Counter”.
El bloque de lógica “Veloc” es el encargado de seleccionar la velocidad de movimiento de los servomotores en el modo manual, por default la velocidad se encuentra en lento, al oprimir el botón “velocidad” en el joystick una vez se cambia a velocidad media y al oprimir nuevamente se alterna a velocidad rápida, cuando se oprime nuevamente se regresa a velocidad lenta y así sucesivamente.
Sin embargo en cualquier sistema mecánico (como lo es el botón del joystick) se puede presentar el fenómeno de rebotes, pues al cambiar de estado de “encendido” a “apagado” es físicamente imposible que el cambio se realice de forma ideal, sino que presenta una serie de rebotes y se encuentra oscilando entre los dos estados posibles por un pequeño transcurso de tiempo (figura 36).
Abbildung in dieser Leseprobe nicht enthalten
Figura 36. Rebotes en un interruptor al cambio de estado. (Romero Troncoso, 1997)
Para solucionar esto, el bloque de lógica “Retardo_V” corta la parte de los rebotes por un periodo de 10ms y espera que la señal se vuelva estable (ver simulación en la figura 37).
Abbildung in dieser Leseprobe nicht enthalten
Figura 37. Simulación de “ Retardo_V ”
3.2.3.3.2 General_RAM
Abbildung in dieser Leseprobe nicht enthalten
Figura 38. Bloque de lógica General_RAM
Una memoria de acceso aleatorio o RAM tiene como propósito almacenar datos de forma temporal, en la figura 39 se muestra su estructura básica, DE representa el flujo de datos de entrada y tiene un ancho de m bits, AE el control de la dirección de entrada con un ancho de n bits, AS el control de la dirección de salida, DS el flujo de datos de salida y WE es la señal de reloj que controla las transferencias de entrada. AE y AS corresponden a V ´ s y B ´ s respetivamente.
Los datos que guarda esta memoria son los puntos de posición del robot asignados por el usuario. Para guardar estos datos, se toma un muestreo de las señales FR ´ s vienen del bloque “General_Control”, las cuales contienen las posiciones de los servomotores. Cuando “General_RAM” toma el control del robot, las señales de posicionamiento son enviadas por FRB ´ s.
Figura 39. Estructura general de registros de una memoria RAM (Romero Troncoso, 1997)
Abbildung in dieser Leseprobe nicht enthalten
. El número total de registros que contiene la memoria RAM viene dado por expresión (18):
Abbildung in dieser Leseprobe nicht enthalten
Ya sea que el robot se encuentre estático o en movimiento, los 4 motores funcionan al mismo tiempo, de esta manera se tienen que controlar 4 motores en paralelo. Con el propósito de utilizar una sola memoria RAM, se dividen sus registros en 4 bloques (figura 40). Para poder guardar 32 puntos de posición del robot se reservan 32 registros para cada motor (recordar que 31 posiciones son asignadas por el usuario y una más es utilizada para la posición de descanso y esta está asignada por default), en total se utilizan 128 registros (k=128 y n=7).
Figura 40. Bloques de memoria.
Abbildung in dieser Leseprobe nicht enthalten
Por ser una memoria tipo FIFO (lo primero que entra es lo primero que sale) solo se necesita una señal de dirección de entrada y otra de dirección de salida para controlar los 4 bloques de registros y así obtener 4 puertos de salida, dichas señales se dividen en 4, y a cada parte se le suman 32 posiciones de registros respecto al bloque anterior (ver tabla 6).
Tabla 6. Arreglos de puertos.
Abbildung in dieser Leseprobe nicht enthalten
“ContadorVRAM” controla la dirección de escritura, donde las señales V ’ s son las direcciones, M guarda los puntos de posición así como P marca el final del registro de posiciones, R se coloca en alto cuando ya se han ingresado todas las posiciones necesarias. Cuando se oprime por primera vez M, LED_Listo también se coloca en alto (enciende un led la Nexys-2) y el robot se coloca en “modo grabar” indicando que se está listo para ingresar las posiciones. Por último la señal M1 manda una señal al bloque del VGA para que las oraciones “Posición grabada (1)...” y “Oprima "X" para guardar la siguiente posición o "START" para ejecutar secuencia” aparezcan en la pantalla”.
“Timer_750_ms” tiene la función de base de tiempo para “Temp_Ram”, la señal R sirve para indicar el momento en el que comienza su funcionamiento. “Temp_Ram” controla las direcciones de lectura (B ´ s), estas deben de mandarse en el momento indicado, pues cuando el bloque “General_RAM” toma el control y manda la trama de direcciones al bloque “General_PWM”, estas se mandan directamente según el valor de las señales B ´ s, las cuales deben tener un tiempo de espera entre ellas, pues cuando se mueven los servomotores, estos no llegan inmediatamente a la siguiente posición, el tiempo de espera es el que marca “Timer_750_ms” que debe ser suficiente para cambiar de una posición a otra.
“Retardo_H” y “Retardo_M” tienen la misma función que “Retardo _V” (evitar el efecto rebote).
3.2.3.3.3 General_PWM
Figura 41. Bloque de lógica General_PWM
Abbildung in dieser Leseprobe nicht enthalten
Como ya se mencionó antes, la posición de los servomotores se controla mediante modulación por ancho de pulsos (PWM por sus siglas en ingles). Un FPGA no contiene librerías predeterminadas para este propósito como lo es en otros dispositivos. Para esto se tiene que crear el PWM desde lo más básico, este es el propósito del bloque “General_PWM”.
“FSM_PWM” es una maquina de estados que genera la señal de pulsos (figura 42). Para iniciar el planteamiento del grafo se establece un estado de arranque, el cual matiene la salida inactiva. Cuando se oprime el boton “ini” se pasa al siguiente estado, este esperará a que la base de tiempo “Timer_20ms” de una señal en alto para pasar al siguiente estado, de la magnitud de este periodo de tiempo se obtendra el periodo de trabajo del PWM.
Hasta este punto OPC1 siempre ha tenido el valor de 00, cuando en el estado S2 cambia su valor a “01”, es cuando “Count_PWM” comienza su funcion, principalmente se trata de un contador descendente, es decir, restara un número en una unidad en cada pulso de reloj y cuando llegue a cero mandara un pulso en alto. El número que restara viene contenido en la señal RPG. El tiempo en que tarde en llegar a cero, cera el tiempo del ancho del pulso.
Figura 42. M á quina de estados del PWM
Abbildung in dieser Leseprobe nicht enthalten
Figura 44. Se ñ ales de General_PWM
Abbildung in dieser Leseprobe nicht enthalten
Figura 43. Count_PWM
Abbildung in dieser Leseprobe nicht enthalten
Capítulo 4
Pruebas y resultados
Las primeras pruebas se realizaron en el momento de desarrollo de cada componente.
Lo primero en probarse fueron los servomotores, uno de los principales problemas es que necesitan de una fuente que soporta picos de corriente de aproximadamente 2 amperes. El amperaje varía según la posición del robot y es necesario que el voltaje se mantenga estable aun con las variaciones de corriente pues de lo contrario los servomotores se mueven de manera indeseada.
Figura 45. Brazo robótico.
Abbildung in dieser Leseprobe nicht enthalten
Lo segundo fue la memoria RAM, la cual guarda los datos correctamente pero fue necesario medir el máximo tiempo que podría tomar cada uno de los servomotores en moverse de un extremo a otro y este tiempo seria el intervalo entre la lectura de una posición guardada a otra.
Lo siguiente fue el Joystick, al principio este era objeto de interferencias pero como ya se mencionó antes, esto se solucionó aplicándole una resistencia a tierra.
Figura 46. Joystick conectado al FPGA.
Abbildung in dieser Leseprobe nicht enthalten
A continuación se probó el controlador VGA, en las primeras pruebas los caracteres seguían apareciendo cuando se oprimía el botón de reset, y como ya se menciono fue necesario agregar un barrido de limpieza.
Figura 47. Muestra de pantalla VGA
Abbildung in dieser Leseprobe nicht enthalten
Al finalizar se probó el sistema completo, al robot se le asigno varias rutinas de hasta 31 puntos de posición (recordar que se reserva un punto para la posición de descanso). En el DVD anexado a esta tesis, se muestra un video con el sistema funcionando.
Figura 48. Nexys-2 con FPGA programado.
Abbildung in dieser Leseprobe nicht enthalten
Figura 49. Nexys-2 conectado al Joystick y fuente de poder
Abbildung in dieser Leseprobe nicht enthalten
Figura 50. Sistema completo funcionando.
Abbildung in dieser Leseprobe nicht enthalten
4.1 Análisis de costos
Los costos están expresados en dólares americanos. La base del prototipo del robot fue hecha con madera MDF y donde se le agrego un balero con el que gira fácilmente el robot.
Abbildung in dieser Leseprobe nicht enthalten
Capítulo 5 Conclusiones y recomendaciones
5.1 Conclusiones
Un FPGA de bajo costo es totalmente capaz de ejecutar con eficiencia el control de un robot como el expuesto en la presente tesis sin la necesidad de una PC o algún otro dispositivo de control auxiliar. El control de los servomotores cumple con las expectativas al realizar correctamente su trabajo, pues las secuencias ingresadas tienen alta repetitividad. El controlador de la pantalla VGA cumple con las exigencias, aunque es importante mencionar que en los elementos que lo requieran, tienen que estar debidamente sincronizados para evitar errores en lo que se muestra en la pantalla.
5.2 Recomendaciones
El robot necesita una fuente con capacidad de entregar el amperaje necesario y que mientras la exigencia de corriente sea variable, el voltaje debe ser estable. También es necesario el cuidar el cableado de los servomotores de interferencias externas así como el ingreso de señales externas.
Bibliografía
Barrientos, A., Peñín, L. F., Balaguer, C., & Aracil, R. (1997). FUNDAMENTOS DE ROB Ó TICA. Madrid España: McGraw-Hill.
Basanta, I. (2008). APLICACI Ó N DE UNA FPGA EN EL SISTEMA DE CONTROL DE UN BRAZO MEC Á NICO. Universidad Nacional Experimental Plitécnica "Antonio Jose de Sucre".
Denavit, J., & Hartenberg, R. (1955). A Kinematic Notation for Lower-Pair Mechanisms Based on Matrices. Journal of Applied Mechanics.
Groover, M., Weiss, M., Roger, Á., & Odrey , N. (1990). Robótica Industrial: Tecnolog í a, programación y aplicaciones. España: McGraw-Hill.
Laskshmi Pravalika, S. (2013). FPGA Based Robotic Arm With Six Degrees of Freedom. International Journal of Innovations in Engineering and Technology (IJIET).
Malagón Soldara, S. M. (2011). SISTEME EMBEBIDO DE CONTROL DE MOVIMIENTO PARA ROBOT POLIARTICULADO (Tesis de maestria). Universidad Autonoma de Querétaro.
Moreno, M. (s.f.). Curso: Controlador Lógico Programable (PLC). Buenos Aires, Argentina: Automación Micromecánica s.a.i.c.
Paul, R. (1981). Robot Manipulators: Mathematics, Programming and Control. Massachusetts: The MIT Press.
Pong, C. (2008). FPGA Prototyping by VHDL Examples: Xilinx Spartan-3 Version. New Jersey: Wiley-Interscience.
RedUSERS. (2011). Microcontroladores: Funcionamiento, programación y aplicaciones pr á cticas. Buenos Aires, Argentina: Fox Andina, Dalaga.
Romero Troncoso, R. d. (1997). Electrónica Digital y Lógica Programable. Mexico: Universidad de Guanajuato.
-
-
-
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X.