O diagrama em blocos do PI é mostrada na aula de 14/05/2020:

A equação geral do PI é:
Nossa única incógnita é a posição do zero do PI: .
Lembrando da nossa planta:
x>> load planta.mat % carregando dados das aulas passadas >> zpk(BoG) 0.00046711 (z+3.27) (z+0.2335) -------------------------------- (z-0.9608) (z-0.9048) (z-0.6703) Sample time: 0.02 secondsDiscrete-time zero/pole/gain model.>> pzmap(BoG) % verificando local dos polos e zeros>> axis equal % círculo unitário sem distorção>> axis([0.5 1.05 -0.5 0.5]) % zoom na região de interesseAvaliando 3 opções diferentes de zero para o PI:
xxxxxxxxxx>> PI1=tf([1 -0.98],[1 -1]) % Caso 1) 0,9608 < z_PI < 1PI1 = s - 0.98 -------- s - 1 Continuous-time transfer function.>> % Ops.... Não estamos mais no plano-s...>> PI1=tf([1 -0.98],[1 -1],T) % Caso 1) 0,9608 < z_PI < 1PI1 = z - 0.98 -------- z - 1 Sample time: 0.02 secondsDiscrete-time transfer function.>> PI2=tf([1 -0.93],[1 -1],T) % Caso 2) 0.9048 < z_PI < 0,9608PI2 = z - 0.93 -------- z - 1 Sample time: 0.02 secondsDiscrete-time transfer function.>> PI3=tf([1 -0.78],[1 -1],T) % Caso 2) 0.6703 < z_PI < 0.9048PI3 = z - 0.78 -------- z - 1 Sample time: 0.02 secondsDiscrete-time transfer function.>> % Plotando os RL das FTMAs resultantes para cada caso:>> ftma_PI1=PI1*BoG;>> ftma_PI2=PI2*BoG;>> ftma_PI3=PI3*BoG;>> figure; rlocus(ftma_PI1); hold on; zgrid(zeta,0); axis([0.5 1.05 -0.5 0.5])>> title('RL do PI1')>> figure; rlocus(ftma_PI2); hold on; zgrid(zeta,0); axis([0.5 1.05 -0.5 0.5])>> title('RL do PI2')>> figure; rlocus(ftma_PI3); hold on; zgrid(zeta,0); axis([0.5 1.05 -0.5 0.5])>> title('RL do PI3')>> % realizando o mesmo zoom nos 3 RLs obtidos>> % lembrar de apontar com o mouse cada janela para focar em cada RL>> axis([0.7 1.05 -0.25 0.25]) % para RL do PI1>> axis([0.7 1.05 -0.25 0.25]) % para RL do PI2>> axis([0.7 1.05 -0.25 0.25]) % para RL do PI3Gráficos dos 3 RL's:
| RL PI1 | RL PI2 |
|---|---|
![]() | ![]() |
| RL PI3 | |
![]() |
Comentários
Repare na ordem final (complexidade) do sistema para os 3 casos:
xxxxxxxxxxzpk(ftma_PI1) % repare na ordem do sistema 0.00046711 (z+3.27) (z-0.98) (z+0.2335) --------------------------------------- (z-1) (z-0.9608) (z-0.9048) (z-0.6703) Sample time: 0.02 secondsDiscrete-time zero/pole/gain model.Considerando o estudo anteiror realizado:
Lembrando que um cancelamento par polo-zero é antes de tudo, uma situação hipotética, difícil de ser obtida na prática.
Mas... note que desta forma, como o PI5 realiza o cancelamento do pólo mais lento da planta, vai implicar em "redução da complexidade do sistema", ou seja, a ordem do sistema reduz de 4a para 3a-ordem:
xxxxxxxxxx>> zpk(BoG)ans = 0.00046711 (z+3.27) (z+0.2335) -------------------------------- (z-0.9608) (z-0.9048) (z-0.6703) Sample time: 0.02 secondsDiscrete-time zero/pole/gain model.>> polos_MA = pole(BoG)polos_MA = 0.96079 0.90484 0.67032>> PI5 = tf([1 -polos_MA(1)], [1 -1], T)PI5 = z - 0.9608 ---------- z - 1 Sample time: 0.02 secondsDiscrete-time transfer function.>> ftma_PI5=PI5*BoG;>> zpk(ftma_PI5) % Verificando o resultado (cancelamento) obtido 0.00046711 (z+3.27) (z-0.9608) (z+0.2335) ----------------------------------------- (z-1) (z-0.9608) (z-0.9048) (z-0.6703) Sample time: 0.02 secondsDiscrete-time zero/pole/gain model.>> % Ou forçando o calcelamento no Matlab, usando a função minreal(.) do Matlab:>> ftma_PI5b=minreal(ftma_PI5,1E-5);>> zpk(ftma_PI5b)ans = 0.00046711 (z+3.27) (z+0.2335) ------------------------------ (z-1) (z-0.9048) (z-0.6703) Sample time: 0.02 secondsDiscrete-time zero/pole/gain model.>> figure; rlocus(ftma_PI5); hold on; zgrid(zeta,0)>> axis([0.85 1.05 -0.3 0.3]) % zoom na região de interesse>> [K_PI5,polosMF_PI5]=rlocfind(ftma_PI5) % sintonizando controladorSelect a point in the graphics windowselected_point = 0.95829 + 0.052012iK_PI5 = 0.61753polosMF_PI5 = 0.95827 + 0.052015i 0.95827 - 0.052015i 0.96079 + 0i 0.65832 + 0iRL para o PI ressaltando ponto com o ganho adotado:

