%% Diseño de un IMC y PI asociado para un proceso de 1er orden
% © 2021, Antonio Sala Piqueras. Universitat Politècnica de València. Todos los derechos reservados.
% Presentación en vídeo: http://personales.upv.es/asala/YT/V/imcpiord1.html
% Objetivo: diseñar un IMC, el PID equivalente y la modificación S-IMC debido a que se desea acelerar demasiado la dinámica.
% Tabla de Contenidos
% Modelo
% Diseño IMC
%     Trasformación a controlador PI estándar
% Skogestad IMC
%
%% Modelo

s=tf('s'); G=4/(s+1); %proceso
Model=G; %Modelo = proceso sin errores de modelado.

%% Diseño IMC
% Modelo de referencia deseado:

M_ref=1/(s/9+1); %ganancia 1, tiempo est. 95% de 3/9 segundos

% Comparamos respuesta con control bucle abierto u=1/dcgain(G), vs. IMC:

step(M_ref,G/dcgain(G)), grid on

% Parámetro Q (IMC explícito):

Q=inv(Model)*M_ref

% Regulador para IMC implícito:

K=minreal(feedback(Q,Model,+1),1e-6);
zpk(K)

%% Trasformación a controlador PI estándar
% A partir de las frecciones simples, podemos descomponer
% K=\frac{r}{s+p}+h

[r,p,h]=residue(K.num{:},K.den{:})

% Como p=0, entonces obtenemos \frac{K_i}{s}+K_p mediante:

Ki=r; Kp=h;
PI=Kp+Ki/s;

% Comprobamos que coincide con el regulador K:

zpk(PI)

%% Skogestad IMC
% Acelerar 9 veces resulta problemático en cuanto a respuesta ante perturbaciones de entrada:

RespInputDist=feedback(Model,K);
step(RespInputDist),grid on %tarda como en B.A.

% Con el criterio de Skogestad este diseño NO sería recomendable.
% Se recomendaría un regulador modificado, dado por:
% K_{S-IMC}=\frac{\tau_1}{\kappa\cdot \tau_c}\cdot \left(1+\frac{1}{\tau_I s}\right), \quad \tau_I=min(\tau_1,4\tau_c), \ \kappa=\text{dcgain(Model)}
% En este caso:

tau_1=-1/pole(Model) %del modelo
tau_c=-1/pole(M_ref)
tau_I=min(tau_1,4*tau_c)
K_simc=zpk(tau_1/dcgain(Model)/tau_c*(1+1/(tau_I*s)))
BC_ref=feedback(Model*K_simc,1);
BC_inputpert=feedback(Model,K_simc);
step(M_ref,G/dcgain(G),BC_ref), grid on,  legend('IMC','B.Abto.','S-IMC')
step(RespInputDist,BC_inputpert), grid on, legend('IMC','S-IMC')

%
%