Você está na página 1de 32

SUMÁRIO

OBJETIVOS 2
EXERCÍCIOS 2
CÓDIGO DOS PROGRAMAS 21
REFERÊNCIAS 32

1
OBJETIVOS

“Este laboratório tem por objetivo utilizar o Matlab para:


● 1.1. Estudar a saída de sistemas de ordem 2 e sistemas de ordem maior que 2;
● 1.2. Ajudar a obter um esboço detalhado do Lugar das Raízes, e compará-la com o
Lugar das Raízes real..” (RELATÓRIO 02)

EXERCÍCIOS

3.1. Considere o sistema abaixo com as seguintes funções de transferência:

a) Manual:

2
Computacional:
H=

3
polos =

0
1

zeros =

0×1 empty double column vector

Sigma_a: 0.5
Theta_a: 1.5708 4.7124 [rad]
Theta_a: 90 270 [graus]
Pontos onde as raizes deixam eixo real: 0.5

Fonte: Os autores.

4
b)
Manual:

Computacional:
H=

5
polos =

0
2
1

zeros =

0×1 empty double column vector

Sigma_a: 1
Theta_a: 1.0472 3.1416 5.236 [rad]
Theta_a: 60 180 300 [graus]
Pontos onde as raizes deixam eixo real: 1.5774 0.42265

Fonte: Os autores.

6
c)
Manual:

Computacional:
polos =

7
10
1

zeros =

0×1 empty double column vector

Sigma_a: 3.6667
Theta_a: 1.0472 3.1416 5.236 [rad]
Theta_a: 60 180 300 [graus]
Pontos onde as raizes deixam eixo real: 6.8465 0.48687

Fonte: Os autores.

d)
Manual:

8
Computacional:
polos =

0
100
1

9
zeros =

0×1 empty double column vector

Sigma_a: 33.6667
Theta_a: 1.0472 3.1416 5.236 [rad]
Theta_a: 60 180 300 [graus]
Pontos onde as raizes deixam eixo real: 66.8346 0.498744

Fonte: Os autores.

e)
Manual:

10
Computaciona:
G=

s+4
-------
s^2 + s

11
Continuous-time transfer function.

polos =

0
-1

zeros =

-4
Sigma_a: 3
Theta_a: 3.1416 [rad]
Theta_a: 180 [graus]
Pontos onde as raizes deixam eixo real: -7.4641 -0.5359

Fonte: Os autores.

12
3.2. Esboce o lugar geométrico das raízes para o sistema mostrado na Figura 6A e
determine:

O lugar geométrico das raízes para o sistema apresentado é ilustrado abaixo no


Gráfico 1.

13
Gráfico 1: Lugar geométrico das raízes do sistema apresentado.

Fonte: Os autores

Para nos auxiliar na visualização dos itens pedidos podemos ampliar nosso gráfico
como mostrado abaixo.

14
Gráfico 2: Vista ampliada do lugar geométrico das raízes.

Fonte: Os autores.

a. O ponto exato e o ganho onde o lugar geométrico cruza a reta de fator de


amortecimento 0,45.
Podemos observar na imagem abaixo o local exato em que ocorre o cruzamento do
lugar geométrico com a reta de fator de amortecimento.

15
Gráfico 3: Local exato de encontro da reta fator com lugar geométrico.

Fonte: Os autores.

As coordenadas desse ponto, juntamente com o ganho K são apresentados a seguir:

Fonte: Os autores.

b. O ponto exato e o ganho onde o lugar geométrico cruza o eixo jω.

16
Podemos observar na imagem abaixo o local exato em que ocorre o cruzamento do
lugar geométrico com o eixo jw. Nesse caso a imagem apresenta somente a localização da
parte positiva, porém como podemos encontrar mais abaixo temos o ponto tanto positivo
quanto negativo.

Gráfico 4: Local exato do cruzamento do eixo jw com o lugar geométrico.

Fonte: Os autores.

