Você está na página 1de 33

UNIVERSIDADE FEDERAL DO ABC

Centro de Engenharia, Modelagem e Ciências Sociais Aplicadas – CECS


EN3711 – Controle Discreto

RELATÓRIO 2
Efeito de compensadores

Prof. Dr. Magno Meza

Alexandre Pádua RA: 11018710


Guilherme Guerreiro RA: 11017110
Luis Gustavo Ribeiro RA: 11122911

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

O conceito de resposta em frquência tem um papel poderoso no controle


de sistemas digitais. A razão básica é a simplicidade dos métodos para efetuar
testes de resposta em frequência em sistemas discretizados, sendo a
amplitude e a fase as únicas grandezas que precisam ser averiguadas.
Três controladores serão calculados e discutidos ao longo do trabalho,
sendo eles compensador pro avanço de fase, controlador PI e PID. Os
controladores serão condicionados a situações semlhantes afim de se verificar
qual entre os mesmos apresenta melhor resultado.
As técnicas de projeto utilizadas foram extraídas da bibiliografia, para o
controle PI e PID material utilizado foi do Profº Magno, quanto ao compensador
por avanço de fase a referência foi livro de autor Ogata.

Objetivos

O objetivo desta experiência é desenvolver sistemas de realimentação


(Compensador por avanço de fase,PD, PI e PID) com o intuito de controlar a
posição do eixo de rotação da carga de um servomotor SRV02 da Quanser. Os
compensadores deverão ser projetados para satisfazer um conjunto de
especificações no domínio do tempo:

 𝐾𝑣 = 50 𝑠−1
 𝑀𝐺 ≥ 65º
 𝑀𝑅 ≥ 10𝑑𝐵

Os compensadores deverão ser projetados, simulados e implementados no


domínio discreto (plano z).

Metodologia

Para esse experimento foram utilizados os seguintes materiais:

- Computador Digital
- Servomecanismo SRV02 da Quanser.

O modelo matemático fornecido da Planta é:

As especificações da planta são conforme a Tabela 1.


Tabela 1

Taxa de amostragem mínima do sistema

Um boa taxa de amostragem é um fator crucial para o bom funcionamento


do sistemas digitais controlados. O crtério de 5% do ganho DC da planta foi
utilizado para determinar a frequência de corte e, consequentemente, a
frequência de amostragem mínima será 2x (duas vezes) a frequência de corte.

Planta do sistema discretizada:

A planta do sistema foi discretizada através da igualdade 𝑧 = esT

Transformada Bilinear

A técnica de projeto de controladores por resposta em frequência, depois


da discretização do sistema, utiliza a transformada bilinear para traçar o
diagrama de Bode.
𝑇
1+ 𝑤
𝑧= 2
𝑇
1− 𝑤
2
3.1 Compensador Por Avanço de Fase

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:

Para o cálculo do compensador por avanço de fase foi utilizado o seguinte


procedimento:

1. Calcula-se o Kc do compensador para se atender o Kv do projeto;


2. Traça-se o diagrama de bode de malha aberta com ganho ajustado;
3. Determine-se ϕ𝑚 , que é o ângulo que necessita ser adicionado para
atender o critério de margem de fase, mais uma variação entre 5 e 12
graus;
4. Calcula-se α, que é dado pela seguinte relação

;
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 é:

Para o cálculo do compensador PI foi utilizado o seguinte procedimento:

1. Como o circuito tem dois polos em zero, o critério Kv é atendido, assim


podemos fazer Kc =1.
2. Determine-se a frequência, 𝜔1, para o sistema não compensado, que é
igual -180º mais o critério de fase com uma variação de 8 graus, ou
seja, -180º+MF+8º;
3. Determina-se a fase do sistema não compensado para a frequência 𝜔1
;
4. Determina-se o ganho do sistema não compensado para a frequência
𝜔1

5. Calcula-se Kp, sendo o mesmo:

6. Calcula-se Ki, sendo o mesmo :

Compensador PID

A forma do compensador PID é:

1. Como o circuito tem dois polos em zero, o critério Kv é atendido, assim


podemos iniciar Ki=1 .
2. Através da tabela, escolher uma frequência, 𝜔1, na qual

