Você está na página 1de 28

Aluno: Hector Felix Matrícula:160319

Exercicio 1

Aplicar o método 1 para sintonia de um PID para a seguinte planta:


Suponha que o sistema sintonizado com PID deva tentar respeitar: %OS<20% e
ts<0,67 segundos (para entrada degrau unitário).
Atenção: não é necessário realizar sintonia fina deste PID.

A seguir o código comentado com a resolução do controlador.

>> G= (5/2)*tf(1,[1 5.5 2.5])

G=

2.5
-----------------
s^2 + 5.5 s + 2.5

Continuous-time transfer function.

>> %Pata
>> %para verificar o valor final da planta para entrada em degrau com regime
permanente
>> dcgain(G)

ans =

>> %planta com valor 1 em regime permanente


>> %veremos a reação da planta para entrada em degrau unitário
>>
>> dcgain(G)

ans =

Gráfico da resposta ao degrau (em MA):

>> %gráfico
>> %método 1 para obter os parâmetros L, T.
>> %criação do vetor e plotagem da figura
>> t=0:0.01:5;
>> %vetor t entre 0 e 5s com incremento 0,01
>> [y, t]=step(G,t);
>> figure; plot(t,y)
Warning: MATLAB has disabled some advanced graphics rendering
features by switching to software OpenGL. For more information,
click here.
>> grid;
A partir da criação do vetor, gero o seguinte gráfico:

Aplico agora os passos do “basic fitting” no matlab gerando um gráfico com dois sinais
sobrepostos que mal se destacam, são as curvas “data 1” e “8th degree”.

Agora faço a extração dos coeficientes do polinômio afim de descobrir os pontos


mínimos e máximos de inflexão da curva, através da derivada primeira.
>> fit7

fit7 =

struct with fields:

type: 'polynomial degree 7'


coeff: [1×8 double]

>> % Tentando extrair o polinômio criado no "fitting":


>> p=fit.coeff % extraindo apenas o polinômio da curva levantada

p=

Columns 1 through 6

-0.0003 0.0060 -0.0478 0.1972 -0.4433 0.4635

Columns 7 through 8

0.1595 -0.0084

>> %realizando a derivada de segunda ordem para descobrir os valores máximos e


mínimos
>> dd_p = polyder(d_p)

dd_p =

Columns 1 through 6
0.0079 -0.1314 0.8716 -2.9282 5.2078 -4.5490

Column 7

1.3543

>> %calculando as raízes de dd_p com intuíto de verificar os pontos de inflexão da


curva de 8º ordem
>>
roots(dd_p)

ans =

4.7180 + 0.0000i
3.8041 + 0.5699i
3.8041 - 0.5699i
1.8756 + 0.9113i
1.8756 - 0.9113i
0.5649 + 0.0000i

>> %segundo o gráfico anterior vemos que o ponto de inflexão ocorre em:
>> x=6

x=

>> x = ans(6)
x=

0.5649

>> %onde este sera o ponto de inicio onde a reta ira sobrepor a curva
>> a = polyval(d_p, x)

a=

0.3860

>> % descobrindo o valor de y(t) quando o t=x


>> %usado entaão a equação dp/dt para calcular o y no ponto x
>> y_aux = polyval(p,x)

y_aux =

0.1672

>> %na esquação da reta temoso que determinar o valor de b

>> b = y_aux - a*x

b=

-0.0508
>> %equaçaõ da reta tangente do polinomio
>> reta=[a b];
>> %gráfico da reta sobreposta a curva anterior
>> y_reta = a.*t + b;
>> figure;
>> plot(t,y,'k-', t,y_reta,'b--')
>> plot(t,y,'k-', t,y_reta,'b--')
>> grid
>> legend('curva original', 'reta tangente')
>> %grafico 4
>> axis([0 5 -3 12])

>> %gráfico 5
>> %deste gráfico será extraido os parâmetros L e T
>> %L onde a reta cruza o eixo quando y=0
>> % y=a*t+b
% 0=a*t+b
% t=(-b/a)
>> L=-b/a

L=

0.1317

>>
% T pode ser determinado, onde t1=L+T.

>> t1 = (10-b)/a

t1 =

26.0367

>> %assim
>> T=t1-L

T=

25.9050

>> %Aplicando os parâmetros L e T na equação do PID teremos:


