2-DOF PID コントローラーの SISO コンポーネントへの分解
この例では、フィードフォワード構成、フィードバック構成、フィルター構成のそれぞれについて、2-DOF PID コントローラーから SISO 制御コンポーネントを抽出する方法を示します。例では、すべての構成について閉ループ システムを比較することで、これらがすべて等価であることを確認します。
2-DOF PID コントローラーを取得します。この例では、プラント モデルを作成し、それに合わせて 2-DOF PID コントローラーを調整します。
G = tf(1,[1 0.5 0.1]);
C2 = pidtune(G,'pidf2',1.5);
C2
は pid2
コントローラー オブジェクトです。C2
の制御アーキテクチャは、次の図に示すとおりです。
この制御システムは、SISO コンポーネントのみを使用する他のいくつかのアーキテクチャでも同等に表現できます。フィードフォワード構成では、2-DOF コントローラーが SISO PID コントローラーおよびフィードフォワード補償器として表現されます。
フィードフォワード構成を使用して、C2
を SISO 制御コンポーネントに分解します。
[Cff,Xff] = getComponents(C2,'feedforward')
Cff = 1 s Kp + Ki * --- + Kd * -------- s Tf*s+1 with Kp = 1.12, Ki = 0.23, Kd = 1.3, Tf = 0.122 Continuous-time PIDF controller in parallel form. Xff = -10.898 (s+0.2838) ------------------ (s+8.181) Continuous-time zero/pole/gain model.
このコマンドでは、SISO PID コントローラー Cff
が pid
オブジェクトとして返されます。フィードフォワード補償器 X
は zpk
オブジェクトとして返されます。
フィードフォワード構成用の閉ループ システムを構築します。
Tff = G*(Cff+Xff)*feedback(1,G*Cff);
フィードバック構成では、2-DOF コントローラーが SISO PID コントローラーおよび追加のフィードバック補償器として表現されます。
フィードバック構成を使用して C2
を分解し、その閉ループ システムを構築します。
[Cfb, Xfb] = getComponents(C2,'feedback');
Tfb = G*Cfb*feedback(1,G*(Cfb+Xfb));
フィルター構成では、2-DOF コントローラーが SISO PID コントローラーおよび基準信号のプレフィルターとして表現されます。
フィルター構成を使用して C2
を分解します。その閉ループ システムも構築します。
[Cfr, Xfr] = getComponents(C2,'filter');
Tfr = Xfr*feedback(G*Cfr,1);
元の 2-DOF コントローラー C2
の閉ループ システムを構築します。これを行うには、C2
を 2 入力 1 出力の伝達関数に変換し、配列のインデックスを使用してチャネルにアクセスします。
Ctf = tf(C2); Cr = Ctf(1); Cy = Ctf(2); T = Cr*feedback(G,Cy,+1);
すべての閉ループ システムのステップ応答を比較します。
stepplot(T,Tff,Tfb,Tfr) legend('2-DOF','feedforward','feedback','filter','Location','Southeast')
プロットは一致し、すべてのシステムが等価であることが示されます。
2-DOF PID コントローラーを使用すると、1-DOF コントローラーに比べて性能が向上することがあります。詳細については、2-DOF PID コントローラーの調整 (コマンド ライン)を参照してください。
参考
pid2
| pidstd2
| getComponents