3. Verificar se os parâmetros do projetos são atendidos.


4. Caso contrário, aumentar w1 e/ou diminuir Ki gradativamete até que
todos os critérios sejam atendidos

Resultados e Discussão

Taxa de amostragem do sistema


1.53
|𝐺(𝑗𝑤)| = = 5%
√((0.0253w)2 + 1)

𝑤 = 1208.84 => 𝑓𝑐 = 192.393

A frequência de amostragem de ser duas vezes a frequência de critica:

𝑓𝑠 = 2 ∗ 𝑓𝑐

𝑇 = 1/𝑓𝑠
Dessa forma a taxa de amostragem mínima deve ser:
𝑇 = 0.0026

Nas simulações utilizamos T=1ms para obter resultados mais precisos.

Função do sistema discretizada

O modelo do motor discretizado pode ser descrito como:

2.9727e-05 (z+0.987)

--------------------

(z-1) (z-0.9614)

Sample time: 0.001 seconds

Discrete-time transfer function.

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)

Compensador Por Avanço de Fase


Figure 1- Diagrama de Bode malha aberta

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

Dessa forma, Kc será :

𝐾𝑐 = 50 ∗ 0.653594771241829
𝐾𝑐 = 32.679738562091437

O diagrama de bode para o sistema não compensado:


Figure 2 - Diagrama de Bode malha aberta com ganho ajustado

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

Dessa forma podemos calcular o ganho que corresponde à:


𝐺𝑣 = −20 ∗ 𝑙𝑜𝑔10(1/√𝛼)
𝐺𝑣 = −5.124960592902877
Verificando na tabela:

w w_w |G(w_w)| |G(w_w)|dB fase



53.450 53.463 0.555 -5.115 -145.150
53.500 53.513 0.554 -5.129 -145.177
53.550 53.563 0.553 -5.142 -145.204

Temos que 𝑣 = 53.5

Esse será o novo ganho de crossover, corresponde a relação abaixo :


1
=𝑣
√𝛼 𝜏

𝜏 = 0.033720518790120

Portanto, todos os parâmetro do compensador por avanço de fase foram


encontrados. A estrutura do compensador no plano w é :

1.102 w + 32.6797
-----------------
0.010361 w + 1

Figure 3 - Diagrama de Bode do sistema compensado

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)

Estrutura do compensador por avanço de fase no plano z

102.97 (z-0.9708)
-----------------
(z-0.9079)

Sample time: 0.001 seconds


Discrete-time zero/pole/gain model.

Como resultado da resposta ao degrau do sistema controlado temos:


Mp= 1.6917% ts=0.098
1.4

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

Podemos observar que todos os critérios foram atendidos e além disso a


resposta do sistema a um sinal degral nos dám tempo de assentamento ts
0.098 e máximo sobre sinal de 1.69%.

Implementação no Simulink compensador por avanço de fase

Para efeitos de simulação adicionamos o contralador por avanço de fase


encontrado no simulink.

Figure 5 - Compensador por avanço de fase Simulink

Como próximo passo, simulamos o efeito para um entrada onda quadrada e onda triangular.
Figure 6 - Resposta a onda quadradada

Figure 7 - V(m) no compensador


Figure 8 - Resposta a onda triangular

Figure 9 – V(m) do compensador

4.3 Compensador PI

Como o critério de Kv é atendido pelo sistema propriamente devido o mesmo


ser de segunda ordem. Devemos nos preocupar em atender os demais critérios
de projeto. O critério de fase é de 65º com uma variação de 8 graus, assim
verificando a tabela para o sistema não compensado temos:

w w_w |G(w_w)| |G(w_w)|dB fase


...
9.900 9.908 0.150 -16.481 -106.938
9.950 9.958 0.149 -16.528 -107.020
10.000 10.008 0.148 -16.574 -107.103
...
Dessa forma encontramos a frequência 𝜔1

A definição de tetha será- -180º+ 65º + 8 – a fase do sistema em 𝜔1, portanto


tetha =-0.02º. Dessa forma, os valores de KP e KI podem ser calculados:

𝐾𝑝 = 6.704634977164434
e
𝐾𝑖 = −0.023456616749257

