最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

pidstd

標準形式の PID コントローラーを作成、標準形式 PID コントローラーに変換

構文

C = pidstd(Kp,Ti,Td,N)
C = pidstd(Kp,Ti,Td,N,Ts)
C = pidstd(sys)
C = pidstd(Kp)
C = pidstd(Kp,Ti)
C = pidstd(Kp,Ti,Td)
C = pidstd(...,Name,Value)
C = pidstd

説明

C = pidstd(Kp,Ti,Td,N) は、連続時間 PIDF (1 次微分フィルターをもつ PID) コントローラー オブジェクトを標準形式で作成します。このコントローラーは、比例ゲイン Kp、積分時間と微分時間 Ti および Td、および 1 次微分フィルターの除数 N をもっています。

C=Kp(1+1Ti1s+TdsTdNs+1).

C = pidstd(Kp,Ti,Td,N,Ts) は、サンプル時間 Ts をもつ離散時間コントローラーを作成します。離散時間のコントローラーは以下の通りです。

C=Kp(1+1TiIF(z)+TdTdN+DF(z)).

IF(z) と DF(z) は積分器と微分フィルターのための "離散積分器の式" です。既定では以下のようになります。

IF(z)=DF(z)=Tsz1.

異なる離散積分器の式を選択するには、IFormulaDFormula の入力を使用します。(IFormulaDFormula の詳細は、プロパティを参照してください)。DFormula = 'ForwardEuler' (既定値) と N ≠ Inf の場合、TsTd および NTd/N > Ts/2 を満たさなければなりません。この条件によって安定した微分フィルター極が保証されます。

C = pidstd(sys) は動的システム sys を標準形式 pidstd のコントローラー オブジェクトに変換します。

C = pidstd(Kp)Ti = Inf, Td = 0, N = Inf の連続時間比例 (P) コントローラーを作成します。

C = pidstd(Kp,Ti)Td = 0 および N = Inf の比例および積分 (PI) コントローラーを作成します。

C = pidstd(Kp,Ti,Td) は、N = Inf の比例、積分、微分 (PID) コントローラーを作成します。

C = pidstd(...,Name,Value) は、1 つ以上の Name,Value の引数ペアで指定した追加オプションを使ってコントローラーの作成、または動的システムを pidstd コントローラー オブジェクトへ変換します。

C = pidstd は、Kp = 1 として P コントローラーを作成します。

入力引数

Kp

比例ゲイン

Kp は以下のいずれかになります。

  • 有限な実数値。

  • 有限な実数値の配列。

  • 調整可能なパラメーター (realp) または一般化行列 (genmat)。

  • tunableSurface を使用して作成される、ゲイン スケジュール調整用の調整可能な曲面。

既定値: 1

Ti

積分器時間。

Ti は以下のいずれかになります。

  • 正の実数値。

  • 正の実数値の配列。

  • 調整可能なパラメーター (realp) または一般化行列 (genmat)。

  • tunableSurface を使用して作成される、ゲイン スケジュール調整用の調整可能な曲面。

既定値: Inf

Td

微分時間

Td は以下のいずれかになります。

  • 有限な非負の実数値。

  • 有限な非負の実数値の配列。

  • 調整可能なパラメーター (realp) または一般化行列 (genmat)。

  • tunableSurface を使用して作成される、ゲイン スケジュール調整用の調整可能な曲面。

Td = 0 のとき、コントローラーは微分動作を行いません。

既定値: 0

N

微分フィルター除数。

N は以下のいずれかになります。

  • 正の実数値。

  • 正の実数値の配列。

  • 調整可能なパラメーター (realp) または一般化行列 (genmat)。

  • tunableSurface を使用して作成される、ゲイン スケジュール調整用の調整可能な曲面。

N = Inf のとき、コントローラーの微分動作でフィルターがなくなります。

既定値: Inf

Ts

サンプル時間。

離散時間 pidstd コントローラーを作成するには、正の実数値 (Ts > 0) を指定します。pidstd は、決定されていないサンプル時間 (Ts = -1) をもつ離散時間コントローラーをサポートしていません。

