Main Content

pidtune

線形プラント モデルのための PID 調整アルゴリズム

説明

C = pidtune(sys,type) は、プラント sys 用に type タイプの PID コントローラーを設計します。type で 1 自由度 (1-DOF) の PID コントローラーを指定した場合、コントローラーは次に示すような単一フィードバック ループ用に設計されます。

type で 2 自由度 (2-DOF) の PID コントローラーを指定した場合、pidtune によって次の図のフィードバック ループのような 2-DOF コントローラーが設計されます。

pidtune は PID コントローラー C のパラメーターを調整し、パフォーマンス (応答時間) とロバスト性 (安定余裕) のバランスを取ります。

C = pidtune(sys,C0) はコントローラー C0 と同じタイプと形式をもつコントローラーを設計します。sysC0 が離散時間モデルの場合、CC0 と同じ離散積分器の式をもちます。

C = pidtune(___,wc) は、開ループ応答の最初の 0 dB ゲイン交差周波数のターゲット値 wc を指定します。

C = pidtune(___,opts) はターゲット位相余裕などの追加の調整オプションを使用します。pidtuneOptions を使用して、オプション セット opts を指定します。

[C,info] = pidtune(___) はデータ構造体 info を返しますが、これには閉ループ安定性、選択した開ループ ゲイン交差周波数、実際の位相余裕に関する情報が含まれています。

すべて折りたたむ

この例では、以下で与えられるプラントの PID コントローラーを設計する方法を説明します。

sys=1(s+1)3.

第 1 段階として、プラントのモデルを作成して、このモデルの単純な PI コントローラーを設計します。

sys = zpk([],[-1 -1 -1],1); 
[C_pi,info] = pidtune(sys,'PI')
C_pi =
 
             1 
  Kp + Ki * ---
             s 

  with Kp = 1.14, Ki = 0.454
 
Continuous-time PI controller in parallel form.
info = struct with fields:
                Stable: 1
    CrossoverFrequency: 0.5205
           PhaseMargin: 60.0000

C_pi は、PI コントローラーを表す pid コントローラー オブジェクトです。info のフィールドは、調整アルゴリズムが約 0.52 rad/s の開ループ交差周波数を選択することを示しています。

コントローラー システムの閉ループのステップ応答 (設定値追従) を調べます。

T_pi = feedback(C_pi*sys, 1);
step(T_pi)

MATLAB figure

応答時間を改善するために、pidtune が自動的に選択する 0.52 という結果よりも高いターゲット交差周波数を設定できます。交差周波数を 1.0 に上げます。

[C_pi_fast,info] = pidtune(sys,'PI',1.0)
C_pi_fast =
 
             1 
  Kp + Ki * ---
             s 

  with Kp = 2.83, Ki = 0.0495
 
Continuous-time PI controller in parallel form.
info = struct with fields:
                Stable: 1
    CrossoverFrequency: 1
           PhaseMargin: 43.9973

新しいコントローラーはより高い交差周波数を実現しますが、それにより位相余裕は小さくなります。

閉ループ ステップ応答を 2 つのコントローラーと比較します。

T_pi_fast = feedback(C_pi_fast*sys,1);
step(T_pi,T_pi_fast)
axis([0 30 0 1.4])
ans = 1×4

         0   30.0000         0    1.4000

legend('PI','PI,fast')

MATLAB figure

ans = 
  Legend (PI, PI,fast) with properties:

         String: {'PI'  'PI,fast'}
       Location: 'northeast'
    Orientation: 'vertical'
       FontSize: 9
       Position: [0.7287 0.7968 0.1572 0.0789]
          Units: 'normalized'

  Use GET to show all properties

この性能低下は、PI コントローラーに 1.0 rad/s の交差周波数で十分な位相余裕を得るだけの自由度がないことにより起こります。微分動作を追加することで、応答を向上させることができます。

ターゲット交差周波数 1.0 rad/s をもつ Gc のための PIDF コントローラーを設計します。

[C_pidf_fast,info] = pidtune(sys,'PIDF',1.0)
C_pidf_fast =
 
             1            s    
  Kp + Ki * --- + Kd * --------
             s          Tf*s+1 

  with Kp = 2.72, Ki = 0.985, Kd = 1.72, Tf = 0.00875
 
