Saltar al contenido

Control PID por Asignación de Polos

En esta entrada aprenderemos como podemos diseñar un control PID por asignación de polos utilizando la técnica de asignación de polos, muy similar a la entrada pasada del controlador PI, que por cierto si aún no la has visto, te invito a echarle un vistazo dando click aqui. Con esta explicación de PID claro sabrás un método muy efectivo de sintonizar este famoso controlador.

Puede interesarte entender como funciona la acción de control proporcional y la acción de control integral.

Que es un PID

El controlador Proporcional, Integral y Derivativo (PID) es ciertamente el algoritmo de control más tradicional en la industria. En el trabajo de Astrom y Hagglund en el año de 1995 se realizó un análisis de más de 11000 lazos de control en diversas plantas industriales (refinerías, plantas químicas, de papel, etc) y se encontró que cerca del 97% de estos lazos correspondian a un controlador PID.

La popularidad del controlador se debe a la simplicidad de su ajuste en los parámetros para obtener un buen desempeño en el lazo de control. Existen algunas diferencias de implementación de este algorítmo que vamos a discutir a continuación.

Antes de continuar, te cuento que en este sitio web hemos abordado diferentes formas y estrategías de sintonizar el controlador PID, a continuación te dejo algunos enlaces:

Tipos de Control PID

En la literatura existen varias configuraciones de controladores PID que pueden ser:

PID Convencional

A continuación se describe la formula del PID tradicional con el cual es posible ver y entender el funcionamiento de sus tres parcelas:

C(s)=k_c\left(1+\dfrac{1}{\tau_is}+\tau_ds \right)

donde k_c es la ganancia proporcional, \tau_i es el tiempo integral del controlador y \tau_d es el tiempo derivativo del controlador.

PID ISA

Control PID Serie

Una de las modificaciónes del controlador, se puede ver a continuación, donde veremos la Función de Transferencia del PID Serie, donde las parcelas se ubican una despues de la otra en el lazo de control:

C(s)=k_c\dfrac{1+\tau_is}{\tau_is}(\tau_ds+1)
PID Serie

Control PID Paralelo

Por último veamos la función de transferencia del PID Paralelo, donde cada parcela es sumada para enviar la acción del control hacia el proceso. La formula PID paralelo es mostrada a continuación:

C(s)=K_p+\dfrac{K_i}{s}+K_ds

Esta variación no debería suponer un problema, ya que los parámetros entre la representación ideal y la representación en paralelo estan relacionados por K_p=k_c, K_i=\dfrac{ k_c}{\tau_i} y K_d= k_c \tau_d.

PID Paralelo

PID Convencional

Reescribiendo la ecuación del control PID:

C(s)=\dfrac{k_c\tau_i\tau_ds^2+k_c\tau_is+k_c}{\tau_is}

Sin embargo si observamos la ecuación del control PID convencional, vemos que es una función de transferencia NO propia, quiere decir que el orden del numerador es mayor al orden del denominador, por lo tanto el controlador NO es implementable.

Para solucionar ese problema, se adiciona un filtro pasa-bajos a la ecuación del PID en la acción derivativa al momento de implementar el controlador con el objetivo de volver la ecuación implementable y también para poder filtrar los ruidos en alta frecuencia que son amplificados por el término derivador del controlador. Así el control PID con el filtro pasa bajos viene dado por:

PID con Filtro - Control PID por Asignación de Polos
C(s)=k_c\left(1+\dfrac{1}{\tau_is}+\dfrac{\tau_ds}{\alpha\tau_ds+1} \right)

Reescribiendo la ecuación:

C(s)=\dfrac{(\alpha k_c\tau_i\tau_d+k_c\tau_i\tau_d)s^2+(k_c\tau_i+\alpha k_c\tau_d)s+k_c}{\alpha\tau_d\tau_is^2+\tau_is}

donde el parámetro \alpha\in(0,1) es un parámetro de sintonia relacionado a cuestiones de atenuación de ruido y robustez del controlador.