Ts はスカラー値でなければなりません。pidstd コントローラーの配列では、各コントローラーに同一の Ts がなければなりません。

既定値: 0 (連続時間)

sys

標準 pidstd 形式に変換する SISO 動的システム。

sys は、Ti > 0、Td ≥ 0 および N > 0 の状態で標準形式で記述できる、有効なコントローラーを表していなければなりません。

sys は、SISO 動的システムの配列の 1 つであることもあります。

名前と値のペアの引数

オプションの Name,Value の引数ペアをコンマ区切りで指定します。ここで、Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペア引数を任意の順序で指定できます。

Name,Value 構文を使用すると、離散時間 pidstd コントローラーの数値積分式 IFormula および DFormula を設定し、また、InputNameOutputName などの他のオブジェクト プロパティを設定することができます。pidstd コントローラー オブジェクトの利用可能なプロパティの詳細については、プロパティを参照してください。

出力引数

C

標準形式で単入力・単出力の PID コントローラーを表す pidstd オブジェクト。

コントローラーのタイプ (P, PI, PD, PDF, PID, PIDF) は、KpTiTd、および N の値に依存します。たとえば、Td = Inf で、Kp および Ti が有限かつ非ゼロのとき、C は PI コントローラーです。getType(C) を入力してコントローラーのタイプを取得します。

入力 KpTiTd、および N、または入力 sys が配列である場合、Cpidstd オブジェクトの配列です。

プロパティ

Kp

比例ゲイン。Kp は、実数かつ有限でなければなりません。

Ti

積分時間。Ti は、実数、有限、およびゼロ以上でなければなりません。

Td

微分時間。Td は、実数、有限、およびゼロ以上でなければなりません。

N

微分フィルター除数。N はゼロ以上の実数でなければなりません。

IFormula

次の離散時間 pidstd コントローラー C の積分器のための離散積分器の式 IF(z):

C=Kp(1+1TiIF(z)+TdTdN+DF(z)).

IFormula は次の値をとることができます。

  • 'ForwardEuler' — IF(z) = Tsz1.

    この方程式は、コントローラーの帯域幅と比較してナイキスト制限が大きくなるような、小さいサンプル時間に最適です。大きいサンプル時間で ForwardEuler 式を使用すると、連続時間で安定しているシステムを離散化する場合でも不安定となることがあります。

  • 'BackwardEuler' — IF(z) = Tszz1.

    BackwardEuler 式の利点は、この式を使用して安定した連続時間システムを離散化すると、常に安定した離散時間結果が得られることです。

  • 'Trapezoidal' — IF(z) = Ts2z+1z1.

    Trapezoidal 式の利点は、この式を使用して安定した連続時間システムを離散化すると、常に安定した離散時間結果が得られることです。使用可能なすべての積分式の中で、離散システムと対応する連続時間システムの周波数領域プロパティが最も近くなるのは Trapezoidal 式です。

C が連続時間コントローラーの場合、IFormula'' です。

既定値: 'ForwardEuler'

DFormula

次の離散時間 pidstd コントローラー C の微分フィルターのための離散積分器の式 DF(z):

C=Kp(1+1TiIF(z)+TdTdN+DF(z)).

DFormula は次の値をとることができます。

  • 'ForwardEuler' — DF(z) = Tsz1.

    この方程式は、コントローラーの帯域幅と比較してナイキスト制限が大きくなるような、小さいサンプル時間に最適です。大きいサンプル時間で ForwardEuler 式を使用すると、連続時間で安定しているシステムを離散化する場合でも不安定となることがあります。

  • 'BackwardEuler' — DF(z) = Tszz1.

    BackwardEuler 式の利点は、この式を使用して安定した連続時間システムを離散化すると、常に安定した離散時間結果が得られることです。

  • 'Trapezoidal' — DF(z) = Ts2z+1z1.

    Trapezoidal 式の利点は、この式を使用して安定した連続時間システムを離散化すると、常に安定した離散時間結果が得られることです。使用可能なすべての積分式の中で、離散システムと対応する連続時間システムの周波数領域プロパティが最も近くなるのは Trapezoidal 式です。

    DFormulaTrapezoidal 値は、微分フィルターのない pidstd コントローラー (N = Inf) には利用できません。

