scilabで遊ぼう (10) [プログラム三昧]
scilabの本を貸してもらって読みました。 そこで、名前だけは聞いたことのある、「PID制御」に挑んでみました。
比例、積分、微分で、PID
PID制御というのは、制御の目的となるシステムを、P(比例)I(積分)D(微分)の三つの成分からなる制御装置で思い通りに動かそうという仕組みです。 PID制御装置の伝達関数は、こんな風に記述されます。
C(s) = KP * (1 + 1 / (TI * s) + TD * s)
うまいこと、これらの係数を決めてやれば、制御装置の出来上がりです。 という事は、三つもパラメータを決めなきゃいけないんですか。 大変じゃん。
と、思っていたのですが、どうやら「だまって座ればピタリと当たる」解法があるらしいのです。 ほうほう、「限界感度法」というんですね。 いっちょ、scilabさんで試してみますか。
被制御システムを決める
制御装置は、被制御システムを制御するのが目的です。 そのため、最初に被制御システムを決めます。 ここでは、参考文献で使われていたシステムをそのまま使います。
G(s) = 0.1 / (s + 0.5)3
このシステムの出力と制御目標との差をC(s)の入力として、G(s)を制御します。 scilab式に書くとこうなります。
s=poly(0,'s'); G=0.1/((s+0.5)^3);
安定して発振する条件を探す
最初のステップは、P制御だけを使って、安定して発振するゲイン KC を探すことです。 発振しているのに「安定して」というのは、変な話ですが、一定の振幅を保って発振するという意味のようです。 ゲインを探すには、無骨ですが、こんな記述を書いて、発振の様子を観測しました。
KC=10.0; C=syslin('c',KC*(1/(1+s*0))); BETA=1+0*s; t=[0:0.1:50]; y=csim('step',t,G*C/.BETA); scf(1);clf;plot(t,y);ax1=gca();ax1.grid=[4,4];
"BETA" は、フィードバックのフィルタです。 ここでは、入力をそのまま出力に出すフィルタを使っています。
KC=9.8 にすると、振幅がしだいに小さくなっていきます。
KC=10.0 にすると、振幅が安定します。
KC=10.2 にすると、振幅がしだいに大きくなっていきます。
これらの結果から、 KC=10.0 が求めるゲインであることがわかりました。 ここでは、同時に発振周期も求めておきます。 KC=10.0 の時のグラフによれば、時刻4から48の間に6サイクルの波が入っています。 1サイクルあたりの時間を TC として定義しておきます。
KC=10.0; TC=(48-4)/6;
以上で、第一ステップは、終了です。 ところで、このときのループ・ゲインは、どうなっているんでしょうね。
これが、ループ・ゲインの周波数特性です。 発振周波数である、 f=0.102Hz (T=9.80) の時にゲインが0dB、位相が-180°になっているのがわかります。
PID制御装置を定義する
KC と TC を見つけたら、これらの値を元にPID制御装置のパラメータを計算します。 計算式は、このようにしごく簡単です。
KP=0.6*KC; TI=0.5*TC; TD=0.125*TC; C=syslin('c',KP*(1+1/(TI*s)+TD*s));
理屈は、よくわかりませんが、このパラメータを使うと、ちょうどいいらしいです。 周波数特性は、こんな風になりました。
左の斜めに下がっていく部分がI特性、中央の平坦になっている部分がP特性、右側の斜めに上がっていく部分がD特性になっています。
t=[0:0.1:50]; y=csim('step',t,G*C/.BETA); scf(1);clf;plot(t,y);ax1=gca();ax1.grid=[4,4];
ステップ応答を求めてみました。 立ち上がりが俊敏で、リンギングもおとなしめです。
ループ・ゲインの周波数特性は、どうなっているんでしょうね。
位相余裕が約30°、利得余裕が約70dBと、安定したシステムになっています。 下が、閉ループ・ゲインです。
と、シミュレーションだと綺麗に出来上がるのですが、実践するとどうなんでしょうね。
付録 : 「scilab で遊ぼう」索引
- scilabで遊ぼう (1)
- scilabで遊ぼう (2)
- scilabで遊ぼう (3)
- scilabで遊ぼう (4)
- scilabで遊ぼう (5)
- scilabで遊ぼう (6)
- scilabで遊ぼう (7)
- scilabで遊ぼう (8)
- scilabで遊ぼう (9)
- scilabで遊ぼう (10)
- scilabで遊ぼう (11)
- scilabで遊ぼう (12)
- scilabで遊ぼう (13)
参考文献
Scilab/Scicosで学ぶシミュレーションの基礎―自然・社会現象から、経済・金融、システム制御まで
- 作者: 橋本 洋志
- 出版社/メーカー: オーム社
- 発売日: 2008/01
- メディア: 単行本
コメント 0