Amostrando à
>> G=tf(1,poly([-1 -2 -10]));
>> zpk(G)
1
------------------
(s+10) (s+2) (s+1)
Continuous-time zero/pole/gain model.
>> T=0.1;
>> BoG=c2d(G, T);
>> zpk(BoG)
0.00012224 (z+2.747) (z+0.1903)
--------------------------------
(z-0.9048) (z-0.8187) (z-0.3679)
Sample time: 0.1 seconds
Discrete-time zero/pole/gain model.
>> save planta
>> rlocus(BoG)
Requisito de controle:
>> OS=10;
>> zeta=(-log(OS/100))/(sqrt(pi^2+(log(OS/100)^2)))
zeta =
0.59116
>>
RL com zoom na região de interesse:
Continuando com projeto:
>> axis([-8 2 -5 5])
>> hold on;
>> zgrid(zeta, 0)
>> K=26;
>> ftmf = feedback(K*BoG, 1);
>> figure; step(ftmf)
Resposta ao degrau:
Repare no elevado erro de regime permanente:
>> dcgain(ftmf)
ans =
0.56522
>> erro_Kp=((1-dcgain(ftmf))/1)*100
erro_Kp =
43.478
>>
E se o requisito de controle fosse:
Lembrando da teoria de erro --> Erro para entrada degrau:
Calcular o
>> Kp=(1-0.1)/0.1
Kp =
9
>> dcgain(BoG)
ans =
0.05
>> % Note:
>> num = 0.00012224*(1+2.747)*(1+0.1903)
num =
0.0005452
>> den=(1-0.9048)*(1-0.8187)*(1-0.3679)
den =
0.01091
>> num/den
ans =
0.049973
>> Knesc=Kp/dcgain(BoG)
Knesc =
180
Aplicando este ganho:
Provavelmente as especificações de controle aqui seriam:
Novas especificações de controle:
Solução: Acrescentar ação integral (para zerar o erro em regime permanente).
Equação do Controlador com ação integral pura:
Deduzindo a
>> C_I=tf(1, [1 -1], T)
C_I =
1
-----
z - 1
Sample time: 0.1 seconds
Discrete-time transfer function.
>> ftma_I = C_I*BoG;
>> zpk(ftma_I)
ans =
0.00012224 (z+2.747) (z+0.1903)
--------------------------------------
(z-1) (z-0.9048) (z-0.8187) (z-0.3679)
Sample time: 0.1 seconds
Discrete-time zero/pole/gain model.
>> figure; rlocus(ftma_I)
>> axis equal
RL gerado:
RL sem zoom | RL com zoom |
---|---|
![]() | ![]() |
Vamos adotar
>> hold on;
>> zgrid(zeta, 0)
>> K_I=0.652;
>> ftmf_I = feedback(K_I*ftma_I, 1);
>> figure; step(ftmf_I)
Resposta ao degrau:
Note:
Mas...
Solução para reduzir o
Note que um PI é um controlador onde 2 ações de controle são executadas paralelamente (ao mesmo tempo): a ação Proporcional + a ação Integral.
Resolvendo algebricamente o resultado destas ações paralelas, chegamos a equação:
onde
poderíamos tentar definir o zero do PI usando os valores encontrados anteriormente para
a) zero em: | b) zero em: |
---|---|
![]() | ![]() |
c) zero em: | d) zero exatamente sobre |
![]() | ![]() |
Analisando os RL's anteriores, temos que:
Resta realizar simulações no Matlab para comprovar os raciocínios anteriores.
Avaliando as opções "b" e "c" e considerando a opção "d" como um caso especial já que envolve cancelamento de par pólo-zero.
Até aqui na aula de 23/09/2021
Colocando o zero mais afastando do círculo unitário em
>> C_PIb=tf([1 -0.92], [1 -1], T)
C_PIb =
z - 0.92
--------
z - 1
Sample time: 0.1 seconds
Discrete-time transfer function.
>> ftma_PIb=C_PIb*BoG;
>> figure; rlocus(ftma_PIb)
>> hold on; zgrid(zeta,0)
Vamos obter o seguinte RL:
RL sem zoom | RL com zoom |
---|---|
![]() | ![]() |
Teria que ser adotado o ganho de
>> K_PIb=23.8;
>> ftmf_PIb=feedback(K_PIb*ftma_PIb, 1);
>> figure; step(ftmf_PIb)
Note que o tempo de assentamento baixou consideravelmente em relação ao Controlador Integrador Puro, mas é maior que o controlador Proporcional limitado à
Colocando o zero do PI no centro geométrico dos pólos mais internos da planta:
>> za=(0.3679+0.8187)/2
za =
0.5933
>> C_PIc=tf([1 -0.6], [1 -1], T)
C_PIc =
z - 0.6
-------
z - 1
Sample time: 0.1 seconds
Discrete-time transfer function.
>> ftma_PIc=C_PIc*BoG;
>> figure; rlocus(ftma_PIc)
>> hold on; zgrid(zeta,0)
O que gera o seguinte RL:
RL antes do zoom: | RL com zoom: |
---|---|
![]() | ![]() |
Adotando o ganho de
>> K_PIc=2.17;
>> ftmf_PIc=feedback(K_PIc*ftma_PIc, 1);
>> figure; step(ftmf_PIc)
Percebe-se que o
Note a distância dos pólos de MF da origem para o círculo unitário nas 2 opções:
Note que estes resultados já poderiam ter sido previstos, considerando-se a distância dos pólos de MF até o centro do plano-z:
Opção (b): | Opção (c): |
---|---|
![]() | ![]() |
>> polesMF_PIb=pole(ftmf_PIb) polesMF_PIb = 0.9288 + 0i 0.9042 + 0.11532i 0.9042 - 0.11532i 0.35133 + 0i >> R = abs(polesMF_PIb(1)) R = 0.9288 >> plot(polesMF_PIb,'r+') | >> polesMF_PIc=pole(ftmf_PIc) polesMF_PIc = 0.96267 + 0.048173i 0.96267 - 0.048173i 0.79866 + 0i 0.36718 + 0i >> R = abs(polesMF_PIc(1)) R = 0.96387 >> plot(polesMF_PIc,'r+') |
R = 0,9288 | R = 0,96387 |
Note que na opção (b), a distância (
Falta considerar (numa próxima aula), a opção "d"...
Não esquecendo de salvar os dados para continuação na próxima aula:
>> save planta
Arquivo: planta.mat
:🚀🚀🚀🚀🚀
Fernando Passold, em 23/09/2021