fc2ブログ

制御工学その19

5.4 MATLAB/Simulinkを利用した演習 -垂直駆動アームのPI-D制御



いつもどおりMATLABはないのでScilabが頑張る。

前節で示した垂直駆動アームのPI-D制御を実際にシミュレートしてみる。

各パラメータは

//armpara
//垂直駆動アームの物理パラメータ

l = 0.204;
M = 0.390;
J = 0.0712;
c = 0.695;
g = 9.81;


として、目標値応答に注目したPI-Dと入力外乱応答に注目したPI-Dをそれぞれパラメータ設計する。

目標値応答に注目すると


//armPID
//PI-D Controller for r(t)-y(t)

a0 = M*l*g/J;
a1 = c/J;
b0 = 1/J;

omegaM = 10;
zetaM = 0.7;

kI = omegaM*a0/(2*zetaM*b0) //積分ゲイン
kP = omegaM^2/b0 //比例ゲイン
kD = 2*zetaM*omegaM/b0 + a0/(2*zetaM*omegaM*b0) + a1/b0 //微分ゲイン


んで作ってみたPI-Dシミュレータがこちら



目標値π/6で、1.5秒目から外乱0.5が加わるとしてシミュレートした結果のグラフが



次に、入力外乱応答に特化してシミュレートする。

パラメータ設定


//armPID2
//PI-D Controller for d(t)-y(t)

a0 = M*l*g/J
a1 = c/J
b0 = 1/J

omegaM = 10;
alpha1 = 2;
alpha2 = 2;

kI = omegaM^3/b0 //積分ゲイン
kP = (alpha1*omegaM^2 - a0)/b0 //比例ゲイン
kD = (alpha2*omegaM - a1)/b0 //微分ゲイン

実際にscilabで目標値応答の時と同じブロック図を使ってシミュレートしてたがちっともうまくいかない。先取りして問題もやってみたがやはりうまくいかない。何故だ。

というわけで、大学の演習室にあるMATLABを使ってやり直してみた。

パラメータ・図はscilabと同じ構成、MATLABで作るとこうなる。



(この図はscilabと同条件にするために、パラメータを直接打ち込んでいる)

シミュレートしてみるとうまくいく。さすが有料


さらに、目標値応答のグラフと重ねあわせてみる。
点線が入力外乱に特化した場合、実線が目標値応答に特化した場合。




教科書にあるようなきれいな重なりになった。さすがMATLAB



問題5.5

問題5.4で設計した台車の位置制御をするシミュレーションを行う。

各パラメータは

P(s) = 1/Ms^2+cs
M = 0.44
c = 8.32

kI = ωM^3*M
kp = α1*ωM^2*M
kD = (α2*ωM^2 - c/M) * M = α2*ωM*M - c

これは問題5.4で求めた。

I-PDのブロック図をつくってみる。



入力(目標値)を単位ステップ(r(s)=1)
外乱なしでシミュレートすると



となる。すごいできてるように見えるけど答えないのでわからない。目標値に収束してるしいいか。

おまけ

垂直駆動アームを線形近似したけどシミュレートなら非線形のまま扱える。
線形近似した伝達関数の部分を非線形のまま扱ったブロック図がこちら



小ウインドウ部分が非線形な伝達関数部分。非線形微分方程式を積分繰り返してなんとか解いてる。

実際にシミュレートして、線形近似の場合と比べてみたグラフ



点線が線形近似したモデルでのシミュレーション、実線が非線形のまま実装したモデルでのシミュレーション。
非線形のままのシミュレーションのほうがオーバーシュート、整定時間共に大きくなっている。


まとめ

さすがのMATLAB、どうしたScilab

わからないところ

Scilabでこれくらいのシミュレートが出来ないはずないので、なにかしら仕様を勘違いしてるはず。
現在調査中。
スポンサーサイト



コメントの投稿

非公開コメント

検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR