Si nos cruzamos con algún proyecto en Hackaday o en el portal de Instructables, lo más probable es que uno de los componentes utilizados sea un servomotor. La gran ventaja que tienen los servomotores sobre los motores clásicos es que pueden adoptar una posición específica y conservarla, lo que (usualmente) se traduce en un alto nivel de precisión. Ahora, la pregunta es: ¿Cómo logran eso?
El funcionamiento de los servomotores
Existe un amplio número de servomotores en el mercado, y algunos modelos son tan avanzados que se vuelven prohibitivos, pero los diseños comunes son más que suficiente para estudiar al mecanismo básico, compuesto por un circuito electrónico, un motor de corriente continua, una caja de engranajes que «enlaza» al motor con un «eje de salida», y un potenciómetro en la parte inferior del eje, que al mismo tiempo se conecta al circuito.
El trabajo del potenciómetro es retroalimentar la posición del eje, mientras que los engranajes se encargan de reducir la cantidad de revoluciones (60 RPM es un valor típico) y aumentar el torque (sé que a la RAE no le gusta mucho, pero pido que me acompañen).
Un servomotor convencional puede rotar hasta 180 grados, pero esa no es una limitación que afecte a sus aplicaciones más populares, como los sistemas de dirección en aeromodelismo, y pequeños robots. El servomotor es controlado a través de una señal modulada por ancho de pulso o PWM.
La mayoría de los modelos utilizan señales con una frecuencia de 50 Hz, limitando el tiempo entre un pulso y otro a 20 milisegundos. La duración misma del pulso es la que determina la posición angular del servo, con intervalos extremadamente cortos.
Los números finales pueden variar entre un modelo y otro, pero en general se habla de 1 milisegundo (o 0.5) para un ángulo de 0 grados, 1.5 milisegundos para 90 grados, y 2 milisegundos (o 2.5) para 180 grados.
El circuito de control compara el voltaje del potenciómetro con el voltaje de la señal, y de ser necesario, activa un puente H integrado para modificar la dirección de rotación, hasta que la diferencia entre ambas señales sea cero. La segunda parte del vídeo que nos acompaña se concentra en el control de servomotores con la ayuda de un módulo Arduino, y cuáles son las restricciones principales, comenzando por una fuente de alimentación externa (el Arduino no tiene el poder de fuego suficiente para servir al servomotor en el ejemplo). El resto se reduce a cargar el código (disponible en la fuente más abajo) especificando el pin de control que irá conectado al servo.
Me quedan dudas. Cada vez que se aplica un pulso, digamos, de 1.5 ms ¿se va a los 90º o se mueve 90º desde la posición en que se encuentre? Nunca me llevé bien con los servos.
Generalmente uso motores de continua (basicamente servos modificados o motores con cajas reductoras) y puentes H y los giro con pulsos cortos hasta la posición que quiera. Lo malo de hacerlo así es que es dificil de limitar el giro en, por ejemplo 240º, y que no se pase para un lado u otro, o encontrar de nuevo una posición definida, algo que si se lograría con servos. Lo bueno es que se puede controlar el giro con mucha prescisión.