clear; close all; format long % Nuevos ejercicios año 2017 % Control del nivel de líquido en una cisterna % Análisis transitorio y estacionario: modelo linealizado con variables % siendo q1, h y q2 s=tf('s'); % Modelo de la válvula Tv=5; % Constante de tiempo de la válvula en segundos Kv=2; % Ganancia estática de la válvula Gv=Kv/(s*Tv + 1); % Función de transferencia de la planta ro=1000; % Densidad del agua en Kg/m3 g=9.8; % Aceleración de la gravedad A1=pi/4; % Area entrada tanque en m2 A2=A1/100; % Area orificio salida tanque en m2 He=1; % Altura líquido en régimen estacionario Qe=34.77; % Caudal de líquido en régimen estacionario qo=1; % 1 Kg/s t=0:0.01:400/100-0.01; % Modelo de la cisterna o tanque: DH(s)/Dqi(s). Rt=2*He/0.03477; C=A1/He; W=1/Rt/C; Gt=(Rt/10)/(s*Rt*C + 1); dqi=qo*ones(length(t),1); % figure; lsim(Gt,dqi,t) % legend('Variación de Altura en cm respecto a q1=1Kg/s') figure; step(qo*Gt); legend('Variación de Altura en cm respecto a q1=1Kg/s') % Respuesta en frecuencia figure; bode(qo*Gt) legend('Función de Transferencia dh(s)/dq1(s)') % Dinamica entre el fluido entrante y el saliente: Dq2(s)/Dq1(s) Gq=W/(s + W); figure; step(qo*Gq) legend('Variación de caudal dq2(t) respecto a dq1(t)') % Función de transferencia de lazo abierto sin compensador % Gla_act=series(Gt,Gv); % figure; step(Gla_act) % legend('Respuesta a Lazo Abierto con actuador') % Respuesta en frecuencia figure; bode(qo*Gq) legend('Función de Transferencia dq2(s)/dq1(s)') % Función de transferencia de lazo abierto con actuador % Gv=Kv*exp(-Tv*s); Gla_act=series(Gt,Gv); figure; step(Gla_act) legend('Respuesta a Lazo Abierto con actuador') %% Compensador PID % Gc=Kp + (Ki/s) + (s*Kd); %% Compensador proporcional % Gc=Kp; % Gla=Gt; % Gc1=0.5; % % Función de transferencia de lazo abierto con compensador % Gla1=series(Gc1,Gla); % % Función de transferencia de lazo cerrado con compensador % Glc1=feedback(Gla1,1); % % Gc2=1; % Gla2=series(Gc2,Gla); % Glc2=feedback(Gla2,1); % % Gc3=1.2; % Gla3=series(Gc3,Gla); % Glc3=feedback(Gla3,1); % % Gc4=1.5; % Gla4=series(Gc4,Gla); % Glc4=feedback(Gla4,1); % % Gc5=2; % Gla5=series(Gc5,Gla); % Glc5=feedback(Gla5,1); % % Gc6=5; % Gla6=series(Gc6,Gla); % Glc6=feedback(Gla6,1); % % % Respuesta de lazo cerrado % figure % step(Glc1,Glc2,Glc3,Glc4,Glc5,Glc6) % title('Respuesta a lazo cerrado') % legend('Kp=0,5','Kp=1','Kp=1,2','Kp=1,5','Kp=2','Kp=5') % %% -------------------------------------------------------------- % % Compensador proporcional-integral % % Probar este conjunto de ganancias para observar los efectos: % Kp=2; % Ganancia proporcional % Ki=0.05; % Ganancia integral % % % cero_PI=Ki/Kp; % % cero_PI=0.005714; % % Ki=Kp*cero_PI; % % Gc=Kp + (Ki/s); % % Gcpi=0.010092*(s+0.005714)/s; % % % Función de transferencia de lazo abierto % Glac=series(Gla,Gc); % % % Función de transferencia de lazo cerrado % Glc=feedback(Glac,1); % % [num,den]=tfdata(Glc,'v'); % % raices_num=roots(num) % raices_den=roots(den) % % zpk(Glc) % % polos_la=pole(Glac); % polos_lc=pole(Glc); % % t=0:0.01:100-0.01; % figure; pzmap(Glc) % figure; step(3*Glc,t) % legend('Respuesta LC con PI') % [W,Z]=damp(Glc) % figure; bode(Glc) % %% -------------------------------------------------------------- % % Compensador proporcional-derivativo % % Probar este conjunto de ganancias para observar los efectos: % Kp=6; % Ganancia proporcional % Kd=4.75; % Ganancia derivativa % % Gc=Kp + s*Kd; % % % Función de transferencia de lazo abierto % Glac=series(Gla,Gc); % % % Función de transferencia de lazo cerrado % Glc=feedback(Glac,1); % % [num,den]=tfdata(Glc,'v'); % % raices_num=roots(num) % raices_den=roots(den) % % zpk(Glc) % % polos_la=pole(Glac); % polos_lc=pole(Glc); % % figure; pzmap(Glc) % figure; step(3*Glc) % legend('Respuesta LC con PD') % % [W,Z]=damp(Glc) % figure; bode(Glc) % %% -------------------------------------------------------------- % % Compensador PID % close all % clc % Gcpi=0.08*(s+0.18)/s; % % Gcpd=4.75*(s+1.263); % Gcpid=Gcpi*Gcpd; % % % Reajustado % Gcpid=0.39478*(s+1.263)*(s+0.18)/s; % % % Función de transferencia de lazo abierto % Glac=series(Gla,Gcpid); % % % Función de transferencia de lazo cerrado % Glc=feedback(Glac,1); % % [num,den]=tfdata(Glc,'v'); % % raices_num=roots(num) % raices_den=roots(den) % % zpk(Glc) % % polos_la=pole(Glac); % polos_lc=pole(Glc); % % figure; pzmap(Glc) % figure; step(3*Glc) % [W,Z]=damp(Glc) % % legend('Respuesta LC con PID') % figure; bode(Glc) % figure; bode(Glac) % figure; rlocus(Glac)