Questo blog raccoglie gli appunti universitari dell'autore, per averli sempre a portata di mano e magari per dare una mano a qualcuno!
lunedì 9 dicembre 2013
MatLab - Esercitazione #6 - Regolatore realizzato tramite il Controllo Ottimo LQ
A = [ -6.1 15.4 1.6;
1 0 0;
0 1 0];
B = [1 0 0]';
C = [0 10 10];
%% Punto 1
Creazione della matrice di controllabilità [B AB A^2B ...] con il comando ctrb (basta dare solo le due matrici di sistema A e B).
CO = ctrb(A, B)
Controllo che il sistema sia controllabile: il rango della matrice di controllabilità deve essere uguale a n=3.
if ne(rank(CO),3)
disp('Sistema non controllabile')
else
Xmax = [10 10 20]';
Umax = 10;
qi = [1 1 1]'; %posso variare questi valori per far tendere una variabile a zero più velocemente
ri = 1;
Le matrici Q e R sono date nella forma diag[frazione], bisogna solamente sostituire i termini dati.
Q = diag(qi./Xmax); % ./divisione elemento per elemento
R = diag(ri./Umax);
Risoluzione dell'equazione algebrica di Riccati che restituisce K, il guadagno di Kalmann.
[S, E, K] = care(A, B, Q, R);
disp('Il guadagno di Kalmann vale')
K
end
%% Punto 2
Tfin = 30;
Valore dello sttao iniziale (da mettere nell'integratore).
X0 = [7 -1 2]';
Creazione del sistema tramite il comando ss; A-B*K in quanto il sistema è retroazionato!
SYS = ss(A-B*K, B, C, 0)
Risposta libera del sistema -> initial
[y, time, X] = initial(SYS, X0, Tfin)
Creazione del plot
figure(1)
plot(time, X(:, 1))
hold on
grid on
plot(time, X(:, 2), 'r--')
plot(time, X(:, 3), 'g--')
set(1, 'name', 'Evoluzione libera del sistema controllato')
%% Punto 3
yi = 1;
Ymax = 50;
La matrice Q viene fornita in un modo identico a prima.
Q = diag(yi/Ymax)
Regolatore che pesa l'uscita invece che lo stato, quindi per distinguere rispetto a primo usiamo Ky.
[S, E, Ky] = care(A, B, C'*Q*C, R) %Quando pesiamo l'uscita mette Q così, altrimenti problema delle dimensioni [CASO DA RICORDARE]
%% Punto 4
Simulazione del sistema controllato e plottaggio del controllo e dell'uscita.
%% Punto 5
Al sistema viene introdotto un ingresso con riferimento a un gradino unitario (yd = 5u(t)+20u(t−10), dove u(t) `e un segnale a gradino unitario).
Iscriviti a:
Commenti sul post (Atom)
Nessun commento:
Posta un commento