Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

線形 (LTI) モデル

プラントとは

一般的に、制御技術者は、制御する動的システムの数学的な記述から始めます。このように制御するシステムを、プラントと呼びます。プラントの一般的な例として、DC モーターについて考えます。この節では、慣性負荷を駆動する DC モーターの電磁気学的な性質を記述する微分方程式を作成します。これらの方程式を基に、Control System Toolbox™ の関数を使用して、線形モデルを作成する方法を記述します。

線形モデルの表現

Control System Toolbox の関数を使用して、以下のモデル表現を作成できます。

  • 次の形式の状態空間モデル (SS)

    dxdt=Ax+Buy=Cx+Du

    ここで、A、B、C、および D は適切な次元の行列、x は状態ベクトルであり、u と y は入力および出力ベクトルです。

  • 伝達関数 (TF)、たとえば、

    H(s)=s+2s2+s+10

  • 零点-極-ゲイン (ZPK) モデル、たとえば、

    H(z)=3(z+1+j)(z+1j)(z+0.2)(z+0.1)

  • 周波数応答データ (FRD) モデル: システムの周波数応答をサンプリングしたデータから構成されています。たとえば、実験的に集めた周波数応答データを FRD モデルに保存できます。

    メモ:

    FRD モデルの設計は、ここでは取り上げない専門的なトピックです。このトピックの詳細は、周波数応答データ (FRD) モデルを参照してください。

SISO の例: DC モーター

慣性負荷を駆動する DC モーターの簡単なモデルにより、負荷の角速度 ω(t) を出力として、印加電圧 υapp(t) を入力として示します。この例の目標は、印加電圧の変化により、角速度を制御することです。次の図は、簡単な DC モーターのモデルを示します。

慣性負荷を駆動する DC モーターの簡単なモデル

このモデルで、モーター自身のダイナミクスが理想化されています。たとえば、磁場は一定と考えられています。回路の抵抗を R とし、電機子の自己インダクタンスを L とします。DC モーターのモデル化に詳しくない方は、物理的なモデリングに関する基礎的な資料を参照してください。簡単なモデルと物理的な基礎法則を使用して、電気力学システムの挙動を記述する微分方程式を作成できます。この例では、電位と力学的な力との間には、ファラデーの電磁誘導の法則と磁場内を移動する導体に働くアンペールの法則が成り立つとします。

数学的な導出

モーターのシャフトに見られるトルク τ は、印加電圧で発生する電流 i に比例します。

τ(t)=Kmi(t)

ここで、Km は、電機子の定数で、モーターの物理特性、たとえば、磁場の強さ、導体コイルの周りを巻いているワイヤーの巻き数などに関連します。逆起電力 (誘導起電力) υemf は、シャフトで見られる角速度 ω に比例した電圧になります。

υemf(t)=Kbω(t)

ここで、Kb は、起電力の定数で、モーターの物理的な特性に寄って異なります。

モーターの方程式の力学的な部分は、慣性負荷 J と角速度の微係数を乗算したものが、モーターのシャフトの周りの全トルク量に等しいニュートンの法則に従います。結果は次のように表せます。

Jdwdt=τi=Kfω(t)+Kmi(t)

ここで、Kfω は粘性摩擦の線形近似です。

最終的に、モーターの方程式の電気的な部分は、次の方程式

υapp(t)υemf(t)=Ldidt+Ri(t)

で記述でき、または逆起電力を代入して、印加電圧に対して、次の方程式を解きます。

υapp(t)=Ldidt+Ri(t)+Kbω(t)

一連の方程式は、モーターの挙動を記述した誘電電流を表す

didt=RLi(t)KbLω(t)+1Lυapp(t)

と、角速度から求まる 2 つから構成されます。

dωdt=1JKfω(t)+1JKmi(t)

DC モーターに対する状態空間方程式

