Aula de 29/04/2024
🎬/🎵 Continuando da aula anterior 22/04/2024, arquivo planta.mat:
>> diary aula_29042024.txt>> load planta.matBase teórica:
Controlador PI = Proporcional + Integral:

ou simplesmente:s
onde temos o zero do PI, em e o pólo em (como esperado para a ação integral).
Projeto:
Incognitas: (ganho do PI, determinado via Root-Locus) e o zero do PI: .
Opções para o : varia conforme a planta à qual vai ser aplicado. Os valores à seguir possúem relação com os pólos da planta, :
O zero do PI vai estar intercalando posições entre seu integrador em e os pólos da planta, até a origem do plano-z.
Opções para localizaçao do zero do PI:

ou:
Avaliando estes casos com ajuda do Matlab. Note que para cada nova posição, o RL se modifica.
​x>> % Ingressando os controladores (as 3 opções)>> C_PIa=tf([1 -0.95],[1 -1],T)​C_PIa = z - 0.95 -------- z - 1 Sample time: 0.1 secondsDiscrete-time transfer function.​>> C_PIb=tf([1 -0.86],[1 -1],T)​C_PIb = z - 0.86 -------- z - 1 Sample time: 0.1 secondsDiscrete-time transfer function.​>> C_PIc=tf([1 -0.63],[1 -1],T)​C_PIc = z - 0.63 -------- z - 1 Sample time: 0.1 secondsDiscrete-time transfer function.​>> % Determinando a FTMA(z) para cada caso:>> ftma_PIa=C_PIa*BoG;>> ftma_PIb=C_PIb*BoG;>> ftma_PIc=C_PIc*BoG;>> % Desenhando os RL's>> figure; rlocus(ftma_PIa);>> axis([-0.4 1.2 -1 1])>> hold on; zgrid(zeta,0)>> title('RL - PI "a"')RL para o PI opção "a":

Continuando com o RL para o PI "b":
xxxxxxxxxx>> figure; rlocus(ftma_PIb);>> axis([-0.4 1.2 -1 1])>> hold on; zgrid(zeta,0)title('RL - PI "b"')Segue o RL para o PI opção "b":

E Falta o RL para o PI "c":
xxxxxxxxxx>> figure; rlocus(ftma_PIc);>> axis([-0.4 1.2 -1 1])>> hold on; zgrid(zeta,0)title('RL - PI "c"')Segue RL do PI opção "c":

Comparando visualmente os 3 RL´s, percebe-se que apenas as opções "a" e "b" parecem mais promissoras, isto é, com pólos dominantes mais distantes do cÃrculo unitário.
Lembrar que o módulo de um número complexo: rende: , onde e ; corresponde uma "reta" que parte da origem do plano e alcaça o pólo e corresponde ao ângulo do pólo; o tempo de resposta, (ou de assentamento) de um pólo é diretamente proporcional à esta distânica , o que significa que quanto mais próximo o pólo se encontrar do cÃrculo unitário, mais lenta será a resposta do sistema em MF associada com este pólo. No Matlab o módulo de um número complexo, o , pode ser calculando através da função
abs(<polo>)e o ângulo pode ser calculado via funçãoangle(<polo>)(recordar que o ângulo resulta em radianos).
Continuando no Matlab, sintonizando os controladores PI "a" e PI "b":
xxxxxxxxxx>> % fechando para o PI a>> [K_PIa,polosMF]=rlocfind(ftma_PIa)Select a point in the graphics windowselected_point = 0.891 + 0.16099iK_PIa = 1.7898polosMF = 0.95978 + 0i 0.89719 + 0.1599i 0.89719 - 0.1599i 0.41508 + 0i>> >> % Sintonizando o PI b>> [K_PIb,polosMF]=rlocfind(ftma_PIb)Select a point in the graphics windowselected_point = 0.94408 + 0.092879iK_PIb = 0.76494polosMF = 0.94572 + 0.092902i 0.94572 - 0.092902i 0.84431 + 0i 0.43557 + 0iFechando as malhas:
xxxxxxxxxx>> ftmf_PIa=feedback(K_PIa*ftma_PIa,1)>> ftmf_PIb=feedback(K_PIb*ftma_PIb,1);>> figure; step(ftmf_PIa, ftmf_PIb)>> legend('PI "a"', 'PI "b"')Resposta ao degrau para os 2 PI's:

