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
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)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_dsEsta 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
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:
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
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
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
P_d(s)=s^2+h_1s+h_2
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
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)
(2)
(3)
Reemplazando valores del controlador:
(4)
(5)
(6)
Resolviendo
(7)
(8)
(9)
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:
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
\omega_n=\dfrac{3}{\zeta Tss}=0.0173Con 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.0139iVamos 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.7117Para 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.
Citar este Artículo
¡Hola! Soy Sergio Andrés Castaño Giraldo. Bienvenidos a Control Automático Educación, un espacio dedicado a una de mis grandes pasiones: la Ingeniería de Control y la Automatización.
Mi objetivo aquí es tender un puente entre la teoría académica y la práctica profesional. Como profesor e investigador, he tenido la oportunidad de trabajar en proyectos complejos —desde sistemas de compresión en plataformas offshore hasta modelos de control avanzado— y todo ese aprendizaje lo vuelco en este sitio.
Aquí encontrarás material que crece constantemente: desde fundamentos de instrumentación hasta estrategias de control avanzado y programación profesional. Mi meta es que la información que comparto te sea de utilidad real en tu carrera o formación.
Te invito a que te suscribas, te unas a nuestro canal de YouTube y formemos una comunidad de aprendizaje continuo. ¡Gracias por estar aquí!
