Está en la página 1de 11

INFORME-PRACTICAS-5-Y-6.

pdf

juanmyy

Regulación Automática

3º Grado en Ingeniería Química

Facultad de Ciencias
Universidad de Cádiz

Reservados todos los derechos.


No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-6673489

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Dado un sistema de primer orden con retardo, determinar los valores de la Gp y Gc formados
por los controladores P, PI y PID ya estudiados anteriormente, que necesitaremos saber para

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
conocer el valor de la salida del sistema.

Vamos a estudiar dos tipos de métodos diferentes en MATLAB para resolver la práctica.

Veamos cada uno de ellos

Esta es la tabla que aplicaremos en este método para una respuesta de frecuencia, donde:

𝜔𝑐 𝑒𝑠 𝑙𝑎 𝑓𝑟𝑒𝑐𝑢𝑒𝑛𝑐𝑖𝑎 𝑑𝑒 𝑐𝑟𝑢𝑐𝑒, 𝐾𝑐 𝑙𝑎 ú𝑙𝑡𝑖𝑚𝑎 𝑔𝑎𝑛𝑎𝑛𝑐𝑖𝑎, 𝑇𝐶 = 𝑦 𝑎 = 𝑘𝐿/𝑇
ω𝐶
La función de transferencia con la que vamos a trabajar es la siguiente:
5.925
𝐺(𝑠) = ∗ 𝑒 −18.8
88.5𝑠 + 1
Calculamos “a” y determinamos los valores a partir de la función Ziegler, que nos permitirá
agilizar los cálculos.

En MATLAB vamos a realizar el siguiente procedimiento:

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-6673489

si lees esto me debes un besito


Regulación Automática
Banco de apuntes de la
Escribimos nuestra función de transferencia de primer orden con retardo.

G=tf(5.925,[88.5 1],'InputDelay',18.5);

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
k=5,925; %ganancia
T=88.5; %tau
L=18.5; %retardo
N=10; %declaramos que sea 10 para que sea de un orden alto

La función Ziegler en comandos se expresaría de la siguiente forma:

function [Gc,Kp,Ti,Td,H]=ziegler(key,vars);
Ti=[]; Td=[];
if length(vars)==4,
K=vars(1); L=vars(2);
T=vars(3); N=vars(4); a=K*L/T;
if key==1, Kp=1/a;
elseif key==2, Kp=0.9/a; Ti=3.33*L;
elseif key==3 | key==4
Kp=1.2/a; Ti=2*L; Td=L/2;
end
elseif length(vars)==3,
K=vars(1); Tc=vars(2); N=vars(3);
if key==1,
Kp=0.5*K;
elseif key==2,
Kp=0.4*K; Ti=0.8*Tc;
elseif key==3 | key==4
Kp=0.6*K; Ti=0.5*Tc; Td=0.12*Tc;
end
elseif length(vars)==5,
K=vars(1); Tc=vars(2);
rb=vars(3); N=vars(5);
pb=pi*vars(4)/180; Kp=K*rb*cos(pb);
if key==2,
Ti=-Tc/(2*pi*tan(pb));
elseif key==3 | key==4
Ti=Tc*(1+sin(pb))/(pi*cos(pb));
Td=Ti/4;
end
end
[Gc,H]=writepid(Kp,Ti,Td,N,key);

En la cual, key indica el tipo de controlador que usaremos, en el cual corresponde 1 al


controlador P, 2 al controlador PI y 3 al controlador PID.

El parámetro vars indica las variables del sistema.


vars = [ K, L, T, N]
Aplicamos la síntesis de Ziegler para construir nuestro sistema en bucle cerrado, con su
controlador correspondiente a cada caso.

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-6673489

si lees esto me debes un besito


[Gc1,kp]=ziegler(1,[k,L,T,N]);

[Gc2,kp2,Ti2]=ziegler(2,[k,L,T,N]);

[Gc3,kp3,Ti3,Td3]=ziegler(3,[k,L,T,N]);

Guardamos el fichero y ejecutamos para conocer todas las variables.

Si queremos representar las funciones, usaremos los comandos siguientes:

G_cl=feedback(Gc1*G,1);
G_cl2=feedback(Gc2*G,1);
G_cl3=feedback(Gc3*G,1);
step(G_cl,G_cl2,G_cl3)

Donde la curva amarilla representa el P, la roja el PI y la azul el PID respectivamente.