Continuous-time PIDF controller in parallel form.
info = struct with fields:
                Stable: 1
    CrossoverFrequency: 1
           PhaseMargin: 60.0000

info のフィールドは、調整アルゴリズムが、コントローラーの微分動作により、十分な位相余裕のあるターゲット交差周波数を達成する、アグレッシブなコントローラーを設計できることを示しています。

閉ループ ステップ応答と外乱の抑制を、PI と PIDF の高速 コントローラーで比較します。

T_pidf_fast =  feedback(C_pidf_fast*sys,1);
step(T_pi_fast, T_pidf_fast);
axis([0 30 0 1.4]);
legend('PI,fast','PIDF,fast');

MATLAB figure

コントローラー システムの入力 (読み込み) 外乱の抑制を、PI と PIDF の高速 コントローラーで比較できます。これを行うには、プラント入力からプラント出力への閉ループ伝達関数の応答をプロットします。

S_pi_fast = feedback(sys,C_pi_fast);
S_pidf_fast = feedback(sys,C_pidf_fast);
step(S_pi_fast,S_pidf_fast);
axis([0 50 0 0.4]);
legend('PI,fast','PIDF,fast');

MATLAB figure

このプロットは、PIDF コントローラーが、より速い外乱の抑制を行うことも示しています。

次のプラントの PID コントローラーを標準形式で設計します。

sys=1(s+1)3

標準形式でコントローラーを設計するには、標準形式のコントローラーを pidtune への C0 引数として使用します。

sys = zpk([],[-1 -1 -1],1);
C0 = pidstd(1,1,1); 
C = pidtune(sys,C0)
C =
 
             1      1          
  Kp * (1 + ---- * --- + Td * s)
             Ti     s          

  with Kp = 2.18, Ti = 2.57, Td = 0.642
 
Continuous-time PID controller in standard form

積分器を離散化するために、指定されたメソッドを使用して離散時間 PI コントローラーを設計します。

プラントが離散時間の場合は、pidtune は既定の前進オイラー積分法を使用して自動的に離散時間コントローラーを返します。別の積分手法を指定するには、pid または pidstd を使用して、目的の積分手法をもつ離散時間コントローラーを作成します。

sys = c2d(tf([1 1],[1 5 6]),0.1);
C0 = pid(1,1,'Ts',0.1,'IFormula','BackwardEuler');  
C = pidtune(sys,C0)
C =
 
             Ts*z 
  Kp + Ki * ------
              z-1 

  with Kp = -0.0658, Ki = 1.32, Ts = 0.1
 
Sample time: 0.1 seconds
Discrete-time PI controller in parallel form.

C0 を入力して、pidtuneC0 と同じ形式、タイプ、離散化手法のコントローラー C を設計します。表示には、C の積分項で後退オイラー法の積分法が示されます。

台形則積分器を指定し、作成されたコントローラーを比較します。

C0_tr = pid(1,1,'Ts',0.1,'IFormula','Trapezoidal');
Ctr = pidtune(sys,C0_tr)
Ctr =
 
       Ts*(z+1)
  Ki * --------
       2*(z-1) 

  with Ki = 1.32, Ts = 0.1
 
Sample time: 0.1 seconds
Discrete-time I-only controller.

伝達関数によって与えられるプラントの 2-DOF PID コントローラーを設計します。

G(s)=1s2+0.5s+0.1.

ターゲット帯域幅は 1.5 rad/s を使用します。

wc = 1.5;
G = tf(1,[1 0.5 0.1]);
C2 = pidtune(G,'PID2',wc)
C2 =
 
                       1              
  u = Kp (b*r-y) + Ki --- (r-y) + Kd*s (c*r-y)
                       s              

  with Kp = 1.26, Ki = 0.255, Kd = 1.38, b = 0.665, c = 0
 
Continuous-time 2-DOF PID controller in parallel form.

タイプ 'PID2' を使用すると、pidtune により 2-DOF コントローラーが生成され、pid2 オブジェクトとして表現されます。表示によりこの結果を確認します。表示にはまた、pidtune がすべてのコントローラー係数を、設定点の重み b および c を含めて調整し、性能とロバスト性のバランスを取っていることも示されます。

入力引数

すべて折りたたむ