前節で導出した 2 つの微分方程式を基に、動的システムとして、DC モーターの状態空間表現を作成できます。電流 i と角速度 ω は、システムの 2 つの状態です。印加電圧 υapp はシステムへの入力であり、角速度 ω が出力になります。

ddt[iω]=[RLKbLKmJKfJ][iω]+[1L0]υapp(t)

DC モーターの例の状態空間表現

y(t)=[01][iω]+[0]υapp(t)

SISO モデルの構築

プラントを記述する一連の微分方程式を作成したら、簡単なコマンドを使用して SISO モデルを構築できます。次の節では、次について記述します。

  • DC モーターの状態空間モデルの作成

  • モデル表現間の変換

  • 伝達関数や零点-極-ゲイン モデルの作成

DC モーターの状態空間モデルの作成

DC モーターのさまざまなパラメーターに対して次のノミナル値を入力します。

R= 2.0 % Ohms
L= 0.5 % Henrys
Km = .015 % torque constant
Kb = .015 % emf constant
Kf = 0.2 % Nms
J= 0.02 % kg.m^2

これらの値を基に、関数 ss を使用して、数値的に状態空間表現を作成できます。

A = [-R/L -Kb/L; Km/J -Kf/J]
B = [1/L; 0];
C = [0 1];
D = [0];
sys_dc = ss(A,B,C,D)

このコマンドでは、以下の結果が出力されます。

a = 
                        x1           x2
           x1           -4        -0.03
           x2         0.75          -10
 
 
b = 
                        u1
           x1            2
           x2            0
 
 
c = 
                        x1           x2
           y1            0            1
 
 
d = 
                        u1
           y1            0

モデル表現間の変換

DC モーターの状態空間表現を作成できたので、伝達関数 (TF) や零点-極-ゲイン (ZPK) モデルを含む他のモデル表現に変換できます。

伝達関数表現-  状態空間表現から伝達関数表現への変換には、関数 tf を使用します。たとえば、次のコードを使用して、DC モーターの伝達関数表現に変換します。

sys_tf = tf(sys_dc)
Transfer function:
       1.5
------------------
s^2 + 14 s + 40.02

零点-極-ゲイン表現-  同様に、関数 zpk では、状態空間または伝達関数表現から零点-極-ゲインの形式に変換できます。次のコードを使用して、DC モーターに対する状態空間表現を零点-極-ゲイン表現に変換します。

sys_zpk = zpk(sys_dc)
 
Zero/pole/gain:
        1.5
-------------------
(s+4.004) (s+9.996)

メモ:

状態空間表現は、数値計算に最適です。モデルの仕様とその検証の場合を除いて、高精度な数値計算のために、モデルを組み合わせる前に状態空間表現に変換し、伝達関数表現や極-零-ゲイン表現は使用しないでください。

伝達関数や零点-極-ゲイン モデルの作成

DC モーターの例で、状態空間の方法では、モデルを表現するいくつかの行列を作成します。異なる方法を選択する場合は、対応するモデルは関数 tfzpkss、または frd を使用して作成できます。

sys = tf(num,den)               % Transfer function
sys = zpk(z,p,k)                % Zero/pole/gain
sys = ss(a,b,c,d)               % State-space
sys = frd(response,frequencies) % Frequency response data

たとえば、以下のコードのように、分子と分母を指定することにより、伝達関数を作成できます。

sys_tf = tf(1.5,[1 14 40.02])
 
Transfer function:
       1.5
------------------
s^2 + 14 s + 40.02

または、DC モーターの伝達関数を直接作成する場合は、次のコマンドを使用してください。

s = tf('s');
sys_tf = 1.5/(s^2+14*s+40.02)

これらのコマンドの結果、次の伝達関数が出力されます。

Transfer function:
        1.5
--------------------
s^2 + 14 s + 40.02

零点-極-ゲイン モデルを作成するには、次のコマンドを使用します。

sys_zpk = zpk([],[-9.996 -4.004], 1.5)

このコマンドの結果として、次の零点-極-ゲイン表現が出力されます。

Zero/pole/gain:
        1.5
