Posición del servo sin pulso

Estoy usando un PIC 16F884 para hacer funcionar 2 motores y 2 servos. Los motores están usando el módulo PWM incorporado, y estoy golpeando un poco el PWM para los servos en el temporizador 2.

Con solo un servo controlado, funciona perfectamente, pero cuando agrego un segundo control de servo, el tiempo se apaga debido a la cantidad de comandos que se emiten durante el período de interrupción (al menos esto es lo que he visto cuando lo he conectado a un osciloscopio).

Mi pregunta es: ¿Puedo enviar un comando a un servo, esperar hasta que alcance la posición adecuada, luego apagar el pulso y esperar que mantenga la posición? Si este es el caso, entonces debería poder controlar ambos servos con 1 temporizador.

Vi una pregunta similar aquí: ¿un servo mantendrá su posición sin una señal? sin respuesta definitiva.

Controlo varios servos con un temporizador: enciendo todos los pines de su servo, luego configure el temporizador en el tiempo de apagado para la posición de servo 'más baja', en la rutina de interrupción, apague ese servo y configure el temporizador para la diferencia entre eso y el siguiente servo 'más bajo'.

Respuestas (1)

Se requiere un tipo específico de servomotor, un servo de bloqueo , para mantener la posición después de que se elimine la señal de control.


Dependiendo del servo específico en uso (vea las advertencias a continuación), se puede implementar un "servo de enganche del hombre pobre" alternativo de la siguiente manera:

  • Controle la línea de suministro de energía para el servo con un interruptor lateral alto, ya sea un P-MOSFET o para servos de alta potencia, un SSR.
    • No se recomienda la conmutación del lado bajo, ya que desconectar la ruta a tierra puede causar un comportamiento impredecible debido a que la señal de control pierde la referencia a tierra.
  • Después de permitir que el servo alcance la posición deseada, desactive la alimentación del servo antes de eliminar la señal de control.
  • Para cambiar de posición, inicie la señal de control, luego habilite la alimentación al servo.

Advertencias:

  • El servo debe ser de una relación de reducción alta/tipo de par alto, de modo que las pequeñas fuerzas aplicadas al brazo mientras no está alimentado no hagan que el brazo gire.
  • No todos los servos pueden tolerar la llegada de una señal de control mientras no haya suministro de energía. Si bien algunos sufrirán daños en la electrónica interna (no es muy probable), tengo al menos un servo que intenta alimentar su motor desde la señal de control, ergo , daño en el pin del microcontrolador.

Nota al margen:

Las señales de servocontrol no son en realidad PWM, sino una variante, la modulación de la duración del pulso : la posición del servo no está definida por el ciclo de trabajo de PWM (es decir, tiempo de ENCENDIDO vs. APAGADO), sino solo por la duración del pulso. Siempre que se encuentre en un rango (normalmente) de 40 Hz a 200 Hz, el valor exacto de la velocidad de fotogramas es irrelevante. El servo espera ver un pulso cada tantos ms, esto puede variar dentro de un amplio rango que difiere de servo a servo.

Esto es relevante porque el requisito del OP se puede cumplir generando pulsos consecutivos de duraciones deseadas para cada servo accionado, con mucha flexibilidad en el tiempo que transcurre entre un pulso para el servo A y un pulso para el servo B, por ejemplo. Los servos serían así alimentados con sus pulsos de control en forma de round Robin.

Como señaló Dave Tweed en los comentarios, usar el acrónimo PDM puede ser confuso, ya que también se aplica a la modulación de densidad de pulso, otra variante de caso especial de PWM.

¿Cuál es la diferencia entre PWM y PDM?
@DaveTweed En PWM, el ciclo de trabajo varía para una frecuencia específica. Para los servos, la duración del pulso solo es relevante (típicamente de 1 a 2 mseg de mínimo a máximo), el tiempo de ciclo puede ser cualquier valor dentro del rango admitido para un servo en particular, e incluso se puede variar entre pulsos consecutivos. Por lo tanto, la frecuencia no es un parámetro característico (dentro del rango operativo).
¿Desde cuándo PWM tiene una "frecuencia específica"? Si bien la creación de un ciclo de trabajo variable puede ser una aplicación común de PWM, esa no es su característica definitoria. Creo que estás partiendo un pelo que no existe. En cualquier caso, es posible que desee elegir un acrónimo diferente. La mayoría de las fuentes en línea definen PDM como "modulación de densidad de pulso" en la que el espaciado de los pulsos de ancho fijo es lo que varía.
Sin dividir los cabellos, en realidad resolviendo problemas. :-)
@Anindo Ghosh gracias por toda la información, es bastante asimilable. Actualmente estoy tratando el pulso como PWM, estoy generando pulsos cada 20 ms en función de la posición deseada (por ejemplo, si quiero la izquierda completa, envío un pulso de 1 ms cada 20 ms ). Según los comentarios, parece que no necesito enviar pulsos consecutivos, ¿es así o me estoy perdiendo algo? Si no necesito enviar pulsos consecutivos, básicamente responde a mi pregunta, porque puedo simplemente bajar la línea de datos hasta que esté listo para enviar otro pulso. ¡Gracias de nuevo por toda la ayuda!
@ScottLance En la forma más simple: si desea la izquierda completa, envíe ese pulso de 1 ms. A continuación, envíe pulsos o haga lo que sea necesario en su código, y luego regrese y envíe otro pulso de 1 ms... Y así sucesivamente. Esa brecha de 20 ms entre pulsos no es un requisito difícil, cualquier brecha entre 5 y 25 ms funcionará bien, así que no se moleste en cronometrar esos 20 ms.