¿Cuáles son buenas estrategias para ajustar los bucles PID?


55

Ajustar las ganancias del controlador puede ser difícil, ¿qué estrategias generales funcionan bien para obtener un sistema estable que converja en la solución correcta?


1
Una pregunta dirigida a una pregunta más específica sería más útil. De lo contrario, solo debe mirar el artículo PID , con una sección sobre ajuste
ronalchn

2
Siempre he encontrado que los PID de ajuste dependen mucho de las características del sistema, por lo que nunca he encontrado que los sistemas de ajuste automático sean terriblemente útiles. Están bien para un primer paso, un conjunto de parámetros de bajo rendimiento, pero están lejos de ser óptimos, y tendrá el mismo problema con cualquier estrategia general que no esté optimizada para los aspectos mecánicos, eléctricos y de control de un sistema dado.
Mark Booth

Respuestas:


66

Para motores pequeños de bajo par con poco o ningún engranaje, un procedimiento que puede usar para obtener una buena sintonía de referencia es probar su respuesta a una perturbación.

Para ajustar un PID, use los siguientes pasos:

  1. Establecer todas las ganancias a cero.
  2. Aumente la ganancia de P hasta que la respuesta a una perturbación sea una oscilación constante.
  3. Aumente la ganancia de D hasta que desaparezcan las oscilaciones (es decir, se amortigua críticamente).
  4. Repita los pasos 2 y 3 hasta que el aumento de la ganancia D no detenga las oscilaciones.
  5. Ajuste P y D a los últimos valores estables.
  6. Aumente la ganancia I hasta que lo lleve al punto de ajuste con el número de oscilaciones deseado (normalmente cero, pero se puede obtener una respuesta más rápida si no le importa un par de oscilaciones de sobreimpulso)

La perturbación que use dependerá del mecanismo al que esté conectado el controlador. Normalmente, alejar el mecanismo con la mano del punto de ajuste y soltarlo es suficiente. Si las oscilaciones crecen más y más, entonces necesita reducir la ganancia de P.

Si configura la ganancia D demasiado alta, el sistema comenzará a vibrar (vibrará a una frecuencia más alta que las oscilaciones de ganancia P). Si esto sucede, reduzca la ganancia de D hasta que se detenga.

Creo que esta técnica tiene un nombre. Lo pondré aquí cuando lo encuentre.



1
@ Throwback1986, esto definitivamente no es Ziegler-Nichols, que solo usa la ganancia P y donde las ganancias I y D se calculan en consecuencia a partir de la ganancia P oscilante y el período de
oscilación

¿Tiene algún consejo adicional para ajustar específicamente un brazo robot que tiene múltiples articulaciones que necesitan ajuste? ¿Empiezas desde la base y trabajas hacia afuera hasta el efector final, o al revés, o incluso importa?
adamconkey

1
En un entorno académico o industrial, querrá un método de control más sofisticado. Para un hobbiest; la gravedad tiene un efecto de amortiguación, por lo tanto, ajuste cada articulación en el ángulo donde la gravedad afecta menos a los motores. Por ejemplo, con el brazo apuntando hacia arriba para que la gravedad actúe sobre los cojinetes y no sobre el motor. El orden no importa. Agregar un término de compensación de gravedad de avance a su control es probablemente la mejora más fácil (use Newton-Euler recursivo para un brazo en serie) si no puede obtener el rendimiento que desea.
hauptmech

La herramienta pidtuner.com me ha dado mejores resultados que el método Ziegler-Nichols, que tiene varios inconvenientes conocidos; folk.ntnu.no/skoge/publications/2003/tuningPID/more/…
Juan Gonzalez Burgos

13

Un método experimental similar a la respuesta de Hauptmech que me enseñaron en la universidad:

  1. Establecer todas las ganancias a 0.
  2. Aumente K d hasta que el sistema oscile.
  3. Reduzca K d por un factor de 2-4.
  4. Establezca K p en aproximadamente 1% de K d .
  5. Aumente K p hasta que comiencen las oscilaciones.
  6. Disminuya K p por un factor de 2-4.
  7. Ajuste K i a aproximadamente 1% de K p .
  8. Aumente K i hasta que comiencen las oscilaciones.
  9. Disminuya K i por un factor de 2-4.

El método Ziegler-Nichols es más preciso si puede obtener un número exacto para el período de oscilación. Generalmente causa oscilaciones usando los números "PID clásicos" dados, por lo que no siempre es óptimo.

Para conocer las reglas generales sobre el efecto de cada término en el tiempo de subida, sobreimpulso, tiempo de establecimiento, error de estado estable y estabilidad, consulte la Tabla 1 de "Análisis y diseño del sistema de control PID" , de Li, Ang y Chong en los sistemas de control IEEE Revista.