C が連続時間コントローラーの場合、DFormula'' です。

既定値: 'ForwardEuler'

InputDelay

システム入力のむだ時間。InputDelaypidstd コントローラー オブジェクトに対しては常に 0 です。

OutputDelay

システム出力のむだ時間。OutputDelaypidstd コントローラー オブジェクトに対しては常に 0 です。

Ts

サンプル時間。連続時間モデルの場合、Ts = 0。離散時間モデルの場合、Ts はサンプリング周期を表す正のスカラーです。この値は、モデルの TimeUnit プロパティで指定される単位で表されます。PID コントローラー モデルは未指定のサンプル時間 (Ts = -1) をサポートしません。

このプロパティを変更してもモデルの離散化やリサンプリングは行われません。c2dd2c を使用して、連続時間表現と離散時間表現の間の変換を行います。d2d を使用して、離散時間システムのサンプル時間を変更します。

既定値: 0 (連続時間)

TimeUnit

モデル内の時間変数、サンプル時間 Ts および何らかのむだ時間の単位。以下のいずれかの値として指定します。

  • 'nanoseconds'

  • 'microseconds'

  • 'milliseconds'

  • 'seconds'

  • 'minutes'

  • 'hours'

  • 'days'

  • 'weeks'

  • 'months'

  • 'years'

このプロパティを変更しても他のプロパティには影響しないため、システム全体の動作が変更されます。chgTimeUnit を使用して、システム動作を変更せずに時間単位を変換します。

既定値: 'seconds'

InputName

入力チャネル名。文字ベクトルとして指定します。このプロパティを使用してコントローラー モデルの入力チャネルに名前を付けます。たとえば、次のようにして、名前 error をコントローラー モデル C の入力に割り当てます。

C.InputName = 'error';

省略形表記 u を使用して、InputName プロパティを参照できます。たとえば、C.uC.InputName と同じです。

以下を含めて、入力チャネル名はいくつかの用途をもちます。

  • モデル表示とプロット上のチャネルの識別

  • モデル相互接続時における接続点の指定

既定値: 空の文字ベクトル ('')

InputUnit

入力チャネル単位。文字ベクトルとして指定します。このプロパティを使用して入力信号単位を追跡します。たとえば、次のようにして、濃度単位 mol/m^3 をコントローラー モデル C の入力に割り当てます。

C.InputUnit = 'mol/m^3';

InputUnit はシステムの動作に影響しません。

既定値: 空の文字ベクトル ('')

InputGroup

入力チャネル グループ。このプロパティは PID コントローラー モデルには必要ありません。

既定値: フィールドのない struct

OutputName

出力チャネル名。文字ベクトルとして指定します。このプロパティを使用して、コントローラー モデルの出力チャネルに名前を付けます。たとえば、次のようにして、名前 control をコントローラー モデル C の出力に割り当てます。

C.OutputName = 'control';

省略形表記 y を使用して、OutputName プロパティを参照できます。たとえば、C.yC.OutputName と同じです。

以下を含めて、入力チャネル名はいくつかの用途をもちます。

  • モデル表示とプロット上のチャネルの識別

  • モデル相互接続時における接続点の指定

既定値: 空の文字ベクトル ('')

OutputUnit

出力チャネル単位。文字ベクトルとして指定します。このプロパティを使用して出力信号単位を追跡します。たとえば、次のようにして、単位 Volts をコントローラー モデル C の出力に割り当てます。

C.OutputUnit = 'Volts';

OutputUnit はシステムの動作に影響しません。

既定値: 空の文字ベクトル ('')

OutputGroup

出力チャネル グループ。このプロパティは PID コントローラー モデルには必要ありません。

既定値: フィールドのない struct

Name

システム名。文字ベクトルとして指定します。たとえば、'system_1' とします。

既定値: ''

Notes

