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
説明
は、連続時間 PIDF (1 次微分フィルターをもつ PID) コントローラー オブジェクトを標準形式で作成します。このコントローラーは、比例ゲイン C
= pidstd(Kp
,Ti
,Td
,N
)Kp
、積分時間と微分時間 Ti
および Td
、および 1 次微分フィルターの除数 N
をもっています。
は、サンプル時間 C
= pidstd(Kp
,Ti
,Td
,N
,Ts
)Ts
をもつ離散時間コントローラーを作成します。離散時間のコントローラーは以下の通りです。
IF(z) と DF(z) は積分器と微分フィルターのための "離散積分器の式" です。既定では以下のようになります。
異なる離散積分器の式を選択するには、IFormula
と DFormula
の入力を使用します。(IFormula
と DFormula
の詳細は、プロパティを参照してください)。DFormula
= 'ForwardEuler'
(既定値) と N
≠ Inf
の場合、Ts
、Td
および N
は Td/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) コントローラーを作成します。
は、1 つ以上の C
= pidstd(...,Name,Value
)Name,Value
の引数ペアで指定した追加オプションを使ってコントローラーの作成、または動的システムを pidstd
コントローラー オブジェクトへ変換します。
入力引数
|
比例ゲイン。
既定値: 1 |
|
積分器時間。
既定値: |
|
微分時間
既定値: 0 |
|
微分フィルター除数。
既定値: |
|
サンプル時間。 離散時間
既定値: 0 (連続時間) |
|
標準
|
名前と値の引数
オプションの Name,Value
の引数ペアをコンマ区切りで指定します。ここで、Name
は引数名で、Value
は対応する値です。Name
は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN
のように、複数の名前と値のペア引数を任意の順序で指定できます。
Name,Value
構文を使用すると、離散時間 pidstd
コントローラーの数値積分式 IFormula
および DFormula
を設定し、また、InputName
や OutputName
などの他のオブジェクト プロパティを設定することができます。pidstd
コントローラー オブジェクトの利用可能なプロパティの詳細については、プロパティを参照してください。
出力引数
|
標準形式で単入力・単出力の PID コントローラーを表す コントローラーのタイプ (P, PI, PD, PDF, PID, PIDF) は、 入力 |
プロパティ
|
比例ゲイン。 |
|
積分時間。 |
|
微分時間。 |
|
微分フィルター除数。 |
|
次の離散時間
既定値: |
|
次の離散時間
既定値: |
|
システム入力のむだ時間。 |
|
システム出力のむだ時間。 |
|
サンプル時間。連続時間モデルの場合、 このプロパティを変更してもモデルの離散化やリサンプリングは行われません。 既定値: |
|
モデル内の時間変数、サンプル時間
このプロパティを変更しても他のプロパティには影響しないため、システム全体の動作が変更されます。 既定値: |
|
入力チャネル名。文字ベクトルとして指定します。このプロパティを使用してコントローラー モデルの入力チャネルに名前を付けます。たとえば、次のようにして、名前 C.InputName = 'error'; 省略形表記 以下を含めて、入力チャネル名はいくつかの用途をもちます。
既定値: 空の文字ベクトル ( |
|
入力チャネル単位。文字ベクトルとして指定します。このプロパティを使用して入力信号単位を追跡します。たとえば、次のようにして、濃度単位 C.InputUnit = 'mol/m^3';
既定値: 空の文字ベクトル ( |
|
入力チャネル グループ。このプロパティは PID コントローラー モデルには必要ありません。 既定値: フィールドのない |
|
出力チャネル名。文字ベクトルとして指定します。このプロパティを使用して、コントローラー モデルの出力チャネルに名前を付けます。たとえば、次のようにして、名前 C.OutputName = 'control'; 省略形表記 以下を含めて、入力チャネル名はいくつかの用途をもちます。
既定値: 空の文字ベクトル ( |
|
出力チャネル単位。文字ベクトルとして指定します。このプロパティを使用して出力信号単位を追跡します。たとえば、次のようにして、単位 C.OutputUnit = 'Volts';
既定値: 空の文字ベクトル ( |
|
出力チャネル グループ。このプロパティは PID コントローラー モデルには必要ありません。 既定値: フィールドのない |
|
システム名。文字ベクトルとして指定します。たとえば、 既定値: |
|
システムに関連付ける任意のテキスト。string または文字ベクトルの cell 配列として格納されます。プロパティには指定したデータ型が格納されます。たとえば、 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.' 既定値: |
|
システムに関連付ける任意のデータ型。任意の MATLAB® データ型として指定します。 既定値: |
|
モデル配列のサンプリング グリッド。データ構造として指定されます。 1 つまたは複数の独立変数をサンプリングすることによって得られるモデル配列の場合、このプロパティは配列内の各モデルに関連付けられた変数値を追跡します。この情報はモデル配列を表示またはプロットすると表示されます。この情報を使用して、結果を独立変数まで遡ります。 データ構造のフィールド名をサンプリング変数の名前に設定します。フィールドの値を、配列内の各モデルに関連付けられているサンプリングされた変数の値に設定します。すべてのサンプリング変数は数値でスカラー値でなければならず、サンプル値のすべての配列はモデル配列の次元に一致しなければなりません。 たとえば、 sysarr.SamplingGrid = struct('time',0:10) 同様に、2 つの変数 [zeta,w] = ndgrid(<6 values of zeta>,<9 values of w>) M.SamplingGrid = struct('zeta',zeta,'w',w)
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® モデルを線形化することにより生成されたモデル配列の場合、 既定値: |
例
連続時間標準形式 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 パラメーター Kp
、Ti
、Td
、および N
すべての後に 5 番目の引数として Ts
を指定することで、同じ離散時間コントローラーを作成することができます。
C = pidstd(5,2.4,0,Inf,0.1,'IFormula','Trapezoidal');
PID コントローラーの作成とシステム プロパティの設定
PID コントローラーを作成し、動的システムのプロパティ InputName
と OutputName
を設定します。
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
オブジェクトはすべて、同じサンプル時間、離散積分器の式、および動的システムのプロパティ (InputName
、OutputName
など) をもっていなければなりません。
または、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
のゲインKp
、Ki
、および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
コントローラーの作成
動的システム
は 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
オブジェクトは、IFormula
と DFormula
に指定された離散積分器の式に依存します。
たとえば、両方の方程式に既定の 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
では、DFormula
に BackwardEuler
式を使って sys
を標準 PID 形式で記述することはできません。これを行うと、N
< 0 となりますが、これは許可されません。この場合、pidstd
はエラーを返します。
同様に、両方の積分器に Trapezoidal
式を使用して、sys
を標準形式で記述することはできません。これを行うと、Ti
と Td
が負となり、エラーも返されます。
連続時間 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
得られた離散時間コントローラーは、IFormula
と DFormula
の 両方に ForwardEuler
(Ts/(z–1)) を使用します。
離散化されたコントローラーの離散化積分器の式は、ヒントで説明されているように、c2d
離散化手法に依存します。異なる IFormula
と DFormula
を使用するには、Ts
、IFormula
および 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
コントローラー オブジェクトに変換します。以下の方法で、
pidstd
コントローラーの配列を作成します。pidstd
コントローラーの配列では、各コントローラーに同じサンプル時間Ts
と、離散積分器の式IFormula
およびDFormula
がなければなりません。並列形式コントローラーを作成するか、または並列形式コントローラーに変換するには、
pid
を使用します。並列形式では、コントローラーの動作は以下のように、比例、積分、微分のゲイン Kp、Ki、Kd、およびフィルター時定数 Tf として表示されます。連続時間
pidstd
コントローラーを離散化するには、以下の 2 つの方法があります。c2d
を使用します。c2d
は離散化されたコントローラーのための新しいパラメーター値を計算します。離散化されたコントローラーの離散積分器の式は、次の表に示すように、使用するc2d
離散化手法に依存します。c2d
離散化手法IFormula
DFormula
'zoh'
ForwardEuler
ForwardEuler
'foh'
Trapezoidal
Trapezoidal
'tustin'
Trapezoidal
Trapezoidal
'impulse'
ForwardEuler
ForwardEuler
'matched'
ForwardEuler
ForwardEuler
c2d
離散化手法の詳細については、c2d
のリファレンス ページを参照してください。IFormula
とDFormula
の詳細は、プロパティを参照してください。他の離散積分器の式が必要な場合は、
Ts
、IFormula
、およびDFormula
を目標値に直接設定してコントローラーを離散化することができます (詳細については、連続時間 pidstd コントローラーの離散化を参照してください)。ただし、この方法では離散化されたコントローラーの新しいゲインとフィルター定数値は計算されません。したがって、この方法で得られる連続時間と離散時間のpidstd
コントローラーの一致は、c2d
を使用した場合に比べて劣る可能性があります。