Además de la ecuación convencional del PID con filtro, tenemos las otras configuraciones incluyendo también el filtro:

Controlador PID Serie

Tomando la función de transferencia del PID Serie:

C(s)=k_c\dfrac{1+\tau_is}{\tau_is}\dfrac{\tau_ds+1}{\alpha\tau_ds+1}

Controlador PID Paralelo

Tomando la formula del PID paralelo:

C(s)=K_p+\dfrac{K_i}{s}+\dfrac{K_ds}{\alpha \tau_ds+1}

Controlador PID por Asignación de Polos

Para este control vamos a suponer que tenemos el modelo matemático (función de transferencia) que representa nuestro proceso real y que esta FT es de segundo orden:

G(s)=\dfrac{K\omega_n^2}{s^2+2\zeta\omega_ns+\omega_n^2}

donde K es la ganancia del sistema, \omega_n es la frecuencia natural del sistema, \zeta es el factor de amortigumiento.

Vamos a utilizar la ecuación del controlador PID convencional (Nota: pueden usar cualquier configuración del controlador, cada configuración dará caracteristicas diferentes en la dinámica del sistema).

C(s)=\dfrac{k_c\tau_i\tau_ds^2+k_c\tau_is+k_c}{\tau_is}

Normalizando la ecuación del controlador:

C(s)=\dfrac{k_c\tau_d s^2+k_cs+\dfrac{k_c}{\tau_i}}{s}

y de la misma forma como lo hicimos en el control PI, asignamos ambas funciones de transferencia a variables que representan POLINOMIOS, de la siguiente forma:

G(s)=\dfrac{K\omega_n^2}{s^2+2\zeta\omega_ns+\omega_n^2}=\dfrac{k}{s^2+as+b}=\dfrac{A}{B}
C(s)=\dfrac{k_c\tau_d s^2+k_cs+\dfrac{k_c}{\tau_i}}{s}=\dfrac{d_2s^2+d_1s+d_0}{s}=\dfrac{D}{E}

donde sabemos que la función de transferencia de Lazo cerrado viene dado por:

H(s)=\dfrac{DA}{EB+DA}

Ahora solo nos resta reemplazar los valores de los polinomios:

H(s)=\dfrac{k(d_2s^2+d_1s+d_0)}{s(s^2+as+b)+k(d_2s^2+d_1s+d_0)}
H(s)=\dfrac{k(d_2s^2+d_1s+d_0)}{s^3+(a+kd_2)s^2+(b+kd_1)s+kd_0}

Llegamos a una función de transferencia de tercer orden. Ahora solo nos falta asignar los polos a nuestro controlador para que la función de transferencia H(s) se comporte como nosotros queremos. Para eso vamos a usar los mismos criterios de diseño vistos para el control PI, donde definiremos una ecuación característica dominante de Segundo Orden, (De la misma forma vista en el PI)

P_d(s)=s^2+h_1s+h_2

P_d(s) es el polinomio o ecuación característica deseada, que contiene los dos polos dominantes que van a gobernar la dinámica de mi sistema. Notemos que como en H(s) tenemos una función de transferencia de TERCER orden, deberemos completar el polinomio deseado con un polo Rápido (p_1) (Bien alejado del eje imaginario) el cual será un polos insignificante que no afectaran mucho el comportamiento dado por los dos polos dominantes.

P_d(s)=(s^2+h_1s+h_2)(s+p_1)

Hacemos el producto de los polos y así llegamos a una ecuación caracteristica deseada:

P_d(s)=s^3+\alpha_1s^2+\alpha_2s+\alpha_3

Entonces lo que haremos será tomar las dos ecuaciones características (denominador) de H(s) y de P_d(s) e igualarlas, y con esto podremos determinar cuanto será nuestra ganancia k_c, nuestro tiempo integral \tau_i, nuestro tiempo derivativo \tau_d, que son los parametros del Control PID por Asignación de Polos.

