Controladores de velocidad y posición de motores de CC PID en cascada

Estoy tratando de construir un robot con un accionamiento diferencial alimentado por dos motores de CC. Primero implementé un controlador PID para controlar la velocidad de cada motor de forma independiente. Se estimó el TF usando el System Identification Toolbox de MATLAB, del sistema de lazo abierto mediante la adquisición de la velocidad de cada codificador de ruedas en función de la señal PWM aplicada por un microcontrolador Arduino. Todo salió bien y dimensioné con éxito las ganancias de PID para este controlador.

Lo que estoy tratando de lograr ahora es controlar la posición exacta (angular) del motor de CC. Pensé en conectar en cascada un controlador PID en la entrada de otro ya implementado. Entonces, de esta manera, puedo dar una posición al primer controlador, que será capaz de generar una referencia de salida al segundo controlador (velocidad) para que genere la señal de valor PWM adecuada para impulsar el motor de CC en consecuencia.

¿Funcionará? ¿Es ese un buen enfoque? ¿O debería intentar implementar un controlador diferente que emita la señal PWM en respuesta a una señal de referencia de posición?

¿Qué retroalimentación estás usando para los motores?
Tal como está, la pregunta no tiene mucho sentido. ¿Cómo puede controlar la posición angular del motor a cualquier velocidad que no sea cero? Si desea que un motor se mueva de una posición a otra usando un perfil de velocidad específico, eso generalmente se implementa al tener un bucle de control de posición y alimentarlo con una serie de posiciones basadas en el tiempo generadas por un generador de perfil.
¡Hola @Andyaka! Estoy usando codificadores de efecto Hall posicionales incrementales.
Puede que llegue tarde, pero su enfoque es correcto, también puede conectar en cascada un controlador de par para responder a las perturbaciones de carga, también puede usar un enfoque óptimo para calcular las ganancias de los controladores

Respuestas (2)

Su enfoque debería funcionar. También es la forma más sencilla de resolver el problema.

Siempre podría elaborar un controlador de posición que dirija directamente los motores, pero sería menos fácil entender cómo ajustarlo. Y entiendo que tiene lecturas de posición y velocidad, entonces, ¿por qué no usar dos bucles?

Como resaltan los comentarios de las personas a su pregunta, obviamente ahora tendría un controlador de posición en lugar de velocidad. Pero tiene sentido ya que es para un robot.

Debes tener cuidado con algunos detalles:

  1. Si los dos motores de CC funcionan en paralelo, debe encontrar una manera de que los dos no interfieran entre sí (como obligar a compartir la carga ). Sin embargo, debe haber enfrentado este problema ya en el bucle de velocidad.
  2. El lazo externo (control de posición) está destinado a ser mucho más lento que el lazo de velocidad. Si funcionara al mismo ritmo, o más rápido, tendrías el bucle de posición tirando fuertemente del de velocidad sin darle tiempo a reaccionar, y tendrías fuertes interacciones o incluso inestabilidades. Le sugiero que acelere la interna (velocidad) tanto como pueda, y luego sintonice la externa.
  3. El bucle externo será aquí el 'preciso'. El interno debe ser de reacción rápida en lugar de preciso. Sugeriría un controlador P o PD para el interno y PI o PID para el externo.

Consejo adicional: como es para un robot, tomaría en consideración un feed-forward de referencia de posición .

Si quieres controlar la posición, controla la posición. No veo ningún punto en tener un controlador de velocidad intermedio. Eso hará las cosas más complicadas y difíciles de afinar.

Dado que aparentemente tiene decodificadores de posición, su bucle de control debe controlar la posición directamente. Este lazo de control puede impulsar el motor más fuerte cuando está lejos de la posición deseada, y menos cuando está cerca. Si se hace bien, implícitamente dará como resultado un buen perfil de velocidad para ir de una posición a otra.

Si el sistema de nivel superior quiere que los motores funcionen a una velocidad particular, entonces debe aumentar la posición deseada al controlador de posición.