Fechando a malha... e comparando resultado com integrador puro.
xxxxxxxxxx>> ftmf_PI5 = feedback(K_PI5*ftma_PI5, 1);>> figure; step(ftmf_PI5, ftmf_I)>> legend('PI5', 'I')
xxxxxxxxxx>> stepinfo(ftmf_PI5) RiseTime: 0.56 SettlingTime: 1.8 SettlingMin: 0.91418 SettlingMax: 1.0908 Overshoot: 9.0757 Undershoot: 0 Peak: 1.0908 PeakTime: 1.22Continuando projeto, usando App Control System Designer...
xxxxxxxxxx>> zpk(PI1)ans = (z-0.98) -------- (z-1) Sample time: 0.02 secondsDiscrete-time zero/pole/gain model.>> % A variável abaixo foi exportada à partir do App Control System Designer:>> zpk(C_PI8)ans = 0.51156 (z-0.9646) ------------------ (z-1) Name: CSample time: 0.02 secondsDiscrete-time zero/pole/gain model.Note que a equação de um controlador por Atraso de Fase ("Lag") é simular ao de um PI:
O que muda é que o polo de um PI sempre está em e no caso do Lag, vai estar próximo de 1, mas não será igual à 1 ( mas ).
Exemplo de projeto de Controlador por Atraso de Fase (Lag) usando App Control System Designer:

Os dados deste controlador exportados para a variável Lag, rende:
xxxxxxxxxx>> zpk(Lag)ans = 0.64584 (z-0.9613) ------------------ (z-0.9871) Name: CSample time: 0.02 secondsDiscrete-time zero/pole/gain model.Considerações:
Repare que a medida que o pólo do Lag se afasta do círculo unitário, o aumenta. Note que estamos com o polo do Lag valendo aproximadamente .
E como foi visto, pode-se acrescentar na janela do RL e na janela da resposta ao degrau, os requisitos de controle desejados para a esta planta, como e segundos.
Cuidado para não "inverter" a posiçao do pólo do Lag com o zero do mesmo. Se o valor do pólo do Lag for menor que o valor do seu zero, significa que você não está mais realizando o projeto de um Controlador Lag (por Atraso de Fase), e sim outro controlador, com outras propriedades (e outros objetivos) que seria o "Lead", controlador por Avanço de Fase.
Encerrando atividades nesta aula:
xxxxxxxxxx>> save planta.mat>> diary off>> quitAnexo: Caso a janela de propriedades de um gráfico no Matlab se abra em branco: Ver: Property inspector can not be used any more on mac
Fernando Passold, em 29/09/2023