fc2ブログ

制御工学その5

2.7 MATLAB(scilab)を利用した演習



お金が無いので以下MATLABはScilabで代用

MATLABでは、関数tfやzpkを用いてモデルを伝達関数で表すことが出来る。
tfはtransfer functionの略っぽい。P(s)の分母、分子をそれぞれ与えることで伝達関数を返す。

scilabだとそんなのないっぽい。syslin関数でなんとかなるというか、そのまま分数の形でどうにかするしかないか。
zpkはscilabだとどうなんだろう。わからん。やっぱmatlab欲しいわ

極、零点

零点はそのままroots関数で行ける極は分母のroots関数で行けるかな。

問題2.10

以下scilab出力

>sysP = (s^2+2*s+3)/(4*s^4+5*s^3+s^2+s+5);

-->sysP
sysP =

2
3 + 2s + s
------------------
2 3 4
5 + s + s + 5s + 4s


これで伝達関数ができて
ここに極(分母の根)と零点(分子の根)を求めるコマンドを叩く


->z = roots(numer(sysP))
z =

- 1. + 1.4142136i
- 1. - 1.4142136i

-->z = roots(denom(sysP))
z =

0.4792748 + 0.7520813i
0.4792748 - 0.7520813i
- 1.1042748 + 0.5935072i
- 1.1042748 - 0.5935072i


というわけさ。

zpkってzero,pole,gainなんだな。zeroとpoleは前述の方法で楽に求まるけど、gainってどうやって計算するんだろう。

まあいいかスルーで。

垂直駆動アームでの応用例。

l=0.204
M=0.390
J=0.0712
c=0.695
g=0.981

とそれぞれパラメータを与えた上で、伝達関数

P(s) = 1/(J*s^2+c*s+M*g*l*cos(ye))

ye = 0のとき


numP =

1.

-->denP = J*s^2+c*s+M*g*l*cos(ye)
denP =

2
0.7804836 + 0.695s + 0.0712s

-->sysP = numP/denP
sysP =

1
---------------------------
2
0.7804836 + 0.695s + 0.0712s


極は


>pole = roots(denP)
pole =

- 1.2947313
- 8.4665047


ye = πのとき

伝達関数と極は


->sysP = numP/denP
sysP =

1
---------------------------
2
- 0.7804836 + 0.695s + 0.0712s

-->pole = roots(denP)
pole =

1.0170324
- 10.778268




問題2.11

単位を合わせるためμとかミリをとる。

R=290
C=0.000001
L=0.1

伝達関数は

P(s) = 1/(CLs^2+RCs+1)

scilabで計算してみる

まずは伝達関数

sysP =

1
-------------------------
2
1 + 0.00029s + 1.000D-07s





-->pole = roots(denP2)
pole =

- 1450. + 2810.2491i
- 1450. - 2810.2491i


まとめ
matlabで便利そうなsyntaxはscilabではほぼ使えない。自力で何とかする。
ゲイン等は触scilabでは触ってない。参考書も触ってないのでのちのち触るんだろう。

わからないところ
特にはないけどscilabとmatlabの互換がちょっとこわい
スポンサーサイト



コメントの投稿

非公開コメント

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

この人とブロともになる

QRコード
QR