プロセス系に対して、物体の運動に関する制御では、図2に示すような質量とバネとダンパの組み合わせで表される現象が多くあります。図2をモデル化してみましょう。
(3)式に演算子を施してみます。
制御工学では、初期条件は0として扱うため、(3)式の第2項は0となり、下記のようになります。
振動問題などの運動系では、(4)式の形になることがほとんどで、「二次遅れ系」と呼ばれます。
さて、(4)式右辺は下記のように書き換えることが可能で、
2つの一次遅れ系の組み合わせと考えることが可能です。ただし、複雑な式となるため、一般には分解せずに、二次遅れ系のまま扱います。
表1の2段目のデルタ関数とは、無限大の負荷が無限小の時間だけ持続するもので、現実には、ハンマなどで物体をたたいた状態が相当します。デルタ関数に演算子を施した結果が1になるということは、伝達関数はハンマなどの衝撃に対する出力ということになります。つまり、伝達関数を原関数に逆変換すれば、衝撃に対する応答が得られます。これは、インパルス応答と呼ばれます。では、(5)式の伝達関数を逆変換して、インパルス応答を求めてみます。表1の5段目を用いると、下記の式が得られます。
m=1、c=2、k=3として、tに対するyの変化をFreeMatで計算してみます。
ex503.mを動作させると、図3に示すインパルス応答が得られます。
clear; m=1;c=2;k=3; t=0:0.01:10; cmk=(c^2-4*m*k)^0.5; y=m/cmk*(exp(-(c-cmk)/2/m*t)-exp(-(c+cmk)/2/m*t)); plot(t,y); grid('on'); xlabel('Time[s]');ylabel('Response');
答えは得られますが、もう少しスマートな方法はないものでしょうか?
実は、(6)式のexp内の係数は、m・s2+c・s+k=0の解になっています。また、全体の係数は、2つの解の差の逆数となっています。FreeMatは任意の次数の方程式を解くコマンドrootsを持っているので、これを使ってプログラムを作成してみます。
ex504.mがそのプログラムで、3行目roots([m,c,k])でm・s2+c・s+k=0の解を計算しています。rootsコマンドは、多項式の係数を高次の項から順に配列として与えると、解を配列として返します。
例えば、
--> roots([1,3,2])
とすると、s2+3s+2=0の解が、ans=−2−1として得られます。
ex504.mを動作させると、図3と同じ結果が得られます。
clear; m=1;c=2;k=3; x=roots([m,c,k]); t=0:0.01:10; y=1/(x(1)-x(2))*(exp(x(1)*t)-exp(x(2)*t)); plot(t,y);grid('on'); xlabel('Time[s]');ylabel('Response');
次回は、ブロック線図について説明します。
伊藤孝宏(いとう・たかひろ)
1960年生。小型モーターメーカーのエンジニア。博士(工学)。専門は流体工学、音・振動工学。現在は、LabVIEWを使って、音不良の計測・診断ソフト、特性自動検査装置などの開発を行っている。
Copyright © ITmedia, Inc. All Rights Reserved.