>> % eq. do PID C(s)=((0.6T*(s+1/L)^2)/s) -> 0.6 da tabela
>> s=tf('s');
>>
C_PI1=0.6*T*(s+1/L)^2/s
C_PI1 =

15.543 (s+7.596)^2
------------------
s

Continuous-time transfer function.

>> zpk(C_PI1)

ans =

38.858 (s+7.596)^2
------------------
s (s+5) (s+0.5)

Continuous-time zero/pole/gain model.

>> % fechando a malha


>> ftma_PI1=C_PI1*G;
>> % verificando:
>> zpk(ftma_PI1)

ans =

3.8858 (s-1.231)^2
------------------
s (s+5) (s+0.5)

Continuous-time zero/pole/gain model.

>> % fechando a malha


>> ftmf_PI1=feedback(ftma_PI1,1);
>> % Verificando onde ficaram os pólos de MF deste sistema:
>> pole(ftmf_PI1)

ans =

-22.2158
-15.7234
-6.4184

>> % Verificando os zeros deste sistema (destino dos polos)


>> zero(ftmf_PI1)
ans
-7.5959
-7.5959

>> figure; step(ftmf_PI1)


>> %gráfico 6
>> stepinfo(ftmf_PI1)

ans =

struct with fields:


RiseTime: 0.0376
SettlingTime: 0.2688
SettlingMin: 0.9084
SettlingMax: 1.1358
Overshoot: 13.5760
Undershoot: 0
Peak: 1.1358
PeakTime: 0.1025

Pode-se perceber que os valores pré-estabelecidos de tempo de assentamento e


overshoot ficaram bem acima dos valores especificados, ou seja OS%=13,5760 e %Ts =
0,2688 porém como não é necessário executar o ajuste fino, não dar-se-á continuidade a
resolução da questão.

Questão 2
Aplicar os últimos 2 métodos de sintonia de um PID à seguinte planta:

Suponha que se deseja um %OS ≤ 5% e um tempo de assentamento abaixo


de ts ≤ 7 segundos (para entrada degrau unitário).
Obs.: Esperada sintonia fina do PID inicialmente obtido.

>> %RESOLUÇÃO DA QUESTÃO DOIS


>> G=tf(18.375,poly([-7 -3.5 -1.5 -0.5]))

G=

18.38
--------------------------------------------
s^4 + 12.5 s^3 + 46.25 s^2 + 56.88 s + 18.38

Continuous-time transfer function.

>> zpk(G)

ans =

18.375
-----------------------------
(s+7) (s+3.5) (s+1.5) (s+0.5)

Continuous-time zero/pole/gain model.

>> dcgain(G)
ans =

>> %uso do root locus para acelerar o encontro de ku


>> figure; rlocus(G)

>> axis ([-10 3 -5 5])

>> %uso do root locus para acelerar o encontro de ku


>> figure; rlocus(G)
>> %grafico do root locus
>> %selecionar 2 pontos para aproximação de ku
A partir dos pontos coletados é possível identificar que o melhor valor de ku esta
entre 8.45 e 10, portanto é necessário fazer alguns testes para encontrar o melhor valor
de ku afim de que o sistema permaneça estável
Após os testes, por meio da aproximação de valores, foi possível obter os seguintes
gráficos para ku
Para Ku = 9.4
>> Ku=9.4;
>> ftmf=feedback(Ku*G,1);
>> figure; step(ftmf)

Percebe-se que para este ku, o sistema fica instável, portanto após mais alguns testes, o
melhor valor para ku adotado foi de 9.3.

>> Ku=9.3;
>> ftmf=feedback(Ku*G,1);
>> figure; step(ftmf)
>> %quando ku=9.3 o sistema esta de forma estável
>> %logo ku=9.3

>> %zoom na area de interesse para descobrir a variação de tempo


>> axis([50 100 0 2])
>> %dentro dos 15 ciclos temos um intervalo de tempo igual à Tfinal=96.2 e Tinicial=
51.9
>> Tu= (96.2-51.9)/15

Tu =

2.9533
Assim TU obtido tem o valor de TU=2.9533
>> % através dos cálculos no Matlab (considerando o “PID clássico”)
>> Kp=0.6*Ku

Kp =

5.5800

>> Ki=1.2*(Ku/Tu)

Ki =

3.7788

