Servo motores
Primer paso para construir un robot
Como lo prometido es deuda, voy a tocar el tema de los servo motores, dedique todas mis vacaciones escolares a investigar y desarrollar un control de servo motores asistido por computadora. Este proyecto está programado en lenguaje ensamblador, para el núcleo de AVR de la marca ATMEL, y una aplicación de Windows.
Antes de entrar al control tenemos que ver un poco de servo motores, este tipo de motor sirve para tener control de pociones precisas (claro todo depende de la marca y modelo), a través de una interface de un solo alambre, además de sus respectivos alambres de alimentación.
Todos los motores miden las posiciones por ángulos, la posición neutro se le asigna el valor de 0⁰, si movemos el motor hacia la derecha son ángulos positivos y si lo movemos hacia la izquierda son ángulos negativos, los servo motores más comerciales solo tienen movimiento en 180 grados, esto significa que tenemos ángulos dese -90 hasta +90.
La terminal de señal (por lo general un alambre blanco o amarillo) se utiliza para mandar el valor del ángulo deseado. Pero cómo? Los servos motores utilizan, como método de comunicación, un protocolo llamado PCM. PCM es una adaptación de lo que conocemos PWM, pero se utiliza para mandar señales digitales (a diferencia de PWM que representa valores analógicos). El servo motor internamente contiene un convertidor de frecuencia a voltaje, este voltaje es el que se utiliza para obtener el valor de la posición, que después se pasa a un control analógico de posición que, con ayuda de un potenciómetro, ubica el motor en el ángulo deseado.
Entonces variando el valor del ancho de pulsos podemos variar el valor del ángulo. Pero a cuánto y en qué proporción? Para este tipo de servo motor el tiempo T es de 200 ms, si alguna vez han trabajado con PWM se darán cuenta que: es mucho tiempo (hablando en cuestión de micro controladores, jajá no soy flash) con un cristal decente, de 8Mhz sería una eternidad esperar a que se cumpla el tiempo, por eso utilizar subrutinas de retardo sería muy mala idea, por lo tanto he decido hacerlo por interrupciones.
Cómo?
Primero se configura un timer a un cierto tiempo de tal forma que se aproxime a un fracción de segundo, que sea de fácil manejo, también ese valor de tiempo se tiene que seleccionar con cuidado. Porque? Porque esa unida de tiempo también nos dará la resolución de pociones que va a manejar nuestro servomotor, entre más veces quepa este número en un ms, mas pociones manejamos.
A pesar de que el tiempo T es de 200ms, el ángulo de -90 es representado por 1 ms y el ángulo de +90 está representado por 2 ms, esto significa que cualquier otra posición está representada por cualquier valor que nuestro control pueda adoptar dentro de este rango. Por ejemplo el ángulo de 0 grados, está representado por el valor de 1.5 ms (esto significa que nuestro control va estar en valor lógico 1 por 1.5 ms y los otros 198.5 ms se encontrara en valor lógico 0). Otro ejemplo si queremos un ángulo de +90 grados nuestro control dura 2 ms en valor lógico 1 y los otros 198ms está en valor lógico 0.
Otra ventaja de usar un micro es la comunicación por puerto rs232, como todo el control va estar por interrupciones, no perdemos tiempo en la recepción. La ventaja de las interrupciones es que: tienes un mejor control de tiempo.
Lo único que nos falta es mandar un dato que represente un tiempo determinado, para eso desarrolle una aplicación de Windows que hace esta función.
Ya sin más que decir les dejo un video que muestra una simulación.
si a alguien le interesa los códigos y cosas por el estilo comente y los subo bueno eso es todo
gracias
No hay comentarios:
Publicar un comentario