システムに関連付ける任意のテキスト。string または文字ベクトルの cell 配列として格納されます。プロパティには指定したデータ型が格納されます。たとえば、sys1sys2 が動的システム モデルである場合、その Notes プロパティを次のように設定できます。

sys1.Notes = "sys1 has a string.";
sys2.Notes = 'sys2 has a character vector.';
sys1.Notes
sys2.Notes
ans = 

    "sys1 has a string."


ans =

    'sys2 has a character vector.'

既定値: [0×1 string]

UserData

システムに関連付ける任意のデータ型。任意の MATLAB® データ型として指定します。

既定値: []

SamplingGrid

モデル配列のサンプリング グリッド。データ構造として指定されます。

1 つまたは複数の独立変数をサンプリングすることによって得られるモデル配列の場合、このプロパティは配列内の各モデルに関連付けられた変数値を追跡します。この情報はモデル配列を表示またはプロットすると表示されます。この情報を使用して、結果を独立変数まで遡ります。

データ構造のフィールド名をサンプリング変数の名前に設定します。フィールドの値を、配列内の各モデルに関連付けられているサンプリングされた変数の値に設定します。すべてのサンプリング変数は数値でスカラー値でなければならず、サンプル値のすべての配列はモデル配列の次元に一致しなければなりません。

たとえば、t = 0:10 の各時点で線形時変システムのスナップショットを記録することにより、線形モデルの 11 行 1 列の配列 sysarr を作成するとします。次のコードは線形モデルでの時間サンプルを格納します。

 sysarr.SamplingGrid = struct('time',0:10)

同様に、2 つの変数 zetaw を個別にサンプリングすることにより、6 行 9 列のモデル配列 M を作成するとします。次のコードは (zeta,w) の値を M に付加します。

[zeta,w] = ndgrid(<6 values of zeta>,<9 values of w>)
M.SamplingGrid = struct('zeta',zeta,'w',w)

M を表示する際、配列の各エントリは対応する zetaw の値を取り込みます。

M
M(:,:,1,1) [zeta=0.3, w=5] =
 
        25
  --------------
  s^2 + 3 s + 25
 

M(:,:,2,1) [zeta=0.35, w=5] =
 
         25
  ----------------
  s^2 + 3.5 s + 25
 
...

複数のパラメーター値または操作点で Simulink® モデルを線形化することにより生成されたモデル配列の場合、SamplingGrid には配列の各エントリに対応する変数値が自動的に入力されます。たとえば、Simulink Control Design™ のコマンドである linearizeslLinearizer は、この方法で SamplingGrid に入力します。

既定値: []

連続時間標準形式 PDF コントローラーの作成

比例ゲイン 1、微分時間 3、およびフィルター除数 6 の連続時間標準形式 PDF コントローラーを作成します。

C = pidstd(1,Inf,3,6);
C =
 
                      s      
  Kp * (1 + Td * ------------)
                  (Td/N)*s+1 

  with Kp = 1, Td = 3, N = 6
 
Continuous-time PDF controller in standard form

ディスプレイには、コントローラー タイプ、式および係数値が表示されます。

台形則による離散化式を使用し、離散時間 PI コントローラーを作成します。

離散時間コントローラーを作成するには、Name,Value 構文を使って Ts の値を設定します。

C = pidstd(1,0.5,'Ts',0.1,'IFormula','Trapezoidal') % Ts = 0.1s

このコマンドは次の結果を生成します。

Discrete-time PI controller in standard form:
 
           1     Ts*(z+1)
Kp * (1 + ---- * --------)
           Ti    2*(z-1) 
 
with Kp = 1, Ti = 0.5, Ts = 0.1

または、4 つの PID パラメーター KpTiTd、および N すべての後に 5 番目の引数として Ts を指定することで、同じ離散時間コントローラーを作成することができます。

C = pidstd(5,2.4,0,Inf,0.1,'IFormula','Trapezoidal');

PID コントローラーの作成とシステム プロパティの設定

PID コントローラーを作成し、動的システムのプロパティ InputNameOutputName を設定します。

