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

pid2

2-DOF PID コントローラーを並列形式で作成し、並列形式の 2-DOF PID コントローラーに変換

構文

C2 = pid2(Kp,Ki,Kd,Tf,b,c)
C2 = pid2(Kp,Ki,Kd,Tf,b,c,Ts)
C2 = pid2(sys)
C2 = pid2(___,Name,Value)

説明

pid2 コントローラー オブジェクトは、2 自由度 (2-DOF) の PID コントローラーを並列形式で表します。pid2 コントローラー オブジェクトを既知の係数から作成するか、動的システム モデルを pid2 オブジェクトに変換するには、pid2 を使用します。

2 自由度 (2-DOF) PID コントローラーには、比例項および微分項に設定点の重みが含まれています。2-DOF PID コントローラーでは、外乱の抑制を、設定点の追従におけるオーバーシュートを大きく増加させることなく迅速に実行できます。2-DOF PID コントローラーはまた、制御信号に対する基準信号の変化の影響を緩和するためにも有用です。次の図では、2-DOF PID コントローラーを使用した典型的な制御アーキテクチャが示されています。

C2 = pid2(Kp,Ki,Kd,Tf,b,c) は、比例、積分、微分のゲイン KpKiKd と、1 次の微分フィルター時定数 Tf をもつ、連続時間 2-DOF PID コントローラーを作成します。このコントローラーにはまた、比例項に設定点の重み b があり、微分項に設定点の重み c があります。2-DOF コントローラーの出力 (u) とその 2 つの入力 (r および y) との関係は、次の式で与えられます。

u=Kp(bry)+Kis(ry)+KdsTfs+1(cry).

この表現は "並列形式" です。係数がすべて実数値である場合、結果として得られる C2pid2 コントローラー オブジェクトです。これらの係数の 1 つ以上が調整可能 (realp または genmat) な場合、C2 は調整可能な一般化状態空間 (genss) モデル オブジェクトになります。

C2 = pid2(Kp,Ki,Kd,Tf,b,c,Ts) は、サンプル時間 Ts をもつ離散時間 2-DOF PID コントローラーを作成します。コントローラーの出力と入力間の関係は、次の式で与えられます。

u=Kp(bry)+KiIF(z)(ry)+KdTf+DF(z)(cry).

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

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

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

C2 = pid2(sys) は、動的システム sys を並列形式の pid2 コントローラー オブジェクトに変換します。

C2 = pid2(___,Name,Value) は、追加プロパティを引数 Name,Value のコンマ区切りペアで指定します。

入力引数

Kp

比例ゲイン。

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

  • 有限な実数値。

  • 有限な実数値の配列。

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

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

Kp = 0 のとき、コントローラーは比例動作を行いません。

既定値: 1

Ki

積分ゲイン

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

  • 有限な実数値。

  • 有限な実数値の配列。

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

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

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

既定値: 0

Kd

微分ゲイン

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

  • 有限な実数値。

  • 有限な実数値の配列。

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

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

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

既定値: 0

Tf

1 次微分フィルターの時定数

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

  • 有限な非負の実数値。

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

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

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

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

既定値: 0

b

比例項での設定点の重み。

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

  • 非負で有限の実数値。

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

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

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

b = 0 の場合、設定点での変更が比例項に直接及ぶことはありません。

既定値: 1

c

微分項での設定点の重み。

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

  • 非負で有限の実数値。

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

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

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

c = 0 の場合、設定点での変更が微分項に直接及ぶことはありません。

既定値: 1

Ts

サンプル時間。

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

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

既定値: 0 (連続時間)

sys

並列 pid2 形式に変換する SISO 動的システム。

sys は 2 入力 1 出力のシステムでなければなりません。sys は、Tf ≥ 0 の、並列形式で記述できる有効な 2-DOF PID コントローラーを表さなければなりません。

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

名前と値のペアの引数

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

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

出力引数

C2

