Aula de 27/03/204
Seja a seguinte planta:
Vamos amostrar esta planta à segundos.
Calculando :
x>> 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.
Suponha que o requisito de controle seja .
xxxxxxxxxx
>> OS=10;
>> zeta=(-log(OS/100))/(sqrt(pi^2+(log(OS/100)^2)))
zeta =
0.59116
>> % Traçando o RL
>> rlocus(BoG)
xxxxxxxxxx
>> hold on; zgrid(zeta,0)
>> axis([0.2 1.2 -0.3 0.7])
>> [K, polosMF] = rlocfind(BoG)
Select a point in the graphics window
selected_point =
0.8718 + 0.14427i
K =
25.132
polosMF =
0.87003 + 0.14445i
0.87003 - 0.14445i
0.34831 + 0i
>> K=25;
xxxxxxxxxx
>> ftmf=feedback(K*BoG,1);
>> pole(ftmf)
ans =
0.86999 + 0.14405i
0.86999 - 0.14405i
0.34841 + 0i
>> figure; step(1*ftmf)
xxxxxxxxxx
>> stepinfo(ftmf)
RiseTime: 0.9
SettlingTime: 3
SettlingMin: 0.51537
SettlingMax: 0.60442
Overshoot: 8.7957
Undershoot: 0
Peak: 0.60442
PeakTime: 2
Comentários: Nota-se que o sistema converge com erro:
xxxxxxxxxx
>> dcgain(ftmf)
ans =
0.55556
>> erro=((1-dcgain(ftmf))/1)*100
erro =
44.444
Comentários: note que a referência era um degrau unitário, isto é, a saída deveria ter convergido para . Isto significa que posso aumentar o ganho.
Considerando que , e que se tolera um , temos então que .
Do RL anterior, percebemos entretanto que: .
Para Controladores Proporcionais Industrias, é usual fixar o ganho como de . Se fizermos isto, nossa planta vai reagir da seguinte forma:
xxxxxxxxxx
>> K2=245/2
K2 =
122.5
>> ftmf2=feedback(K2*BoG,1);
>> figure; step(ftmf2)
>> stepinfo(ftmf2)
RiseTime: 0.4
SettlingTime: 6.7
SettlingMin: 0.58335
SettlingMax: 1.3387
Overshoot: 55.731
Undershoot: 0
Peak: 1.3387
PeakTime: 1
Comentários: desta vez, , isto significa um overshoot de 33,87%. Mas... percebemos que o tempo de assentamento "aumentou" para segundos.
Para manter o overshoot em 10% teríamos que trabalhar com um ganho: .
Determinando um valor intermediário:
xxxxxxxxxx
>> K=(122.5+25)/2
K =
73.75
>> K3=70;
>> ftmf3=feedback(K3*BoG,1);
>> figure; step(ftmf3)
>> stepinfo(ftmf3)
RiseTime: 0.5
SettlingTime: 4.1
SettlingMin: 0.69
SettlingMax: 1.0349
Overshoot: 33.064
Undershoot: 0
Peak: 1.0349
PeakTime: 1.3
Desta vez, em relação à referência, o overshoot ficou em 3%. Isto significa que poderia talvez ter sido feito .
O erro neste caso ficou:
xxxxxxxxxx
>> erro=((1-dcgain(ftmf3))/1)*100
>> erro =
22.222
Usando o "App Control Systems Designer"...
O ganho de um controlador Proporcional poderia ainda ser definido em função do erro máximo permitido em regime permanente.
Para tanto, ver: https://fpassold.github.io/Controle_3/Controle3_2021_2/aula_1.html, que mostra como usar a Teoria do Erro, para determinar o valor do ganho em função do erro desejado.
Equação do controlador:
O pólo deste controlador fica localzado em (é o próprio integrador).
xxxxxxxxxx
>> C_I=tf(1,[1 -1])
C_I =
1
-----
s - 1
Continuous-time transfer function.
>> % Ops... ingressado TF no plano-s (mundo contínuo)
>> 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)
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
>> axis([-4 2 -1.5 1.5])
>> axis equal
Sintonizando controlador, fazendo zoom na região de interesse...
xxxxxxxxxx
>> axis([0.7 1.05 -0.05 0.2])
>> hold on; zgrid(zeta,0)
>> [K_I, polosMF] = rlocfind(ftma_I)
Select a point in the graphics window
selected_point =
0.96717 + 0.042477i
K_I =
0.71425
polosMF =
0.96665 + 0.042613i
0.96665 - 0.042613i
0.78926 + 0i
0.36888 + 0i
xxxxxxxxxx
>> ftmf_I=feedback(K_I*ftma_I,1);
>> figure; step(ftmf_I)
>> stepinfo(ftmf_I)
RiseTime: 3.5
SettlingTime: 11.5
SettlingMin: 0.90263
SettlingMax: 1.0923
Overshoot: 9.2258
Undershoot: 0
Peak: 1.0923
PeakTime: 7.8
Comentário: o erro foi anulado (como esperado), mas... o aumentou consideravelmente.
Uma solução é acrescentar ação Proporcional.
Equação do controlador PI:
ou simplesmente:
Temos uma incógnita à ser determinada: a posição do zero do controlador, .
Ver: https://fpassold.github.io/Controle_3/Controle3_2021_2/aula_1.html, parte do "Controlador PI (P + I)"...
xxxxxxxxxx
>> % Lembrando dos pólos e zeros de MA de BOG(z)
>> 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.
Próxima aula: usaremos o Control System Designer para testar as opções "b" e "d" do PI que aparece em https://fpassold.github.io/Controle_3/Controle3_2021_2/aula_1.html.
Finalizando a seção de trabalho...
xxxxxxxxxx
>> save planta
>> diary off
>> quit
Fernando Passold, em 27/03/2024.