control continuo de la posición del servo

Con un servo de rotación continua puedo controlar la dirección y la velocidad del servo, pero también necesito controlar la posición. Sé que no es posible directamente debido a la falta de control de retroalimentación en un servo continuo, pero encontré algunos consejos sobre cómo agregar un codificador para permitirle controlar la posición.

¿Es posible agregar un codificador a un servo continuo para controlar su posición y, de ser así, cómo?

Además, ¿puedo agregar algo para bloquear el movimiento del servo como se muestra en la imagen a continuación o tendría un efecto de detención y dañaría el servo?

http://i.stack.imgur.com/WguAS.png

Ya cometí un error y compré un servo continuo, así que estoy tratando de encontrar una solución.
Parece que desea un servo convencional, no un servo continuo, para esta aplicación.
También podría volver a conectar el potenciómetro interno del servo, ya que la mayoría de los llamados servos de "operación continua" que conozco, simplemente tienen el potenciómetro desconectado, todo lo demás permanece como está.
@AnindoGhosh: no creo que exista el potenciómetro interno en el que compré, pero intentaré abrirlo para comprobarlo.
Dado que está buscando un truco rápido y económico para corregir un error, en lugar de pautas generales sobre buenas prácticas de diseño, esta pregunta debe cerrarse por ser "demasiado localizada" para su situación particular.

Respuestas (2)

Sí, se puede agregar un codificador rotatorio a cualquier motor, incluido un servo que se haya modificado para rotación continua y se use para el control de posición.

Sin embargo, esto es un poco contrario a la intuición, ya que el circuito interno del servo ya proporciona control de posición, utilizando el potenciómetro integrado como sensor giratorio. Parece innecesario desconectar este mecanismo de posicionamiento y luego agregar un sensor o codificador de determinación de posición externo para lograr el mismo resultado.

Sea como fuere, el método habitual para obtener dicho control de posición con un codificador rotatorio implica unir el codificador rotatorio al eje del motor, luego tomar los valores codificados en un microcontrolador, usando un algoritmo PID en el microcontrolador, accionado como un función de esta información de posición, para controlar el voltaje y la polaridad del motor para detener el motor en la posición deseada.

En términos muy simplificados, si la posición detectada del servo, cortesía del codificador rotatorio, está en el sentido de las agujas del reloj hasta la posición deseada, el algoritmo PID rotaría el motor en el sentido contrario a las agujas del reloj hasta que las dos posiciones sean idénticas. Viceversa para la posición detectada siendo en sentido antihorario a la posición deseada. Si algún par externo aleja el eje de la posición de reposo posteriormente, el codificador rotatorio alimenta datos angulares nuevos al código PID, que luego aplica la lógica descrita anteriormente.


Con respecto a la adición de un tope mecánico a un servomotor, este es un enfoque factible en general: el motor consumirá su corriente de bloqueo, que es más alta que la corriente de funcionamiento normal. Sin embargo, debe consultar la hoja de datos del motor en cuestión para verificar cuánto tiempo puede soportar la corriente de parada. No todos los motores pueden hacer frente a un bloqueo constante.

La solución en tal caso puede ser una de las siguientes:

  • Utilice el código en el microcontrolador, junto con el circuito de detección de corriente adecuado, para detectar cuándo la corriente del motor supera un umbral calibrado, es decir, el motor se detiene en el tope mecánico. En ese momento, deje de alimentar el motor. Esto es complejo y no trivial en el extremo del circuito debido a las pérdidas de energía en la resistencia de sentido que usa. Para motores de gran corriente, se pueden utilizar sensores de corriente Hall o sensores no invasivos, lo que reduce la pérdida de potencia.
  • Use un interruptor de límite en lugar de una parada mecánica, y use la señal de cierre del interruptor como una entrada digital a su microcontrolador, y use el código para detener la alimentación del motor cuando se active el límite. Esta es la solución más simple y menos costosa, y también segura para el motor.

Los únicos servos que "carecen" de movimiento o detección de posición son los servos de hobby baratos. Esos son los peores para usar en cualquier tipo de sistema resistente. No solo leen los comentarios en un arco parcial (no 360 grados), sino que ni siquiera devuelven ningún comentario al comandante.

Puede comprar servos de mayor calidad con codificadores de posición real, sensores de corriente real, controladores PID para control de movimiento, comunicación serial RS-485 en ambos sentidos y mucho más. Esos servos pueden "ir a un punto" o "girar a una velocidad" o hacer cualquier otro tipo de movimiento que desee.

Por ejemplo, estoy poniendo a este tipo en mi proyecto actual:

http://support.robotis.com/en/product/dynamixel/mx_series/mx-64.htm

Todavía es un servo de estilo "hobby", pero bastante capaz y hasta ahora, real

estos controladores PID son geniales y exactamente lo que necesito, pero si miras su precio en amazon cuestan unos 219$ y otros 499$, por lo que no son baratos. pero @Anindo-Ghosh sugiere agregar un servo rotativo y vincularlo con el codificador del eje y usar un algoritmo PID en el microcontrolador para controlar la posición, sé que esto agregará gastos generales, pero es una solución económica
En general, obtendrá lo que paga.