Main Content

systune を使用した制御システムの調整

systune コマンドでは、アーキテクチャやフィードバック ループの数に関係なく、制御システムのゲインを一緒に調整できます。この例では、シンプルなアプリケーションでの systune のワークフローの概要を説明します。

ヘッド ディスク アセンブリの制御

この例では、ハード ドライブ モデルのヘッド ディスク アセンブリ (HDA) の 9 次モデルを使用します。このモデルは HDA の最初のいくつかの柔軟モードを取得したものです。

load rctExamples G
bode(G), grid

ここでは、ヘッドを正しいトラックに配置するために、次に示すフィードバック ループを使用します。この制御構造は、PI コントローラーと帰還路のローパス フィルターで構成されます。ヘッド位置 y はステップの変化 r に追従します。応答時間は約 1 ミリ秒で、オーバーシュートはほぼなしか皆無、定常偏差はなしでなければなりません。

図 1: 制御構造

systune を使用して、PI ゲインおよびフィルター係数 a を時間領域と周波数領域のさまざまな要件に従って直接調整できます。

調整可能な要素の指定

図 1 の制御構造には調整可能な要素が 2 つあります。PI コントローラー C(s) とローパス フィルターです。

F(s)=as+a.

PI ブロックは tunablePID オブジェクトを使用してパラメーター化できます。

C0 = tunablePID('C','pi');  % tunable PI

ローパス フィルター F(s) をパラメーター化するために、調整可能な実数パラメーター a を作成し、分子が a で分母が s+a の 1 次伝達関数を構成します。

a = realp('a',1);    % filter coefficient
F0 = tf(a,[1 a]);    % filter parameterized by a

使用できる調整可能な要素の概要については、「調整可能なモデルの作成」の例を参照してください。

調整可能な閉ループ モデルの作成

次に、図 1 のフィードバック ループの閉ループ モデルを作成します。開ループ解析を容易にし、目的とする安定余裕などの開ループ要件を指定するために、プラント入力 u に解析ポイントを追加します。

AP = AnalysisPoint('u');

図 2: Analysis Point ブロック

feedback を使用して、基準 r からヘッド位置 y への閉ループ伝達のモデルを作成します。

T0 = feedback(G*AP*C0,F0);  % closed-loop transfer from r to y
T0.InputName = 'r';
T0.OutputName = 'y';

結果の T0 は、調整可能な要素 C および F に依存する一般化状態空間モデル (genss) になります。

設計要件の指定

システムの目的の動作を指定するために、調整目標オブジェクトを使用して制御設計要件を定義できます。応答時間、確定的および確率的なゲイン、ループ整形、安定余裕、極配置などの要件を指定できます。ここでは、2 つの要件を使用して制御目的を取得します。

  • 追従要件: 位置 y は 1 ミリ秒の応答時間で基準 r を追従しなければならない

  • 安定余裕要件: フィードバック ループのゲイン余裕は 6 dB、位相余裕が 45 度でなければならない

TuningGoal.Tracking オブジェクトと TuningGoal.Margins オブジェクトを使用して、これらの要件を取得します。余裕に関する要件は、プラント入力 u (解析ポイント AP でマークされた位置) で測定された開ループ応答に適用されることに注意してください。

Req1 = TuningGoal.Tracking('r','y',0.001);
Req2 = TuningGoal.Margins('u',6,45);

コントローラー パラメーターの調整

これで、systune を使用して PI ゲインおよびフィルター係数 a を調整することができます。この関数は、調整可能な閉ループ モデル T0 と要件 Req1,Req2 を受け取ります。できるだけグローバルに最適な設計になるように、いくつかのランダムな開始点を使用します。

rng('default')
Options = systuneOptions('RandomStart',3);
[T,fSoft] = systune(T0,[Req1,Req2],Options);
Final: Soft = 1.35, Hard = -Inf, Iterations = 64
Final: Soft = 1.35, Hard = -Inf, Iterations = 102
Final: Soft = 2.78e+03, Hard = -Inf, Iterations = 178
       Some closed-loop poles are marginally stable (decay rate near 1e-07)
Final: Soft = 1.35, Hard = -Inf, Iterations = 63

要件はすべて正規化されており、値が 1 未満になれば要件を満たします。ここでは、最終値が 1 よりもわずかに大きく、要件をほぼ満たしていることがわかります。各要件の調整後の値を表示するには、出力 fSoft を使用します。1 つ目の要件 (追従) には少し違反し、2 つ目の要件 (余裕) は満たされていることがわかります。

fSoft
fSoft = 1×2

    1.3487    0.6358

systune の最初の出力 T は、"調整後" の閉ループ モデルです。PI ゲインおよびフィルター係数の調整後の値にアクセスするには、showTunable または getBlockValue を使用します。

getBlockValue(T,'C')  % tuned value of PI controller
ans =
 
             1 
  Kp + Ki * ---
             s 

  with Kp = 0.00104, Ki = 0.0224
 
Name: C
Continuous-time PI controller in parallel form.
showTunable(T)  % tuned values of all tunable elements
C =
 
             1 
  Kp + Ki * ---
             s 

  with Kp = 0.00104, Ki = 0.0224
 
Name: C
Continuous-time PI controller in parallel form.
-----------------------------------
a = 3.2e+03

結果の検証

まず、viewGoal を使用して、各要件に対する調整後のシステムの違反状況を検査します。最初のプロットは追従誤差を周波数の関数として示したもので、2 番目のプロットは正規化されたディスク余裕を周波数の関数として示したものです (diskmargin を参照)。詳細については、「Creating Design Requirements」の例を参照してください。

clf, viewGoal([Req1 Req2],T)

次に、基準 r からヘッド位置 y への閉ループ ステップ応答をプロットします。応答にオーバーシュートはありませんが、わずかにゆがみがあります。

clf, step(T)

さらに詳しく調査するために、getLoopTransfer を使用してプラント入力における開ループ応答を取得します。

L = getLoopTransfer(T,'u');
bode(L,{1e3,1e6}), grid
title('Open-loop response')

ゲイン交差後の最初の共振がゆがみの原因になっています。これを解消するには、フィードバック ループにノッチ フィルターを追加し、その係数を systune でローパス係数および PI ゲインとともに調整します。

参考

| |

関連するトピック