As coordenadas desse ponto, juntamente com o ganho K são apresentados a seguir.


Devemos desconsiderar a parte real apresentada (-0.0002), pois se dá devido ao clique no
gráfico não ser com exata precisão.

17
Fonte: Os autores.

c. O ponto de saída do eixo real


O ponto de saída do eixo real pode ser vista no Gráfico 5 abaixo.

Gráfico 5: Local do ponto de saída do eixo real.

Fonte: Os autores.

18
O valor do ponto em que ocorre a saída do eixo real pode ser visto abaixo, juntamente
com seu ganho K.

Fonte: Os autores.
O Gráfico 6 abaixo mostra exatamente todos os pontos que foram selecionados,
permitindo uma melhor visualização dos mesmos.

Gráfico 6: Localização dos pontos em que foram coletados os dados apresentados.

Fonte: Os autores.

19
Os valores encontrados do ganho K para resultar em 1,52% de ultrapassagem estão
representados abaixo.

Fonte: Os Autores

O resultado obtido em zeta, foi utilizando a seguinte expressão:

Fonte: Laboratório 3

20
Assim, com o valor de K foi possível simular o sistema para uma resposta degrau
unitário, obtendo o seguinte gráfico.

Gráfico 7: Resposta degrau unitário ao sistema obtido.

Fonte: Os autores.

CÓDIGO DOS PROGRAMAS

3.1.a)
% numerador da planta
num=1;

% denominador da planta
den=poly([0 +1]);

% funcao de transferencia
G = tf(num,den);
H=1

21
[polos , zeros] = pzmap(G*H)

sigma_a = (sum(polos)-sum(zeros))/(length(polos)-length(zeros));
disp(['Sigma_a: ' num2str(sigma_a)]);
theta_a = [];
for k = 0:(length(polos)-length(zeros))-1
theta_a(k+1) = mod( ((2*k+1)*pi)/(length(polos)-length(zeros)), 2*pi);
end
disp(['Theta_a: ' num2str(theta_a) ' [rad]']);
disp(['Theta_a: ' num2str(theta_a*180.0/pi) ' [graus]']);
polinomio = 0;
s = tf('s');
for z = 1:length(zeros)
polinomio = polinomio - 1/(s-zeros(z));
end
for p = 1:length(polos)
polinomio = polinomio + 1/(s-polos(p));
end
pontos = roots(cell2mat(polinomio.num));
pontos_final = [];
for p = 1:length(pontos)
if isreal(pontos(p))
pontos_final = [pontos_final pontos(p)];
end
end
disp(['Pontos onde as raizes deixam eixo real: ' num2str(pontos_final)]);

for y = 1:0.01:2
angulo=0;
for p = 1:length(polos)
angulo=angulo-angle(y*i-polos(p));
end
for p = 1:length(zeros)
angulo=angulo+angle(y*i-zeros(p));
end
disp(['+-' num2str(y) 'i -> angulo = ' num2str(angulo*180/pi)]);
end

% lugar das raizes


rlocus(sys)
set(gca,'FontSize',18)
axis('equal')
axis([-5 5 -10 10])
% print -dpng lr4.png
22
3.1.b)

% numerador da planta
num=1;

% denominador da planta
den=poly([0 +1 +2]);

% funcao de transferencia
G = tf(num,den);
H=1
[polos , zeros] = pzmap(G*H)

sigma_a = (sum(polos)-sum(zeros))/(length(polos)-length(zeros));
disp(['Sigma_a: ' num2str(sigma_a)]);
theta_a = [];
for k = 0:(length(polos)-length(zeros))-1
theta_a(k+1) = mod( ((2*k+1)*pi)/(length(polos)-length(zeros)), 2*pi);
end
disp(['Theta_a: ' num2str(theta_a) ' [rad]']);
disp(['Theta_a: ' num2str(theta_a*180.0/pi) ' [graus]']);
polinomio = 0;
s = tf('s');
for z = 1:length(zeros)
polinomio = polinomio - 1/(s-zeros(z));
end
for p = 1:length(polos)
polinomio = polinomio + 1/(s-polos(p));
end
pontos = roots(cell2mat(polinomio.num));
pontos_final = [];
for p = 1:length(pontos)
if isreal(pontos(p))
pontos_final = [pontos_final pontos(p)];
end
end
disp(['Pontos onde as raizes deixam eixo real: ' num2str(pontos_final)]);