単入力単出力のコントローラー設計のプラントの動的システム モデルsys には以下を使用できます。

  • 数値 LTI モデルや同定されたモデルなどの任意の種類の SISO 動的システム モデル。sys が調整可能、または不確かさをもつモデルである場合、pidtunesys の現在の値またはノミナル値のコントローラーを設計します。

  • 連続時間モデルまたは離散時間モデル。

  • 安定、不安定、または積分。不安定な極をもち、ただし PID 制御下では可安定でない場合があるプラント。

  • 任意のタイプのむだ時間を含むモデル。ただし、長いむだ時間をもつプラントは、PID 制御下では十分な性能を出せない場合があります。

  • プラント モデルの配列。sys が配列の場合、pidtune は、配列内の各プラントに対し、個別のコントローラーを設計します。

プラントが不安定な極をもっている、および sys が以下の 1 つである場合:

  • frd モデル

  • I/O 遅延に変換できない内部むだ時間をもつ ss モデル

その場合、不安定な極があれば、pidtuneOptions を使用してプラント内の不安定な極の数を指定します。

設計するコントローラーのコントローラー タイプ。文字ベクトルとして指定します。"コントローラー タイプ" という用語は、コントローラーの動作内に存在する項を示します。たとえば、PI コントローラーにあるのは比例項と積分項のみですが、PIDF コントローラーには比例項、積分器項、不完全微分項があります。type が取りうる値を以下にまとめます。これらのコントローラー タイプについての詳細は、調整における PID コントローラー タイプを参照してください。

1-DOF コントローラー

  • 'P' — 比例のみ

  • 'I' — 積分のみ

  • 'PI' — 比例および積分

  • 'PD' — 比例および微分

  • 'PDF' — 微分項に 1 次フィルターをもつ比例および微分

  • 'PID' — 比例、積分および微分

  • 'PIDF' — 微分項に 1 次フィルターをもつ比例、積分および微分

2-DOF コントローラー

  • 'PI2' — 2-DOF の比例および積分

  • 'PD2' — 2-DOF の比例および微分

  • 'PDF2' — 微分項に 1 次フィルターをもつ 2-DOF の比例および微分

  • 'PID2' — 2-DOF の比例、積分および微分

  • 'PIDF2' — 微分項に 1 次フィルターをもつ 2-DOF の比例、積分および微分

2-DOF PID コントローラー一般についての詳細は、2 自由度 PID コントローラーを参照してください。

設定点の重みが固定された 2-DOF コントローラー

  • 'I-PD'b = 0、c = 0 の 2-DOF PID

  • 'I-PDF'b = 0、c = 0 の 2-DOF PIDF

  • 'ID-P'b = 0、c = 1 の 2-DOF PID

  • 'IDF-P'b = 0、c = 1 の 2-DOF PIDF

  • 'PI-D'b = 1、c = 0 の 2-DOF PID

  • 'PI-DF'b = 1、c = 0 の 2-DOF PIDF

設定点の重みが固定された 2-DOF PID コントローラーについての詳細は、調整における PID コントローラー タイプを参照してください。

コントローラー形式

type 入力を使用する場合、pidtune はコントローラーを並列 (pid または pid2) 形式で設計します。標準 (pidstd または pidstd2) 形式でコントローラーを設計する場合は、type の代わりに入力 C0 を使用します。

sys がサンプル時間 Ts をもつ離散時間モデルの場合、pidtune は、同じ Ts をもつ離散時間モデル コントローラーを設計します。このコントローラーは、積分動作と微分動作の両方に対する ForwardEuler 離散積分器の式をもちます。他の離散積分器の式をもつコントローラーを設計する場合は、type の代わりに入力 C0 を使用します。

PID コントローラーの形式と公式についての詳細は、次を参照してください。

設計されるコントローラーの PID コントローラー設定プロパティ。pidpidstdpid2 または pidstd2 オブジェクトとして指定します。C0 を指定した場合、pidtune は以下を行います。

  • C0 により表されるタイプのコントローラーを設計します。

  • C0pid コントローラーの場合、pid コントローラーを返します。

  • C0pidstd コントローラーの場合、pidstd コントローラーを返します。

  • C0pid2 コントローラーの場合、2-DOF pid2 コントローラーを返します。

  • C0pidstd2 コントローラーの場合、2-DOF pidstd2 コントローラーを返します。

  • sys が離散時間システムの場合、C0 と同じ IformulaDformula の値を返します。IformulaDformula についての詳細は、pidpid2pidstd および pidstd2 のリファレンス ページを参照してください。

