He visto muchos artículos PID, como este , que usan una transformación Z de la ecuación PID genérica para derivar alguna ecuación de diferencia loca que luego se puede implementar en el software (o en este caso, un FPGA). Mi pregunta es, ¿cuál es la ventaja de tal implementación frente al PID tradicional y mucho más intuitivo sin un doctorado?implementación de tipo? El segundo parece más fácil de entender e implementar. El término P es multiplicación directa, la integral usa una suma continua y la derivada se estima restando la muestra anterior de la muestra actual. Si necesita agregar una función como la protección Integral Windup, es álgebra directa. Intentar agregar protección integral Windup u otras características a un algoritmo de tipo diferencia, como el vinculado anteriormente, parece que sería mucho más complicado. ¿Hay alguna razón para usar una implementación de este tipo, aparte de los derechos de fanfarronear "Soy un mal culo al que le gusta hacer transformaciones Z por diversión" que lo acompañan?
EDITAR: El PID sin un artículo de PHD que vinculé es un ejemplo de la implementación más simple que utiliza una suma acumulada para el término integral y la diferencia entre muestras consecutivas para el término derivado. Puede implementarse con matemática de punto fijo de manera determinista y puede incluir información constante en tiempo real en el cálculo, si se desea. Básicamente estoy buscando una ventaja práctica para el método de transformación Z. No puedo ver cómo podría ser más rápido o usar menos recursos. En lugar de mantener una suma de la integral, el método Z parece usar la salida anterior y restar los componentes P y D anteriores (para llegar a la suma integral por cálculo). Entonces, a menos que alguien pueda señalar algo que me falta, aceptaré el comentario de AngryEE de que son esencialmente lo mismo.
EDICIÓN FINAL: Gracias por las respuestas. Creo que he aprendido un poco sobre cada uno, pero al final, creo que Angry está en lo cierto, ya que es solo una cuestión de preferencia. Las dos formas:
e(k-2)=e(k-1),
o
u ( k ) = K p e ( k ) + K i T i ⋅ suma + K d
evaluará esencialmente lo mismo. Algunos mencionan que el primero se puede implementar en un DSP o FPGA más rápido, pero no compro eso. Cualquiera de los dos podría ser vectorizado. El primero requiere dos operaciones posteriores, el segundo requiere una operación previa y una posterior, por lo que parece igualarse. El primero también requiere 1 multiplicación más en el cálculo real.
Respuestas:
Te estás confundiendo con toda la fantasía de la transformación Z. Los dos enfoques son básicamente los mismos: el enfoque PID sin PHD solo tiene menos subíndices. Realizan la misma función básica y usan las mismas matemáticas básicas.
La única diferencia importante entre las dos que puedo ver es que el PID sin PHD no tiene en cuenta el tiempo de muestreo. Para hacer cualquier cosa que pueda ser inestable, el tiempo de muestreo es una consideración muy importante. El beneficio del enfoque de transformación Z en este caso es que no puede usarlo sin tener en cuenta el tiempo de muestreo: lo obliga a mostrar su trabajo y lo ayuda a diseñar un sistema más estable.
También parece que el estudio de caso que encontró al implementar el enfoque de transformación Z fue diseñado para ser altamente determinista. Esto explica su uso de FPGA: los cálculos siempre tomarán la misma cantidad de tiempo. El PID sin implementación de PHD es decididamente no determinista. El uso de dobles como variables en lugar de una implementación de punto fijo seguramente causará un comportamiento no determinista en cualquier microcontrolador sin una unidad de punto flotante (y probablemente también en uC con una FPU). El estudio de caso está trabajando en un nivel completamente diferente de complejidad en comparación con el enfoque PID sin PHD.
Básicamente, el enfoque matemático y de control es el mismo, pero el enfoque de estudio de caso / transformación Z es más riguroso y teóricamente basado. El enfoque PID sin PHD solo funcionará para un sistema muy simple, no crítico con el tiempo, que sea relativamente estable.
fuente
El método de transformación Z para diseñar el controlador PID eventualmente producirá una implementación mucho más eficiente. Esto es fundamental si está diseñando el FPGA / DSP / Microcontrolador más pequeño para su aplicación.
El mencionado "PID sin un PHD" es probablemente el enfoque más fácil para implementar un control PID en software, pero se vuelve engorroso a velocidades de muestreo más altas.
Además, la transformación Z se presta mejor para diseñar en un dominio discreto (digital). El método tradicional de diseño (transformación de Laplace) es más para el tiempo continuo. Hay varias formas de conversión entre las dos (retención de orden cero, interpolación lineal, colocación de polos, bilineal / Tustin), cada una viene con sus fortalezas y desventajas en términos de estabilidad y respuesta del sistema. En general, es más fácil hacer todo el diseño en el dominio discreto.
En pocas palabras, si está utilizando un sistema relativamente "lento" (todos los comportamientos principales suceden significativamente a menos de 100 kHz), entonces el primer diseño probablemente esté bien. Puede implementarlo en un microcontrolador o PC y terminar con él. A medida que los sistemas se vuelven más rápidos, es posible que deba usar el método de transformación Z para obtener las velocidades que necesita (el artículo menciona 9.5MHz, suponiendo que tenga A / D y DAC que puedan mantener el ritmo).
fuente
Aquí está el trato, en mi experiencia:
sum
") separado en su propia variable de estado. Esa variable de estado tiene significado. La primera implementación mantiene la variable de estado como historial pasado del error; eso tiene significado, pero proporciona menos información en mi opinión.Finalmente, hay otros problemas relacionados con la no linealidad o el análisis que a menudo te hacen elegir una implementación sobre otra (para mí siempre es el enfoque clásico para los controladores, para los filtros FIR es la transformación Z, y para los filtros IIR de 1 o 2 polos suele ser el enfoque clásico):
Para los controladores, siempre mantengo un integrador como una variable de estado, en lugar de muestras de errores anteriores. La razón es que los sistemas reales a menudo requieren anti-windup donde tienes que sujetar la integral para que no sea demasiado positiva o demasiado negativa. (Y si está implementando en punto fijo, debe hacer esto de todos modos, porque la condición envolvente cuando golpea el desbordamiento afectará negativamente el comportamiento de su ciclo de control)
Por la misma razón, también calculo siempre el integrador de una manera referida a la salida: por ejemplo, en
sum += Ki*error; out = stuff + sum
lugar desum += error; out = stuff + Ki*sum
. Con el segundo enfoque, si cambia la ganancia Ki, eso escala el efecto del integrador en la salida hacia arriba y hacia abajo, lo que probablemente no sea lo que desea, y el límite cambia según la ganancia. Si multiplica el error por Ki antes de la integración, sus unidades del integrador son las mismas que las unidades de la salida del bucle de control, y tiene un significado físico más obvio.(Actualización: he escrito una entrada de blog sobre este tema con más detalle).
fuente
Editar :
El uso de la transformación Z facilita la combinación y simplificación de los sistemas LTI para el análisis . Por ejemplo, una serie en cascada de sistemas k LTI con funciones de transferencia H1, H2, ..., Hk se combinará como un producto simple
H = H1*H2*...*Hk
. Además, la función de transferencia de un ciclo de retroalimentación negativa esT = G/(1 + G*H)
, donde H está en la ruta de retroalimentación. Una vez que tenga una función de transferencia general, puede analizar la estabilidad (ubicación de los polos) y el rendimiento (transitorios, error de estado estacionario), agregando filtros y comentarios adicionales para optimizar el diseño.Para subsistemas de orden superior, puede dividir la función del sistema e implementarla como una serie de biquads en cascada (es decir, por pares de ceros y polos, como conjugados complejos o raíces repetidas), lo que disminuye la inestabilidad causada por la cuantización. Una biquad de forma canónica:
fuente
La parte difícil de un controlador PID no es el código en sí. Los problemas realmente surgen cuando se trata de optimizar el controlador. Claro que puede hacer prueba y error y obtener un controlador bastante decente, pero algunos sistemas son demasiado complejos para que un método de prueba y error sea fácil de realizar. Estos mismos sistemas tienden a ser los que necesitan un controlador muy bueno en lugar de uno decente. En este caso, la transformación Z es mucho más fácil de analizar.
Otra cosa para pensar es la estabilidad de un sistema. Puede estar lidiando con un sistema que es bastante difícil de volverse inestable, o incluso si lo hace, no hace daño a nada. Pero hay muchos sistemas que pueden tener resultados catastróficos si el controlador hace que se vuelva inestable. La transformación Z es otro lugar donde es mucho más fácil identificar si habrá algún problema.
Y 1 nota final. Al analizar un sistema en su conjunto, deberá obtener ecuaciones para todos los componentes de su sistema. Claro que puede obtenerlo del PID sin un doctorado, pero si ya ha estado trabajando con él en el método de transformación Z, hay mucho menos trabajo de ida y vuelta que debe hacer.
Ahora, como preferencia personal, siempre uso el PID sin un método de doctorado. Esto se debe a que solo estoy usando microcontroladores con sistemas que no dependen mucho del controlador.
fuente
Hay varios puntos por los que la forma de transformación Z tiene mayor utilidad.
Pregúntele a cualquiera que promueva el enfoque basado en el tiempo / simple / sans-PHD cuál es el conjunto de su término Kd. Es probable que respondan 'cero' y que digan que D es inestable (sin un filtro de paso bajo). Antes de aprender cómo se combina todo esto, habría dicho y dije esas cosas.
Sintonizar Kd es difícil en el dominio del tiempo. Cuando puede ver la función de transferencia (la transformación Z del subsistema PID) puede ver fácilmente cuán estable es. También puede ver fácilmente cómo el término D afecta al controlador en relación con los otros parámetros. Si su parámetro Kd contribuye 0.00001 a los coeficientes del polinomio z pero su término Ki está poniendo en 10.5 entonces su término D es demasiado pequeño para tener un efecto real en el sistema. También puede ver el equilibrio entre los términos Kp y Ki.
Los DSP están diseñados para calcular ecuaciones de diferencias finitas (FDE). Tienen códigos de operación que multiplicarán un coeficiente, sumarán un acumulador y cambiarán un valor en un búfer en un ciclo de instrucción. Esto explota la naturaleza paralela de los FDE. Si la máquina carece de este código de operación ... no es un DSP. Los PowerPC (MPC) integrados tienen un periférico dedicado al cálculo de los FDE (lo llaman la unidad de diezmado). Los DSP están diseñados para calcular los FDE porque es trivial transformar una función de transferencia en un FDE. 16 bits no es suficiente rango dinámico para cuantificar fácilmente los coeficientes. Muchos de los primeros DSP en realidad tenían palabras de 24 bits por este motivo (creo que las palabras de 32 bits son comunes hoy en día).
IIRC, la llamada transformación bilineal toma una función de transferencia (una transformación z de un controlador de dominio de tiempo) y la convierte en un FDE. Demostrar que es 'difícil', usarlo para obtener un resultado es trivial: solo necesita la forma expandida (multiplicar todo) y los coeficientes polinómicos son los coeficientes FDE.
Un controlador PI no es un gran enfoque: un mejor enfoque es construir un modelo de cómo se comporta su sistema y usar PID para la corrección de errores. El modelo debe ser simple y estar basado en la física básica de lo que está haciendo. Este es el avance hacia el bloque de control. Un bloque PID luego corrige el error utilizando la retroalimentación del sistema bajo control.
Si utiliza valores normalizados, [-1 .. 1] o [0 ... 1], para el punto de referencia (referencia), retroalimentación y avance, puede implementar un algoritmo de 2 polos y 2 ceros en conjunto DSP optimizado y puede usarlo para implementar cualquier filtro de segundo orden que incluya PID y el filtro de paso bajo (o paso alto) más básico. Esta es la razón por la cual los DSP tienen códigos de operación que presumen valores normalizados, por ejemplo, uno que generará una estimación de la raíz cuadrada inversa para el rango (0..1) Puede poner dos filtros 2p2z en serie y crear un filtro 4p4z, esto permite puede aprovechar su código DSP de 2p2z para, por ejemplo, implementar un filtro Butterworth de paso bajo de 4 toques.
La mayoría de las implementaciones en el dominio del tiempo incorporan el término dt en los parámetros PID (Kp / Ki / Kd). La mayoría de las implementaciones de dominio z no lo hacen. dt se coloca en las ecuaciones que toman Kp, Ki y Kd y las convierten en coeficientes [] & b [] para que su calibración (ajuste) del controlador PID sea ahora independiente de la velocidad de control. Puede hacerlo funcionar diez veces más rápido, aumentar las matemáticas a [] & b [] y el controlador PID tendrá un rendimiento constante.
Un resultado natural del uso de FDE es que el algoritmo está implícitamente "sin fallas". Puede cambiar las ganancias (Kp / Ki / Kd) sobre la marcha mientras se ejecuta y se comporta bien; dependiendo de la implementación del dominio del tiempo, esto puede ser malo.
Por lo general, se dedica un gran esfuerzo a los controladores PID de dominio de tiempo para evitar la liquidación integral. Hay un truco simple con el formulario FDE que hace que el PID se comporte bien, puede fijar su valor en el búfer de historial. No he hecho los cálculos para ver cómo esto afecta el comportamiento del filtro (con respecto a los parámetros Kp / Ki / Kd), pero el resultado empírico es que es 'suave'. Esto está explotando la naturaleza 'sin fallas' de la forma FDE. Un modelo de retroalimentación contribuye a evitar la liquidación integral y el uso del término D ayuda a equilibrar el término I. PID realmente no funciona según lo previsto con una ganancia D. (El cambio de los puntos de ajuste es otra característica clave para evitar la liquidación excesiva).
Por último, las transformaciones Z son un tema de pregrado no "Ph.D." Debería haber aprendido todo sobre ellos en Análisis complejo. Aquí es donde va la universidad, el instructor que tiene y el esfuerzo que pone en aprender las matemáticas y aprender a usar las herramientas disponibles puede marcar una diferencia significativa en su capacidad de desempeño en la industria. (Mi clase de Análisis complejo fue horrible).
La herramienta de la industria de facto es Simulink (que carece de un sistema de álgebra computacional, CAS, por lo que necesita otra herramienta para producir ecuaciones generales). MathCAD o wxMaxima son solucionadores simbólicos que puedes usar en una PC y aprendí cómo hacerlo usando una calculadora TI-92. Creo que la TI-89 también tiene un sistema CAS.
Puede buscar ecuaciones de dominio z o dominio laplace en wikipedia para PID y filtros de paso bajo. Hay un paso aquí que no entiendo, creo que necesita la forma de dominio de tiempo discreto del controlador PID y luego necesita tomar la transformación z del mismo. La transformada de Laplace debería ser muy similar a la transformada z y se da como PID {s} = Kp + Ki / s + Kd · s. Creo que la transformada z explicaría mejor los Dt en las siguientes ecuaciones. Dt es delta-t [ime], uso Dt para no confundir esta constante con una derivada 'dt'.
Y este es el FDE 2p2z:
Los DSP normalmente solo tenían una multiplicación y suma (no una multiplicación y resta), por lo que puede ver la negación en los coeficientes a []. Agregue más b para más polos, agregue más a para más ceros.
fuente
Es mejor utilizar el método de transformación Z en general, porque al hacerlo, conserva el comportamiento exacto del sistema analógico equivalente. Existen métodos de ajuste bien conocidos, como Ziegler-Nichols, que funcionan en el dominio analógico tal como se publica. Si usa el método de transformación Z, tiene una expectativa matemáticamente rigurosa de que su controlador resultante hará lo mismo para los mismos valores de las ganancias P, I y D, que lo hará en el dominio analógico, dadas esas ganancias. Además, puede dibujar un lugar de raíz discreto para el sistema y predecir la estabilidad para un conjunto dado de ganancias, lo que no puede hacer si crea un controlador ad hoc directamente en el código.
fuente