A resposta do sistema para o circuito compensado atende todos os critérios do


projeto, conforme o diagrama de Bode apresentado abaixo

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

A resposta ao degrau também apresentado bom resultados, sendo Mp abaixo de 10% e o


tempode de assentamento por volta de 0.25s
Mp= 0.050664% ts=0.25
1.4

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

Assim a forma final do controlador PI discretizado por ser escrita como:

0.0026526 (z+0.8771)
--------------------
(z-1) (z-0.6746)

Sample time: 0.01 seconds


Discrete-time zero/pole/gain model.

Simulação Simulink Controlador PI Digital

Representamos o controlador PI como um bloco de espaço de estado no


Simulink, dessa forma foi possível verificar seu comportamento a uma onda
quadrada e uma onda triangular

Figure 12 - Bloco controlador PI Simulink


Figure 13 - Onda quadradada

Figure 14 - Vm do sistema
Figure 15 - Onda triângular

Figure 16 - Vm do sistema

Compensador PID

Primeiramente, com a ajuda da tabela encontramos o valor de w, tal que


|Gc(w)| =1/|G(w)|.

w w_w 1/|G(w_w)| |G(w_w)|dB fase |Gc(w_w)|

...

1.700 1.700 1.112 -0.923 -92.521 1.178


1.750 1.750 1.145 -1.176 -92.595 1.125
1.800 1.800 1.178 -1.421 -92.669 1.077
...
Assim verificamos se os critérios do projeto foram atendidos,

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)

Figure 17 - Diagrama de Bode sistema compensado

Vemos, que o MG está abaixo do esperado, dessa forma aumentamos o valor


de w gradativamente até esse parâmetro seja atendido. Portanto, para o valor
w = 10 rad/s a o diagrama de Bode apresentou um resultado satisfatório.
Bode Diagram
Gm = 15 dB (at 47 rad/s) , Pm = 65 deg (at 10 rad/s)
150

100
Magnitude (dB)

50

-50
270
Phase (deg)

180

90

0
-2 0 2 4 6
10 10 10 10 10
Frequency (rad/s)

Figure 18 - Diagrama de Bode sistema compensado

Após as alterações efetuadas, todos os critérios foram atendidos. Porém,


quando observamos a resposta ao degrau, o tempo de assentamento ainda
não está abaixo de 0.2s.
Mp= 2.8463% ts=0.366
1.2

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]

Figure 19 - Resposta ao degrau unitário

O valor do tempo de assentamento pode ser melhorado diminuindo


gradativamente o valor de Ki. Encontramos o valor de Ki = 0.1 tal qual o tempo
de assentamento corresponde a 0.2s.
Mp= 1.847% ts=0.2
1.2

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]

Figure 20 - Resposta ao degrau sistema compensado e ajustado

Após as alterações efetuadas o valor do tempo de assentamento está dentro


do requisitos do projeto.
Dessa forma a função de transferência do controlador discretizado é:

Função de Transferência Discreta do controlador

-236.27 (z-1.056) (z-1)


-----------------------
(z+1) (z-1)

Sample time: 0.001 seconds


Discrete-time zero/pole/gain model.

Simulação Simulink
Também utilizamos o bloco de estado de espaço para representar o
controlador PID
Figure 21 - Controlador PID Simulink

Figure 22 - Reposta a onda quadrada

Figure 23 - Vm do sistema
Figure 24 - Respota a onda triangular

Figure 25 - Vm do sistema

Conclusão

Somente o controlador PID não apresentou resultados satisfatórios para o projeto


proposto, assim seu método de projeto deve ser revisado. Nesse caso, houve
saturação do compensador para uma onda triangular, assim não foi possível a atuação
correta de controlador.
Ambos controladores PI e PD apresentaram bons resultados, porém o controlador PD
foi mais preciso quanto o controle da fase do motor, contudo o mesmo exije mais do
sistema apresentando um pico de Vm próximo de 8 (oito) volts.
Referência

Apostila do curso – Controle Discreto – Universidade Federal do ABC – Profº


Dr. Magno

K. Ogata.

Discrete-Time Control Systems.

Prentiece Hall, New Jersey, 1995.

C. L. Phillips and H. T. Nagle.

