Stavové modely a stavové řízení
Tato publikace vznikla jako součást projektu CZ.04.1.03/3.2.15.2/0285 „Inovace VŠ oborů strojního zaměření“, který je spolufinancován evropským sociálním fondem a státním rozpočtem České republiky
Lukáš Březina, 11. 4. 2007
Příklad 1 Zadání: Navrhněte stavový regulátor pro lineární dynamický model mx&& + bx& + kx = F , který představuje hmotný bod na pružině a tlumiči. m je hmotnost bodu, b je tlumení tlumiče, k je tuhost pružiny. Vstupem je budící síla F , x a x& jsou vnitřní stavy, x& a &x& jsou časové derivace vnitřních stavů. Výstupem soustavy je poloha x . Úkol je navrhnout regulátor tak, aby pomocí působící síly reguloval polohu na nulu (na výchozí polohu). Řešení: 1) Definujeme konstanty: %konstanty m = 1; b = 10; k = 1; F = 1000;
2) Sestavíme spojitý stavový model: a) z diferenciální rovnice mx&& + bx& + kx = F vyjádříme nejvyšší derivaci:
&& x=−
b k F x& − x + m m m
b) Sestavíme matice A, B, C , D popisující stavový model Matice A popisuje závislost mezi stavy a jejich derivacemi:
x&
x
x&
0
1
&& x −
k m
−
b m
Matice B popisuje závislost mezi vstupy a derivacemi stavů: F 0 1 && x m x&
1
Matice C popisuje závislost mezi výstupy a stavy: x x& x 1 0 Matice D popisuje závislost mezi výstupy a vstupy: F x 0 V Matlabu: A = [0 1 -k/m -b/m]; B = [0 1/m]; C = [1 0]; D = [0];
Stavový model vytvoříme pomocí příkazu ss(A,B,C,D), model uložíme do proměnné sys. Tedy: sys = ss(A,B,C,D);
3) Pro návrh stavového regulátoru musíme diskretizovat spojitý model. Pro diskretizaci je nutno zvolit vzorkovací periodu, kterou určíme pomocí odezvy systému na jednotkový skok příkazem step(sys).
Obr.1 Odezva systému na jednotkový skok
2
Vzorkovací perioda musí dostatečně vystihovat chování systému, ale nesmí být příliš malá, abychom nevzorkovali zbytečně. Určí se podle vztahu:
1 1 T ≈ ÷ T95 6 15 Z obrázku je patrné, že v tomto případě je T95
29 s , tedy T =
29 s = 1, 9333s . (pozn. 15
můžeme volit i jemnější vzorkování) 4) Provedeme diskretizaci systému: s_d = c2d(sys,T);
Vyjádříme jednotlivé matice popisující diskretizovaný stavový model, označme je A _ d, B _ d,C _ d, D _ d : A_d B_d C_d D_d
= = = =
s_d.A; s_d.B; s_d.C; s_d.D;
Pomocí těchto matic můžeme dále sestavit matici pozorovatele H . 5) Nejprve však stanovíme póly spojitého systému (z matice A ): psys = eig(A);
Ty jsou určeny jako:
-9.8990 -0.1010 Nyní volíme póly stavového pozorovatele, volíme je menší než póly spojitého systému: op = [-0.6 -10];
Póly pozorovatele pro diskrétní spočteme jako: op_d = exp(op*T);
Konečně navrhneme matici pozorovatele H : H = place(A_d',C_d',op_d)';
3
6) Nyní navrhneme stavový regulátor: a) Nejprve je ale nutno vhodně zvolit matice R a Q , kde R ovlivňuje vstup a Q stavy. Čím větší hodnotu volíme tím více minimalizujeme odchylku hodnoty od požadované. Viz. Matlab help (fce. lqrd). R = [1]; Q = [100 0;0 1];
Z takto určených matic například vyplývá, že největší prioritu klademe na minimalizaci odchylky polohy od požadované hodnoty polohy. b) vlastní návrh diskrétního stavového regulátoru pro spojitý model: R_c = lqrd(A,B,Q,R,T);
Návrh pozorovatele Add 1 H matice A_d 2
mereny vystup
matice pozorovatele
B_d
1
matice B_d
Unit Delay
znamy vstup
matice C_d C_d
z
1 odhad vystupu
2
Add1
odhad stavu
A_d
Obr.2 Stavový pozorovatel Návrh řízení 1 Constant1
pusobici sila
poloha
[0 0]
sys
R_c pozadovana poloha
Add
regulator
Add1
spojity stavovy model Scope
mereny v y stup
odhad v y stupu
poloha, rychlost znamy v stup
odhad stav u
pozorovatel
Obr. 3 Schéma zapojení regulátoru a pozorovatele
4
Scope1
Příklad 2 Zadání: Navrhněte stavový regulátor pro dynamický model popsaný diferenciálními rovnicemi: mx&& + bx& − by& + kx = Fx my&& + by& − bx& + ky = Fy , kde m je hmotnost bodu, b je tlumení tlumiče, k je tuhost pružiny. Vstupem jsou budící síly Fx , Fy , x, y a x& , y& jsou vnitřní stavy, x&, y& a && x, && y jsou časové derivace
vnitřních stavů. Výstupem soustavy jsou polohy x, y . Úkol je navrhnout regulátor tak, aby pomocí působících sil reguloval výstupy (polohu x, y ) na nulu.
Řešení: Řešení bude obdobné jako v předchozím příkladě s tím rozdílem, že nyní máme dvakrát více vstupů (místo F jsou vstupy Fx , Fy ) a výstupů (k poloze x přibude poloha y ). 1) Definujeme konstanty: %konstanty m = 1; b = 10; k = 1; Fx = 1000; Fy = 1500;
2) Sestavíme spojitý stavový model: a) z diferenciálních rovnic mx&& + bx& − by& + kx = Fx a my&& + by& − bx& + ky = Fy vyjádříme nejvyšší derivace: F b b k && x = − x& + y& − x + x m m m m Fy b b k && y = − y& + x& − y + m m m m b) Sestavíme matice A, B, C , D popisující stavový model
5
Matice A popisuje závislost mezi stavy a jejich derivacemi:
y&
y
y&
x
x&
0
1
0
0
b m 0
0
b m 1
x&
k m 0
&& x
0
&& y −
−
b m
0 −
k m
−
b m
Matice B popisuje závislost mezi vstupy a derivacemi stavů:
Fx
Fy
y&
0
0
&& y
0
x&
0
&& x
1 m
1 m 0 0
Matice C popisuje závislost mezi výstupy a stavy:
x y
y 0 1
y& x x& 0 1 0 0 0 0
Matice D popisuje závislost mezi výstupy a vstupy:
x y V Matlabu: A = [0 1 0 0 -k/m -b/m 0 b/m 0 0 0 1 0 b/m -k/m -b/m]; B = [0 0 0 1/m 0 0 1/m 0];
6
Fx 0 0
Fy 0 0
C = [0 0 1 0 1 0 0 0 ]; D = [0 0 0 0];
Vytvoření stavového modelu: sys = ss(A,B,C,D);
3) Určení vzorkovací periody: Vzorkovací periodu určíme stejným postupem jako v předchozím případě, tj. z odezvy na jednotkový skok step(sys). V tomto případě jsme stanovili vzorkovací periodu jako T = 0,5 . 4) Provedeme diskretizaci systému: s_d = c2d(sys,T);
Vyjádříme jednotlivé matice popisující diskretizovaný stavový model, označme je stejně jako v předchozím příkladě A _ d , B _ d , C _ d , D _ d : A_d B_d C_d D_d
= = = =
s_d.A; s_d.B; s_d.C; s_d.D;
5) Stanovíme póly spojitého systému (z matice A ): psys = eig(A); -19.9499 0.0000 + 1.0000i 0.0000 - 1.0000i -0.0501
Volíme póly stavového pozorovatele, volíme je menší než póly spojitého systému: op = [-22 -21 -23 -24];
Póly pozorovatele pro diskrétní spočteme jako: op_d = exp(op*T);
Matice pozorovatele H : H = place(A_d',C_d',op_d)';
7
6) Návrh stavového regulátoru: a) nejprve vhodně opět zvolíme matice R a Q R = [1 0 0 1]; Q = [100 0 0 0 0 1 0 0 0 0 100 0 0 0 0 1];
Z takto volených matic R a Q plyne, že budeme opět požadovat co nejmenší odchylky poloh x, y od požadovaných hodnot. b) vlastní návrh diskrétního stavového regulátoru pro spojitý model: R_c = lqrd(A,B,Q,R,T);
Návrh pozorovatele
Návrh pozorovatele je totožný jako v předchozím případě viz Obr.2.
Návrh řízení poloha
[0 0 0 0] Constant
Add
R_c
sys
regulator
spojity stavovy model Scope
mereny v y stup
odhad v y stupu
poloha, rychlost znamy v stup
odhad stav u
pozorovatel
Obr. 3 Schéma zapojení regulátoru a pozorovatele
8
Scope1