2-DOF PID コントローラー。pid2 コントローラー オブジェクト、pid2 コントローラー オブジェクトの配列、genss オブジェクトまたは genss 配列として返されます。

  • すべての係数がスカラーの数値をもつ場合、C2pid2 コントローラー オブジェクトです。

  • 1 つ以上の係数が数値配列である場合、C2pid2 コントローラー オブジェクトの配列です。コントローラー タイプ (PI、PID、PDF など) はゲインの値に依存します。たとえば、Kd = 0 で、Kp および Ki が非ゼロの場合、C2 は PI コントローラーです。

  • 1 つ以上の係数が調整可能なパラメーター (realp)、一般化行列 (genmat) または調整可能なゲイン曲面 (tunableSurface) である場合、C2 は一般化状態空間モデル (genss) です。

プロパティ

b, c

比例項と微分項それぞれでの設定点の重み。bc は有限な正の実数です。pid2 コマンドを使用して 2-DOF PID コントローラー bc 入力引数をそれぞれを作成する場合、これらのプロパティの初期値を設定します。

Kp, Ki, Kd

PID コントローラーのゲイン。

それぞれ、比例ゲイン、積分ゲイン、微分ゲインです。KpKi および Kd の値は有限な実数です。pid2 コマンドを使用して 2-DOF PID コントローラーを作成する場合、KpKiKd 入力引数はそれぞれこれらのプロパティの初期値を設定します。

Tf

微分フィルター時定数。

Tf プロパティは pid2 コントローラー オブジェクトの微分フィルター時定数を格納します。Tf はゼロ以上の有限の実数です。2-DOF PID コントローラーを pid2 コマンドを使用して作成する場合、Tf 入力引数はこのプロパティの初期値を設定します。

IFormula

離散時間 pid2 コントローラー C2 の積分器に用いる離散積分器の式 IF(z)。C2 の入力と出力間の関係は、次の式で与えられます。

u=Kp(bry)+KiIF(z)(ry)+KdTf+DF(z)(cry).

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

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

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

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

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

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

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

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

既定値: 'ForwardEuler'

DFormula

離散時間 pid2 コントローラー C2 の微分フィルターに用いる離散積分器の式 DF(z)。C2 の入力と出力間の関係は、次の式で与えられます。

u=Kp(bry)+KiIF(z)(ry)+KdTf+DF(z)(cry).

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

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

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

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

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

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

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

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

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

既定値: 'ForwardEuler'

InputDelay

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

OutputDelay

システム出力のむだ時間。OutputDelaypid2 コントローラー オブジェクトに対しては常に 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

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

C.InputName = {'setpoint';'measurement'};

または、自動的なベクトル拡張を使用して両方の入力名を割り当てます。以下に例を示します。

C.InputName = 'C-input';

入力名は自動的に {'C-input(1)';'C-input(2)'} へと拡張されます。

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

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

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

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

既定値: {'';''}

InputUnit

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

