Controladores de velocidad y velocidad del motor de PID DC en cascada

1

Estoy tratando de construir un robot con un variador diferencial alimentado por dos motores de CC. Primero implementé un controlador PID para controlar la velocidad de cada motor de forma independiente. Estimó el TF utilizando la Caja de herramientas de identificación del sistema de MATLAB, del sistema de bucle 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 PID para este controlador.

Lo que estoy tratando de lograr ahora es controlar la posición exacta (angular) del motor de CC. Pensé en poner en cascada un controlador PID en la entrada del otro ya implementado. De esta manera, puedo darle 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 apropiada 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?

    

2 respuestas

1

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

Siempre se 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, ¿por qué no usar dos bucles?

Como se resaltan los comentarios de las personas a tu pregunta, obviamente ahora tendrías 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 para que los dos no interfieran entre sí (como forzar cargar compartir ). Sin embargo, debe haber enfrentado este problema en el bucle de velocidad.
  2. El bucle externo (control de posición) está obligado a ser mucho más lento que el bucle de velocidad. Si funcionara al mismo ritmo, o más rápido, tendrías el bucle de posición tirando fuertemente de la velocidad uno sin dejar Es el momento de reaccionar, y tendrías interacciones fuertes o incluso inestabilidades. Te sugiero que aceleres el interno (speed). tanto como pueda, y luego ajuste el externo.
  3. El bucle externo aquí será su "preciso". El interno Debe ser rápido en reacción en lugar de precisa. Sugeriría una p o controlador de PD para el interno, y PI o PID para el externo.

Sugerencia adicional: ya que es para un robot, consideraría un feed-forward de referencia de posición .

    
respondido por el raggot
1

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

Ya que aparentemente tienes decodificadores de posición, tu lazo de control debe controlar la posición directamente. Este bucle de control puede entonces impulsar el motor con más fuerza cuando está lejos de la posición deseada, y menos cuando está cerca. Si se hace correctamente, esto dará como resultado implícitamente un buen perfil de velocidad para pasar de una posición a otra.

Si el sistema de nivel superior desea que los motores funcionen a una velocidad particular, entonces debería aumentar la posición deseada hacia el controlador de posición.

    
respondido por el Olin Lathrop

Lea otras preguntas en las etiquetas