技術士(総合技術監理・機械部門)のブログ

技術士がお届けする,技術,工学,技術者倫理などの話題

scilab 19 '

2017-10-10 20:27:45 | 工学

さて、前回のmatlabとscilabの極配置の結果の違いは
アルゴリズムの違いと言うしかない
以下matlabで

>> ke=place(Abb',Aab',L)';
>> ke
ke =

14.4000 0.6000
0.3000 15.7000

と確かに、0.3だ.
さて

>> eig(Abb'-Aab'*ke)

ans =

-15.1000
-15.9000

あれ、L=[-15 -16]
だったので、誤差がある.0.1
一方、scilabの結果では 0.3を0にして
>> ke1=[14.4 0.6;0.0 15.7];
>> eig(Abb'-Aab'*ke1)

ans =

-15.2354
-15.7646

まあ、この誤差の方が大きい

これはmatlabに軍配か
コメント
この記事をはてなブックマークに追加

Scilab 19

2017-10-09 17:49:47 | 技術
Scilab 19

さて、今回はオブザーバです。尾形先生の本では6−5
状態方程式の状態フィードバックを行うという制御系の設計では、すべての状態変数が既知である必要があります。
ところが、一般的に状態変数がすべてわかっていることは稀で
出力方程式の出力程度しか観測できないことが大半でしょう。
そこで、状態変数を観測器(オブザーバ)を使って推定して、フィードバックする
ということをします。
オブザーバは、状態変数全部を推定する全次元オブザーバと、一部状態変数が計測できる場合に、それ以外の状態変数を推定する最小次元オブザーバがあります。
ココらへんの解説は尾形先生の本にありますので細かい解説はしません。
結局、オブザーバの設計としては、オブザーバの極を安定とするようなオブザーバゲインを求めることに帰着します。
これは、前回やった極配置問題にて設計できることを意味します。
尾形先生の本、例題6−9は

–>A=[0 0 1 0;0 0 0 1;-36 36 -0.6 0.6;18 -18 0.3 -0.3];

-->B=[0;0;1;0];

-->J=[-2+%i*2*sqrt(3) -2-%i*2*sqrt(3) -10 -10];

-->k=ppol(A,B,J);

-->k
k =

130.44444 - 41.555556 23.1 15.418519

-->Aab=[1 0;0 1];

-->Abb=[-0.6 0.6;0.3 -0.3];

-->L=[-15 -16];

-->ke=ppol(Abb',Aab',L)';

-->ke
ke =

14.4 0.6
0. 15.7

あれ。。。 おかしい。オブザーバゲインが求まっていない。。。なぜだ 次回までに調べます
(2行 1列目 本では0.3)
コメント
この記事をはてなブックマークに追加

Scilab 18

2017-09-17 17:10:51 | 工学
Scilab 18

いやあ、なぜか前回から半年も経ってしまいました。
相当、飽きていたのだと思いますが、続けたいと思います。
前回は「状態空間表現」に基づいた制御系設計に入って、可制御性、可観測性のscilabでの確認を行いました。
尾形先生の本は、その次に、極配置による設計を示しています。

その後に、MATLABであれば、その極配置問題を簡単に解けると言っています。
極配置は
1 直接代入法 2 アッカーマンの公式
によって フィードバックゲイン行列Kを決めることが可能です。
ただし、アッカーマンは1入力システムにしか使えません。
逆に、システムが複数の入力を持っている場合、行列Kを決めるのは一意に決まらないので
安定余裕を見て決める方法が提案されていて、それをロバスト極配置と呼んでいます。
MATLABでは それぞれackerとplaceというコマンドで出来ますが
scilabでは
-->A=[0 1 0;0 0 1;-1 -5 -6];
-->B=[0;0;1];
-->poles=[-2+%i*4, -2-4*%i, -10];
-->k=ppol(A,B,poles);
-->k
k =
199. 55. 8.
というように、必要なフィードバックゲインが求まります。
dx/dt=Ax+Buで u=-kxとしたときのkを
極配置する問題でしたから、それを確認すると、
->spec(A-B*k)
ans =
- 2. + 4.i
- 2. - 4.i
- 10.  と配置できています。
コメント
この記事をはてなブックマークに追加

SCILABによる制御系設計 その17

2017-04-03 20:45:05 | 工学
Scilab 17

前回、
位相進み補償器をやったので、今回は
位相遅れ補償器、位相遅れ進み補償器
というものを取り扱うことを考えましたが、scilabの使い方に関しては同じなので
割愛いたします。

では、今回は「状態空間表現」に基づいた制御系設計に入ります。 <尾形先生の第6章>
制御のためのMATLAB
石川 潤 訳
東京電機大学出版局


まず、可制御性と可観測性です。
1)可制御性
可制御性は、状態空間表現で与えられたシステム
dx/dt = Ax+Bu
に対して(n次)
可制御行列
[B:AB:….:A^n-1B]
のランクを調べることで確認できる。ランクがnであれば可制御である。
2)可観測性
[C:CA:….:CA^n-1]t
がランクnであれば可観測である。
これらをscilabで調べてみよう。

->A=[0 1 0;0 0 1;-6 -11 -6];
-->B=[0;0;1];
-->C=[5 6 1];
-->D=[0];
-->n=contr(A,B)
n =
3.
なので 可観測
-->m=unobs(A,C)
m =
1.
なので、1つの次元が不可観測であることがわかる。
コメント
この記事をはてなブックマークに追加

SCILABによる制御系設計 その16

2017-04-01 20:31:50 | 工学
Scilab 16

制御システムの設計として、
位相進み補償器、位相遅れ補償器、位相遅れ進み補償器
というものがあります。これらはボード線図によって設計していきます。

1) 位相進み補償
制御対象をG1とし
->s=poly(0,'s');
-->g=10/(s*(s+1));
-->G1=syslin('c',g);
-->bode(G1);


ということで、制御対象に対して、「位相余裕を50度になる位相進み補償をすること」という要求があったとすると、現状余裕が12.7度なので あと37,3度進ませることが必要であることがまずわかります。
ここから省略しますが、以下の位相進み補償器Gcが必要となります。
-->gc=2*(0.3357*s+1)/(0.0705*s+1);

-->Gc=syslin('c',gc);

-->bode(Gc);


そして、それらの閉ループ伝達関数は
->gl=g*gc/(g*gc+1)
gl =

283.68794 + 95.234043s
--------------------------------------
         2  3
283.68794 + 109.41844s + 15.184397s + s
->t=0:0.01:10;
-->y=csim('step',t,G);
-->plot2d(t,y);
一方補償器を入れる前の伝達関数は、
-->go=g/(g+1);
-->Go=syslin('c',go);
-->y1=csim('step',t,Go);
-->plot2d(t,y);
-->plot2d(t,y1);
となり、ステップ応答をみても改善されているのが確認できる。
コメント
この記事をはてなブックマークに追加