s^3+(a+kd_2)s^2+(b+kd_1)s+kd_0=s^3+\alpha_1s^2+\alpha_2s+\alpha_3

igualando coeficientes:

(1) a+kd_2=\alpha_1

(2) b+kd_1=\alpha_2

(3) kd_0=\alpha_3

Reemplazando valores del controlador:

(4) a+k\tau_dk_c=\alpha_1

(5) b+kk_c=\alpha_2

(6) k\dfrac{k_c}{\tau_i}=\alpha_3

Resolviendo

(7) k_c=\dfrac{\alpha_2-b}{k}

(8) \tau_i=\dfrac{kk_c}{\alpha_3}

(9) \tau_d=\dfrac{\alpha_1-a}{kk_c}

Control PID Ejemplos

Utilizando el proceso de los dos tanques en cascada visto en una entrada del blog, (click aqui para ver el modelado de los tanques en cascada), donde la Función de transferencia del nivel del tanque 2 es:

Tanques de Nivel en Cascada
G(s)=\dfrac{0.0006}{s^2 + 0.03271 s + 0.0002297}=\dfrac{A}{B}

Como condiciones de Diseño vamos a establecer que queremos un pico máximo del 10% y un tiempo de estabilización 75% mas rápido que la dinámica en lazo abierto.

Si observamos la dinamica de la función de transferencia del Tanque, podemos saber cual es la constante de tiempo:

\tau=100

Por lo tanto el tiempo de estabilización son cuatro veces la costante de tiempo, que serian 400s. Como deseamos que sea 75% mas rapido, vamos a diseñar nuestro controlador para que llegue al estacionario en 300 segundos.

Tss=300
Mp=10\%

El factor de Amortiguamiento viene dado por:

M_p=100e^{\dfrac{-\pi \zeta}{\sqrt{1-\zeta^2}}}
\zeta=\sqrt{\dfrac{ln\left(\dfrac{M_p}{100}\right)^2}{\pi^2+ln\left(\dfrac{M_p}{100}\right)^2}}
\zeta=0.5912

Estableciendo la tolerancia permitida en el estacionario como 5\%, podremos determinar la frecuencia natural del sistema:

\omega_n=\dfrac{3}{\zeta Tss}=0.0173

Con estos datos podemos montar nuestra función de transferencia de lazo cerrado deseada, que tiene los polos ubicados justo donde queremos para que el sistema tenga el comportamiento deseado.

G_d(s)=\dfrac{K\omega_n^2}{s^2+2\zeta\omega_ns+\omega_n^2}
G_d(s)=\dfrac{0.0003}{s^2+0.0204s+0.0003}

Ecuación caracteristica:

P_d^*=s^2+0.0204s+0.0003

con los siguientes polos complejos conjugados:

p_{1,2}=-0.0102 \pm 0.0139i

Vamos a escoger un polo no dominante 10 veces más alejado de los polos complejos conjugados

p_3=10Real(-0.0102 \pm 0.0139i)=-0.102

La ecuación característica deseada de tercer orden viene dado por:

P_d=(s^2+0.0204s+0.0003)(s+0.102)
P_d=(s^3+0.1225s^2+0.0024s+3.0438\times10^{-5})

Igualando Coeficientes:

s^3+(a+kd_2)s^2+(b+kd_1)s+kd_0=(s^3+0.1225s^2+0.0024s+3.0438\times10^{-5})

tenemos que los parámetros del control PID por asignación de polos resolviendo el sistema de ecuaciones con MATLAB:

k_c=\dfrac{\alpha_2-b}{k}=\dfrac{0.0024-2.297\times10^{-4}}{6\times10^{-4}}=3.5875
\tau_i=\dfrac{kk_c}{\alpha_3}=\dfrac{(3.5875)(6\times10^{-4})}{3.0438\times10^{-5}}=70.7187
\tau_d=\dfrac{\alpha_1-a}{kk_c}=\dfrac{0.1225-0.0327}{(3.5875)(6\times10^{-4})}=41.7117