Los diagramas de bode se aplican para diferentes aspectos, en nuestro caso lo aplicaremos
para generar un vector de frecuencias linealizado en una gráfica con escala logarítmica.

Conocida la función de transferencia del sistema, vamos a obtener los márgenes de ganancia
de nuestra planta, usando los siguientes comandos.
[Kc,pp,wg,wp]=margin(G1); [Kc,wg], Tc=2*pi/wg

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-6673489

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Kc corresponde a la última ganancia antes de que nuestro sistema comience a oscilar.

En este tipo de método sustituiremos nuestra entrada escalón por una sinusoidal cuya salida
tendrá la misma frecuencia que la señal de entrada, pero distinta amplitud y pasos (varían).

A continuación, aplicamos Ziegle-Nichols y creamos una figura nueva con los bucles y
ejecutamos.

En comparación con la gráfica generada por el método 1, en esta el pico de la curva es menor y
tarda menos en estabilizarse el sistema.

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-6673489

si lees esto me debes un besito


Seguimos buscando relaciones empíricas sin necesidad de conocer el modelo matemático.

Existen dos tipos de tablas, unas para pseudocontrol y otras para regulador (existen
perturbaciones).

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Independientemente de la tabla, necesitare conocer a, K,T y L, donde por semejanza de
triángulos a=KL/T.

Dada la siguiente función de transferencia:


200000
𝐺(𝑠) =
𝑠5 + 60𝑠 4 + 1435𝑠 3 + 17100𝑠 2 + 101524𝑠 + 240240
Determinamos mediante la aproximación de getfod los valores de K, T, L y a.

G=tf(200000,[1,60,1435,17100,101524,240240])
k=0.8325;
T=0.1;
L=0.3226;
N=10;
G1=tf(0.8325,[0.1,1],'InputDelay',0.326);
[k2,L2,T2]=getfod(G);
G2=tf(k2,[T2,1],'InputDelay',L2);
[k3,L3,T3]=getfod(G,1);
G3=tf(k3,[T3,1],'InputDelay',L3);
step(G,G3);
grid

Al final, lo que queremos llegar a hacer es aproximar nuestra función a una de primer orden
con retardo.

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-6673489

si lees esto me debes un besito


Aplicamos la función chrpid en MATLAB para determinar los valores de salida de nuestro
sistema.

[Gc,Kp,Ti,Td,H]=chrpid(key,tt,vars)
K=vars(1); L=vars(2);
T=vars(3); N=vars(4);
a=K*L/T; ovshoot=vars(5); Ti=[]; Td=[];
if tt==1, TT=T; else TT=L; tt=2; end
if ovshoot==0,
KK=[0.3,0.35,1.2,0.6, 1, 0.5;
0.3,0.6, 4, 0.95,2.4,0.42];
else,
KK=[0.7,0.6,1, 0.95,1.4,0.47;
0.7,0.7,2.3,1.2, 2, 0.42];
end
switch key
case 1,
Kp=KK(tt,1)/a;
case 2
Kp=KK(tt,2)/a; Ti=KK(tt,3)*TT;
case {3,4}
Kp=KK(tt,4)/a; Ti=KK(tt,5)*TT;
Td=KK(tt,6)*L;
end
[Gc,H]=writepid(Kp,Ti,Td,N,key);

En comparación con la función de Ziegler-Nichols, como existen dos tablas dependiendo del
criterio que vamos a utilizar en esta práctica, tomaremos tt=1 si vamos a usar la primera tabla
y tt distinto de 1 si usamos la segunda.

Para el caso de que tt =1

[Gc3,kp,Ti,Td]=chrpid(3,1,[k3,L3,T3,N,20]);
G_c3=feedback(G,Gc3);
step(G_c3); hold on;
[Gc2,kp2,Ti2,Td2]=chrpid(3,1,[k3,L3,T3,N,0]);
G_c2=feedback(G,Gc2);
step(G_c2)

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-6673489

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Si tt es distinto de 1

[Gc3,kp,Ti,Td]=chrpid(3,0,[k3,L3,T3,N,20]);
G_c3=feedback(G,Gc3);
step(G_c3); hold on;
[Gc2,kp2,Ti2,Td2]=chrpid(3,0,[k3,L3,T3,N,0]);
G_c2=feedback(G,Gc2);

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
step(G_c2)

En el caso de que tt sea 1, el sistema se estabilizará antes y tomará valores de mayor amplitud.

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-6673489

si lees esto me debes un besito

También podría gustarte