2
Kd primero? Siempre pensé que era mejor comenzar con Kp.
Rocketmagnet

Estoy transcribiendo de viejas diapositivas de conferencias, si hay una buena razón para no hacerlo de esa manera, sentiría curiosidad por escucharlo.
Joe Baker, el

1
Ese es el algoritmo que defiendo para el ajuste del "asiento del pantalón". Te acercará lo más que puedas sin modelar el sistema o medir su respuesta. (Modelar y / o medir es el único camino a seguir si realmente necesita la sintonización correcta).
TimWescott

Ajustar Kd primero no tiene ningún sentido para mí, ya que en cada PID que he implementado, el signo de Kd es negativo. Se utiliza para reducir la señal de control cuando se producen cambios muy grandes en los errores, lo que en esencia amortigua el sistema. Si solo tiene Kd, el sistema se moverá en la dirección opuesta, aumentando el error y agravando el problema. Si Kd es positivo, cada vez que ocurra un gran cambio en el error en la dirección correcta, lo hará cambiar aún más rápido y sobrepasará su objetivo.
Andrew Capodieci

En realidad, ajustar la ganancia D primero tiene sentido, pero supongo que "aumentar" la ganancia D significa aumentar el valor absoluto y solo aumenta la amortiguación. El mayor problema con la ganancia D es que amplifica el ruido de alta frecuencia y es agradable ver ese efecto sin la ganancia P. Entonces, esencialmente comienza buscando las ganancias en las que deja de comportarse como amortiguación y comienza a amplificar el ruido y las señales de error rezagadas. Supongo que para el paso 2, debe pinchar su planta para ver si oscila.
DrRobotNinja

7

Embedded.com ha movido mi artículo una vez más, pero aquí es donde está ahora. Esto le muestra tanto cómo escribir un bucle PID (descubrir cómo hacerlo en algo que no sea punto flotante se deja como ejercicio para el lector) y cómo ajustarlo.

PID sin doctorado

La mejor manera depende mucho de tus habilidades. La forma de obtener la mejor sintonía , suponiendo que sea un experto en sistemas de control, es medir la respuesta de la planta ("planta" == "lo que está controlando"), y luego, dependiendo de cómo lo hizo las mediciones extraen un modelo de la planta y diseñan para eso, o simplemente diseñan directamente para las mediciones.

Para ciertas plantas difíciles, descubrirá que nunca podrá realizar mediciones satisfactorias, en cuyo caso tendrá que ir solo con modelos. Esos son raros, pero satisfactorios cuando los haces trabajar.


5

Sebastian Thrun presentó un algoritmo simple para ajustar PID en su clase "Cómo programar un automóvil robótico". Se llama "twiddle", lo describe aquí .

Twiddle es muy propenso a encontrar mínimos locales, lo que significa que podría obtener un conjunto de tres constantes que están bien, pero que no son óptimas para la situación. El problema de sintonizar las constantes PID es un subconjunto de un problema de búsqueda más general para encontrar ciertos parámetros para maximizar la utilidad (en este caso, minimizar el error del algoritmo PID). Puede buscar otras soluciones generales para este problema, como escalar colinas, recocido simulado, algoritmos genéticos, etc., que podrían terminar encontrando soluciones más óptimas.


4

A diferencia de las otras dos respuestas, diría que una buena forma manual de ajustar un PID es ignorar el Kd. Entonces comience en 0 y aumente Kp hasta llegar al objetivo, luego aumente Ki para deshacerse del error de estado estacionario.

Kd puede confundir el problema, ya que responde mal al ruido, luego comienza a agregar filtros en su entrada analógica y luego cuestiona qué hace además de ralentizar su control y hacer que todo sea más difícil de resolver ...

Otra cosa que seguramente me confundirá es si la ecuación PID está en la forma estándar o en una forma independiente (paralela en wikipedia). El efecto de Ki parece ser inverso cuando la forma es la forma incorrecta de lo que crees que es. Ambos tipos se utilizan en la automatización, a veces con la opción de cambiar entre ellos.


4

Sistema de modelado

Por supuesto, el ajuste experimental se puede hacer como se menciona en las otras respuestas, pero si puede definir un modelo dinámico razonable para lo que quiera controlar y puede identificar sus parámetros , debería poder diseñar su controlador basándose en criterios -definido como exceso , tiempo de subida , tiempo de asentamiento , en estado estacionario de error y así sucesivamente.

Incluso hay herramientas en MATLAB que pueden ajustar su controlador para optimizar una combinación de estos criterios, lo que lo hace aún mejor para usar.

Conoce tu controlador

Aprender lo que hace cada parámetro en el controlador PID también es bastante útil. Todos los algoritmos experimentales se basan en este tipo de conocimiento de alguna manera. Si no solo sigue las instrucciones, sino que puede sentirlo usted mismo, puede que le resulte más fácil ajustar su controlador manualmente.