Para bajar los archivos de Simulink puedes hacerlo dando CLICK AQUI

% Control PID Por Asignación de Polos
% Sergio Andres Castaño Giraldo
% Universidade Federal de Rio de Janeiro
% Rio de Janeiro - 2017
% https://controlautomaticoeducacion.com
% ------------------------------------------------------
clc
clear all
close all


%% Parametros del Proceso del Tanque de Nivel
%Parametros

k1=0.04;
k2=0.03;
k3=0.055;
a1=0.0:0.1:1;   %Abertura de la Valvula entrada
a2=0:0.1:1;     %Abertura de la Valvula salida
A1=1;
A2=1.5;

%Abertura de las Valvulas para el punto de equilibrio
a1s=0.5;
a2s=0.45;

%Altura en los tanques en el punto de equilibrio
h1s=((k1*a1s)/k2)^2;
h2s=((k2^2*h1s)/(k3*a2s)^2);
Eq1=[h1s h2s];
%% Diseño del Controlador PID

%Funcion de transferencia del proceso
% C=tf(Kc*[Ti 1],[Ti 0]);
P=tf(0.0006,[1 0.03271 0.0002297]);

%Obtiene el numerador y denominador de la FT
[n,d]=tfdata(P,'v');
%Nombro los terminos de la FT
k=n(3);
a=d(2);
b=d(3);

% Especificaciones de Diseño
Mp=10; %Maximo Pico
ep=sqrt(((log(Mp/100))^2)/(pi^2+((log(Mp/100))^2))); %Fator de amortecimento

tau=1/(abs(max(roots(d)))); %Toma o valor do polo dominante
Tss=(tau*4)*0.75;
Wn=3/(ep*Tss); %Frequência Natural

Sd=[-ep*Wn+1i*Wn*sqrt(1-ep^2), -ep*Wn-1i*Wn*sqrt(1-ep^2)]; %Alocação de Polos
p3=real(Sd(1))*10; %Polo nao dominante 20 veces longe do dominante
Sd1=[Sd p3];
Pds=poly(Sd1);

disP = 10; %Distancia del polo
%Evita ganancias negativas (usar si la ganancia de la planta es positiva)
if(dcgain(P)>0)
    while(Pds(3)-b < 0 || Pds(4)<0 || Pds(2)-a<0)
        disP = disP+1;
        p3=real(Sd(1))*disP; %Polo nao dominante 20 veces longe do dominante
        Sd1=[Sd p3];
        Pds=poly(Sd1);
    end
    disp('Distancia del polo insignificante:')
    disP
end

alpha=0.01;

%Calculo del Controlador
Kc=(Pds(3)-b)/k;
ti=(k*Kc)/Pds(4);
td=(Pds(2)-a)/(k*Kc);

%Parametros del PID con Filtro en el termino Derivativo
d2=alpha*Kc*ti*td+Kc*ti*td;
d1=Kc*ti+alpha*Kc*td;
d0=Kc;

%Controlador PID
C=tf([d2 d1 d0],[alpha*ti*td ti 0]);

N=1/(td*alpha);

%Simulación con el Modelo en lazo cerrado
H=minreal((C*P)/(1+C*P));
step(H);
figure
pzmap(H);

Eso es todo por la entrada del dia de hoy, espero les haya gustado y hayan aprendido algo nuevo. Si te ha servido el contenido de esta entrada, de los videos y los códigos de implementación y deseas apoyar mi trabajo invitandome a un café super barato, puedes hacerlo en el siguiente link:

👉 Invitar a Sergio a un Café ☕️

Que esten muy bien, nos vemos en la siguiente entrada.

Entradas relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Comentarios (23)