Digital Control System Analysis and Design.

Prentice Hall, New Jersey, thrid edition, 1995.

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]);

disp('F.T. contínua da planta')


p=tf(np,dp)

% 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)];

disp('F.T. Pulsada da planta em w')

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);

fprintf(' w w_w |G(w_w)| |G(w_w)|dB


fase\n')
fprintf(' \n')
for xx=1:l1,
fprintf(' %8.3f %8.3f %8.3f %8.3f %8.3f
\n',dado(xx,:));
end
%% calculo de alpha
%MF 65 > ou igual a 65º
MF=pi*20/180;
alpha=(1-sin(MF+(12*pi/180)))/(sin(MF+(12*pi/180))+1); % fator de
atenuação

%% 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));

%% Diagrama de Bode circuito compensado


%w1=1.6;
ncw=Kc*[T1 1];
dcw=[alpha*T1 1];
pcw=tf(ncw,dcw);
G=pw*pcw;
figure(3)
margin(G);
grid;

%% Transformar Gc(w) em G(z)


[ncd,dcd]=w2z(ncw,dcw,T);

disp('Função de Transferência Discreta do controlador em z')


zpk(tf(ncd,dcd,T))
%%
disp('Função de Transferência em malha fechada')
num_ma=conv(n_pd,ncd)
den_ma=conv(d_pd,dcd)

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;

%% Figura mostra a resposta do sistema à entrada degrau unitária


%
figure(4);
x2=dstep(num_mf,den_mf,n);
%x2=dstep(G);
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;
% Projeto do
% CONTROLADOR PI

%%
close all
clear all
clc

format long;

K =1.53
tau =0.0254
% Sistema contínuo
np=K;
dp=conv([1 0],[tau 1]);

disp('F.T. contínua da planta')


p=tf(np,dp)

% 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);
%%

disp('F.T. Pulsada da planta em w')

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);

fprintf(' w w_w |G(w_w)| |G(w_w)|dB


fase\n')
fprintf(' \n')
for xx=1:l1,
fprintf(' %8.3f %8.3f %8.3f %8.3f %8.3f \n',dado(xx,:));
end
%% Ponto que corresponde
%
MF1=65+8;
auxi=-180+MF1
w1=9.95 % da tabela
f1=angle(evalfr(sysw,j*w1))*180/pi; %gain crossover frequence
if f1>0,
f1=angle(evalfr(sysw,j*w1))*180/pi-360;
end
%%
m1w1=abs(evalfr(sysw,j*w1));
tetha=-180+MF1-(f1);

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

%% Numerador e denominador do controlador no plano z


Kc2=a0*Kp/2*(T*wo+2)
z_0=(2-wo*T)/(2+wo*T)
z_p=1

%% Transformar Gc(w) em G(z)


ncz=Kc2*Kc*[1 -z_0]
dcz=[1 -z_p]
disp('Função de Transferência Discreta do controlador em z')
zpk(tf(ncz,dcz,T))
%% Diagrama de Bode circuito compensado
[A,B,C,D] = tf2ss(ncz,dcz);
[ncw,dcw]=z2w(ncz,dcz,T);
pcw=tf(ncw,dcw);
G=pw*pcw;
figure(3)
margin(G);
grid;

%%
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;

%% Figura mostra a resposta do sistema à entrada degrau unitária


%
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;
% Projeto do
% CONTROLADOR PID

%%
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]);

disp('F.T. contínua da planta')


p=tf(np,dp)

% 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 % Projeto do


% CONTROLADOR PID

%%
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]);

disp('F.T. contínua da planta')


p=tf(np,dp)

% 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)];

disp('F.T. Pulsada da planta em w')

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);

fprintf(' w w_w 1/|G(w_w)| |G(w_w)|dB


fase |Gc(w_w)| \n')
fprintf(' \n')
for xx=1:l1,
fprintf(' %8.3f %8.3f %8.3f %8.3f %8.3f %8.3f
\n',dado(xx,:));
end

%%
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);

disp('Função de Transferência Discreta do controlador')


zpk(tf(ncz,dcz,T))

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;

% Figura mostra a resposta do sistema à entrada degrau unitária

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;

Você também pode gostar