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).


Nessun commento:

Posta un commento