13. CONTROL DE SERVOS FUNCIONAMIENTO DE UN SERVOMOTOR El espaciado de los pulsos no debe exceder los 20ms, de lo contrario el servo pierde fuerza y velocidad El servo tiene un rango de acción de 180º
14. ¿Cómo controlar 18 servos independientes simultáneamente? 1) Cantidad de I/O en el microcontrolador ATmega128: 53 I/O 2) Función PWM del microcontrolador Permite gestionar el control “por hardware” sin consumir tiempo del programa… Pero, sólo está disponible en 6 salidas. 3) PWM “simulado” por software 4) un “timer” que genera interrupciones periódicamente, por ejemplo cada 20ms. Complica enormemente la programación, si pretendemos usar el mismo procesador para cumplir simultáneamente otras tareas… A menos que implementemos: Pero… si cada servo necesita un pulso de hasta 2,5 ms, en un período de 20ms apenas podríamos controlar 8 de ellos, y no nos quedaría tiempo para el resto de las tareas!!! ¿SOLUCIÓN?
15. 5) Tenemos que generar varias señales al mismo tiempo. ¿Cómo? 6) La clave es no usar “delays” sino generar las señales con los propios tiempos de procesamiento del programa. Ejemplo: ponemos varios pines a “1” y en un “loop” los vamos apagando según el ángulo de cada servo. 7) Limitación: mayor cantidad de servos simultáneos mayor tiempo total del “loop” menor resolución de cada servo todos los pines a “1” x > ang1 servo1 “0” x > ang2 servo2 “0” x > angN servoN “0” x ++ LOOP tiempo total del loop, TL(ms) = resolución de los servos
18. CINEMATICA INVERSA (introducción) Hasta ahora hemos manejado los servos en forma directa, indicándoles el ángulo en que deben posicionarse. Agrupando los servos en “patas”, controlando simultáneamente subgrupos de estas patas y usando simetrías simples, pudimos realizar movimientos relativamente complejos, como la caminata.. Sin embargo, este sistema se muestra limitado para implementar otro tipo de movimientos, en los que precisamos controlar la posición de cada pata en coordenadas cartesianas (en cm) y no “a ciegas”, basados en los ángulos. Esto nos permitirá, por ejemplo, realizar movimientos “con el tronco”, cambios de “postura”, y cualquier tipo de movimientos en los que haya que variar controladamente una coordenada sin afectar a las otras.
19. CINEMATICA INVERSA (problema) El problema consiste en hallar los 3 ángulos de los servos de una pata, en función de las coordenadas x, y, z (en cm) de la punta de la misma. 2 de los servos actúan en un plano “vertical” y el otro en un plano “horizontal” a b x’ z c a = “muslo” = 4,63 cm b = “pierna” = 7,35 cm y son los ángulos buscados servo 3 servo 2 servo 1 y x’ 4 cm 4 cm x 4 cm = distancia entre el servo 1 y el eje del servo 2 eje del servo 2 x’ es la proyección del dibujo de la izquierda en el plano horizontal es el ángulo buscado
20.
21. DISPLAY directo a un puerto paralelo de la Wiring 3 bits de control para seleccionar la columna funciones básicas del display 7445 Lee un carácter de la EEPROM y lo carga en el buffer loadChr Apaga todos los pixels de uno de los 4 cuadrantes en que se divide la pantalla borraCuadrante Apaga todos los pixels de una zona rectangular de la pantalla borraZona Dibuja un cuadrado cuadrado Dibuja una línea horizontal linea_h Dibuja una línea vertical linea_v Superpone el contenido del buffer en la pantalla, usando la funcion booleana “OR” merge Sustituye el contenido actual de la pantalla por el del buffer writeScreen Copia todo el contenido de la pantalla a un “buffer” readScreen Invierte el estado de un pixel togglePixel Lee el estado de un pixel readPixel Enciende un pixel writePixel Apaga todos los pixels de la pantalla cls comentario función
22. Encoder óptico El encoder óptico consiste en un emisor IR, una rueda perforada y dos fototransistores colocados de tal manera que generen sendas ondas cuadradas, desfasadas 90º (en “cuadratura”). en un sentido… en el otro sentido… señales generadas por el encoder siendo [n-1] y [n] dos lecturas consecutivas del encoder, hacemos un XOR “cruzado” de la siguiente manera: (FT1[n-1] xor FT2[n]) + 2*(FT2[n-1] xor FT1[n]) DECODIFICACION 1 – movimiento en un sentido 2 – movimiento en el otro sentido 3, 0 – no hay movimiento el resultado que obtenemos es siempre 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 FT2 FT1