lunedì 25 novembre 2013

MatLab - Esercitazione #5 - Osservabilità e stimatore di sistemi continui e discreti



Ricopio i dati dal testo così come sono.
La = 60e-6;
Ra = 0.15;
K = 0.0065;
Jm = 9e-6;
Bm = 10e-6;

Matrici A, B e Bd date direttamente dal testo.
A = [0     1       0
     0    -Bm/Jm   K/Jm
     0      -K/La   -Ra/La];

B = [0  0   1]';
Scrittura equivalente di B: B = [0; 0; 1];
C = [1  0   0];

Creo modello nello Spazio degli Stati (poichè ho le matrici pronte); vengono trascurati gli ingressi di disturbo e viene posto D = 0.
sys = ss(A, B, C, 0);

Imposto il periodo per il sistema discreto.
Ts = 0.1;

c2d trasforma un sistema tempo-continuo in uno discreto, utilizzando un tempo di campionatura pari a Ts e con impostazione di default, 'zoh' ovvero Zero-order hold on the inputs.
sysd = c2d(sys, Ts);

ssdata ritorna le matrivi [A, B, C, D] del modello dello Spazio degli Stati; essendo discreto ritorna matrici riferite al sistema discreto, differenti da quello continuo.
Posso non mettere Ts, non viene stampato se non lo metto.
[Az, Bz, Cz, Dz] = ssdata(sysd)

acker effettua il calcolo della retroazione statica dello stato u = Kx per sistemi con un solo ingresso, dove
[0 0 0] sono gli autovalori desiderati.
Kcontr = -acker(Az, Bz, [0  0   0])

Ricordare che è un vettore colonna, sono le condizioni iniziali da mettere negli integratori.
X0 = [0.5   2   0.3]';

Tfin = 3;
Impostazioni per Simulink: conf panel ->fix step -> discrete, Ts
sim('untitled', Tfin)

h = figure;
set(h, 'name', 'Regolatore deadbeat');
subplot(2, 1, 1)
Plottaggio di un sistema discreto
stem(time,y)
grid on
ylabel('y')
subplot(2,1,2)
stem(time,u)
grid on
ylabel('u')

h = figure;
set(h, 'name', 'Regolatore deadbeat: confronto tempo-discreto tempo-continuo');
subplot(2, 1, 1)
stem(time,y)
grid on
ylabel('y')
subplot(2,1,2)
stem(time,u)
grid on
ylabel('u')

sim('controllo_discreto_sc', Tfin)

set(h, 'name', 'Regolatore deadbeat');
subplot(2, 1, 1)
hold on
plot(time,y, 'r--')
subplot(2, 1, 2)
hold on
grid on
Creo timed, vettore di tempo per il sistema discreto (che quindi deve avere passo pari a Ts, fino a Tfin).
timed = 0:Ts:Tfin
stairs(timed, u, 'r--')
legend('td', 'tc')

L = -acker(Az', Cz', [0 0 0])'
sim('ultimo', Tfin)
h = figure;
set(h, 'name', 'Retroazione dinamica dell''uscita');
subplot(2, 1, 1)
plot(time, y)
hold on
subplot(2, 1, 2)
stairs(timed, u)
grid on
ylabel('u')

figure
subplot(3, 1, 1)
plot(time, x(:,1))
grid on
hold on
ylabel('x1')
stem(timed, xs(:, 1), 'r')

Tfin = 20;
Kff = -inv(Cz*inv(Az+Bz*Kcontr-eye(3))*Bz)
sim('ultimissimo', Tfin)
h = figure;
set(h, 'name', 'Retroazione dinamica dell''uscita');
subplot(2, 1, 1)
plot(time, y)
hold on
subplot(2, 1, 2)
timed = 0:Ts:Tfin
stairs(timed, u)
grid on
ylabel('u')

Nessun commento:

Posta un commento