Escolar Documentos
Profissional Documentos
Cultura Documentos
RELATÓRIO 2
Efeito de compensadores
Santo André
Dezembro de 2015
Sumário
Introdução ..................................................................................................................................... 3
Objetivos ....................................................................................................................................... 3
Metodologia .................................................................................................................................. 3
Resultados ..................................................................................................................................... 6
Conclusão .................................................................................................................................... 22
Referência ................................................................................................................................... 23
Códigos MATLAB ......................................................................................................................... 24
Introdução
Objetivos
𝐾𝑣 = 50 𝑠−1
𝑀𝐺 ≥ 65º
𝑀𝑅 ≥ 10𝑑𝐵
Metodologia
- Computador Digital
- Servomecanismo SRV02 da Quanser.
Transformada Bilinear
Dessa forma do compensador por avanço de fase pode ser calculado para
atender os critérios do projeto. O Compensador por avanço de fase tem o
seguinte formato:
;
5. Achar a frequência, 𝜗𝑐 onde a magnitude do sistema não compensado é
igual −20 ∗ log(1/√𝛼 ).
6. Por fim, determinar 𝜏, sendo o mesmo dado:
1
𝜏=
𝜗𝑐 √𝛼
Compensador PI
A forma do compensador PI é:
Compensador PID
Resultados e Discussão
𝑓𝑠 = 2 ∗ 𝑓𝑐
𝑇 = 1/𝑓𝑠
Dessa forma a taxa de amostragem mínima deve ser:
𝑇 = 0.0026
2.9727e-05 (z+0.987)
--------------------
(z-1) (z-0.9614)
Transformada Bilinear
Temos como resultado da transformação linear da planta do sistema
discretizada:
-9.8797e-08 (w+3.048e05) (w-2000)
---------------------------------
w (w+39.36)
Bode Diagram
Gm = 32.1 dB (at 282 rad/s) , Pm = 46 deg (at 36.6 rad/s)
50
0
Magnitude (dB)
-50
-100
-150
270
225
Phase (deg)
180
135
90
0 1 2 3 4 5 6 7
10 10 10 10 10 10 10 10
Frequency (rad/s)
Kv = lim 𝑤 ∗ 𝐺𝑐(𝑤)𝐺(𝑤) = 50
𝑤→0
𝐾𝑐 = 50 ∗ 0.653594771241829
𝐾𝑐 = 32.679738562091437
Bode Diagram
Gm = 32.1 dB (at 282 rad/s) , Pm = 46 deg (at 36.6 rad/s)
50
0
Magnitude (dB)
-50
-100
-150
270
225
Phase (deg)
180
135
90
0 1 2 3 4 5 6 7
10 10 10 10 10 10 10 10
Frequency (rad/s)
Se adicionarmos 20º ao sistema será suficiente para atender o critério de fase
dessa forma:
(1 − 𝑠𝑖𝑛(20º + 12º))
𝛼=
(1 + 𝑠𝑖𝑛(20º + 12º))
𝛼 = 0.307258524522468
𝜏 = 0.033720518790120
1.102 w + 32.6797
-----------------
0.010361 w + 1
Bode Diagram
Gm = 30.5 dB (at 463 rad/s) , Pm = 66.8 deg (at 53.5 rad/s)
20
0
Magnitude (dB)
-20
-40
-60
-80
-100
270
225
Phase (deg)
180
135
90
1 2 3 4 5 6 7
10 10 10 10 10 10 10
Frequency (rad/s)
102.97 (z-0.9708)
-----------------
(z-0.9079)
1.2
Resposta ao degrau unitário
0.8
0.6
0.4
0.2
0
0 2 4 6 8 10 12 14 16 18 20
Tempo [s]
Figure 4 - Reposta ao degrau unitário - compensador por avanço de fase
Como próximo passo, simulamos o efeito para um entrada onda quadrada e onda triangular.
Figure 6 - Resposta a onda quadradada
4.3 Compensador PI
𝐾𝑝 = 6.704634977164434
e
𝐾𝑖 = −0.023456616749257
Bode Diagram
Gm = 26.4 dB (at 91.8 rad/s) , Pm = 73 deg (at 9.95 rad/s)
40
20
Magnitude (dB)
-20
-40
-60
-80
270
225
Phase (deg)
180
135
90
0 1 2 3 4 5
10 10 10 10 10 10
Frequency (rad/s)
Figure 10 - Diagrama de Bode - sistema compensado
1.2
Resposta ao degrau unitário
0.8
0.6
0.4
0.2
0
0 2 4 6 8 10 12 14 16 18 20
Tempo [s]
Figure 11 - Resposta ao degrau unitario
0.0026526 (z+0.8771)
--------------------
(z-1) (z-0.6746)
Figure 14 - Vm do sistema
Figure 15 - Onda triângular
Figure 16 - Vm do sistema
Compensador PID
...
Bode Diagram
Gm = -251 dB (at 6.64e-07 rad/s) , Pm = 65 deg (at 1.75 rad/s)
100
50
Magnitude (dB)
-50
-100
315
Phase (deg)
270
225
180
-2 0 2 4 6
10 10 10 10 10
Frequency (rad/s)
100
Magnitude (dB)
50
-50
270
Phase (deg)
180
90
0
-2 0 2 4 6
10 10 10 10 10
Frequency (rad/s)
1
Resposta ao degrau unitário
0.8
0.6
0.4
0.2
-0.2
0 2 4 6 8 10 12 14 16 18 20
Tempo [s]
1
Resposta ao degrau unitário
0.8
0.6
0.4
0.2
-0.2
0 2 4 6 8 10 12 14 16 18 20
Tempo [s]
Simulação Simulink
Também utilizamos o bloco de estado de espaço para representar o
controlador PID
Figure 21 - Controlador PID Simulink
Figure 23 - Vm do sistema
Figure 24 - Respota a onda triangular
Figure 25 - Vm do sistema
Conclusão
K. Ogata.
Códigos MATLAB
% Projeto do
% COMPENSADOR POR AVANÇO DE FASE
%
%%
close all
clear all
clc
format long;
K =1.53
tau =0.0254
% Sistema contínuo
np=K;
dp=conv([1 0],[tau 1]);
% Aplicando a transformada z
% T é o período de amostragem
disp('Período de amostragem')
%T=0.0187 % Calculado pelo critério de 5% ganho DC e fs=10*fc
%T=0.01
T=0.001
disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%')
disp('F.T. Pulsada da planta')
disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%')
pd=c2d(p,T)
[n_pd,d_pd]=tfdata(pd,'v');
polo_pd=roots(d_pd)
zpk(pd)
%% Transformação de z para w
% 1+T*w/2
% z = --------
% 1-T*w/2
[nw1,dw1] = z2w(n_pd,d_pd,T)
pw=tf(nw1,dw1)
%%
dw2=[dw1(1) dw1(2)];
printsys(nw1,dw1,'w')
zpk(pw)
%% Calculo de Kc
Kv= 50; %Kv deve ser 50 s^-1
Kc=Kv*dw1(1,2)/nw1(1,3);
%Kc=2/abs(evalfr(tf(nw1,dw2),0))
%%
G1_w=tf(Kc*nw1,dw1);
figure(1);
margin(nw1,dw1); %Diagrama de Bode de malha aberta.
grid;
figure(2);
margin(G1_w); %Diagrama de Bode de malha aberta com ganho ajustado,
grid;
dado=[];
sysw=G1_w;
%
for ww=0.05:0.05:300
w1=j*ww;
m1=abs(evalfr(sysw,w1));
m1db=20*log10(m1);
f1=angle(evalfr(sysw,w1))*180/pi;
w_w=2/T*tan(ww*T/2);
if f1>0,
f1=atan(evalfr(sysw,w1))*180/pi-360;
end
w_w=2/T*tan(ww*T/2);
dado=[dado; ww w_w m1 m1db f1];
end
%%
[l1,c1]=size(dado);
%% Calculo de T1
G_v=-20*log10(1/sqrt(alpha));%Ponto onde a magninute do sistema não
compensando
%achar Wv que corresponde G_v no gráfico
%T1=1/(25.55*sqrt(alpha));
%T1=1/(25.4*sqrt(alpha));
T1=1/(53.5*sqrt(alpha));
h_ma=tf(num_ma,den_ma,T)
sysd_mf=feedback(h_ma,1)
[num_mf,den_mf]=tfdata(sysd_mf,'v')
n=round(20/T)+1;
tempo=(0:1:n-1)*T;
%%
close all
clear all
clc
format long;
K =1.53
tau =0.0254
% Sistema contínuo
np=K;
dp=conv([1 0],[tau 1]);
% Aplicando a transformada z
% T é o período de amostragem
disp('Período de amostragem')
%T=0.0187 % Calculado pelo critério de 5% ganho DC e fs=10*fc
T=0.01
%T=0.001
disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%')
disp('F.T. Pulsada da planta')
disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%')
pd=c2d(p,T)
[n_pd,d_pd]=tfdata(pd,'v');
polo_pd=roots(d_pd)
zpk(pd)
%% Transformação de z para w
% 1+T*w/2
% z = --------
% 1-T*w/2
[nw1,dw1] = z2w(n_pd,d_pd,T)
pw=tf(nw1,dw1);
%%
printsys(nw1,dw1,'w')
zpk(pw)
%% Calculo de Kc
Kv= 50; %Kv deve ser 50 s^-1
dw2=[dw1(1) dw1(2)];
Kc=1
G1_w=Kc*tf(nw1,dw1);
figure(1);
margin(nw1,dw1);
grid;
figure(2);
margin(G1_w);
grid;
%% Tabela para circuito não compensado
dado=[];
sysw=G1_w;
for ww=0.1:0.05:20
w1=j*ww;
m1=abs(evalfr(sysw,w1));
m1db=20*log10(m1);
f1=angle(evalfr(sysw,w1))*180/pi;
w_w=2/T*tan(ww*T/2);
if f1>0,
f1=angle(evalfr(sysw,w1))*180/pi-360;
end
w_w=2/T*tan(ww*T/2);
dado=[dado; ww w_w m1 m1db f1];
end
[l1,c1]=size(dado);
Kp=cos(tetha*pi/180)/m1w1;
Ki=-sin(tetha*pi/180)*w1/m1w1;
wo=Ki/Kp;
wp=0
Kc1=Kp*(wo*T+2)/2
zo=(2-wo*T)/(2+T*wo)
zp=1
if cos(tetha*pi/180)>m1w1
disp('Verifica');
else
disp('Tente novamente');
end
a1=(1-m1w1*cos(tetha*pi/180))/(w1*m1w1*sin(tetha*pi/180));
b1=(cos(tetha*pi/180)-m1w1)/(w1*sin(tetha*pi/180));
a0=1;
wo=a0/a1
wp=1/b1
%%
disp('Função de Transferência em malha fechada')
num_ma=conv(n_pd,ncz)
den_ma=conv(d_pd,dcz)
h_ma=tf(num_ma,den_ma,T)
sysd_mf=feedback(h_ma,1)
[num_mf,den_mf]=tfdata(sysd_mf,'v')
n=round(20/T)+1;
tempo=(0:1:n-1)*T;
%%
close all
clear all
clc
format long;
%K =1.528565072223069;
K =1.53
tau =0.0254
% Sistema contínuo
np=K;
dp=conv([1 0],[tau 1]);
% Aplicando a transformada z
% T é o período de amostragem
disp('Período de amostragem')
%T=0.0187 % Calculado pelo critério de 5% ganho DC e fs=10*fc
%T=0.01
T=0.001
disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%')
disp('F.T. Pulsada da planta')
disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%')
pd=c2d(p,T)
[n_pd,d_pd]=tfdata(pd,'v');
polo_pd=roots(d_pd)
zpk(pd)
%%
close all
clear all
clc
format long;
%K =1.528565072223069;
K =1.53
tau =0.0254
% Sistema contínuo
np=K;
dp=conv([1 0],[tau 1]);
% Aplicando a transformada z
% T é o período de amostragem
disp('Período de amostragem')
%T=0.0187 % Calculado pelo critério de 5% ganho DC e fs=10*fc
%T=0.01
T=0.001
disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%')
disp('F.T. Pulsada da planta')
disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%')
pd=c2d(p,T)
[n_pd,d_pd]=tfdata(pd,'v');
polo_pd=roots(d_pd)
zpk(pd)
%% Transformação de z para w
% 1+T*w/2
% z = --------
% 1-T*w/2
%
[nw1,dw1] = z2w(n_pd,d_pd,T)
pw=tf(nw1,dw1);
dw2=[dw1(1) dw1(2)];
printsys(nw1,dw1,'w')
zpk(pw)
Kv=50;
%Kc=Kv/abs(evalfr(tf(nw1,dw2),0))
Kc=1;
G1_w=Kc*tf(nw1,dw1);
figure(1);
margin(nw1,dw1);
grid;
%%
dado=[];
sysw=G1_w;
for ww=0.1:0.05:20
w1=j*ww;
m1=abs(evalfr(sysw,w1));
m1db=20*log10(m1);
f1=angle(evalfr(sysw,w1))*180/pi;
w_w=2/T*tan(ww*T/2);
if f1>0,
f1=angle(evalfr(sysw,w1))*180/pi-360;
end
m1w1=abs(evalfr(sysw,j*w1))
tetha=-180+65-(f1)
Kp=cos(tetha*pi/180)/m1w1
Ki = 1
Kd=sin(tetha*pi/180)/(m1w1*w1)+Ki/(w1)^2
ncw=[Kd Kp Ki]
dcw=[0 1 0]
n_maw=conv(nw1,ncw);
d_maw=conv(dw1,dcw);
Gc=tf(n_maw,d_maw);
mc=abs(evalfr(Gc,w1));
w_w=2/T*tan(ww*T/2);
dado=[dado; ww w_w 1/m1 m1db f1 mc];
end
[l1,c1]=size(dado);
%%
w1= 10;
f1=angle(evalfr(sysw,j*w1))*180/pi;
if f1>0,
f1=angle(evalfr(sysw,j*w1))*180/pi-360;
end
m1w1=abs(evalfr(sysw,j*w1))
tetha=-180+65-(f1)
if cos(tetha*pi/180)>m1w1
disp('Verifica');
else
disp('Tente novamente');
end
%%
Kp=cos(tetha*pi/180)/m1w1
Ki = 0.1;
Kd=sin(tetha*pi/180)/(m1w1*w1)+Ki/(w1)^2
ncw=[Kd Kp Ki]
dcw=[0 1 0]
n_maw=conv(nw1,ncw);
d_maw=conv(dw1,dcw);
figure(3)
margin(n_maw,d_maw)
grid;
%%
Gw_c=tf(ncw,dcw);
Gz_c = c2d(Gw_c,T,'tustin');
%dC=tf(ncz,dcz,T);
[ncz,dcz]=tfdata(Gz_c,'v');
[A,B,C,D] = tf2ss(ncz,dcz);
num_ma=conv(n_pd,ncz)
den_ma=conv(d_pd,dcz)
h_ma=tf(num_ma,den_ma,T)
sysd_mf=feedback(h_ma,1)
[num_mf,den_mf]=tfdata(sysd_mf,'v')
n=round(20/T)+1;
tempo=(0:1:n-1)*T;
figure(4);
x2=dstep(num_mf,den_mf,n);
stairs(tempo,x2)
grid;
S=stepinfo(sysd_mf,'RiseTimeLimits',[0.02,0.98]);
Mp=S.Overshoot
ts=S.SettlingTime
title(['\fontsize{18} M_p= ',num2str(Mp),'%',...
' \fontsize{18} t_s=', num2str(ts)])
line([0 (n-1)*T],[1.02 1.02],'LineStyle','-.');
line([0 (n-1)*T],[0.98 0.98],'LineStyle','-.');
ylabel('Resposta ao degrau unitário');
xlabel('Tempo [s]');
box on;
hold off;