looptune
を使用したフィードバック ループの調整
この例では、looptune
コマンドを使用してフィードバック ループを調整する基本的なワークフローを示します。looptune
は systune
に似ており、ループ整形の設計を容易にするために、調整要件が自動的に生成されるようになっています。
エンジン速度の制御
この例では、次の図に示すシンプルなエンジン速度制御アプリケーションを使用します。この制御システムは、PID ループ 1 つで構成されており、PID コントローラーのゲインを調整することで、望ましいスピードがステップ変化した場合に適切に応答できるようにしなければなりません。具体的には、応答を 5 秒未満に、オーバーシュートなし (あるいはほとんどなし) で整定させるのが目標です。
次に示すエンジン ダイナミクスの 4 次モデルを使用します。
load rctExamples Engine bode(Engine) grid
調整可能な要素の指定
目的の性能を達成するには、4 つの PID ゲインを調整する必要があります。tunablePID
オブジェクトを使用して PID コントローラーをパラメーター化します。
PID0 = tunablePID('SpeedController','pid')
Tunable continuous-time PID controller "SpeedController" with formula: 1 s Kp + Ki * --- + Kd * -------- s Tf*s+1 and tunable parameters Kp, Ki, Kd, Tf. Type "pid(PID0)" to see the current value.
フィードバック ループの調整可能なモデルの作成
looptune
で、次の図に示される一般的な SISO または MIMO フィードバック ループを調整します。このフィードバック ループは、プラントとコントローラーの間の相互作用をモデル化したものです。これは "正" のフィードバック相互接続であることに注意してください。
スピード制御ループにおいて、プラント はエンジン モデルであり、コントローラー は PID コントローラーとプレフィルター で構成されます。
looptune
を使用するために、 および のモデルを作成します。各モデルの入力と出力に名前を割り当てて、プラントとコントローラーの間のフィードバック パスを指定します。コントローラー には、基準速度 r
と測定速度 speed
の 2 つの入力があることに注意してください。
F = tf(10,[1 10]); % prefilter G = Engine; G.InputName = 'throttle'; G.OutputName = 'speed'; C0 = PID0 * [F , -1]; C0.InputName = {'r','speed'}; C0.OutputName = 'throttle';
ここで、C0
は、調整可能な PID ブロック PID0
に依存する一般化状態空間モデル (genss
) です。
コントローラー パラメーターの調整
これで、looptune
を使用して、単純な制御帯域幅要件に従って PID ゲインを調整できます。整定時間 5 秒を達成するには、開ループ応答のゲイン交差周波数が約 1 rad/s でなければなりません。この基本的な要件に対し、looptune
は開ループ応答を自動的に整形して、積分動作、高周波数ロールオフ、および適切な安定余裕を提供します。追加の要件を指定して設計をさらに制約できることに注意してください。例については、蒸留塔の分離コントローラーを参照してください。
wc = 1; % target gain crossover frequency
[~,C,~,Info] = looptune(G,C0,wc);
Final: Peak gain = 0.928, Iterations = 7 Achieved target gain value TargetGain=1.
最終値が 1 未満であり、目的の帯域幅が達成され、ロールオフと安定余裕も適切であることがわかります。looptune
から調整後のコントローラー C
が返されます。PID ブロックの調整後の値を取得するには、getBlockValue
を使用します。
PIDT = getBlockValue(C,'SpeedController')
PIDT = 1 s Kp + Ki * --- + Kd * -------- s Tf*s+1 with Kp = 0.000855, Ki = 0.00269, Kd = -7.83e-05, Tf = 0.877 Name: SpeedController Continuous-time PIDF controller in parallel form.
結果の検証
loopview
を使用して、設計を検証し、looptune
によって暗黙的に適用されたループ整形要件を可視化します。
clf loopview(G,C,Info)
次に、エンジン速度のステップ コマンドまでの閉ループ応答をプロットします。調整後の応答は要件を満たしています。
T = connect(G,C,'r','speed'); % closed-loop transfer function from r to speed clf step(T)