C = pidstd(1,0.5,3,'InputName','e','OutputName','u');

標準形式 PID コントローラーのグリッドの作成

1 ~ 2 の比例ゲインと 5 ~ 9 の積分時間をもつ PI コントローラーの 2 × 3 のグリッドを作成します。

行ごとに異なる比例ゲインと列ごとに異なる積分時間をもつ PI コントローラーのグリッドを作成します。作成は、ゲインを表す配列から始めます。

Kp = [1 1 1;2 2 2];
Ti = [5:2:9;5:2:9];
pi_array = pidstd(Kp,Ti,'Ts',0.1,'IFormula','BackwardEuler');

これらのコマンドは、離散時間 pidstd オブジェクトの 2 行 3 列の配列を作成します。配列内の pidstd オブジェクトはすべて、同じサンプル時間、離散積分器の式、および動的システムのプロパティ (InputNameOutputName など) をもっていなければなりません。

または、stack コマンドを使用して pidstd オブジェクトの配列を作成することもできます。

C = pidstd(1,5,0.1)        % PID controller
Cf = pidstd(1,5,0.1,0.5)   % PID controller with filter
pid_array = stack(2,C,Cf); % stack along 2nd array dimension

これらのコマンドは、コントローラーの 1 x 2 の配列を作成します。次のコマンドを入力します。

size(pid_array)

次の結果が得られます。

1x2 array of PID controller.
Each PID has 1 output and 1 input.

並列形式 pid コントローラーを標準形式に変換します。

並列 PID 形式では、コントローラーの動作は以下のように、比例、積分、微分ゲイン Kp、Ki、および Kd、ならびにフィルター時定数 Tf として表現されます。以下の場合、pidstd を使用して並列形式コントローラー parsys を標準形式に変換できます。

  • parsys が純積分器 (I) コントローラーでない。

  • parsys のゲイン KpKi、およびKd はすべて同じ符号をもつ。

parsys = pid(2,3,4,5);  % Standard-form controller
stdsys = pidstd(parsys) 

これらのコマンドは、以下の並列形式コントローラーを作成します。

Continuous-time PIDF controller in standard form:
 
           1      1              s      
Kp * (1 + ---- * --- + Td * ------------)
           Ti     s          (Td/N)*s+1 
 
with Kp = 2, Ti = 0.66667, Td = 2, N = 0.4

連続時間動的システムからの pidstd コントローラーの作成

動的システム

H(s)=3(s+1)(s+2)s

は PID コントローラーを表します。pidstd を使用して、標準形式 PID パラメーター Kp、Ti、および Td として H(s) を取得することができます。

H = zpk([-1,-2],0,3);
C = pidstd(H)

これらのコマンドは、以下の結果をもたらします。

Continuous-time PID controller in standard form:
 
           1      1          
Kp * (1 + ---- * --- + Td * s)
           Ti     s          
 
with Kp = 9, Ti = 1.5, Td = 0.33333

離散時間動的システムからの pidstd コントローラーの作成

微分フィルターをもつ PID コントローラーを表す離散時間動的システムを、標準 pidstd 形式 PID コントローラーに変換できます。

% PIDF controller expressed in zpk form
sys = zpk([-0.5,-0.6],[1 -0.2],3,'Ts',0.1);

結果として得られる pidstd オブジェクトは、IFormulaDFormula に指定された離散積分器の式に依存します。

たとえば、両方の方程式に既定の ForwardEuler が使用された場合、

C = pidstd(sys)

次の結果が得られます。

Discrete-time PIDF controller in standard form:
 
           1       Ts                 1       
Kp * (1 + ---- * ------ + Td * ---------------)
           Ti      z-1         (Td/N)+Ts/(z-1)
 
with Kp = 2.75, Ti = 0.045833, Td = 0.0075758, N = 0.090909, Ts = 0.1

この特定の sys では、DFormulaBackwardEuler 式を使って sys を標準 PID 形式で記述することはできません。これを行うと、N < 0 となりますが、これは許可されません。この場合、pidstd はエラーを返します。

