Asombrosas formas de onda PWM para servos para minimizar los picos de corriente

Si estoy controlando múltiples servomotores PWM de hobby, ¿hay alguna ventaja en escalonar los pulsos enviados a cada servo?

Con lo que quiero decir, cada servo necesita ver un pulso de ancho ~ 1 ms cada 20 ms. Digamos que tengo 20 servos. Si envío un pulso de 1 ms cada ms a un servo diferente, ¿eso cambiará los picos del consumo de corriente o mejorará el circuito?

Intuitivamente, parece que enviar el pulso de 1 ms a 20 servos en el mismo tic de 1 ms podría causar un pico de corriente sincronizado, lo que maximiza las posibilidades de disparar un fusible en mi fuente de alimentación.

¿Es esto una preocupación real?

(Lo pregunto porque la biblioteca python Adafruit PWM tiene la capacidad de especificar los tiempos de subida y bajada de los pulsos de un servo dado, en lugar de solo especificar la frecuencia. No veo ninguna razón para construir la API de esta manera a menos que quieras tambalearte las señales por alguna razón).

No sé unos 20 a la vez, pero si tuvieras que decir diez, sé que los transceptores de radio hacen eso internamente. Luego, el circuito de radio demultiplexa esa señal y envía cada una en su propio canal. Si monitorea las señales en el receptor, todas están compensadas entre sí. Realmente no responde a su pregunta sobre la corriente, pero esa es una de las razones del asombroso.
Los transmisores/receptores analógicos antiguos enviaban los pulsos de servo secuencialmente. Primero el servo #1 obtendría su pulso, luego el servo #2, y así sucesivamente. Este fue un artefacto de cómo se generaron y decodificaron los pulsos, pero tuvo el efecto secundario de no permitir que los servos recibieran sus comandos exactamente al mismo tiempo.
Como dice la gente a continuación, escalonar los pulsos probablemente hace muy poca diferencia. Pero si puede permitirse iniciar el movimiento en un momento diferente en cada servo, en la escala de tiempo de 500 ms, eso reduciría la potencia máxima. Por ejemplo, cuando cierro todas las ventanas de mi automóvil, las activé una por una para limitar la caída de voltaje.

Respuestas (5)

Primero, asumiré que por "servo" realmente se refiere a servomotores de pasatiempo que están controlados por pulsos de 1-2 ms, no al significado general de "servo" en electrónica y sistemas de control. Realmente debería definir correctamente este término en su pregunta.

Estos servos de hobby solo usan el pulso de 1-2 ms como una forma de comunicar un nivel analógico. Los viejos servos de hobby completamente analógicos integraban el pulso, lo retenían y luego lo usaban como señal de control para comparar la señal de retroalimentación de posición. Los tipos digitales más nuevos miden el ancho del pulso digitalmente, luego usan ese valor para comparar la retroalimentación de posición.

De cualquier manera, la conducción del motor no está sincronizada con el pulso. La señal de accionamiento del motor se actualiza constantemente internamente al valor de control guardado derivado del último pulso. Un nuevo pulso solo cambia esta entrada de control.

Dicho esto, un paso repentino en la señal de control probablemente provocará un error a corto plazo, al que reaccionará el mecanismo de control impulsando el motor con más fuerza hasta que se asiente en la nueva posición. Por lo tanto, aunque el motor siempre está accionado, por lo general lo hará con más fuerza después de un cambio de paso en la entrada, lo que solo puede ocurrir inmediatamente después de un pulso.

En general, diría que es bueno escalonar los pulsos de múltiples servos de hobby si no es una carga para hacerlo. Tenga en cuenta que esto se produce automáticamente si utiliza un enlace de radio estándar. Estos enviarán los pulsos para cada uno de los servos de hobby que controla secuencialmente de todos modos. Si está controlando múltiples servos de hobby desde un solo microcontrolador, entonces la multiplexación también podría dictar pulsos secuenciales.