Hola, primero que nada felicitarte pues tu contenido es muy fácil de seguir y me sirvió mucho para saber lo que es la asignación de polos. Tengo una duda:
Lo que pasa es que tengo una función de transferencia (1/s^2+2.75s+0.5) que no he podido sintonizar, por lo que el controlador no funciona como debería y al aplicar el método de asignación de polos al calcular las ganancias Kc y Ki me dan negativas, que podría hacer al respecto?

Responder

Eso debe ser por la ubiación del polo insignificante. Debes alejarlo un poco más. Trata de que las ganancias te den con el mismo signo de la ganancia de la planta en lazo abierto.

Responder

Sergio, también te consulto, hay literatura o documentación donde se indiquen más criterios de selección para los controladores?, o en el caso del PID, cómo saber si usar Ziegler-Nichols o ubicación de polos, por ejemplo.

Responder

Cada sistema se comportará de forma diferente, debes validar cada estrategia de control en el proceso que vas a controlar, para eso puedes usar los índices de desempeño para ver que controlador es más acorde para dicho proceso.

Responder

Buenas tardes Sergio, excelente artículo, super agradecido por tan buena información. Tengo una pregunta en referencia a los controladores PID, estoy haciendo un proyecto pero se hace necesario saber cuál es el tipo de controlador que necesito para mi sistema, en mi caso he realizado simulaciones para controles PI, PD, I-PD, PI-PD y por supuesto el PID, el que mejor resultado me ha dado gráficamente en la simulación es el PI-PD pero no tengo idea de si hay un criterio adicional para decir, usaré este u otro

Responder

Hola Valery, va a depender mucho de como deseas tu desempeño en tu sistema. Pero si existen criterios, por ejemplo usando los índices de desempeño de la integral del error, escoges alguno de estos índices para validar tu controlador y aquel que logre un menor índice (minimice más el error) sería el más adecuado. Te dejo la entrada donde abordamos este tema: https://controlautomaticoeducacion.com/control-realimentado/indices-de-desempeno/

Responder

Muchas gracias por tu muy pronta respuesta Sergio, voy a revisar el enlace que me enviaste con mucha atención pero te comento, en el sistema que estoy diseñando básicamente mi forma de selección fue visual, observé entre todos los sistemas cual era el que crecía de forma más suave y el PI-PD fue el que se estabilizó sin ningún sobrepico y con el menor tiempo de establecimiento y por supuesto, sin necesidad de sintonizar, el resto siempre tenían sobrepicos, o y mayores errores en estado estable, por eso escogí el PI-PD

Responder

Excelente, con los índices de desempeño tendrás un criterio numérico para la selecciónd el controlador.

Responder

Tengo un ejercicios donde la funcion de la planta es de tercer orden y al multiplicar por la funcion de transferencia del controlador PI, me sale una funcion de cuarto orden, como podria hacer,? debo aumenar dos polos a la ecuacion caracteristica de los dos polos o como podria hacerlo

Responder

La forma más rápida sería aproximar la planta a una de primer orden o de segundo orden para el cálculo del controlador e implementar dicho controlador sobre la planta de tercer orden. Por otro lado, también puedes hacer lo que dices, de colocar otro polo al cálculo, pero en ese caso ese polo adicional deberá ser una incognita en tu sistema de ecuaciones para que sea ubicado sobre el lugar de las raíces y dependiendo de donde aparezca, va afectar tu respuesta. Tu sistema también lo puedes trabajar en función de la frecuencia natural y del factor de amortiguamiento, algo parecido al segundo ejemplo que hicimos en esta otra entrada (en la parte inferior, Control PI para Sistemas de Segundo orden): https://controlautomaticoeducacion.com/control-realimentado/controlador-pi-por-asignacion-de-polos/

Responder

Hola! Como aproximar una de tercer orden a segundo orden? Tendrás algún ejemplo porfavor.

Responder

