sábado, 11 de abril de 2015

Servos - Qué son y cómo usarlos



Los servos que vamos a emplear, como ya comenté en la entrada anterior, son los TowerPro SG90, unos servos de radiocontrol (modelismo) de los más básicos y baratos del mercado. Dado que es mi primer proyecto y estoy más interesado en aprender que en desarrollar algo verdaderamente potente, estos servos se adaptan a mis necesidades si bien resultan patéticamente cortos en casi todo.

Un servomotor de radiocontrol es, básicamente, un motor de giro limitado (normalmente entre 0º y 180º, si bien los hay de rotación continua) que podemos mover indicándole la posición en grados a la que queremos que se desplace. De esta manera, se obtiene un control muy preciso de la posición de dichos motores, lo cual resulta más que adecuado para una aplicación como la de IKHEA, en la que hay que posicionar de forma muy precisa cada una de las patas.

Valores de PWM de ejemplo de control de un servomotor
El método de control es mediante modulación por ancho de pulso, o PWM en inglés (Pulse Width Modulation). La idea es que, a través de un microcontrolador (en este caso la controladora de servos) mandemos una onda a través del canal de señal del servo y en función de la duración de esta onda, el motor se moverá a una posición angular determinada.

De forma general, el servo espera recibir una señal cada 20 milisegundos (ms), y en función del tiempo que la señal esté activa, se posicionará de una manera u otra. En el gráfico que acompaña podéis ver cómo, en función del tiempo que la señal eléctrica que mandemos al servo esté activa, éste se posicionará a un ángulo determinado. Así, para una señal alta de duración 1ms de cada 20ms, el servo irá a su posición de 0º; para una señal alta de 1,5ms irá a 90º, y para una señal de 2ms irá a 180º.

Estos valores son de ejemplo, de hecho para nuestros servos, los valores oscilarán de 0,5ms (500 microsegundos) para 0º hasta 2,5ms (2500 microsegundos) para los 180º. Por lo tanto, una vez sepamos los ángulos a los que hay que posicionar cada uno de los servos, tendremos que mandar a la controladora las órdenes necesarias para que emita la onda PWM que lleve el servo a su sitio.

Vale, entonces, después de esta literatura... ¿cómo hago eso? Bien, esa es la pregunta que esperaba. A ver, resumiendo parece claro que:
  • Si quiero que el motor gire hasta 0º: señal de 500 microsegundos
  • Si quiero que el motor gire hasta 90º: señal de 1500 microsegundos
  • Si quiero que el motor gire hasta 180º: señal de 2500 microsegundos
Pero... ¿y si quiero que gire a 100º?¿o a 63º? Vale, aquí entra en juego la interpolación lineal, que seguro que todos recordáis de cuando eramos jóvenes. Os voy a ahorrar la parte de explicación técnica, podéis encontrarla en el enlace que os he puesto o buscarla en vuestros libros de matemáticas; aquí voy al grano directamente.

Suponiendo por tanto  que el comportamiento del servo es lineal (que no sé yo...pero eso es otro tema), sabiendo que vamos de 500 microsegundos a 2500microsegundos con una resolución de 0º a 180º, podemos linealizarlo con la fórmula:


Así, sabemos que Y0=500microsegundos, X0=0º, X1=180º, Y1=2500microsegundos. Y tenemos que Yp es la duración en ms del pulso que debemos mandar y Xp el ángulo buscado. Por lo tanto, sin más que sustituir, nos queda la ecuación de la siguiente forma:

Así que sabiendo el ángulo que queremos conseguir en el servo y sustituyendo, tendremos el valor del pulso PWM en ms que debemos mandar. Retomando las preguntas de antes, tenemos:
  • Ángulo 100º ----- Xp=100º---- obtenemos Yp=1611,11microsegundos  
  •  Ángulo 63º ----- Xp=63º ---- obtenemos Yp=1200microsegundos

De esta forma, vemos cómo obtener los valores de PWM, que es lo que puede "leer" la placa de control de los servos, a partir de los ángulos que es lo que nosotros realmente queremos manejar a través de nuestro algoritmo de cinemática inversa.

Cinemática inversa. IK en inglés. Mola, ¿eh? Bueno, empezaremos a verlo en la siguiente entrada. Sin prisas, y a ver si consigo explicarlo en condiciones, que es un poco lioso...

Nos leeemos, un placer como siempre.


No hay comentarios:

Publicar un comentario