Você está na página 1de 10

Sistemas de Controle Robusto Multivariável

Professor Alexandre José Tuoto Silveira Mello

Lista de Exercícios 1

1- Obtenha a representação no espaço de estados para os sistemas abaixo. 𝑖𝑅 (𝑡) é a saída, 𝑣𝑖 (𝑡) e
𝑖1 (𝑡) são as entradas

Solução:

𝑣1
Variáveis de estado: 𝑥 = [ 𝑖 ]
4
𝑣𝑖
Entradas: 𝑢 = [ 𝑖 ]
𝑖

Saída: 𝑦 = 𝑖𝑅

𝑖3 = 3𝑣1̇
𝑣1̇ = 𝑖3 /3
𝑣1 − 𝑣2 = 2𝑖4̇
𝑖4̇ = (𝑣1 − 𝑣2 )/2
𝑣𝑖 − 𝑣1 𝑣𝑖 𝑣1
𝑖3 = 𝑖4 − = 𝑖4 − +
3 3 3
𝑣2 = (𝑖4 + 𝑖1 ). 3
𝑦 = 𝑖𝑅 = 𝑖4 + 𝑖1
𝑖4 𝑣𝑖 𝑣1
𝑣1̇ = − +
3 9 9
𝑣1 3𝑖4 3𝑖1
𝑖4̇ = − −
2 2 2
1 1
1
9 3 − 0
𝑥̇ = [ ]𝑥 + [ 9 ]𝑢
1
− 3/2 0 − 3/2
2
𝑦 = [0 1]𝑥 + [0 1]𝑢

2- Para o sistema abaixo, obtenha a representação no espaço de estados.

𝑢1 e 𝑢2 são posicionadores e representam as entradas. As posições das massas 𝑦1 e 𝑦2 são monitoradas


e representam as saídas. As molas, da esquerda para a direita, possuem constantes elásticas 𝑘1 , 𝑘2 e 𝑘3

Solução:
𝑢1
Entradas: 𝑢 = [𝑢 ]
2
𝑦1
Saídas: 𝑦 = [𝑦 ]
2

𝑚. 𝑎 = Σ𝐹 𝐹 = 𝑘𝑥
Em 𝑚1

𝑚1 𝑦̈ 1 = −(𝑦1 − 𝑢1 )𝑘1 + (𝑦2 − 𝑦1 )𝑘2


Em 𝑚2

𝑚2 𝑦̈ 2 = −(𝑦2 − 𝑦1 )𝑘2 + (𝑢2 − 𝑦2 )𝑘3


Escolhendo os estados
𝑦1
𝑦̇
𝑥 = [𝑦1 ]
2
𝑦̇ 2

𝑥̇ 1 = 𝑥2
𝑥̇ 3 = 𝑥4
−𝑘1 − 𝑘2 𝑘2 𝑘1
𝑥̇ 2 = 𝑥1 + 𝑥3 + 𝑢
𝑚1 𝑚1 𝑚1 1
𝑘2 −𝑘2 − 𝑘3 𝑘3
𝑥̇ 4 = 𝑥1 + 𝑥3 + 𝑢
𝑚2 𝑚2 𝑚2 2
0 1 0 0 0 0
−𝑘1 − 𝑘2 𝑘2 𝑘1
0 0 0
𝑚1 𝑚1 𝑚1
𝒙̇ = 𝒙+ 𝒖
0 0 0 1 0 0
𝑘2 −𝑘2 − 𝑘3 𝑘3
0 0 0
[ 𝑚2 𝑚2 ] [ 𝑚2 ]
1 0 0 0
𝒚=[ ] + 0𝒖
0 0 1 0

3 – O sistema do chuveiro a gás obtido na aula tem a seguinte forma:

𝑥̇ −2/𝐿𝑞 0 𝑥1 4𝐶𝑣 √∆𝑃/𝐿𝑞 0 𝑢1


[ 1] = [ ] [𝑥 ] + [ ] [𝑢 ]
𝑥2̇ 0 −2/𝐿𝑓 2 0 4𝐶𝑣 √∆𝑃/𝐿𝑓 2

𝑦1 1 1 𝑥1 −𝐶𝑣 √∆𝑃 −𝐶𝑣 √∆𝑃 𝑢1


[𝑦 ] = [𝑇 𝑇𝑓 ] [𝑥2 ] + [−𝑇 𝐶 √∆𝑃 ][ ]
2 𝑞 𝑞 𝑣 −𝑇𝑓 𝐶𝑣 √∆𝑃 𝑢2

Obtenha a função de transferência mulivariável.

Solução:

𝐺 = 𝐶(𝑠𝐼 − 𝐴)−1 𝐵 + 𝐷

−𝐶𝑣 √∆𝑃𝐿𝑞 𝑠 + 2𝐶𝑣 √∆𝑃 −𝐶𝑣 √∆𝑃𝐿𝑓 𝑠 + 2𝐶𝑣 √∆𝑃