調整された開ループ応答の 0 dB ゲイン交差周波数のターゲット値。wc をラジアン/TimeUnit の単位で指定します。ここで TimeUnitsys の時間単位です。交差周波数 wc は制御帯域を大まかに設定します。閉ループ応答時間は約 1/wc です。

wc を増やすと応答が速くなります。wc を減らすと安定性が改善されます。wc を省略すると、pidtune は応答と安定性の間でバランスが取れているプラントのダイナミクスに基づいて、自動的に値を選択します。

ターゲットの位相余裕や設計フォーカスなど、pidtune 設計アルゴリズムの追加調整オプションを指定するオプション セット。opts を作成するには、pidtuneOptions を使用します。

出力引数

すべて折りたたむ

sys のために設計されたコントローラー。ここで、sys が線形モデルの配列の場合、pidtune は各線形モデルのためのコントローラーを設計し、PID コントローラーの配列を返します。

コントローラー形式:

  • pidtune の 2 番目の引数が type の場合、Cpid コントローラーまたは pid2 コントローラーです。

  • pidtune への 2 番目の引数が C0 の場合:

    • C0pid オブジェクトの場合、Cpid コントローラーです。

    • C0pidstd オブジェクトの場合、Cpidstd コントローラーです。

    • C0pid2 オブジェクトの場合、Cpid2 コントローラーです。

    • C0pidstd2 オブジェクトの場合、Cpidstd2 コントローラーです。

コントローラー タイプ:

  • pidtune への 2 番目の引数が type の場合、一般的に C は指定されたタイプをもちます。

  • pidtune への 2 番目の引数が C0 の場合、一般的に CC0 で指定されたタイプをもちます。

ただし、どちらの場合でも、type または C0 により指定されているよりも低次のコントローラーを使用して、アルゴリズムが十分な性能を達成できる場合は、pidtune は指定されているよりも少ない動作をもつ C を返します。たとえば、type'PIDF' であっても、C は PI コントローラーとなる場合があります。

時間領域:

  • Csys と同じ時間領域をもちます。

  • sys が離散時間モデルの場合、C のサンプル時間は sys と同じです。

  • C0 を指定すると、C は、C0 として同じ IformulaDformula をもちます。C0 が指定されていない場合、IformulaDformula の両方が Forward Euler となります。IformulaDformula についての詳細は、pidpid2pidstd および pidstd2 のリファレンス ページを参照してください。

C0 が指定されている場合、C は、InputNameOutputName などのモデル プロパティも C0 から取得します。モデル プロパティの詳細は、動的システム モデルのそれぞれのタイプのリファレンス ページを参照してください。

調整された PID ループの性能とロバスト性に関する情報を含むデータ構造体。info のフィールドは、以下のとおりです。

  • Stable — 閉ループの安定性を示すブール値。この閉ループが安定な場合、Stable は 1、そうでない場合は 0 です。

  • CrossoverFrequency — 開ループ システム C*sys の最初の 0 dB 交差周波数 (rad/TimeUnit)。ここで、TimeUnitsysTimeUnit プロパティで指定される時間単位です。

  • PhaseMargin — 調整された PID ループの位相余裕 (度単位)。

sys がプラント モデルの配列の場合、info は、調整された各 PID ループに関する情報を含むデータ構造体の配列です。

ヒント

  • 既定では、type 入力をもつ pidtune は、pid コントローラーを並列形式で返します。標準形式でコントローラーを設計するには、入力引数 C0 として pidstd を使用します。並列および標準コントローラー形式の詳細については、 pidpidstd のリファレンス ページを参照してください。

  • ライブ エディターによる対話型の PID 調整については、[PID コントローラーの調整] ライブ エディター タスクを参照してください。このタスクを使用すると、PID コントローラーを対話的に設計し、ライブ スクリプト用の MATLAB® コードを自動的に生成できます。

アルゴリズム

MathWorks® PID 調整アルゴリズムについての詳細は、PID 調整アルゴリズムを参照してください。

代替機能

参照

[1] Åström, Karl J., and Tore Hägglund. Advanced PID Control. Research Triangle Park, NC: ISA-The Instrumentation, Systems, and Automation Society, 2006.

バージョン履歴

R2010b で導入