C.InputUnit = {'Volts';'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 に入力します。

既定値: []

すべて折りたたむ

比例ゲインと積分ゲイン、および微分項に対するフィルターをもつ連続時間 2-DOF コントローラーを作成します。これを行うには、積分ゲインを 0 に設定します。他のゲインとフィルター時定数を望ましい値に設定します。

Kp = 1;
Ki = 0;   % No integrator
Kd = 3;
Tf = 0.1;
b = 0.5;    % setpoint weight on proportional term
c = 0.5;    % setpoint weight on derivative term
C2 = pid2(Kp,Ki,Kd,Tf,b,c)
C2 =
 
                         s    
  u = Kp (b*r-y) + Kd -------- (c*r-y)
                       Tf*s+1 

  with Kp = 1, Kd = 3, Tf = 0.1, b = 0.5, c = 0.5
 
Continuous-time 2-DOF PDF controller in parallel form.

表示では、コントローラー タイプ、式およびパラメーター値が示され、コントローラーに積分項のないことが確認されます。

台形則による離散化式を使用し、離散時間 2-DOF PI コントローラーを作成します。式は Name,Value 構文を使用して指定します。

Kp = 5;
Ki = 2.4;
Kd = 0;    
Tf = 0; 
b = 0.5;   
c = 0;      
Ts = 0.1;
C2 = pid2(Kp,Ki,Kd,Tf,b,c,Ts,'IFormula','Trapezoidal')
C2 =
 
                      Ts*(z+1)
  u = Kp (b*r-y) + Ki -------- (r-y)
                      2*(z-1) 

  with Kp = 5, Ki = 2.4, b = 0.5, Ts = 0.1
 
Sample time: 0.1 seconds
Discrete-time 2-DOF PI controller in parallel form.

Kd = 0 と設定すると、微分項のない PI コントローラーが指定されます。表示からわかるように、Tfc の値はこのコントローラーでは使用されません。表示からは、積分器に台形公式が使用されていることもわかります。

2-DOF PID コントローラーを作成し、動的システムのプロパティ InputName および OutputName を設定します。入力と出力に名前を付けることが有用なのは、たとえば、PID コントローラーを他の動的システム モデルと connect コマンドを使用して相互接続する場合などです。

C2 = pid2(1,2,3,0,1,1,'InputName',{'r','y'},'OutputName','u')
C2 =
 
                       1              
  u = Kp (b*r-y) + Ki --- (r-y) + Kd*s (c*r-y)
                       s              

  with Kp = 1, Ki = 2, Kd = 3, b = 1, c = 1
 
Continuous-time 2-DOF PID controller in parallel form.

2-DOF PID コントローラーには 2 つの入力と 1 つの出力があります。したがって、'InputName' プロパティは各入力に対して 1 つずつ、2 つの名前を含む配列です。モデル表示では PID コントローラーの入力名と出力名は示されませんが、プロパティ値を調べて確認することはできます。たとえば、コントローラーの入力名を確認します。

C2.InputName
ans = 2x1 cell array
    {'r'}
    {'y'}

配列の行については 1 ~ 2 の範囲の比例ゲインをもち、列については 5 ~ 9 の範囲の積分ゲインをもつ 2-DOF PI コントローラーの 2 行 3 列のグリッドを作成します。

PID コントローラーの配列を作成するには、ゲインを表す配列から開始します。

Kp = [1 1 1;2 2 2];
Ki = [5:2:9;5:2:9];

これらの配列を pid2 コマンドに渡すと、コマンドはコントローラーの配列を返します。

pi_array = pid2(Kp,Ki,0,0,0.5,0,'Ts',0.1,'IFormula','BackwardEuler');
size(pi_array)
2x3 array of 2-DOF PID controller.
Each PID has 1 output and 2 inputs.

いくつかの係数にスカラー値を与えた場合、pid2 はそれらを自動的に拡張し、配列のすべてのエントリに同じ値を代入します。たとえば、この例では、配列のすべてのエントリが PI コントローラーになるよう、Kd = Tf = 0 とされます。また、配列のすべてのエントリで b = 0.5 となっています。

配列のエントリには、配列のインデックスを使用してアクセスします。動的システムの配列では、最初の 2 つの次元はモデルの I/O 次元、残りの次元は配列次元です。したがって、次のコマンドでは配列のエントリ (2,3) が抽出されます。

pi23 = pi_array(:,:,2,3)
pi23 =
 
                       Ts*z 
  u = Kp (b*r-y) + Ki ------ (r-y)
                        z-1 

  with Kp = 2, Ki = 9, b = 0.5, Ts = 0.1
 
Sample time: 0.1 seconds
Discrete-time 2-DOF PI controller in parallel form.

PID コントローラーの配列は、stack コマンドを使用しても作成できます。

C2 = pid2(1,5,0.1,0,0.5,0.5);         % PID controller
C2f = pid2(1,5,0.1,0.5,0.5,0.5);      % PID controller with filter
pid_array = stack(2,C2,C2f);          % stack along 2nd array dimension

これらのコマンドは、コントローラーの 1 行 2 列の配列を返します。

size(pid_array)
1x2 array of 2-DOF PID controller.
Each PID has 1 output and 2 inputs.

配列内の PID コントローラーはすべて、同じサンプル時間、離散積分器の式、および動的システムのプロパティ (InputNameOutputName など) をもっていなければなりません。

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

標準 PID 形式では、コントローラーの動作は全体的な比例ゲイン Kp、積分器時定数 Ti と微分時定数 Td、そしてフィルター除数 N によって表現されます。どの 2-DOF 標準形式コントローラーも、pid2 コマンドを使用して並列形式に変換できます。たとえば、次の標準形式コントローラーを考えます。

Kp = 2;
Ti = 3;
Td = 4;
N = 50;
b = 0.1;
c = 0.5;
C2_std = pidstd2(Kp,Ti,Td,N,b,c)
C2_std =
 
                       1      1                      s      
  u = Kp * [(b*r-y) + ---- * --- * (r-y) + Td * ------------ * (c*r-y)]
                       Ti     s                  (Td/N)*s+1 

  with Kp = 2, Ti = 3, Td = 4, N = 50, b = 0.1, c = 0.5
 
Continuous-time 2-DOF PIDF controller in standard form

pid2 を使用してこのコントローラーを並列形式に変換します。

C2_par = pid2(C2_std)
C2_par =
 
                       1                s    
  u = Kp (b*r-y) + Ki --- (r-y) + Kd -------- (c*r-y)
                       s              Tf*s+1 

  with Kp = 2, Ki = 0.667, Kd = 8, Tf = 0.08, b = 0.1, c = 0.5
 
Continuous-time 2-DOF PIDF controller in parallel form.

応答プロットにより、2 つの形式が等価であることが確認されます。

bodeplot(C2_par,'b-',C2_std,'r--')
legend('Parallel','Standard','Location','Southeast')

PID コントローラーを表す連続時間動的システムを、並列 pid 形式に変換します。

次の動的システムには積分器と 2 つの 0 があり、PID コントローラーと等価です。

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

Hzpk モデルを作成します。続いて pid コマンドを使用し、PID ゲイン KpKiKd によって H を取得します。

H = zpk([-1,-2],0,3);
C = pid(H)
C =
 
             1          
  Kp + Ki * --- + Kd * s
             s          

  with Kp = 9, Ki = 6, Kd = 3
 
Continuous-time PID controller in parallel form.

微分フィルターをもつ 2-DOF PID コントローラーを表す離散時間動的システムを、並列 pid2 形式に変換します。

次の状態空間行列は、サンプル時間が 0.1 秒の離散時間 2-DOF PID コントローラーを表します。

A = [1,0;0,0.99];
B = [0.1,-0.1; -0.005,0.01];
C = [3,0.2];
D = [2.6,-5.2];
Ts = 0.1;
sys = ss(A,B,C,D,Ts);

sys を 2-DOF PID 形式に変換した場合、その結果は、変換でどの離散積分器の式を指定するかに依存します。たとえば、既定の ForwardEuler を積分器と微分の両方で使用したとします。

C2fe = pid2(sys)
C2fe =
 
                        Ts                   1     
  u = Kp (b*r-y) + Ki ------ (r-y) + Kd ----------- (c*r-y)
                        z-1             Tf+Ts/(z-1)

  with Kp = 5, Ki = 3, Kd = 2, Tf = 10, b = 0.5, c = 0.5, Ts = 0.1
 
Sample time: 0.1 seconds
Discrete-time 2-DOF PIDF controller in parallel form.

ここで、Trapezoidal 式を使用して変換を行います。

C2trap = pid2(sys,'IFormula','Trapezoidal','DFormula','Trapezoidal')
C2trap =
 
                      Ts*(z+1)                     1         
  u = Kp (b*r-y) + Ki -------- (r-y) + Kd ------------------- (c*r-y)
                      2*(z-1)             Tf+Ts/2*(z+1)/(z-1)

  with Kp = 4.85, Ki = 3, Kd = 2, Tf = 9.95, b = 0.485, c = 0.5, Ts = 0.1
 
Sample time: 0.1 seconds
Discrete-time 2-DOF PIDF controller in parallel form.

表示には、結果として得られる係数値と関数形式に相違があることが示されます。

連続時間 2-DOF PID コントローラーを離散化し、積分フィルターと微分フィルターの式を指定します。

連続時間コントローラーを作成し、c2d コマンドのゼロ次ホールド メソッドを使用してこれを離散化します。

C2con = pid2(10,5,3,0.5,1,1);  % continuous-time 2-DOF PIDF controller
C2dis1 = c2d(C2con,0.1,'zoh')
C2dis1 =
 
                        Ts                   1     
  u = Kp (b*r-y) + Ki ------ (r-y) + Kd ----------- (c*r-y)
                        z-1             Tf+Ts/(z-1)

  with Kp = 10, Ki = 5, Kd = 3.31, Tf = 0.552, b = 1, c = 1, Ts = 0.1
 
Sample time: 0.1 seconds
Discrete-time 2-DOF PIDF controller in parallel form.

表示には、離散時間コントローラーの新しい PID 係数についての c2d による計算が示されます。

離散化されたコントローラーの離散化積分器の式は、ヒントで説明されているように、c2d の離散化手法に依存します。zoh メソッドでは、IFormulaDFormula のどちらも ForwardEuler です。

C2dis1.IFormula
ans = 
'ForwardEuler'
C2dis1.DFormula
ans = 
'ForwardEuler'

c2d によって返された式の中から異なるものを複数使用する場合、コントローラーの TsIFormula、および DFormula プロパティを望ましい値に直接設定できます。

C2dis2 = C2con;
C2dis2.Ts = 0.1; 
C2dis2.IFormula = 'BackwardEuler';
C2dis2.DFormula = 'BackwardEuler';

ただし、これらのコマンドは、離散化されたコントローラーの新しい PID ゲインは計算しません。これを確認するには、C2dis2 を調べ、その係数を C2con および C2dis1 と比較します。

C2dis2
C2dis2 =
 
                       Ts*z                   1      
  u = Kp (b*r-y) + Ki ------ (r-y) + Kd ------------- (c*r-y)
                        z-1             Tf+Ts*z/(z-1)

  with Kp = 10, Ki = 5, Kd = 3, Tf = 0.5, b = 1, c = 1, Ts = 0.1
 
Sample time: 0.1 seconds
Discrete-time 2-DOF PIDF controller in parallel form.

ヒント

  • PID コントローラーを特定のプラントに合わせて設計するには、pidtune または pidTuner を使用します。調整可能な 2-DOF PID コントローラーを制御設計ブロックとして作成するには、tunablePID2 を使用します。

  • 2-DOF コントローラーを 2 つの SISO 制御コンポーネント (フィードバック コントローラーとフィードフォワード コントローラーなど) に分割するには、getComponents を使用します。

  • 以下のようにして、pid2 コントローラー オブジェクトの配列を作成します。

    • 係数 KpKiKdTfb および c の 1 つ以上について、配列値を指定する。

    • 動的システム sys の配列を指定し、pid2 コントローラー オブジェクトに変換する。

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

    • プラント モデルの配列を pidtune に渡す。

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

  • 標準形式コントローラーを作成するか、標準形式コントローラーに変換するには、pidstd2 を使用します。標準形式では、コントローラーの動作は全体的な比例ゲイン Kp、積分時間 Ti と微分時間 Td、そしてフィルター除数 N によって表現されます。たとえば、連続時間標準形式 2-DOF PID コントローラーの入力と出力間の関係は、次の式で与えられます。

    u=Kp[(bry)+1Tis(ry)+TdsTdNs+1(cry)].

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

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

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

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

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

R2015b で導入