001_analog_control.mw

アナログ制御システム

イントロダクション

> restart;

制御システム解析および設計における多くの数学的計算が、Maple により有効に計算されます。例えば、コンペンセータ(補償器)の設計においては、従来の数値的シミュレーションよりも、数学的定義や数式で直接扱うことが多くの場合優位です。

以下のようなフィードバック制御システムを考えみましょう。

[Inserted Image]

設計プロセスは、目的の性能を導き出す様々なパラメータの値を見つけ出すことからなります。このアプリケーションでは、古典的な制御数学が設計を援助するのに適用されます。

最初に、Maple で定義してあるすべての定義をクリアします。そしてラプラス変換ライブラリを呼び出します。

システムの定義

> with(inttrans);

[addtable, fourier, fouriercos, fouriersin, hankel, hilbert, invfourier, invhilbert, invlaplace, invmellin, laplace, mellin, savetable]

制御するシステムを定義します。

> G := 1/s^2;

G := 1/s^2

設計パラメータ K をもつ、進み補償器を定義します。

> H := K*(s+2)/(s+4);

H := K*(s+2)/(s+4)

開ループ伝達関数を計算します。

> GH := G*H;

GH := K*(s+2)/(s^2*(s+4))

基準信号として、Heavisideステップ入力関数の伝達関数を定義します。

> R := 1/s;

R := 1/s

閉ループ伝達関数を計算します。

> Y := (GH)/(1+GH)*R;

Y := K*(s+2)/(s^3*(s+4)*(1+K*(s+2)/(s^2*(s+4))))

閉ループ伝達関数を簡略化 (simplify) します。

> Y := simplify(Y);

Y := K*(s+2)/(s*(s^3+4*s^2+K*s+2*K))

システムの特性方程式を取り出します。

> chareqn := denom(Y);

chareqn := s*(s^3+4*s^2+K*s+2*K)

根軌跡解析

K の値の 0 から 5 までの範囲での値に対し、特性方程式の根を計算します。根がみつかると、後で使うために Maple のテーブルに保存し、その点をプロットするための Maple プロット・シーケンスに保存します。 結果は根軌跡(ルートローカス)です。

> x:=0: K:='K': roottable:='roottable': plotseq:=NULL:
for x from 0.0 by .25 to 5.0 do
 roottable[x]:= [fsolve(subs(K=x,chareqn),s,complex)];
 nroots := nops(roottable[x]);
 for i from 1 to nroots do
   if type(roottable[x][i],realcons)=true then
     plotseq := plotseq,[roottable[x][i],0.0];
   else
     plotseq := plotseq,[Re(roottable[x][i]),Im(roottable[x][i])];
   fi;
 od;
od:

根軌跡図をプロットします。

> plot([plotseq],style=POINT,color=RED,symbol=CROSS,title=`Roots Locus Plot`,labels=[`Real`,`Imag.`]);

[Plot]

適当な K の値を roottable のインデックスに指定すると、各根の値にアクセスできます。
例えば K = 0.0 に対し閉ループの極は、

> roottable[0.0];

[-4., 0., 0., 0.]

同様に K = 4.25 に対する閉ループの極は、

> roottable[4.25];

[-3.480581250, -.2597093749-1.540997040*I, -.2597093749+1.540997040*I, 0.]

時間応答解析

Maple の数式処理能力により、変数として管理されている設計パラメータをもつ、一般的な式を導き出すことができます。これは従来の数値計算シミュレーション・パッケージよりも優位な点を提供します。

例えば、システムの時間応答を解析するには、単に閉ループ伝達関数の逆ラプラス変換を計算するだけです。この関数からの出力は、Maple の特別な表示法です。長く、扱いにくい数式を使わずに、高次のシステムに適応できます。

> Y;

K*(s+2)/(s*(s^3+4*s^2+K*s+2*K))

> count := 0:
for kval from .2 by .4 to 1 do

 y||count := simplify(invlaplace(subs(K=kval,Y),s,t)):

 printf(`\nResponse for K= %.4f\n`,kval); print(y||count);

 p||count := plot(y||count,t=0..20):

 ps||count := plot3d(y||count, K=kval..kval+.2, t=0..20, style=PATCHNOGRID, view=[kval..kval+.2,0..20,0..2]):

 count := count+1:

od:

Response for K= 0.2000

1.+0.6288557255e-2*exp(-3.975000989*t)-1.006288558*exp(-0.1249950560e-1*t)*cos(.3169742389*t)+0.3917956201e-1*exp(-0.1249950560e-1*t)*sin(.3169742389*t)

Response for K= 0.6000

0.1908697616e-1*exp(-3.925027364*t)-1.019086976*exp(-0.3748631794e-1*t)*cos(.5516567126*t)+0.6655422566e-1*exp(-0.3748631794e-1*t)*sin(.5516567126*t)+1.

Response for K= 1.0000

0.3215449109e-1*exp(-3.875129794*t)-1.032154491*exp(-0.6243510292e-1*t)*cos(.7156909968*t)+0.8405883940e-1*exp(-0.6243510292e-1*t)*sin(.7156909968*t)+1.

応答の表示

> plots[display]([p||(0..count-1)]);

[Plot]

アニメーション

以下のコマンドはワークシート環境でアニメーションを表示します。

> plots[display]([p||(0..count-1)],insequence=true);

[Plot]

3-D ビジュアリゼーション

以下のコマンドは 3D のビジュアリゼーションを表示します。

> plots[display3d]([ps||(0..count-1)],axes=BOXED);

[Plot]