for y = 1:0.01:2
angulo=0;
for p = 1:length(polos)
angulo=angulo-angle(y*i-polos(p));
end
23
for p = 1:length(zeros)
angulo=angulo+angle(y*i-zeros(p));
end
disp(['+-' num2str(y) 'i -> angulo = ' num2str(angulo*180/pi)]);
end

% lugar das raizes


rlocus(G*H)
set(gca,'FontSize',18)
axis('equal')
axis([-5 5 -10 10])
% print -dpng lr4.png

3.1.c)
% numerador da planta
num=1;

% denominador da planta
den=poly([0 +1 +10]);

% funcao de transferencia
G = tf(num,den);
H=1
[polos , zeros] = pzmap(G*H)

sigma_a = (sum(polos)-sum(zeros))/(length(polos)-length(zeros));
disp(['Sigma_a: ' num2str(sigma_a)]);
theta_a = [];
for k = 0:(length(polos)-length(zeros))-1
theta_a(k+1) = mod( ((2*k+1)*pi)/(length(polos)-length(zeros)), 2*pi);
end
disp(['Theta_a: ' num2str(theta_a) ' [rad]']);
disp(['Theta_a: ' num2str(theta_a*180.0/pi) ' [graus]']);
polinomio = 0;
s = tf('s');
for z = 1:length(zeros)
polinomio = polinomio - 1/(s-zeros(z));
end
for p = 1:length(polos)
polinomio = polinomio + 1/(s-polos(p));
end
pontos = roots(cell2mat(polinomio.num));
pontos_final = [];
for p = 1:length(pontos)
24
if isreal(pontos(p))
pontos_final = [pontos_final pontos(p)];
end
end
disp(['Pontos onde as raizes deixam eixo real: ' num2str(pontos_final)]);

for y = 1:0.01:2
angulo=0;
for p = 1:length(polos)
angulo=angulo-angle(y*i-polos(p));
end
for p = 1:length(zeros)
angulo=angulo+angle(y*i-zeros(p));
end
disp(['+-' num2str(y) 'i -> angulo = ' num2str(angulo*180/pi)]);
end

% lugar das raizes


rlocus(G*H)
set(gca,'FontSize',18)
axis('equal')
axis([-5 5 -10 10])
% print -dpng lr4.png

3.1.d)
% numerador da planta
num=1;

% denominador da planta
den=poly([0 +1 +100]);

% funcao de transferencia
G = tf(num,den);
H=1
[polos , zeros] = pzmap(G*H)

sigma_a = (sum(polos)-sum(zeros))/(length(polos)-length(zeros));
disp(['Sigma_a: ' num2str(sigma_a)]);
theta_a = [];
for k = 0:(length(polos)-length(zeros))-1
theta_a(k+1) = mod( ((2*k+1)*pi)/(length(polos)-length(zeros)), 2*pi);
end
disp(['Theta_a: ' num2str(theta_a) ' [rad]']);
disp(['Theta_a: ' num2str(theta_a*180.0/pi) ' [graus]']);
25
polinomio = 0;
s = tf('s');
for z = 1:length(zeros)
polinomio = polinomio - 1/(s-zeros(z));
end
for p = 1:length(polos)
polinomio = polinomio + 1/(s-polos(p));
end
pontos = roots(cell2mat(polinomio.num));
pontos_final = [];
for p = 1:length(pontos)
if isreal(pontos(p))
pontos_final = [pontos_final pontos(p)];
end
end
disp(['Pontos onde as raizes deixam eixo real: ' num2str(pontos_final)]);

