線形 (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;