Problemas del mundo real

Existe la posibilidad de que una de estas cosas, entre otras, se interponga en su camino al ajustar su controlador: bobina , frecuencia de muestreo inadecuada , saturación .

Conclusión

Al final, todo depende de lo que realmente pueda hacer con su sistema para obtener algún conocimiento sobre cómo funciona y qué tipo de experimentación se puede hacer. Lo mejor es aprender más sobre los controladores PID y la teoría de control en general, IMO, pero soy parcial :)


No entiendo por qué la gente sigue sugiriendo heurísticas para ajustar PID, mientras que hoy en día se nos proporcionan muchas herramientas automáticas para la identificación de plantas y el diseño de controladores que no requieren una base teórica profunda. Pulgar por esta respuesta entonces.
Ugo Pattacini

3

Intentaré ampliar un poco mi experiencia para aquellos que puedan estar interesados. Creo que el problema es que tenemos mucha teoría de control que es algo inaccesible (y a veces no útil) y luego tenemos reglas generales que hacen suposiciones sobre sistemas que a menudo son inexactos.

Estabilidad

Hablemos primero sobre por qué los bucles de control se vuelven inestables. Para esta discusión asumiré un sistema lineal. Informalmente, esto significa que si su señal de control es una onda sinusoidal a una frecuencia dada, su salida observada está en la misma frecuencia y si cambia la amplitud de su sistema de control, su salida responde a la misma relación. Esta suposición es una buena aproximación para muchos sistemas del mundo real y nos permite observar diferentes frecuencias de forma aislada.

Si observa la ruta de control, tiene un punto de ajuste, su controlador PID, su sistema (también conocido como "Planta") y luego su sensor. Imagine un punto de ajuste fijo y una onda sinusoidal desde su sensor (esto es igual a una perturbación del mundo real en el sensor, realimentada). En un sistema inestable, su retroalimentación hace que el bucle de control amplifique el error en lugar de reducirlo, de modo que a medida que aumenta el tiempo, su amplitud aumenta. La razón por la que esto sucede se debe a un retraso, o para esta frecuencia particular, un cambio de fase entre la entrada y la salida. Para una frecuencia dada, podemos ver ese cambio de bucle abierto (es decir, sin retroalimentación) y la amplitud de la salida y cuando dibujamos todos esos en un gráfico obtenemos algo así como un diagrama de Bode. Si tenemos una situación en este gráfico de bucle abierto donde el error sigue amplificándose, entonces tenemos un sistema inestable. Si el retraso es inferior a la mitad de la longitud de onda o la ganancia es inferior a x1, el sistema será estable . En la práctica, queremos un margen desde ese punto (margen de ganancia y margen de fase), por lo que verá este "retroceso" en muchos de los métodos manuales / heurísticos.

El principal problema con esos métodos manuales es que estás volando a ciegas y tienes la garantía de tener un sistema de control deficiente.

También tenga en cuenta que el significado P, I y D está relacionado con lo que mide su sensor y qué control está aplicando. Un error común en los controladores caseros es que las personas piensen que están aplicando P cuando en realidad no lo están. Los controladores de motor a menudo tienen un circuito de posición, que se ejecuta sobre un circuito de velocidad que se ejecuta sobre un circuito de torque. (Una cascada )

Bien, pero ¿cómo nos ayuda esto?

El primer punto que me gustaría destacar es que si está construyendo su propio controlador PID, también debe construir una forma de medir la respuesta de bucle abierto. Realice un barrido de frecuencia en la entrada de su controlador y mida la salida del sensor con la retroalimentación desconectada. Luego puede dibujar el diagrama de Bode de bucle abierto y ver por qué su sistema es estable y poder intercambiar los diversos controles. También es útil para medir la respuesta de bucle cerrado y puede hacerlo con cualquier sistema haciendo un barrido de frecuencia de su punto de ajuste mientras el bucle está cerrado. Ambos no son tan difíciles y no requieren muchos conocimientos teóricos.

Si simplemente está ajustando los controles sin comprender lo que sucede debajo del capó, no podrá optimizar su sistema. Desarrollar cierta intuición sobre estos sistemas no es tan difícil. Por ejemplo, la ganancia proporcional no tiene efecto en la fase, sino que simplemente aumenta la ganancia de bucle abierto en todas las frecuencias. Entonces, lo que está haciendo cuando aumenta la ganancia proporcional en todos esos métodos de ajuste manual es encontrar la frecuencia donde la fase va a -180. Vea esto para tener una idea más sobre el impacto de los diversos controles en su respuesta de frecuencia.