for y = 1:0.01:2
angulo=0;
for p = 1:length(polos)
angulo=angulo-angle(y*i-polos(p));
end
for p = 1:length(zeros)
angulo=angulo+angle(y*i-zeros(p));
end
disp(['+-' num2str(y) 'i -> angulo = ' num2str(angulo*180/pi)]);
end

% lugar das raizes


rlocus(G*H)
set(gca,'FontSize',18)
axis('equal')
axis([-5 5 -10 10])
% print -dpng lr4.png

3.1.e)
>> s = tf('s');
G = (s+4)/(s*(s+1))
H = 1;
[polos , zeros] = pzmap(G*H)
for y = 1:0.01:2
angulo=0;
for p = 1:length(polos)
angulo=angulo-angle(y*i-polos(p));
26
end
for p = 1:length(zeros)
angulo=angulo+angle(y*i-zeros(p));
end
disp(['+-' num2str(y) 'i -> angulo = ' num2str(angulo*180/pi)]);
end

sigma_a = (sum(polos)-sum(zeros))/(length(polos)-length(zeros));
disp(['Sigma_a: ' num2str(sigma_a)]);
theta_a = [];
for k = 0:(length(polos)-length(zeros))-1
theta_a(k+1) = mod( ((2*k+1)*pi)/(length(polos)-length(zeros)), 2*pi);
end
disp(['Theta_a: ' num2str(theta_a) ' [rad]']);
disp(['Theta_a: ' num2str(theta_a*180.0/pi) ' [graus]']);
polinomio = 0;
s = tf('s');
for z = 1:length(zeros)
polinomio = polinomio - 1/(s-zeros(z));
end
for p = 1:length(polos)
polinomio = polinomio + 1/(s-polos(p));
end
pontos = roots(cell2mat(polinomio.num));
pontos_final = [];
for p = 1:length(pontos)
if isreal(pontos(p))
pontos_final = [pontos_final pontos(p)];
end
end
disp(['Pontos onde as raizes deixam eixo real: ' num2str(pontos_final)]);

% lugar das raizes


rlocus(G*H)
set(gca,'FontSize',18)
axis('equal')
axis([-10 5 -10 10])
% print -dpng lr4.png

3.2.
clf % Apaga o gráfico na tela.
numgh=[1 -4 20]; % Define o numerador de G(s)H(s).
dengh=poly([-2 -4]); % Define o denominador de G(s)H(s).

27
'G(s)H(s)' % Exibe o título.
GH=tf(numgh,dengh) % Cria G(s)H(s) e exibe.
rlocus(GH) % Traça o lugar geométrico das raízes.
z=0.2:0.05:0.5; % Define valores da fator de amortecimento: 0,2 a 0,5 em
% incrementos de 0,05.
wn=0:1:10; % Define valores de frequência natural:
% de 0 a 10 em incrementos de 1.
sgrid(z,wn) % Gera grade de retas de fator de amortecimento e de frequência
%natural para o lugar geométrico das raízes.
title('Lugar geométrico das raízes') % Define título para o lugar
%geométrico das raízes.
pause
rlocus(GH) % Traça o lugar geométrico das raízes.
axis([-3 1 -4 4]) % Define faixas para os eixos do lugar geométrico das
% raízes para visualização ampliada.
title('Vista ampliada') % Define título para o lugar geométrico das raízes
% ampliado.
z=0.45; % Define a reta de fator de amortecimento para sobrepor ao lugar
% geométrico das raízes ampliado.
wn=0; % Suprime curvas sobrepostas de frequência natural.
sgrid(z,wn) % Sobrepõe curva de fator de amortecimento ao lugar geométrico
% das raízes ampliado.
for k=1:3 % O laço permite que 3 pontos sejam selecionados
% (z = 0,45, cruzamento do eixo jw, ponto de saída do eixo real).
[K,p]=rlocfind(GH) % Gera o ganho, K, e os polos em malha fechada, p, para
% o ponto selecionado interativamente sobre o lugar geométrico das raízes.
end % Fim do laço.
pause

