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

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

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つ、つまり鏡像のものを書くとこうなります。










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

2017-03-23 20:36:40 | 工学
Scilab 12
前回までで根軌跡は終了。scilabで使ってきたevansという関数であるが、これはEvansが根軌跡法を提案したのでそれを使っているのであろう。今回から、周波数応答法に入る。ところがEvansが提案した根軌跡法の方が新しいらしい。周波数応答で出てくるbode線図やNyquist線図の方が古い。
ということで、周波数応答に入ろう。
尾形先生の本では第5章 周波数応答解析 である。
応答というのであるから、入力があって、それに対する応答をみるということである。システムの応答は、その応答の大きさと追従性つまり位相で評価できる。入力に対して、応答の大きさをゲインという。一方位相は、入力が振動であれば、その振動数に対してどの程度の位相ずれがあるかということで、追従性を評価する。低い周波数で振動させた場合、例えばロボットの腕などの動きは、多分追従して、入力どおりの大きさと、同位相で動く。ところが、高い周波数で振動させた時には、その応答はだんだん遅れて動き、さらに動きの大きさも小さくなってしまうであろう。
これらのゲインと位相を図で書いたものが、ボード線図である。
さっそく、bode線図について書いてみよう。
-->s=poly(0,'s');
-->ht=25/(s^2+4*s+25);
-->H=syslin('c',ht);
-->bode(H);



となり、尾形先生の例題5−1と一致する。上段のグラフがゲインで下段が位相を示す。厳密には、MATLABは横軸がrad/sであるのに対してscilabはHzである。どちらが良いのか一長一短であるが。
さて、このシステムは伝達関数で1入力1出力なので応答は一つであるが、多入力である場合にはどうなるか、やってみよう。MATLABであれば、例えば2入力、2出力であれば4組のボード線図がそのまま書かれる。
さて、
->A=[0 1;-25 -4];
-->B=[1 1;0 1];
-->C=[1 0;0 1];
-->H=syslin('c',A,B,C);
-->bode(H);
!--error 95
引数 1 の型が間違っています: SISO を指定してください.
at line 91 of function repfreq called by :
at line 41 of function bode called by :
やっぱだめだ、SISO つまり1入力1出力しか受け付けない。
分解して、表示するしかなさそうですね。
今回はここまで。

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

2017-03-22 21:37:39 | 工学
Scilab 11
さてさて、専門的なブログとなっていますが、皆さん理解していますか?
実は、私もあやしいです。
そもそも、複素平面 って 何?
ということや
ラプラス変換 演算子 など ????? かもしれません。
イメージしやすい例題で解説しても良いのですが、とりあえずscilabの使い方
という視点でやっています。
前回まで、伝達関数表現の 極配置 について見てきました。尾形先生の教科書ではこの後、4−3で「根軌跡上の任意の点に対応するゲインKの値を探索する」、4−4「非最小位相系の根軌跡」4−5「条件安定システムの根軌跡」4−6「むだ時間があるシステムの根軌跡」と続きます。
探した限り、matlabであるrlocusに対応したのがscilabでの対応が難しいため(やろうと思えばやれますが。。。)
ここらへんは飛ばします。(おまえわかってないから飛ばすのか! という声が聞こえますが)
で、根軌跡によって 当ブログの本題の制御系の設計をやってみましょう。
つまり参考書は4−7「制御システムの性能を補償するための根軌跡によるアプローチ」です。
制御システムは このやり方は1)モデルが与えられている そして 2)根軌跡がわかるので 3)補償する制御器を与えてやり 4)MATLABやscilabで評価してやる。
ということになります。 具体的に例題で見ていきましょう。
4−7−1 として 根軌跡による 位相進み補償がまず最初です。。。
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
寝てますね
あきらめましょう
結局、設計は位相進み補償、位相進み遅れ補償、などを机上でやり
ステップ応答で比較しているのに上記4)をやっているということです。
例題4−13の結果を示して今回は終わりにします。すみません
s=poly(0,'s');
-->Ht=1.06/(s*(s+1)*(s+2));
-->H=syslin('c',Ht);
-->evans(H,100);
として、まずHtという補償前の前向き伝達関数を与えてその根軌跡を見る。
すると



こんな感じの根軌跡が得られる。
補償器を設計して(設計は尾形先生の本に譲る)
->Gt=0.9656*(s+0.05)/(s+0.005);
これが補償器
-->GH=Gt*Ht;
直列にして
-->G=syslin('c',GH);
-->clf()
-->evans(G,100);
警告: evans: 曲線は最初の 2000 個の離散点に丸められています。
あれ まあ良いか


となり補償後のものが得られました。この評価は、ステップ応答の比較をしてみると


あらら 何かおかしい
今回はここまで 修正してまたアップします。