Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

遅延をもつ制御システムの解析

この例では、Control System Toolbox™ を使用して、遅延をもつ制御システムの解析と設計を行う方法を示します。

遅延をもつプロセスの制御

多くのプロセスでは、伝達遅延や時間遅れとも呼ばれるむだ時間が発生します。遅延は制御帯域を制限し、閉ループの安定性に影響する線形位相シフトを発生させるため、このようなプロセスを制御することは困難です。

状態空間表現を使用すると、遅延をもつ制御システムに対して正確な開ループ モデルまたは閉ループ モデルを作成し、近似なしでその安定性や性能を解析できます。モデルを組み合わせた場合、"内部" 遅延は状態空間 (SS) オブジェクトによって自動的に追跡されます。詳細は、「むだ時間の指定」チュートリアルを参照してください。

例: むだ時間をもつ PI 制御ループ

次の標準的な設定点の追従のループを考えてみます。

ここで、プロセス モデル P には 2.6 秒のむだ時間があり、補償器 C は PI コントローラーです。

$$ P(s) = {e^{-2.6 s} (s+3) \over s^2+0.3 s+1} , \;\; C(s) = 0.06 (1 +
{1 \over s}) $$

これら 2 つの伝達関数は、次のように指定できます。

s = tf('s');
P = exp(-2.6*s)*(s+3)/(s^2+0.3*s+1);
C = 0.06 * (1 + 1/s);

閉ループ応答を解析するには、ysp から y への閉ループ伝達のモデル T を作成します。このフィードバック ループには遅延が存在するため、P および C を状態空間に変換して、解析に状態空間表現を使用しなければなりません。

T = feedback(P*C,1)
T =
 
  A = 
          x1     x2     x3
   x1  -0.36  -1.24  -0.18
   x2      1      0      0
   x3      0      1      0
 
  B = 
        u1
   x1  0.5
   x2    0
   x3    0
 
  C = 
         x1    x2    x3
   y1  0.12  0.48  0.36
 
  D = 
       u1
   y1   0
 
  (values computed with all internal delays set to zero)

  Internal delays (seconds): 2.6 
 
Continuous-time state-space model.

結果は、2.6 秒の内部遅延をもつ 3 次モデルになります。内部的には、遅延が他のダイナミクスとどのように連動するかが状態空間オブジェクト T によって追跡されます。この構造情報はユーザーには示されず、上の表示は遅延がゼロに設定されている場合の A、B、C、D の値のみを示します。

STEP コマンドを使用して、ysp から y への閉ループ ステップ応答をプロットします。

step(T)

閉ループの振動は、開ループ応答 P*C で見られるように、弱いゲイン余裕が原因です。

margin(P*C)

閉ループ周波数応答には共振も見られます。

bode(T)
grid, title('Closed-loop frequency response')

設計を改善するには、1 rad/s 付近の共振点にノッチ フィルターを適用します。

notch = tf([1 0.2 1],[1 .8 1]);
C = 0.05 * (1 + 1/s);
Tnotch = feedback(P*C*notch,1);

step(Tnotch), grid

むだ時間のパデ近似

多くの制御設計アルゴリズムでは、むだ時間を直接取り扱えません。一般的な回避策は、パデ近似 (オールパス フィルター) によって遅延を置き換えることです。この近似は低周波数でのみ有効であるので、真の応答と近似の応答を比較し、正しい近似の次数を選択して近似の正しさを確認することが重要です。

PADE コマンドを使用して、遅延をもつ LTI モデルのパデ近似を計算します。上記の PI 制御の例では、正確な閉ループ応答 T を、遅延の 1 次パデ近似で得た応答と比較できます。

T1 = pade(T,1);
step(T,'b',T1,'r',100)
grid, legend('Exact','First-Order Pade')

この近似誤差はかなり大きくなります。より良い近似を得るために、遅延の 2 次のパデ近似を試みます。

T2 = pade(T,2);
step(T,'b',T2,'r',100)
grid, legend('Exact','Second-Order Pade')

応答は、パデ近似によりもたらされた非最小の位相の結果を除いて、よく一致します。

感度解析

遅延が正確に理解されていることはほとんどありません。したがって、制御システムが遅延の値に対し、どれほどの感度があるかを理解することが重要な場合があります。そのような感度解析は、LTI 配列と InternalDelay プロパティを使用して簡単に実行できます。

たとえば、上のノッチ PI 制御の感度を解析するには、2.0 ~ 3.0 の範囲の遅延値をもつモデルを 5 つ作成します。

tau = linspace(2,3,5);                    % 5 delay values
Tsens = repsys(Tnotch,[1 1 5]);           % 5 copies of Tnotch
for j=1:5
  Tsens(:,:,j).InternalDelay = tau(j);    % jth delay value -> jth model
end

次に、STEP を使用して包絡線プロットを作成します。

step(Tsens)
grid, title('Closed-loop response for 5 delay values between 2.0 and 3.0')

このプロットでは、遅延の値の不確かさは閉ループ特性にほとんど影響しないことを示しています。内部遅延の値は変更できますが、値の数はモデル構造の一部であるため変更できないことに注意してください。いくつかの内部遅延を除去するには、それらの値をゼロに設定するか、あるいは 0 次の PADE を使用します。

Tnotch0 = Tnotch;
Tnotch0.InternalDelay = 0;
bode(Tnotch,'b',Tnotch0,'r',{1e-2,3})
grid, legend('Delay = 2.6','No delay','Location','SouthWest')

離散化

関数 C2D を使用すると、連続時間の遅延システムを離散化できます。使用できる方法には、ゼロ次ホールド (ZOH)、1 次ホールド (FOH)、Tustin があります。内部遅延をもつモデルに対して、ZOH 離散化は必ずしも正確ではありません。つまり、連続および離散化されたステップ応答は一致しません。

Td = c2d(T,1);
step(T,'b',Td,'r')
grid, legend('Continuous','ZOH Discretization')
Warning: Discretization is only approximate due to internal delays. Use faster
sampling rate if discretization error is large. 

このような離散化のギャップを修正するには、連続応答と離散応答がほぼ一致するまでサンプリング周期の値を減らします。

Td = c2d(T,0.05);
step(T,'b',Td,'r')
grid, legend('Continuous','ZOH Discretization')
Warning: Discretization is only approximate due to internal delays. Use faster
sampling rate if discretization error is large. 

内部遅延は離散化されたモデル内に留まり、モデル次数が上がっていないことに注意してください。

order(Td)
Td.InternalDelay
ans =

     3


ans =

    52

遅延システムに固有の機能

遅延のない LTI 解析にのみ慣れていると、遅延のあるシステムの時間応答と周波数応答は奇妙に見えます。時間応答は無秩序に動作し、ボード線図はゲインの振動などを示すことがあります。これらの予測できない動作はソフトウェアによるものではなく、このようなシステムの実際の特性です。以下では、これらの現象について少し説明します。

ゲイン リップル:

G = exp(-5*s)/(s+1);
T = feedback(G,.5);
bodemag(T)

ゲイン振動:

G = 1 + 0.5 * exp(-3*s);
bodemag(G)

ギザギザのステップ応答 (初期ステップの "エコー" に注目してください):

G = exp(-s) * (0.8*s^2+s+2)/(s^2+s);
T = feedback(G,1);
step(T)

カオス応答:

G = 1/(s+1) + exp(-4*s);
T = feedback(1,G);

step(T)

参考

|

関連する例

詳細