>> Kd=0.075*Ku*Tu

Kd =

2.0600
A partir dos valores obtidos considerando as sugestões propostas por
Ziegler-Nichols, simularemos esses valores no simulink

Pode-se perceber que o tempo de assentamento se encontra abaixo de 7s


requisito de projeto, porém um overshoot bem acima do desejado, sendo assim será
necessário realizar os ajustes finos afim de buscar cumprir com o solicitado em questão.
Buscou-se a partir disso, utilizar a tabela disponibilizada no material de apoio, chegar
no ajuste correto, onde após vários testes, obtive os seguintes valores.

>> Kp=0.4*Ku

Kp =

3.7200
>> Ki=0.6*(Ku/Tu)

Ki =

1.8894

>> Kd=0.2*Ku*Tu

Kd =

5.4932

>> Kd=0.1*Ku*Tu

Kd =

2.7466

Simulando com os melhores valores obtidos para a planta:


Pode-se perceber no gráfico abaixo, que o tempo de assentamento fica abaixo dos 7s
conforme requisitado no exercício.
Além dos ajustes realizados para buscar um tempo de assentamento correto, a
tabela com os valores sugeridos para os parâmetros kd, kp e ki, de Ziegler-Nichols, foi
muito útil também para o acerto de %OS, onde foram inicialmente utilizados os valores
de um controlador com “algum overshoot”, e posteriormente ajustado conforme
necessário, para chegar ao resultado apresentado no gráfico abaixo:
>> Kp=0.4*Ku

Kp =

3.7200

>> Ki=0.6*(Ku/Tu)

Ki =

1.8894
>> Kd=0.12*Ku*Tu

Kd =

3.2959
Pode-se perceber que o Overshoot ficou dentro da faixa desejada, abaixo de 5%.

QUESTÃO 2 POR MÉTODO DE RELÉ

Aplicando o método do relé, entro inicialmente com a planta.

>> %questão 2 por método de relé


>> G=tf(18.375,poly([-7 -3.5 -1.5 -0.5]))

G=

18.38
--------------------------------------------
s^4 + 12.5 s^3 + 46.25 s^2 + 56.88 s + 18.38

Continuous-time transfer function.

>> zpk(G)
ans =

18.375
-----------------------------
(s+7) (s+3.5) (s+1.5) (s+0.5)

Continuous-time zero/pole/gain model.

>>
>>
>> dcgain(G)

ans =

>> dcgain(G)*2

ans =

>> t=2

t=

2
A partir da planta disponibilizada na simulação em aula, realizo as devidas
adaptações para ajustar aos parâmetros estabelecidos

A partir da simulação, obtive o gráfico scope, oque possibilita encontrar o valor do


período de oscilação “Tu”

Ou seja, um período de Oscilação | Tu = 3.247s


Além disso é possível determinar a amplitude da oscilação, “a”
Ou seja, Amplitude da oscilação | a=0.5335

>> %a partir da simulação através do simulink, extraio a informação do período de


oscilação Tu
>> %tambem a amplitude de oscilação, então Tu= 3.247s e a=5.335e-01
>> %assim
>> a=0.5335/2

a=

0.2667
>> d=2

d=

>> ku=(4*d)/(pi*a)

ku =

9.5463

>> tu=3.247

tu =

3.2470

>> Kp=.6*ku
Kp =

5.7278

>> Ki=1.2*(ku/Tu)

Ki =

3.8789

>> Kd=0.074*ku*Tu

Kd =

2.0863

Obtenho o seguinte gráfico, o qual é possível identificar o tempo de assentamento Ts de


6.482s:
Como também um overshoot de %OS = 44.8

Tendo em vista que a questão possui requisitos de %OS e %TS, preciso melhorar
meu PID, portanto utilizo a tabela a seguir fornecida em aula, para buscar o melhor
ajuste

Após várias tentativas de ajuste, o melhor valor obtido de tempo de assentamento e


overshoot são conforme apresentados abaixo:

>> Kp=0.40*ku

Kp =
3.8185

>> Ki=0.60*(ku/Tu)

Ki =

1.9394

>> Kd=0.110*ku*Tu

Kd =

3.1013

Tempo de assentamento abaixo de 7s | %TS = 6.970s


Um Overshoot abaixo de 5% | %OS = 1.7%

Você também pode gostar