Stavové model a stavové řízení Tato publikace vznikla jako součást projektu CZ.04..03/3.2.5.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é republik Lukáš Březina,. 4. 2007
Příklad Zadání: Navrhněte stavový regulátor pro lineární dnamický model m && + b& + k =, který představuje hmotný bod na pružině a tlumiči. m je hmotnost bodu, b je tlumení tlumiče, k je tuhost pružin. Vstupem je budící síla, a & jsou vnitřní stav, & a && jsou časové derivace vnitřních stavů. Výstupem soustav je poloha. Úkol je navrhnout regulátor tak, ab pomocí působící síl reguloval polohu na nulu (na výchozí polohu). Řešení: ) Definujeme konstant: 2) Sestavíme spojitý stavový model: %konstant m = ; b = 0; k = ; = 000; a) z diferenciální rovnice m && + b& + k = vjádříme nejvšší derivaci: b k && = & + m m m b) Sestavíme matice A, B, C, D popisující stavový model Matice A popisuje závislost mezi stav a jejich derivacemi: & && & 0 k b m m Matice B popisuje závislost mezi vstup a derivacemi stavů: & && 0 m
Matice C popisuje závislost mezi výstup a stav: & 0 Matice D popisuje závislost mezi výstup a vstup: V Matlabu: A = [0 -k/m -b/m]; 0 B = [0 /m]; C = [ 0]; D = [0]; Stavový model vtvoříme pomocí příkazu ss(a,b,c,d), model uložíme do proměnné ss. Ted: ss = 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í odezv sstému na jednotkový skok příkazem step(ss). Obr. Odezva sstému na jednotkový skok 2
Vzorkovací perioda musí dostatečně vstihovat chování sstému, ale nesmí být příliš malá, abchom nevzorkovali zbtečně. Určí se podle vztahu: T T 6 5 95 29 Z obrázku je patrné, že v tomto případě je T95 29s, ted T = s =, 9333s. (pozn. 5 můžeme volit i jemnější vzorkování) 4) Provedeme diskretizaci sstému: s_d = c2d(ss,t); Vjádříme jednotlivé matice popisující diskretizovaný stavový model, označme je A _ d, B _ d, C _ d, D _ d : A_d = s_d.a; B_d = s_d.b; C_d = s_d.c; D_d = s_d.d; Pomocí těchto matic můžeme dále sestavit matici pozorovatele H. 5) Nejprve však stanovíme pól spojitého sstému (z matice A ): T jsou určen jako: pss = eig(a); -9.8990-0.00 Nní volíme pól stavového pozorovatele, volíme je menší než pól spojitého sstému: op = [-0.6-0]; Pól pozorovatele pro diskrétní spočteme jako: op_d = ep(op*t); Konečně navrhneme matici pozorovatele H : H = place(a_d',c_d',op_d)'; 3
6) Nní navrhneme stavový regulátor: a) Nejprve je ale nutno vhodně zvolit matice R a Q, kde R ovlivňuje vstup a Q stav. Čím větší hodnotu volíme tím více minimalizujeme odchlku hodnot od požadované. Viz. Matlab help (fce. lqrd). R = []; Q = [0;0 ]; Z takto určených matic například vplývá, že největší prioritu klademe na minimalizaci odchlk poloh od požadované hodnot poloh. 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 H meren vstup matice A_d matice pozorovatele matice C_d 2 znam vstup B_d matice B_d A_d Add z Unit Dela C_d 2 odhad stavu odhad vstupu Obr.2 Stavový pozorovatel Návrh řízení Constant [] pozadovana poloha Add R_c regulator pusobici sila ss Add spojit stavov model poloha Scope meren vstup odhad vstupu znam vstup odhad stavu poloha, rchlost pozorovatel Scope Obr. 3 Schéma zapojení regulátoru a pozorovatele 4
Příklad 2 Zadání: Navrhněte stavový regulátor pro dnamický model popsaný diferenciálními rovnicemi: m && + b& b& + k = m && + b& b& + k =, kde m je hmotnost bodu, b je tlumení tlumiče, k je tuhost pružin. Vstupem jsou budící síl,,, a &, & jsou vnitřní stav, &, & a &&, && jsou časové derivace vnitřních stavů. Výstupem soustav jsou poloh,. Úkol je navrhnout regulátor tak, ab pomocí působících sil reguloval výstup (polohu, ) na nulu. Řešení: Řešení bude obdobné jako v předchozím příkladě s tím rozdílem, že nní máme dvakrát více vstupů (místo jsou vstup, ) a výstupů (k poloze přibude poloha ). ) Definujeme konstant: 2) Sestavíme spojitý stavový model: %konstant m = ; b = 0; k = ; = 000; = 500; a) z diferenciálních rovnic m && + b& b& + k = a m && + b& b& + k = vjádříme nejvšší derivace: b b k && = & + & + m m m m b b k && = & + & + m m m m b) Sestavíme matice A, B, C, D popisující stavový model 5
Matice A popisuje závislost mezi stav a jejich derivacemi: & && & && & & 0 k b b 0 m m m 0 b k b 0 m m m Matice B popisuje závislost mezi vstup a derivacemi stavů: & && & && 0 m 0 m Matice C popisuje závislost mezi výstup a stav: & & 0 0 Matice D popisuje závislost mezi výstup a vstup: V Matlabu: A = [0 -k/m -b/m 0 b/m 0 0 b/m -k/m -b/m]; B = [ 0 /m /m 0]; 6
C = [ 0 0 ]; D = [ ]; Vtvoření stavového modelu: ss = ss(a,b,c,d); 3) Určení vzorkovací period: Vzorkovací periodu určíme stejným postupem jako v předchozím případě, tj. z odezv na jednotkový skok step(ss). V tomto případě jsme stanovili vzorkovací periodu jako T = 0,5. 4) Provedeme diskretizaci sstému: s_d = c2d(ss,t); Vjá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 = s_d.a; B_d = s_d.b; C_d = s_d.c; D_d = s_d.d; 5) Stanovíme pól spojitého sstému (z matice A ): pss = eig(a); -9.9499 0.0000 +.0000i 0.0000 -.0000i -0.050 Volíme pól stavového pozorovatele, volíme je menší než pól spojitého sstému: op = [-22-2 -23-24]; Pól pozorovatele pro diskrétní spočteme jako: Matice pozorovatele H : op_d = ep(op*t); 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 = [ 0 0 ]; Q = [0 0 0 0 ]; Z takto volených matic R a Q plne, že budeme opět požadovat co nejmenší odchlk poloh, 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í [ ] Constant Add R_c regulator ss spojit stavov model poloha Scope meren vstup znam vstup odhad vstupu odhad stavu poloha, rchlost pozorovatel Scope Obr. 3 Schéma zapojení regulátoru a pozorovatele 8