Muy a menudo, obtener el mejor rendimiento de bucle cerrado implica ajustar el sistema y no solo las ganancias del controlador. Lo que desea es hacer que el sistema sea lo más "rígido" posible. Eso le permitirá aumentar los parámetros de control y obtener el mejor ancho de banda de bucle abierto y cerrado. En mi experiencia en aplicaciones de control de motores, la ganancia proporcional es la que debería hacer la mayor parte del "trabajo" y el integrador el "resto". No creo que necesites un término D en absoluto. Tener un filtro de paso bajo y un filtro de muesca ayuda mucho en situaciones en las que puede tener cierta resonancia mecánica, pero configurarlos sin un diagrama de Bode es muy difícil (la frecuencia de oscilación que observa en circuito cerrado puede ser diferente a la de circuito abierto).

Si la seguridad es una preocupación (motores muy potentes o un sistema que podría ser destruido por el motor fuera de control), debe establecer algunos límites antes de comenzar a sintonizar (por ejemplo, límite de corriente, error de posición máxima) para proteger el sistema. Entonces necesita tener algún tipo de sensación para el rango de los parámetros. Si su retroalimentación tiene 40 conteos por rotación o 4000 conteos por rotación, sus parámetros serán un factor de 100 para un sistema dado. Mi enfoque sería encontrar primero un rango en el que tenga poca capacidad de control y luego subir desde allí comenzando con P y luego con I (aunque nuevamente está volando a ciegas). Retroceder crea este margen de estabilidad.

Más allá del circuito cerrado

El ciclo cerrado intenta eliminar el error del sistema. Siempre tendrá un rendimiento algo limitado. Lo que desea hacer es minimizar el error que ve su controlador de circuito cerrado y una forma de hacerlo es a través de una técnica llamada feed forward. En feed-forward, rodeas el controlador y manejas un comando directamente al sistema. Un ejemplo de eso sería la aceleración de avance. Si sabe que la torsión del motor es constante y conoce la carga, puede saber cuánta corriente necesita conducir para obtener una cierta aceleración de la carga. Simplemente toma la aceleración de entrada del comando, multiplícala por una constante y agrégala al comando de manejo del controlador. Básicamente, está haciendo lo que se necesitaría para conducir el sistema si no hubiera un controlador y cuanto más cerca pueda obtener, menos errores tendrá que eliminar su bucle y mejor funcionará su sistema. Hace una gran diferencia en la práctica.


"En mi experiencia en aplicaciones de control de motores, la ganancia proporcional es la que debería hacer la mayor parte del" trabajo "y el integrador el" resto ". No creo que necesite un término D en absoluto". Estoy de acuerdo con eso para la aplicación típica de control de motores. El P hace el trabajo principal y el I compensa los errores / deriva a largo plazo. Pero aquí, el quadcopter estará sujeto a muchas turbulencias externas, por lo que el término D es importante para obtener una respuesta rápida. En cuanto al término I, a menos que el quad esté en modo de navegación autónomo, no es tan crucial.
dm76

@ dm76: La mayor parte de mi experiencia es con el control del motor, y hago ese descargo de responsabilidad ;-) Sin embargo, mi intuición dice que todavía hay espacio para I en la aplicación de quadcopter y creo que si P es muy alta, podría lidiar con perturbaciones externas (al igual que lo hace en control motor). Realmente necesitaría echar un vistazo más de cerca a esos sistemas para decir algo definitivo sobre los cuadricópteros ... Creo que mucho de lo que digo aquí se aplica (especialmente su sintonización en el dominio de frecuencia y tener la respuesta de bucle abierto del sistema )
Guy Sirton

1
@ dm76: Y realmente esa afinación PID de "regla general" da como resultado un rendimiento muy mediocre en motores y presumiblemente el mismo en quadcopters. A veces, un filtro de muesca bien colocado puede hacer una diferencia de orden de magnitud ...
Guy Sirton

0

Ziegler-Nichols es un método manual fácil. También existen métodos más robustos, que generalmente se basan en soluciones matemáticas (optimización analítica, iterativa, etc.)

Más allá de eso, google "PID autoajustable" para algunas técnicas automatizadas. Mi favorito es la aplicación de redes neuronales para la sintonización PID.


0

Si desea tener un coeficiente PID preciso:

  • Obtenga sus datos estadísticos del actuador (es decir, collecting input voltages+ encoder pulsesen un tiempo constante ( 0.01sec) 20secscomo una matriz 3x 2000)
  • Obtenga la función de transferencia (TF) de su actuador (usando Ident toolbox en MATLAB).
  • Finalmente, use la caja de herramientas PIDTool en MATLAB y cargue su función de transformación.

O de manera rápida y sencilla:

Hay un enfoque más rápido llamado Ziegler – Nichols : ingrese la descripción de la imagen aquí

Y en esta imagen demuestran los efectos de los parámetros PID :
Efectos de parámetros PID