Testando a opção "d":
então neste caso:
desta forma a fica:
No Matlab:
xxxxxxxxxx>> polos_BoG=pole(BoG)polos_BoG = 0.90484 0.81873 0.44933>> C_PId=tf([1 -polos_BoG(1)],[1 -1],T)​C_PId = z - 0.9048 ---------- z - 1 Sample time: 0.1 secondsDiscrete-time transfer function.>> ftma_PId=C_PId*BoG;>> zpk(ftma_PId) 0.0020446 (z+2.867) (z-0.9048) (z+0.2013) ----------------------------------------- (z-1) (z-0.9048) (z-0.8187) (z-0.4493) Sample time: 0.1 secondsDiscrete-time zero/pole/gain model.​>> zpk(minreal(ftma_PId)) % usando minreal para mostrar cancelamento: 0.0020446 (z+2.867) (z+0.2013) ------------------------------ (z-1) (z-0.8187) (z-0.4493) Sample time: 0.1 secondsDiscrete-time zero/pole/gain model.​>> figure; rlocus(ftma_PId)>> axis([0.2 1.2 -0.5 0.5])>> hold on; zgrid(zeta,0)>> [K_PId,polosMF]=rlocfind(ftma_PId)Select a point in the graphics windowselected_point = 0.92156 + 0.13003iK_PId = 1.4073polosMF = 0.9209 + 0.1301i 0.9209 - 0.1301i 0.90484 + 0i 0.42338 + 0i>> title('RL - PI "d"')O RL deste controlador mostrando o ganho adotado aparece à seguir:

Fechando a malha e verificando a resposta ao degrau...
xxxxxxxxxx>> ftmf_PId=feedback(K_PId*ftma_PId,1)>> figure; step(ftmf_PIa, ftmf_PId)>> legend('PI "a"', 'PI "d"')E temos as seguintes respostas:

Fim... para controladores com ação integral "pura".
Este controlador é similar ao PI com a diferença de que seu pólo não está exatamente em , isto significa que deixa de ser um intregrador. E se deixa de existir um integrador na de um sistema tipo 0 (que o caso da planta usada aqui), significa que vamos passar a ter erro em regime permanente, ou .
O último controlador:
Podemos projetar um "Lag" similar ao último PI:
No Matlab:
xxxxxxxxxx>> C_Lag=tf([1 -polos_BoG(1)],[1 -0.97],T)​C_Lag = z - 0.9048 ---------- z - 0.97 Sample time: 0.1 secondsDiscrete-time transfer function.​>> ftma_Lag=C_Lag*BoG;>> zpk(ftma_Lag) 0.0020446 (z+2.867) (z-0.9048) (z+0.2013) ----------------------------------------- (z-0.97) (z-0.9048) (z-0.8187) (z-0.4493) Sample time: 0.1 secondsDiscrete-time zero/pole/gain model.​>> figure; rlocus(ftma_Lag)>> axis([0.2 1.2 -0.5 0.5])>> hold on; zgrid(zeta,0)>> [K_Lag,polosMF]=rlocfind(ftma_Lag)Select a point in the graphics windowselected_point = 0.90735 + 0.14861iK_Lag = 1.5552polosMF = 0.90756 + 0.14858i 0.90756 - 0.14858i 0.90484 + 0i 0.41976 + 0iRL do Lag com ganho adotado:

Fechando a malha e verificando a resposta ao degrau:
xxxxxxxxxx>> ftmf_Lag=feedback(K_Lag*ftma_Lag,1);>> figure; step(ftmf_PId, ftmf_Lag)
Notamos que agora existe um erro em regime permanente:
xxxxxxxxxx>> dcgain(ftmf_Lag)ans = 0.83146>> erro_Lag=((1-dcgain(ftmf_Lag))/1)*100erro_Lag = 16.854Fim.
E com isto encerramos os trabalhos por hoje:
xxxxxxxxxx>> save planta>> diary off>> quitArquivo de dados: planta.mat.
Próxima aula: Controladores com Ação Derivativa.
Fernando Passold, em 29/04/2024.