Si funciona más simplemente generar todos los pulsos al mismo tiempo, entonces adelante y no te preocupes por eso. 20 ms es poco tiempo, y la corriente adicional de un cambio repentino de entrada de control llevará más tiempo que eso en la mayoría de los casos. En el caso de cambios lentos, los pasos son pequeños de todos modos, por lo que la corriente debería ser relativamente pareja. Ponga un límite más grande en la fuente de alimentación si le preocupa.

¿Realmente integran el pulso de control? Tenía la impresión de que el potenciómetro de retroalimentación se usaba para controlar un multivibrador que generaba un pulso de retroalimentación, y que se usaban puertas simples para enviar pulsos al puente H del motor siempre que los dos anchos de pulso no fueran iguales.
@DaveTweed: Exactamente correcto. IIRC - Signetics hizo el primer chip para este propósito: el NE544. Todavía hay una gran cantidad de información disponible para ese chip en particular, así como el control de radio de los servos de hobby en general.
@Dave: Así es como alguien me lo describió hace un tiempo. Sin embargo, personalmente no he visto un esquema. Probablemente hay varias implementaciones diferentes por ahí.
Creo que esa persona solo estaba adivinando. Tal sistema no sería práctico porque sería demasiado sensible tanto a los niveles de señal como a los niveles de tensión de alimentación.

Con los servos "analógicos" más antiguos, es muy probable que cualquier pico de corriente en el controlador del motor se corresponda con el pulso en la señal de control, por lo que su preocupación sería válida. Aunque tales pulsos tienden a ser muy estrechos y pueden manejarse con una capacitancia de desacoplamiento adecuada en su línea de alimentación, con poca probabilidad de quemar un fusible.

Con los servos "digitales" más nuevos, los pulsos de accionamiento del motor son esencialmente independientes de los pulsos de la señal de control, por lo que no hay ningún beneficio en jugar con la sincronización de estos últimos. Pero la frecuencia PWM del motor suele ser mucho más alta, con una ondulación correspondientemente menor en la fuente de alimentación, en comparación con los servos analógicos.

En un servo analógico, los pulsos PWM del motor se crean restando el pulso del servo del pulso de retroalimentación interna y luego estirando la diferencia para producir un rango PWM más amplio. Por lo tanto, el inicio de cada pulso del motor está débilmente sincronizado con el final de cada pulso de servo, y los pulsos de servo escalonados pueden reducir la corriente máxima de suministro de energía cuando se mueven múltiples servos.

La mayoría de los servos digitales generan pulsos PWM de alta frecuencia que son más fáciles de suavizar.

Servoformas de onda actuales

Servocorriente analógica HS-125MG (50 Hz PWM)
Forma de onda de corriente servo HS-125MG
(horizontal 5 mS/div, vertical 500 mA/div)

Corriente servo digital HS-5475HB (~1kHz PWM)
Forma de onda de corriente servo HS-5475HB

En un período de 20 ms, tal vez haya problemas con el suministro de corriente. Puede encontrar útil un diodo amortiguador o de rueda libre. Sin embargo, ¿qué pasaría si enviara señales pwm digitales (0,4 mA por línea) a una fuente de corriente controlada por voltaje?

Tradicionalmente, los pulsos de los servos se alternaban de todos modos, porque se transmitían uno a la vez por un enlace de radio.

Si el movimiento de un servo en el peor de los casos toma más de 20 ms (lo que sucede), entonces varios servos se ejecutarán simultáneamente, por lo que escalonar los pulsos del servo no ayudará (mucho) a eliminar los pulsos actuales, durante los períodos de alta actividad.

Para garantizar que (digamos) seis servos nunca se ejecutarían simultáneamente a una velocidad de actualización de 20 ms, no solo tendría que escalonar los pulsos del servo, sino que cada movimiento del servo tendría que durar menos de 3 ms, una actividad muy ligera.

Entonces, ¿tal vez la API que limita la velocidad de movimiento se trata de controlar el impulso mecánico? No puedo ver que tenga mucho impacto en la fuente de alimentación.