線形 (LTI) モデル
プラントとは
一般的に、制御技術者は、制御する動的システムの数学的な記述から始めます。このように制御するシステムを、プラントと呼びます。プラントの一般的な例として、DC モーターについて考えます。この節では、慣性負荷を駆動する DC モーターの電気機械的な性質を記述する微分方程式を作成します。これらの方程式を基に、Control System Toolbox™ の関数を使用して、線形モデルを作成する方法を記述します。
線形モデルの表現
Control System Toolbox の関数を使用して、以下のモデル表現を作成できます。
次の形式の状態空間モデル (SS)
ここで、A、B、C、および D は適切な次元の行列、x は状態ベクトルであり、u と y は入力および出力ベクトルです。
伝達関数 (TF)、たとえば、
零点-極-ゲイン (ZPK) モデル、たとえば、
周波数応答データ (FRD) モデル: システムの周波数応答をサンプリングしたデータから構成されています。たとえば、実験的に集めた周波数応答データを FRD モデルに保存できます。
メモ
FRD モデルの設計は、ここでは取り上げない専門的なトピックです。このトピックの詳細は、周波数応答データ (FRD) モデルを参照してください。
SISO の例: DC モーター
慣性負荷を駆動する DC モーターの簡単なモデルにより、負荷の角速度 を出力として、印加電圧 を入力として示します。この例の目標は、印加電圧の変化により、角速度を制御することです。次の図は、簡単な DC モーターのモデルを示します。
慣性負荷を駆動する DC モーターの簡単なモデル

このモデルで、モーター自身のダイナミクスが理想化されています。たとえば、磁場は一定と考えられています。回路の抵抗を R とし、電機子の自己インダクタンスを L とします。DC モーターのモデル化に詳しくない方は、物理的なモデリングに関する基礎的な資料を参照してください。簡単なモデルと物理的な基礎法則を使用して、電気機械システムの挙動を記述する微分方程式を作成できます。この例では、電位と力学的な力との間には、ファラデーの電磁誘導の法則と磁場内を移動する導体に働くアンペールの法則が成り立つとします。
数学的な導出
モーターのシャフトに見られるトルク は、印加電圧で発生する電流 i に比例します。
ここで、Km は、電機子の定数で、モーターの物理特性、たとえば、磁場の強さ、導体コイルの周りを巻いているワイヤーの巻き数などに関連します。逆起電力 (誘導起電力) は、シャフトで見られる角速度 に比例した電圧になります。
ここで、Kb は、起電力の定数で、モーターの物理的な特性に寄って異なります。
モーターの方程式の力学的な部分は、慣性負荷 J と角速度の微係数を乗算したものが、モーターのシャフトの周りの全トルク量に等しいニュートンの法則に従います。結果は次のように表せます。
ここで、 は粘性摩擦の線形近似です。
最終的に、モーターの方程式の電気的な部分は、次の方程式
で記述でき、または逆起電力を代入して、印加電圧に対して、次の方程式を解きます。
一連の方程式は、モーターの挙動を記述した誘電電流を表す
と、角速度から求まる 2 つから構成されます。
DC モーターに対する状態空間方程式
前節で導出した 2 つの微分方程式を基に、動的システムとして、DC モーターの状態空間表現を作成できます。電流 i と角速度 ω は、システムの 2 つの状態です。印加電圧 はシステムへの入力であり、角速度 ω が出力になります。
DC モーターの例の状態空間表現
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 モーターの例で、状態空間の方法では、モデルを表現するいくつかの行列を作成します。異なる方法を選択する場合は、対応するモデルは関数 tf、zpk、ss、または 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 オブジェクトの中に含まれているデータを操作できます。set と get の詳細については、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;