Hola Valeria, habrían varias formas, una es tomar la respuesta de Tercer Orden y con esa respuesta hacer una identificacion del sistema para una de segundo orden. Otra forma sería eliminar el polo menos dominante (el polo mas alejado del origen en el semiplano izquierdo) de la función de transferencia de tercer orden, por lo tanto el sistema de segundo orden se puede aproximar conservando los otros dos polos y descartando el polo menos dominante aunque esta es una simplificación y puede no ser precisa para todas las entradas o condiciones del sistema. Yo prefiero la primera opción de la identificación.

Responder

Buen día amigo, excelente material. ¿Me podrías compartir la bibliografía que usaste?

Responder

disculpa si tengo mi planta de 2do orden y quiero diseñar un controlador PI al hacer el sistema de lazo cerrado tengo una funcion de 3er orden , mi problema es cuando generas tus ecuaciones para sacar alfa1 alfa 2 y alfa3 pues yo no ocupo alfa 1 y aparte solo tengo una constante que multiplica a mi alfa 1 para mi control PI como tendría que poner mi ecuaciones? ya revise el ejericico que hiciste para PI pero mi planta es de 2 orden no de primero

Responder

Hola Fany, en ese caso puedes aproximar tu sistema de segundo orden a uno de primero, si tu sistema NO es subamortiguado.
O puedes trabajar con el sistema en segundo orden pero debes cambiar la forma de calcular el polinomio deseado. En este caso deja el polinomio deseado en términos de Wn y Zeta. Y tu polo rápido también en términos de Wn y Zeta, puede ser 10 veces más lejos p1=10*Wn*Ep. Este polo rápido, también puede ser tu polo dominante (lento) si lo deseas p1=0.5*Wn*Ep.
Ahora deberás definir bien sea el Wn o Zeta y en tu sistema de ecuaciones te salndrán 3 ecuaciones con los cuales tendrás 3 incognitas. Suponiendo que estableces un Zeta=0.707 entonces tus incognitas serán (Kc, ti, Wn) las cuales encuentras resolviendo las ecuaciones.
Notarás que la velocidad en este caso vendrá dado por el polo p1 y dependerá de cuan lejos o cerca lo definas en el plano complejo.

Responder

Hola, qué tendría que hacer si quiero obtener un sistema críticamente amortiguado, sin sobreoscilación, cuál sería el valor del factor de amortiguamiento?

Responder

Te recomiendo veas la entrada de sistemas de segundo orden, para un sistema criticamente amortiguado el factor de amortiguamiento es 1.

Responder

Hola buenas, tengo una duda, en el ejercicio de ejemplo, como sacas la constante de tiempo tau de la función de transferencia y dices directamente que es 100, no logro verlo. Mucha gracias, sigo todos tus post y me son de gran ayuda.

Responder

Hola Juan, ese lo vi de la simulación del tanque, pero lo puedes obtener leyendo mi ultimo post de los sistemas de segundo orden, encontrando el tiempo de establecimiento para los sistemas sobreamortiguados y luego divides el tiempo de establecimiento por 4. Vas a llegar a un resultado más o menos de 95 en la constante de tiempo. Cualquier duda es solo escribir. Saludos!

Responder

Hola, he seguido tu clase para un realizar un controlador de velocidad de un motor de corriente directa, pero al calcular las ganancias del controlador me dan negativas, me he dado cuenta que si alejo mas el polo rápido se calculan negativas, y al realizar la simulación el controlador no funciona como debería, en resumen hay que sacar los dos polinomios caracteristicos e igualarlos para obtener Kc, Ki y Td, es verdad?

Responder

Si, es eso en resumen, trata de no alejar mucho el polo rápido. La mejor forma de asignar los polos será cuando veamos en la página el lugar geométrico de las raíces, que nos permitira ubicar los polos en la posición más adecuada.

Responder

Hola, disculpa donde consultaste este método Asignación de Polos o alguna bibliográfica donde lo pueda consultar

Responder

En el libro de Ogata de sistemas discretos, creo que en el de sistemas continuos también está.

Responder