𝐿𝑞 𝑠 + 2 𝐿𝑓 𝑠 + 2
𝐺=
−𝐶𝑣 √∆𝑃𝑇𝑞 𝐿𝑞 𝑠 + 2𝐶𝑣 √∆𝑃𝑇𝑞 −𝐶𝑣 √∆𝑃𝑇𝑓 𝐿𝑓 𝑠 + 2𝐶𝑣 √∆𝑃𝑇𝑓
[ 𝐿𝑞 𝑠 + 2 𝐿𝑓 𝑠 + 2 ]
4 – Para o sistema do exercício 2:

a) Obtenha a matriz RGA, e crie um controlador descentralizado para o melhor pareamento de


entradas e saídas. Considere 𝑘1 = 𝑘2 = 𝑘3 = 𝑚1 = 𝑚2 = 1
b) Considere o caso em que a massa 𝑚1 está conectada a uma carga com peso variável, podendo
ter valores entre 1 e 9. Projete um sistema que utilize Gain Scheduling para lidar com essa
variação.

Solução:
clear
close all
k1 = 1;
k2 = 1;
k3 = 1;
m1 = 1;
m2 = 1;

A = [0 1 0 0; (-k1-k2)/m1 0 k2/m1 0; 0 0 0 1; k2/m2 0 (-k2-k3)/m2 0];


B = [0 0; k1/m1 0; 0 0; 0 k3/m2];
C = [1 0 0 0; 0 0 1 0];
D = zeros(2);

sys = ss(A,B,C,D); %Espaço de Estados

s = 0;
Gf = C*inv(s*eye(size(A))-A)*B+D;
RGA = abs(Gf.*pinv(Gf).') %Obtém a Matriz RGA

%%
G = tf(sys);

G11 = G(1,1);
K1 = pidtune(G11,'pid');

G22 = G(2,2);
K2 = pidtune(G22,'pid');

K = [K1 0; 0 K2]; %Cria Controlador Diagonal

figure;
for i = 1:10
m1 = rand*9+1; %Variação da massa m1

A = [0 1 0 0; (-k1-k2)/m1 0 k2/m1 0; 0 0 0 1; k2/m2 0 (-k2-k3)/m2 0];


B = [0 0; k1/m1 0; 0 0; 0 k3/m2];
sys = ss(A,B,C,D);
sysR=feedback(sys*K,eye(size(sys)));
step(sysR) %Verifica resposta do sistema para vários valores da massa m1
hold on
end

%%

for i = 1:9
m1 = i+0.5;
A = [0 1 0 0; (-k1-k2)/m1 0 k2/m1 0; 0 0 0 1; k2/m2 0 (-k2-k3)/m2 0];
B = [0 0; k1/m1 0; 0 0; 0 k3/m2];
temp_sys = ss(A,B,C,D);
G_temp = tf(temp_sys);

K11 = pidtune(G_temp(1,1),'pid');
K22 = pidtune(G_temp(2,2),'pid');

Kgs{i} = [K11 0; 0 K22]; %Projeta controlador diagonal em vários


pontos de operação
end

figure;
for i = 1:10
m1 = rand*9+1; %Variação da massa m1

A = [0 1 0 0; (-k1-k2)/m1 0 k2/m1 0; 0 0 0 1; k2/m2 0 (-k2-k3)/m2 0];


B = [0 0; k1/m1 0; 0 0; 0 k3/m2];
sys = ss(A,B,C,D);

K = Kgs{floor(m1)}; %Escolhe controlador mais próximo

sysR=feedback(sys*K,eye(size(sys)));
step(sysR) %Verifica resposta do sistema para vários valores da massa m1
hold on
end

5 – Para um sistema cascata com 5 niveis, obtenha a resposta ao degrau e a resposta ao distúrbio. Para
os controladores utilize PIDs sintonizados usando o comando MATLAB pidtune.
1
𝐺2 = 𝐺3 = 𝐺4 = 𝐺5 =
𝑠+1
𝑒 −10𝑠
𝐺1 =
𝑠+1

Solução:
𝑑 𝐺1 (𝐾5 𝐺5 + 𝐾5 𝐾4 𝐺5 𝐺4 + 𝐾5 𝐾4 𝐾3 𝐺5 𝐺4 𝐺3 )
=
𝑦 1 + 𝐾5 𝐺5 + 𝐾5 𝐾4 𝐺5 𝐺4 + 𝐾5 𝐾4 𝐾3 𝐺5 𝐺4 𝐺3 + 𝐾5 𝐾4 𝐾3 𝐾2 𝐺5 𝐺4 𝐺3 𝐺2 + 𝐾5 𝐾4 𝐾3 𝐾2 𝐾1 𝐺5 𝐺4 𝐺3 𝐺2 𝐺1
Script Matlab:
%% Planta de alta ordem - 5 Niveis

clear

s = tf('s');
G1 = exp(-10*s)/(s+1);
G2 = 1/(s+1);
G3 = 1/(s+1);
G4 = 1/(s+1);
G5 = 1/(s+1);
G = G1*G2*G3*G4*G5;

%Controlador do laço completo


K = pidtune(G,'pid')

%Cria malha fechada com controlador e processo:


T = feedback(G*K,1);
T.name = 'Controle Simples';

%Controlador laço interno


K5 = pidtune(G5,'pid')

%Fecha o laço interno


T5 = feedback(G5*K5,1);

%Controlador laço 4
K4 = pidtune(G4*T5,'pid')

%Fecha laço 4
T4 = feedback(G4*T5*K4,1);

%Controlador laço 3
K3 = pidtune(G3*T4,'pid')

%Fecha laço 3
T3 = feedback(G3*T4*K3,1);

%Controlador laço 2
K2 = pidtune(G2*T3,'pid')

%Fecha laço 2
T2 = feedback(G2*T3*K2,1);

%Controlador laço externo


K1 = pidtune(G1*T2,'pid')

%Fecha laço externo


Tc = feedback(G1*T2*K1,1);
Tc.name = 'Controle Cascata';
%Mostra resposta ao degrau
figure
step(T,'r',Tc,'b')
legend('show','location','southeast')
title('Resposta ao Degrau')

%Laço visto do distúrbio no sistema simples


Td = feedback(G1,G2*G3*G4*G5*K);
Td.name = 'Controle Simples';

%Laço visto do distúrbio no sistema cascata


Tcd = (G1*(G5*K5 + G4*G5*K4*K5 + G3*G4*G5*K3*K4*K5 + 1))/(G5*K5 + G4*G5*K4*K5
+ G3*G4*G5*K3*K4*K5 + G2*G3*G4*G5*K2*K3*K4*K5 + G1*G2*G3*G4*G5*K1*K2*K3*K4*K5
+ 1);
Tcd.name = 'Controle Cascata';

%Mostra resposta ao distúrbio


figure
step(Td,'r',Tcd,'b')
legend('show','location','southeast')
title('Resposta ao Distúrbio')

6 – Pretende-se controlar o sistema abaixo por controle decentralizado.


−1 0 0 1 0 0
𝒙̇ = [ 0 −1 0 ] 𝒙 + [0 1 0] 𝒖
0 0 −1 0 0 1
0,1 0,3 1
𝒚 = [ 1 0,1 0,2] 𝒙 + 0𝒖
0,5 1 0,4
a) Utilizando a matriz de ganho relativo determine o melhor pareamento entre entradas/saídas.