3.3
- Função FindAngle
% Dado um conjunto de polos e zeros , calcula a soma dos angulos
% ate um certo ponto.
% angulo = soma ( angulos ( zeros )) - soma ( angulos ( polos ))
28
function angulo = findAngle ( polos , zeros , ponto )
angulo =0;
for p = 1:length( polos )
angulo = angulo - angle ( ponto - polos (p));
end
for p = 1: length ( zeros )
angulo = angulo + angle ( ponto - zeros (p));
end
end

- Função FindK
% function [K, sigma_d , omega_d ] = findK (GH , zeta )
% Encontra o valor de K que faz o lugar das raizes
% cruzar a reta correspondente a determinado zeta.
function [K , sigma_d , omega_d ] = findK (GH , zeta )

passo = 0.02 ;

[polos , zeros] = pzmap( GH ) ;


num_GH = cell2mat ( GH.num );
for n = 1: length ( num_GH )
if( num_GH (n) ~= 0)
Ganho1 = num_GH (n );
break ;
end
end
den_GH = cell2mat ( GH.den );
for n = 1: length ( den_GH )
if( den_GH (n) ~= 0)
Ganho2 = den_GH (n );
break ;
end
end
Ganho = Ganho1 / Ganho2 ;
29
cosseno = zeta ;
seno = sqrt (1 - zeta ^2) ;

modulo = 0.5 ;
ponto = ( - cosseno + seno *i)* modulo ;
angulo = findAngle ( polos , zeros , ponto );
delta_modulo = 1;
contador = 0;
erro_angulo = mod (pi - angulo +pi ,2* pi ) - pi ;
while ( abs ( erro_angulo ) >1e-6)
contador = contador + 1;
modulo = modulo + delta_modulo ;
ponto = ( - cosseno + seno *i) * modulo ;
angulo_novo = findAngle ( polos , zeros , ponto );
delta_angulo = angulo_novo - angulo ;
erro_angulo = mod (pi - angulo_novo +pi ,2* pi ) -pi ;
if delta_angulo ==0
delta_angulo =1e-6;
end
delta_modulo = passo * delta_modulo * erro_angulo / delta_angulo ;
angulo = angulo_novo ;

if( contador >1000)


break ;
end
end

sigma_d = modulo * cosseno ;


omega_d = modulo * seno ;

M = 1;
for p = 1: length ( polos )
M=M / abs (- sigma_d +i* omega_d - polos (p)) ;
30
end
for p = 1: length ( zeros )
M=M * abs (- sigma_d +i* omega_d - zeros (p)) ;
end

K = 1/( M* Ganho );
if( contador >1000)
disp ('ERRO : findK : nao encontrou K');
end
end
- Obtendo o valor de K para ultrapassagem de 1,52%
UP = 1.52;
polos = [ 0 -1 -10];
zeros = [ -1.5];
G = tf ( poly ( zeros ) , poly ( polos ));
zeta = sqrt (1/(( pi * pi /(( log ( UP /100 )) ^2) ) + 1) )
[K , sigma_d , omega_d ] = findK(G , zeta )

figure ()
[y ,t ] = step ( feedback (K *G ,1) , linspace (0 ,8 ,1000) );
plot (t ,y );
grid on ;
xlabel ('Tempo (s)');
ylabel ('c(t)');
title ('Resposta ao degrau ');

31
REFERÊNCIAS

ESTB029-17 - Análise e Controle de Sistemas Mecânicos. LABORATÓRIO 03:TÉCNICA


DO LUGAR GEOMÉTRICO DAS RAÍZES. Universidade Federal do ABC. 2022.1.

32

Você também pode gostar