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

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

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);
となり、ステップ応答をみても改善されているのが確認できる。

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

2017-03-30 20:16:08 | 工学
Scilab 15

ニコルス線図の解説は他書に譲るとして(^^;

制御基礎理論―古典から現代まで
中野 道雄,美多 勉
昭晃堂


安定性の解析としては、ゲイン余裕、位相余裕という言葉をよく聞きます。
簡単に言えば、制御系の応答に関して、ゲイン余裕があるというのは、位相が−180度、つまり入力の位相と応答の位相が反対になるような周波数で、ゲインが0dbまでどのくらいあるかというもので、これがマイナス、ゲインが0dbを超えている時には、もはや応答は不安定ということになります。制御としては、遅れが生じていて、制御が追いついているどころか、逆位相で煽っているような状態です。
逆に位相余裕とは、ゲインが0dbの時の周波数での位相−180度までどの程度の位相角があるかということで、逆位相になって、簡単なイメージでは逆に制御する=発散するまので余裕ということになります。
通常、位相余裕は30度から60度くらいと言われています。一般にゲインだけをいじり、位相余裕を得る時には、ゲインを下げていくことになり、応答性が悪くなります。応答性とはランプ入力の追従性などに現れます。
対策は 補償器 というのを入れる設計をすることです。
さて、matlabゲイン余裕、位相余裕などを計算するコマンドは
margin(sys)でできるのですが、scilabでは
-->s=poly(0,'s');
-->h=20*(s+1)/(s*(s+5)*(s^2+2*s+10));
-->H=syslin('c',h);
-->bode(H);
-->show_margins(H);
で位相余裕とゲイン余裕をグラフに示してくれます。




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

2017-03-28 21:02:29 | 工学
Scilab 14

今回は、とりあえずニコルス線図を書いてみる。
->w=logspace(-1,1,100);
-->s=poly(0,'s');
-->ht=80/(s*(s+4)*(s+10));
-->H=syslin('c',ht);
-->nicholschart(modules=[-6 -3 -1 1 3 6], args=[-1 -20 20 40 80 160 180]);
-->black(H,w);



こんな感じで書ける。
じゃあ、ニコルス線図とは何?
ということですが、また今度やりましょう。ゲインと位相の図であることはわかると思うのですが。。。

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

2017-03-25 16:34:03 | 工学
Scilab 13
一入力一出力のボード線図はMATLABと同様に書けることがわかった。さて、ボード線図の横軸、つまり周波数Hzの範囲はどうなっているのか?
->s=poly(0,'s');
-->ht=9*(s^2+0.2*s+1)/(s*(s^2+1.2*s+9));
-->H=syslin('c',ht);
-->bode(H);
では、

-10^−3Hzから10^3までの範囲で描かれている。
これを10^ー2から10^2までに変える場合は
Matlabであればlogspace(-2,2,1000)で与えてやればよいが、
->w=logspace(-2,2,1000);
-->clf();
-->bode(H,w);
で大丈夫でした。

次にナイキスト線図ですが
これも
-->ht=(s^2+4*s+6)/(s^2+5*s+4);;
-->H=syslin('c',ht);
-->htm=-ht
htm =

2
- 6 - 4s - s
----------
2
4 + 5s + s
-->Hm=syslin('c',htm);
-->nyquist(H);
-->nyquist(Hm);
として2つ、つまり鏡像のものを書くとこうなります。