b) Projete um controlador e analise a resposta.

Solução:
clear
close all

A = [-1 0 0; 0 -1 0; 0 0 -1];
B = [1 0 0; 0 1 0; 0 0 1];
C = [0.1 0.3 1; 1 0.1 0.2; 0.5 1 0.4];
D = zeros(3);

%Para steady state


G0 = C*inv(0*eye(size(A))-A)*B+D;
rga = G0.*pinv(G0).'
%% Parte b

%Função de Transferência do sistema


s = tf('s');
G = C*inv(s*eye(size(A))-A)*B+D;

%Projeto de Controlador entrada 1 para saída 2


G21 = G(2,1);
K1 = pidtune(G21,'pid');

%Projeto de Controlador entrada 2 para saída 3


G32 = G(3,2);
K2 = pidtune(G32,'pid');

%Projeto de Controlador entrada 3 para saída 1


G13 = G(1,3);
K3 = pidtune(G13,'pid');

K = [0 K1 0; 0 0 K2; K3 0 0];
T = feedback(G*K,eye(size(G)));
figure; step(T)

7 - Para o mesmo sistema da questão 6 pretende-se melhorar o controle diagonalizando a planta.

a) Obtenha a matriz de influência inversa que diagonaliza a planta. Qual será a nova função de
transferência da planta?

b) Projete um controlador PID diagonal para esta planta. Houve melhora em relação ao projeto do
exercício 6? Se houve mudança, descreve o motivo.

Solução:
% Exercicio 7 Parte a
clear;

A = [-1 0 0; 0 -1 0; 0 0 -1];
B = [1 0 0; 0 1 0; 0 0 1];
C = [0.1 0.3 1; 1 0.1 0.2; 0.5 1 0.4];
D = zeros(3);

%Matriz de influência direta


M_dir = C*inv(0*eye(size(A))-A)*B+D;

%Matriz que diagonaliza a planta


M = inv(M_dir)

%Função de Transferência Original


s = tf('s');
G = C*inv(s*eye(size(A))-A)*B+D;

%Função de Transferência Diagonalizada


GM = G*M
%% Parte b

%Projeto de Controlador entrada 1 para saída 1


G11 = GM(1,1);
K1 = pidtune(G11,'pid');

%Projeto de Controlador entrada 2 para saída 2


G22 = GM(2,2);
K2 = pidtune(G22,'pid');

%Projeto de Controlador entrada 3 para saída 3


G33 = GM(3,3);
K3 = pidtune(G33,'pid');

K = [K1 0 0; 0 K2 0; 0 0 K3];
T = feedback(GM*K,eye(size(GM)));
step(T)

Você também pode gostar