En esta entrada, vamos a aprender como sintonizar un controlador PID por medio de la síntesis de Dahlin.
Primero observemos el diagrama de bloques de lazo cerrado del sistema a controlar.
En este caso, la ecuación que representa la malla cerrada del sistema (Salida / Entrada) es la siguiente:
y(t)=\frac{G_c(z)G_p(z)}{1+G_c(z)G_p(z)}y_i(t)\ [1]La ecuación (1) puede ser reescrita de la siguiente forma:
G_c(z)=\frac{u(t)}{e(t)}=\dfrac{1}{G_p(z)}\dfrac{\dfrac{y(t)}{y_i(t)}}{1-\dfrac{y(t)}{y_i(t)}}\ [2]La ecuación (2) es una representación general de un controlador en un lazo convencional observado en el diagrama de bloques.
Controlador Dahlin
El controlador Dahlin es un algoritmo que asume que el sistema alcanza el Set-Point en una trayectoria equivalente a un sistema de primer orden con atraso
\frac{y(t)}{y_i(t)}=\frac{(1-\alpha )z^{-d-1}}{1-\alpha z^{-1}}\ [3]donde:
=Parametro de Rapidez
=Retardo del Algoritmo
\alpha=exp\left(\frac{-T_s}{\tau_{LC}}\right)\therefore d=\frac{\Theta }{T_s}Donde:
=Tiempo de Muestreo,
= Constante de tiempo en lazo cerrado deseado
= Retardo de la planta
Aplicando la ecuación (3) en (2):
G_c(z)=\frac{u(t)}{e(t)}=\frac{1}{G_p(z)}\frac{(1-\alpha )z^{-d-1}}{1-\alpha z^{-1}-(1-\alpha )z^{-d-1}}Si tenemos una planta de segundo orden la cual queremos controlar, dicha planta va a tener el siguiente modelo matemático.
\frac{y(t)}{u(t)}=\frac{z^{-d-1}(b_0+b_1z^{-1}+b_2z^{-2})}{1+a_1z^{-1}+a_2z^{-2}}\ [5]Aplicando (5) en (4)
Gc(z)=\frac{u(t)}{e(t)}=\frac{1+a_1z^{-1}+a_2z^{-2}}{(b_0+b_1z^{-1}+b_2z^{-2})}\frac{(1-\alpha )}{1-\alpha z^{-1}-(1-\alpha )z^{-d-1}}\ [6]Como deseamos sintonizar un PID, tomamos la estructura de un PID ideal la cual se representa con la siguiente ecuación
G_c(z)=K_c\left [ \dfrac{(1+\dfrac{T_s}{T_i}+\dfrac{T_d}{T_s})-(1+2\dfrac{T_d}{T_s})z^{-1}+\dfrac{T_d}{T_s}z^{-2}}{1-z^{-1}} \right ]\ [7]Para la Existencia del PID Dahlin se tiene que establecer las siguientes relaciones:
(b_0+b_1z^{-1}+b_2z^{-2})\approx (b_0+b_1+b_2)Haciendo uso de dicha relación puedo escribir (6) asi:
Gc(z)=\frac{u(t)}{e(t)}=\frac{(1-\alpha )}{(b_0+b_1+b_2)}\frac{1+a_1z^{-1}+a_2z^{-2}}{1-\alpha z^{-1}-(1-\alpha )z^{-d-1}}\ [8]1-\alpha z^{-1}-(1-\alpha )z^{-d-1}=(1-z^{-1})\left [ 1+(1-\alpha z^{-1}+\cdots +(1-\alpha )z^{-d}) \right ]\\\approx (1-z^{-1})(1+d(1-\alpha ))En la expreción anterior
se evalua con z=1. El controlador Dahlin tiene una acción integral y las salidas pasadas se utilizan para predicción. De esta manera se obtiene el siguiente controlador:
G_c(z)=\frac{u(t)}{e(t)}=\frac{(1-\alpha )}{(b_0+b_1+b_2)(1+d(1-\alpha) )}\frac{1+a_1z^{-1}+a_2z^{-2}}{1-z^{-1}}Comparando la Ecuación (7) con la ecuación (9)
G_c(z)=\bar{K}\dfrac{1+a_1z^{-1}+a_2z^{-2}}{1-z^{-1}}\bar{K}=\frac{(1-\alpha )}{(b_0+b_1+b_2)(1+d(1-\alpha) )}Entonces las ganancias del controlador PID son:
\bar{K}=K_c(1+\frac{T_s}{T_i}+\frac{T_d}{T_s})\bar{K}a_1=-K_c\left(1+2\frac{T_d}{T_s}\right)\bar{K}a_2=K_c\frac{T_d}{T_s}Donde los parametros del controlador finalmente vienen dados por:
K_c=-\bar{K}(a_1+2a_2)T_i=\frac{-(a_1+2a_2)T_s}{1+a_1+a_2}T_d=\frac{-a_2T_s}{a_1+2a_2}Implementación (Dahlin Controller) Matlab
Se tiene un intercambiador de calor para calentar un fluido X, el proceso puede ser representado perfectamente por la siguiente función de transferencia de cuarto orden:
G_p(s)=\frac{1}{(0.5s+1)(s+1)(5s+1)(10s+1)}Un ingeniero, levanta un modelo de segundo orden por medio de una identificación off-line obteniendo el siguiente modelo
G_m(s)=\frac{e^{-1.92s}}{44.08s^2+14.88s+1}Sintonizar el controlador PID utilizando la Sintesis Dahlin
%% Controle PID Dalhin
% Tecnicas de Controle de Processos
% Sergio Andres Castaño Giraldo
clc
clear all
close all
%% Simulacion
% Condições iniciais
clear all; clc; close all;
nit = 160; umin = 0; umax = 4.9;
u(1:10) = 0; erro(1:10) = 0; y(1:10) = 0;
% Referência
r(1:40) = 1; r(41:80) = 3; r(81:120) = 2; r(120:nit) = 2;
do(1:119)= 0;do(120:nit) = 0.1;
%% Planta
T=3.5; %Tempo de Muestreo
gps=tf([1],conv(conv([0.5 1],[1 1]),conv([5 1],[10 1])))
ftz=c2d(gps,T); %Planta Discreta
[Bp,Ap]=tfdata(ftz,'v'); %Divide Numerador em B e denominador em A
gpz=filt(Bp,Ap,T); %Funcion de transferencia discreta
%% MODELO
num=1;
den=[44.08 14.88 1];
gm=tf(num,den);
gm.outputdelay=1.92;
ftz=c2d(gm,T) %Planta Discreta
[B,A]=tfdata(ftz,'v'); %Divide Numerador em B e denominador em A
nb=length(B); %Orden de numerador
na=length(A)-1; %Orden de Denominador
nr=nb-1; %Orden de polinomio R
ns=na; %Orden de Polinomio S
filt(B,A,T)
%% Calculo de polo
dat=stepinfo((ftz)); % Respuesta del sistema en malla abierta
tau_ma=(dat.SettlingTime)/4; % constante de tiempo en malla abierta
Tmf=tau_ma*0.7; % constante de tiempo en malla cerrada "Deseada"
p1=exp(-T/Tmf);
d=floor(1.92/T); %Atraso
d=1;
%% Calculo PID Dahlin
klinha=(1-p1)/(sum(B)*(1+d*(1-p1)));
kc=-klinha*(A(2)+2*A(3));
ti=-((A(2)+2*A(3))*T)/(1+(A(2)+A(3)));
td=-(A(3)*T)/(A(2)+2*A(3));
%% Calculo do controle PID digital Dahlin
q0=kc*(1+T/ti+td/T);
q1=-kc*(1+(2*td)/T);
q2=(kc*td)/T;
for k = 5:nit
%Planta de 4ta orden
y(k)=Bp(2)*u(k-1)+Bp(3)*u(k-2)+Bp(4)*u(k-3)+Bp(5)*u(k-4)-Ap(2)*y(k-1)-Ap(3)*y(k-2)-Ap(4)*y(k-3)-Ap(5)*y(k-4)+do(k);
%error
erro(k)=r(k)-y(k);
u(k)=u(k-1)+q0*erro(k)+q1*erro(k-1)+q2*erro(k-2);
% Saturacion
if u(k) >= umax
u(k) = umax;
elseif u(k) <= umin
u(k) = umin;
end
end
t = 0:T:(nit-1)*T;
figure
subplot(2,1,1),plot(t,r,'--k',t,y,'-r','Linewidth',2)
xlabel('Tiempo (s)');
ylabel('Salida');
legend('y_r','y','Location','SouthEast')
grid on;
hold
subplot(2,1,2),plot(t,u,'b','Linewidth',2)
xlabel('Tiempo (s)');
ylabel('Control');
legend('u')
grid on;
La respuesta del control se muestra a continuación:
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í!