同様に、両方の積分器に Trapezoidal 式を使用して、sys を標準形式で記述することはできません。これを行うと、TiTd が負となり、エラーも返されます。

連続時間 pidstd コントローラーの離散化

最初に、c2d'zoh' メソッドを使用してコントローラーを離散化します。

Cc = pidstd(1,2,3,4);  % continuous-time pidf controller
Cd1 = c2d(Cc,0.1,'zoh')
Discrete-time PIDF controller in standard form:
 
           1       Ts                 1       
Kp * (1 + ---- * ------ + Td * ---------------)
           Ti      z-1         (Td/N)+Ts/(z-1)
 
with Kp = 1, Ti = 2, Td = 3.2044, N = 4, Ts = 0.1

得られた離散時間コントローラーは、IFormulaDFormula の 両方に ForwardEuler (Ts/(z–1)) を使用します。

離散化されたコントローラーの離散化積分器の式は、ヒントで説明されているように、c2d 離散化手法に依存します。異なる IFormulaDFormula を使用するには、TsIFormula および DFormula を以下のように目的の値に直接設定します。

Cd2 = Cc;
Cd2.Ts = 0.1; 
Cd2.IFormula = 'BackwardEuler';
Cd2.DFormula = 'BackwardEuler';

これらのコマンドは、離散化されたコントローラーのための新しいパラメーター値は計算しません。これを知るには、次のように入力します。

Cd2

次の結果が得られます。

Discrete-time PIDF controller in standard form:
 
           1      Ts*z                 1        
Kp * (1 + ---- * ------ + Td * -----------------)
           Ti      z-1         (Td/N)+Ts*z/(z-1)
 
with Kp = 1, Ti = 2, Td = 3, N = 4, Ts = 0.1

ヒント

  • pidstd を使い、既知の PID ゲイン、積分および微分時間、並びにフィルター除数から pidstd コントローラー オブジェクトを生成するか、動的システム モデルを pidstd コントローラー オブジェクトに変換します。

  • PID コントローラーを特定のプラントに合わせて調整するには、pidtune または pidTuner を使用します。

  • 以下の方法で、pidstd コントローラーの配列を作成します。

    • KpTiTd、および N に対する配列の値を指定する

    • 動的システム sys の配列を指定し、標準 PID 形式に変換する

    • stack を使用して、個別のコントローラーまたはより小さい配列から配列を作成する

    pidstd コントローラーの配列では、各コントローラーに同じサンプル時間 Ts と、離散積分器の式 IFormula および DFormula がなければなりません。

  • 並列形式コントローラーを作成するか、または並列形式コントローラーに変換するには、pid を使用します。並列形式では、コントローラーの動作は以下のように、比例、積分、微分のゲイン Kp、Ki、Kd、およびフィルター時定数 Tf として表示されます。

    C=Kp+Kis+KdsTfs+1.

  • 連続時間 pidstd コントローラーを離散化するには、以下の 2 つの方法があります。

    • c2d を使用します。c2d は離散化されたコントローラーのための新しいパラメーター値を計算します。離散化されたコントローラーの離散積分器の式は、次の表に示すように、使用する c2d 離散化手法に依存します。

      c2d 離散化手法IFormulaDFormula
      'zoh'ForwardEulerForwardEuler
      'foh'TrapezoidalTrapezoidal
      'tustin'TrapezoidalTrapezoidal
      'impulse'ForwardEulerForwardEuler
      'matched'ForwardEulerForwardEuler

      c2d 離散化手法の詳細については、c2d のリファレンス ページを参照してください。IFormulaDFormula の詳細は、プロパティを参照してください。

    • 他の離散積分器の式が必要な場合は、TsIFormula、および DFormula を目標値に直接設定してコントローラーを離散化することができます (詳細については、連続時間 pidstd コントローラーの離散化を参照してください)。ただし、この方法では離散化されたコントローラーの新しいゲインとフィルター定数値は計算されません。したがって、この方法で得られる連続時間と離散時間の pidstd コントローラーの一致は、c2d を使用した場合に比べて劣る可能性があります。

R2010b で導入