-------------------
(s+9.996) (s+4.004)

離散時間システムの作成

Control System Toolbox では、離散時間システムも完全にサポートされています。アナログ システムを作成する場合と同じように、離散システムを作成できます。これらの唯一の違いは、作成したモデルに対して、サンプル時間を設定するかどうかです。次に例を示します。

sys_disc = tf(1, [1 1], .01);

これで、伝達関数形式で SISO モデルを作成します。

Transfer function:
  1
-----
z + 1
 
Sample time: 0.01

離散時間モデルへのむだ時間の追加

モデル作成時に入力むだ時間、出力むだ時間、または I/O 遅延を指定することにより、離散時間モデルにむだ時間を追加できます。むだ時間は、サンプル時間の倍数を表す非負の整数でなければなりません。たとえば、

sys_delay = tf(1, [1 1], 0.01,'ioDelay',5)

は 5 サンプルの I/O 遅延を含むシステムを返します。

Transfer function:
           1
z^(-5) * -----
         z + 1
 
Sample time: 0.01

線形モデルへの遅延の追加

モデル作成時に入力むだ時間、出力むだ時間、または I/O 遅延を指定することにより、線形モデルにむだ時間を追加できます。たとえば、DC モーターに I/O 遅延を追加するには次のコードを使用します。

sys_tfdelay = tf(1.5,[1 14 40.02],'ioDelay',0.05)

このコマンドでは、DC モーター伝達関数を作成しますが、0.05 秒の遅延を追加します。

Transfer function:
                      1.5
exp(-0.05*s) * ------------------
               s^2 + 14 s + 40.02

モデルへのむだ時間の追加についての詳細は、線形システムでのむだ時間を参照してください。

LTI オブジェクト

Control System Toolbox では、モデルに関連するデータの保存を簡単にするために、"LTI オブジェクト" と呼ばれる、カスタムのデータ構造を使用します。たとえば、DC モーターの例で作成された変数 sys_dc は、SS オブジェクトと呼ばれます。伝達関数には TF オブジェクト、零点-極-ゲインには ZPK オブジェクト、周波数応答モデルには FRD オブジェクトが用意されています。4 つの LTI オブジェクトではモデル データがカプセル化され、これを使用すると、複数のベクトルや行列ではなく、単一要素として線形システムを操作できます。

LTI オブジェクトに含まれているものを確認するには、get コマンドを使用します。以下のコードは、DC モーターの例から sys_dc の内容を記述するものです。

get(sys_dc)
                A: [2×2 double]
                B: [2×1 double]
                C: [0 1]
                D: 0
                E: []
           Scaled: 0
        StateName: {2×1 cell}
        StateUnit: {2×1 cell}
    InternalDelay: [0×1 double]
       InputDelay: 0
      OutputDelay: 0
               Ts: 0
         TimeUnit: 'seconds'
        InputName: {''}
        InputUnit: {''}
       InputGroup: [1×1 struct]
       OutputName: {''}
       OutputUnit: {''}
      OutputGroup: [1×1 struct]
            Notes: [0×1 string]
         UserData: []
             Name: ''
     SamplingGrid: [1×1 struct]

set コマンドを使用して、LTI オブジェクトの中に含まれているデータを操作できます。setget の詳細については、Control System Toolbox のオンライン リファレンス ページを参照してください。

LTI モデルの特性を設定したり、取得したりするための便利な方法としては、この他に、ドット表記を使用して直接アクセスする方法もあります。たとえば、行列 A の値にアクセスする場合は、関数 get を使用せず、

sys_dc.A

と MATLAB® プロンプトで入力します。このコマンドは、行列 A を出力します。

ans =

   -4.0000   -0.0300
    0.7500  -10.0000

同様に、行列 A の値を変更する場合も、次のようなコードを使用して直接操作できます。

A_new = [-4.5 -0.05; 0.8 -12.0];
sys_dc.A = A_new;

参考

| |

関連する例

詳細