mats lab...mat’s lab 7 8)データをワークスペースに保存する....

35
Mats Lab 1 平成 28 年度ゼミ宿題(MATLAB の制御工学への応用例題) 各プログラムの意味を説明し,さらに実行した結果を確認せよ.なお,この例題は,つ ぎの本を参考にし,説明をこちらで付け加えました. 1)野波健蔵編著:制御理論の基礎,制御系設計,東京電気大学出版局(1998). 2)B. Shahian & M. Hassul : Control System Design Using MATLAB, Prentice Hall (1993). ----------------------- MATLAB 演習実行手順 各自個人のフォルダに matlab 専用のフォルダ,たとえば mfiles などの名前で用意する. matlab のカレントディレクトリをこのフォルダにする. 新規作成—Mfile を選択して,プログラムを記述し,ファイルをここに,指定されたファ イル名で,すべて保存する. デバッグメニューの実行で実行する. 使用方法詳細は,HP MATLAB マニュアルを参考にすること. 実行結果の表示とともに,プログラムの意味を 1 行ずつ説明すること. 問題1)------------------------------------------------------------------------ 次式の伝達関数で表される 2 次振動系のステップ応答波形とボード線図を求めよ. 1 , 215 . 0 ), ( 2 ) ( 2 2 2 s U s s s Y さらに,SIMULINK により,つぎのような入力に対する応答波形を求めよ. t t u 10 sin ) ( -------------------------------------------------------------------------------- % Step response of 2nd order system % ファイル名 step_2nd.m zeta = 0.215; omega = 1; num = omega*omega; den = [1 2*zeta*omega omega*omega]; sys = tf(num,den); % 伝達関数の作成 figure, step(sys) % ステップ応答のプロット figure, bode(sys) % ボード線図のプロット % 関数 tf()は何を意味しているか? % 関数 step(),bode()は何をしているか? % なお,step(sys), bode(sys)は, step(num,den),bode(num,den)でもよい.

Upload: others

Post on 30-May-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

1

平成 28年度ゼミ宿題(MATLABの制御工学への応用例題)

各プログラムの意味を説明し,さらに実行した結果を確認せよ.なお,この例題は,つ

ぎの本を参考にし,説明をこちらで付け加えました.

1)野波健蔵編著:制御理論の基礎,制御系設計,東京電気大学出版局(1998).

2)B. Shahian & M. Hassul : Control System Design Using MATLAB, Prentice Hall (1993).

-----------------------

●MATLAB演習実行手順

・ 各自個人のフォルダに matlab専用のフォルダ,たとえば mfilesなどの名前で用意する.

・ matlabのカレントディレクトリをこのフォルダにする.

・ 新規作成—Mfileを選択して,プログラムを記述し,ファイルをここに,指定されたファ

イル名で,すべて保存する.

・ デバッグメニューの実行で実行する.

・ 使用方法詳細は,HPの MATLABマニュアルを参考にすること.

・ 実行結果の表示とともに,プログラムの意味を 1行ずつ説明すること.

問題1)------------------------------------------------------------------------

次式の伝達関数で表される 2次振動系のステップ応答波形とボード線図を求めよ.

1,215.0),(2

)(22

2

sU

sssY

さらに,SIMULINKにより,つぎのような入力に対する応答波形を求めよ.

ttu 10sin)(

--------------------------------------------------------------------------------

% Step response of 2nd order system

% ファイル名 step_2nd.m

zeta = 0.215;

omega = 1;

num = omega*omega;

den = [1 2*zeta*omega omega*omega];

sys = tf(num,den); % 伝達関数の作成

figure, step(sys) % ステップ応答のプロット

figure, bode(sys) % ボード線図のプロット

% 関数 tf()は何を意味しているか?

% 関数 step(),bode()は何をしているか?

% なお,step(sys), bode(sys)は,

step(num,den),bode(num,den)でもよい.

Page 2: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

2

* step をヘルプ表示すると,次のように出力される.これを約して,各オプション命令

を上の例に適用して,試すこと.

>> help step

STEP Step response of LTI models.

STEP(SYS) plots the step response of the LTI model SYS (created with either TF, ZPK, or SS). For

multi-input models, independent step commands are applied to each input channel. The time range

and number of points are chosen automatically.

STEP(SYS,TFINAL) simulates the step response from t=0 to the final time t=TFINAL. For

discrete-time models with unspecified sampling time, TFINAL is interpreted as the number of

samples.

STEP(SYS,T) uses the user-supplied time vector T for simulation. For discrete-time models, T should

be of the form Ti:Ts:Tf where Ts is the sample time. For continuous-time models, T should be of the

form Ti:dt:Tf where dt will become the sample time for the discrete approximation to the

continuous system. The step input is always assumed to start at t=0 (regardless of Ti).

STEP(SYS1,SYS2,...,T) plots the step response of multiple LTI models SYS1,SYS2,... on a single plot.

The time vector T is optional. You can also specify a color, line style, and marker for each system, as

in

step(sys1,'r',sys2,'y--',sys3,'gx').

[Y,T] = STEP(SYS) returns the output response Y and the time vector T used for simulation. No plot

is drawn on the screen. If SYS has NY outputs and NU inputs, and LT = length(T), Y is an array of size

[LT NY NU] where Y(:,:,j) gives the step response of the j-th input channel.

Page 3: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

3

[Y,T,X] = STEP(SYS) also returns, for a state-space model SYS, the state trajectory X, a

LT-by-NX-by-NU array if SYS has NX states.

* bode をヘルプ表示すると,次のように出力される.これを約して,各オプション命令

を上の例に適用して,試すこと.

>> help bode

BODE Bode frequency response of LTI models.

BODE(SYS) draws the Bode plot of the LTI model SYS (created with either TF, ZPK, SS, or FRD).

The frequency range and number of points are chosen automatically.

BODE(SYS,{WMIN,WMAX}) draws the Bode plot for frequencies between WMIN and WMAX (in

radians/second).

BODE(SYS,W) uses the user-supplied vector W of frequencies, in radian/second, at which the Bode

response is to be evaluated. See LOGSPACE to generate logarithmically spaced frequency vectors.

BODE(SYS1,SYS2,...,W) graphs the Bode response of multiple LTI models SYS1,SYS2,... on a single

plot. The frequency vector W is optional. You can specify a color, line style, and marker for each

model, as in

bode(sys1,'r',sys2,'y--',sys3,'gx').

[MAG,PHASE] = BODE(SYS,W) and [MAG,PHASE,W] = BODE(SYS) return the response magnitudes

and phases in degrees (along with the frequency vector W if unspecified). No plot is drawn on the

screen. If SYS has NY outputs and NU inputs, MAG and PHASE are arrays of size [NY NU

LENGTH(W)] where MAG(:,:,k) and PHASE(:,:,k) determine the response at the frequency W(k). To

get the magnitudes in dB, type MAGDB = 20*log10(MAG).

For discrete-time models with sample time Ts, BODE uses the transformation Z = exp(j*W*Ts) to map

the unit circle to the real frequency axis. The frequency response is only plotted for frequencies

smaller than the Nyquist frequency pi/Ts, and the default value 1 (second) is assumed when Ts is

unspecified.

Page 4: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

4

SIMULINKモデルの導出:

1)伝達関数モデルの変形

)()()(2)(

)()()(),()(

)()()(2)(

)(2

)(

22

2

222

22

2

sUsYsZsW

sYsssZsWssYsZ

sUsYssYsYs

sUss

sY

とおくと,

2)SIMUKINK作成:ファイル名を mass_spring.mdlとした.

3)パラメータ定義 Mファイルの作成:ファイル名 mass_spring_parameter.mとした.

Page 5: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

5

4)simulinkファイルのモデルプロパティの callbackに Mファイルを指定して,simulink

実行の際に自動起動させるように設定する.

5)実行して,scopeを表示させる.

パラメータを定義した m ファイル名

を拡張子を省いて入れる.

Page 6: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

6

6)刻みがおかしいので,コンフィグレーションパラメータの相対許容誤差を小さくする.

7)再計算して,scopeを表示させる.

Page 7: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

7

8)データをワークスペースに保存する.

9)これでもう一度,再計算して,ワークスペースのデータを確認する.

ここをクリック

ここをクリック

ワークスペースに保存する変数名を指定する.

時間付構造体を指定するのが便利

Page 8: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

8

10) 構造体データのアクセスの仕方

11) Mファイルで図を表示する.

データが保存されてい

るのが分かる

who コマンドの実行

Page 9: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

9

12)図を figと epsの両方の形式で保存する.

Fig:MATLAB形式,eps:extended postscript形式

ファイル名の指定:拡張子 fig

Page 10: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

10

ファイル名の指定:拡張子 eps

保存されていることが確認できる.

Page 11: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

11

問題2)------------------------------------------------------------------------

次式の伝達関数のステップ応答波形を求め,t=0から t=5までの応答を 1つの図にプロット

せよ.

G1(s) =24

s2 + 4s+ 24; G2(s) =

240

(s+ 10)(s2 + 4s+ 24)

G3(s) =48

(s+ 2)(s2 + 4s+ 24); G4(s) =

12

(s+ 0:5)(s2 + 4s+ 24)

--------------------------------------------------------------------------------

% Step response of 3rd order system

% ファイル名 step_3rd.m

num1=[24];

den1=[1 4 24];

num2=[240];

den2=conv([1 10],[1 4 24]);

num3=[48];

den3=conv([1 2],[1 4 24]);

num4=[12];

den4=conv([1 0.5],[1 4 24]);

t=0:0.05:5;

[y1,x1,t]=step(num1,den1,t);

[y2,x2,t]=step(num2,den2,t);

[y3,x3,t]=step(num3,den3,t);

[y4,x4,t]=step(num4,den4,t);

plot(t,y1,t,y2,t,y3,t,y4)

grid

title('Step responses of four systems')

xlabel('t [s]')

ylabel('Output y1,y2,y3 and y4')

text(0.5,1.3,'G1'),text(0.6,1.0,'G2'),text(1,0.9,'G3'),text(1.5,0.55,'G4')

問題3)------------------------------------------------------------------------

つぎの Mファイルは何をするプログラムか説明せよ.

--------------------------------------------------------------------------------

%ファイル名 meshplot.m

t=[0:0.05:5];

number_of_curves=12;

y=zeros(length(t),number_of_curves);

n=1;

Page 12: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

12

% この whileループ内の計算の意味を詳しく説明せよ.

while n<=number_of_curves,

[num,den]=zp2tf([],[-n/4+3*i -n/4-3*i],(n/4)^2+9);

[y(1:length(t),n),x,tdumb]=step(num,den,t);

n=n+1;

end;

mesh(y')

title('Mesh plot showing step response for twelve pole locations')

問題4)------------------------------------------------------------------------

次式の状態方程式の数値解と厳密解をプロットせよ.

teu

x

y

uxx

2

0

1

)0(

011

1

0

0

92624

100

010

--------------------------------------------------------------------------------

% Solution of state-space equation

% ファイル名 solution.m

clf

t=[0:0.1:5];

x0=[1 0 2]';

a=[0 1 0;0 0 1;-24 -26 -9];

b=[0 0 1]';

c=[1 1 0];

d=[0];

u=exp(-t);

% lsim.mの使い方について説明せよ.

[y,x]=lsim(a,b,c,d,u,t,x0);

% 厳密解がつぎのようになることをラプラス変換を用いて,手計算で導出せよ.

y1=-6.5*exp(-2*t)+19*exp(-3*t)-11.5*exp(-4*t);

plot(t,y,t,y1)

grid

Page 13: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

13

title('Forced responses with initial states using analytical and numerical

solution')

xlabel('t [s]')

ylabel('Numerical y and analytical y1')

問題5)------------------------------------------------------------------------

プラント伝達関数とコントローラの伝達関数を次式のようにおく.

G(s) =1

s2 +2s+4;C(s) = k

s+2

s(s+1)

つぎの図のようなフィードバック制御系の閉ループ伝達関数のボード線図を k=0.5,1,4の3

つの場合について求め,プロットせよ.

閉ループ伝達関数を手計算でも求め,フィードバック制御系が安定かどうか調べよ.

--------------------------------------------------------------------------------

% Bode plot

%ファイル名 bdplot.m

clf

% logspace.mは何をするものか説明せよ.

w=logspace(-1,2,200);k=0.5;

% forループ内ではどういう処理をしているか説明せよ.

% series.mと feedback.mは何をするものか説明せよ.

for i=1:3

numgc=k*[1 2];dengc=[1 1 0];

numg=[1];deng=[1 2 4];

[nums,dens]=series(numgc,dengc,numg,deng);

[num,den]=feedback(nums,dens,1,1);

[mag,phase,w]=bode(num,den,w);

if i==1,mag1=mag;phase1=phase;k=1;end

if i==2,mag2=mag;phase2=phase;k=4;end

if i==3,mag3=mag;phase3=phase;end

end

C(s) G(s) +

Page 14: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

14

% loglog.mは何をするものか説明せよ.

loglog(w,mag1,'-',w,mag2,'-',w,mag3,'-'),grid

xlabel('frequency[rad/sec]'),ylabel('mag')

問題6)------------------------------------------------------------------------

問題5と同じ閉ループ伝達関数のステップ応答を求め,プロットせよ.

--------------------------------------------------------------------------------

% Step response

%ファイル名 stepres.m

clf

t=[0:0.1:20];k=0.5

% cloop.mは何をするものか求めよ.

for i=1:3

numgc=k*[1 2];dengc=[1 1 0];

numg=[1];deng=[1 2 4];

[nums,dens]=series(numgc,dengc,numg,deng);

[num,den]=cloop(nums,dens);

[y,x]=step(num,den,t);

if i==1,y1=y;k=1;end

if i==2,y2=y;k=4;end

if i==3,y3=y;end

end

plot(t,y1,'-',t,y2,'-',t,y3,'-'),grid,xlabel('time[sec]'),ylabel('c(t)')

問題7)------------------------------------------------------------------------

つぎのプログラムは根軌跡法を計算するものである.プログラムの詳細を説明せよ.また,

根軌跡法とはなにか説明せよ.

--------------------------------------------------------------------------------

% Root locus

%ファイル名 rootloci.m

num=1

den=[1 19 108 180]

% rlocus.mは何をする Mファイルか説明せよ.

rlocus(num,den)

pause

t=[0:0.001:2];

y1=step(1,[1 19 108 180],t);

y2=step(1,[1 19 108 280],t);

Page 15: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

15

plot(t,y1/0.0055,'r',t,y2/0.0036,'g')

問題8)------------------------------------------------------------------------

つぎのプログラムは位相遅れ補償を計算するものである.プログラムの詳細を説明せよ.

また,位相遅れ補償とはなにか説明せよ.

--------------------------------------------------------------------------------

% ファイル名 lagcomp.m

w1=logspace(-1,2,100);

n1=400;

d1=[1 30 200 0];

s1=nd2sys(n1,d1);

yy1=frsp(s1,w1);

xx1=vunpck(yy1);

yy11=20*log10(abs(xx1));

yy11=vpck(yy11,w1);

n2=[0.8 1]*5/0.8;

d2=[5 1];

n2=conv(n2,n1);

d2=conv(d2,d1);

s2=nd2sys(n2,d2);

yy2=frsp(s2,w1);

xx1=vunpck(yy2);

yy21=20*log10(abs(xx1));

yy21=vpck(yy21,w1);

subplot(211),vplot('liv,d',yy11,'r',yy21,'g')

grid

subplot(212),vplot('liv,p',yy1,'r',yy2,'g')

grid

pause

d1=[1 30 200 400];

d2=d2+[0 0 0 n2];

t=[0:0.001:10];

y1=step(n1,d1,t);

y2=step(n2,d2,t);

clf

plot(t,y1,'r',t,y2,'g')

grid

Page 16: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

16

問題9)------------------------------------------------------------------------

つぎのプログラムは位相進み補償を計算するものである.プログラムの詳細を説明せよ.

また,位相進み補償とはなにか説明せよ.

--------------------------------------------------------------------------------

% ファイル名 leadcomp.m

w1=logspace(-1,2,100);

n1=400;

d1=[1 30 200 0];

n2=[0.68 10];

s1=nd2sys(n1,d1);

yy1=frsp(s1,w1);

xx1=vunpck(yy1);

yy11=20*log10(abs(xx1));

yy11=vpck(yy11,w1);

n2=[0.15 1]*2.5;

d2=[0.08 1];

n2=conv(n2,n1);

d2=conv(d2,d1);

s2=nd2sys(n2,d2);

yy2=frsp(s2,w1);

xx1=vunpck(yy2);

yy21=20*log10(abs(xx1));

yy21=vpck(yy21,w1);

subplot(211),vplot('liv,d',yy11,'r',yy21,'g')

grid

subplot(212),vplot('liv,p',yy1,'r',yy2,'g')

grid

pause

d1=[1 30 200 400];

d2=d2+[0 0 0 n2];

t=[0:0.001:3];

y1=step(n1,d1,t);

y2=step(n2,d2,t);

clf

plot(t,y1,'r',t,y2,'g')

grid

Page 17: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

17

問題10)----------------------------------------------------------------------

つぎのプログラムは PIコントローラのよる閉ループ系のステップ応答を計算するものであ

る.プログラムの詳細を説明せよ.ここで,プラントと PIコントローラの伝達関数は次式

とする.

G(s) =1

s2 + 2s+ 4; C(s) = K1 +

K2

s

--------------------------------------------------------------------------------

% ファイル名 pd_pid.m

clf

t=[0:0.1:20];k1=0.5;k2=1;

numgc= [k1 k2];dengc=[1 0];

numg=[1];deng=[1 2 4];

[nums,dens]=series(numgc,dengc,numg,deng);

[num,den]=cloop(nums,dens);

% root(den)は何をするものか説明せよ.

roots(den)

[y,x]=step(num,den,t);

plot(t,y),grid,xlabel('time[sec]'),ylabel('y(t)')

問題11)-----------------------------------------------------------------------

あるヘリコプターのホバーリング中の垂直方向の状態方程式は次式のようになる.

u

q

y

u

q

u

q

100

8.9

0

3.6

02.08.94.1

001

01.004.0

ただし,各変数はつぎのようになっている.

angletiltrotor

velocityhorizontalu

fuselageofanglepitch

ratepitchq

:

:

:

:

この系に対して,つぎのような手順で制御系の解析と設計を行ってみよう.ただし,コン

トローラはつぎのようなものを用いる.

Page 18: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

18

G(s):ヘリコプターの伝達関数

C1(s):前置補償器の伝達関数

C2(s):フィードバック補償器の伝達関数

C1(s) =K1s+0:65

s+10; C2(s) =K2

s

s+10

このフィードバック系の閉ループ伝達関数を手計算せよ.

--------------------------------------------------------------------------------

%ファイル名 helicop.m

% a helicopter problem

% 状態方程式の行列の定義

a = [-0.4 0 -0.01

1 0 0

-1.4 9.8 -0.02];

b = [6.3

0

9.8];

c = [ 0 0 1];

d = 0;

% 状態方程式から伝達関数を求める.

[ng,dg]=ss2tf(a,b,c,d);

printsys(ng,dg)

% 状態方程式からその伝達関数の極と零点とゲインを求める.

[open_zero,open_pole,gain] = ss2zp(a,b,c,d)

% コントローラの定義 C1(s),C2(s)

K1 = 0.0242; K2 = 82.7206;

num_C1 = K1*[1 0.65]; den_C1 = [1 10];

num_C2 = K2*[1 0]; den_C2 = [1 10];

% 閉ループ伝達関数を計算する.

G(s) C1(s)

C2(s)

Page 19: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

19

[num_Gs,denGs] = series(ng,dg,num_C1,den_C1)

[num_T,den_T] = feedback(num_Gs,den_Gs,num_C2,den_C2,-1)

% 閉ループ伝達関数の極と零点とゲインを求める.

[cl_zero,cl_pole,cl_gain] = tf2zp(num_T,den_T)

% ボード線図をプロットする.

w = logspace(-2,3,100);

[mag_T,phase_T] = bode(num_T,den_T,w);

subplot(211), semilogx(w,20*log10(mag_T))

subplot(212), semilogx(w,phase_T)

% ベクトル軌跡をプロットする.

nyquist(num_T,den_T)

% ステップ応答を求める.

t = 0:0.01:10;

[y,t]=step(num_T,den_T,t)

plot(t,y),xlabel(‘time’),ylabel(‘step response’)

% インパルス応答を求める.

[yy,t] = impulse(num_T,den_T,t)

plot(t,yy),xlabel(‘time’),ylabel(‘impulse response’)

問題12)-----------------------------------------------------------------------

次図のような水平方向の 2次振動系を考える.

ここで,バネ定数を k1,k2,粘性摩擦係数を c1,c2とすると,各質点に働く力の釣り合いは

つぎのようにかける.

y1

m2 m1

y2

バネ バネ u(力)

m2

k2y2

c2(dy2/dt) c1(dy2/dt- dy1/dt)

k1(y2-y1)

m1

k1(y1-y2)

c1(dy1/dt- dy2/dt)

u

Page 20: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

20

ニュートンの運動方程式からつぎの式が成り立つ.

221212212122

21121111

)()(

)()(

ycyycykyykym

uyykyycym

これを行列形式に直すと,次式のようになる.

uy

y

kkk

kk

y

y

ccc

cc

y

y

m

m

0

1

0

0

2

1

211

11

2

1

211

11

2

1

2

1

なお,出力は y1,y2とする.上式を状態変数

x =

266664

y1

y2

_y1

_y2

377775

とおくと,つぎのような状態方程式になる.

_x = Ax+Bu

A,Bがどうなるか求めよ.この系に対して,つぎの状態フィードバックを考える.

Fxu

Fを状態フィードバックゲインと言う.このとき,閉ループ系は次式のようになる.

xBFABFxAxx )(

上式の解は次式のように書ける.

)0()( )( xetx tBFA

これから,閉ループ系は漸近安定,つまり,任意の初期値 x(0)に対して,

limt!1

x(t) = 0

が成り立つためには,行列(A-BF)が安定行列,つまり,(A-BF)の固有値の実部がすべて負

でなければならない.さらに,(A,B)が可制御である場合,(A-BF)の固有値を指定の値にす

るような状態フィードバックゲイン F が存在する.このような F を求めることを極配置と

言う.

つぎは,この 2 自由度振動系において,状態フィードバックコントローラを適当にフィ

ードバックゲインを与えて,応答を計算するのに,インパルス応答を用いたものである.

以下は3つのファイルに分けて保存する.param_sp.m は 2 自由度振動系の物理パラメータ

および状態空間モデルの行列パラメータの設定 Mファイルである.

param_sp.m 2自由度振動系のパラメータ設定

pole_sp.m 極配置指定レギュレータ

res_2sp.m 応答計算プログラム

--------------------------------------------------------------------------------

Page 21: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

21

%ファイル名 param_sp.m

% two-degree-of-freedom system

m1=1; m2=0.01;

k1=100; k2=100;

c1=0.001; c2=0.00001;

M=[m1 0; 0 m2];

K=[k1 –k1; -k1 k1+k2];

C=[c1 –c1; -c1 c1+c2];

E=[1; 0];

inM=inv(M);

% 2自由度振動系の状態方程式の A,Bパラメータがどうして以下で計算できるのか説明せよ.

A=[zeros(2,2) eye(2); -inM*K -inM*C];

B=[0; 0; inM*E];

% 出力 mass 1 & 2 position y = C*x + D*u

% 出力方程式がどうしてこのようになるか説明せよ.

C=[1 0 0 0; 0 1 0 0];

D=zeros(2,1);

Return

-------

% Pole placement(極配置プログラム)

% ファイル名 pole_sp.m

clear

param_sp % param.mの呼び出し,これにより 2次振動系のパラメータを設定できる.

i=sqrt(-1)

P=[-10+100*i -10-100*i -15+15*i -15-15*i];

% place.mが閉ループ制御系の極を望まれる値にする状態フィードバック制御ゲインを求める

% Mファイルである.使い方を調べよ. help placeで表示できる.

F=place(A,B,P);

eig(A-B*F)

F

return

-------

%(応答計算プログラム)

% ファイル名 res_sp.m

clf

clear

Page 22: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

22

place_sp % place_sp.mの呼び出し

[y1,x1,T1]=impulse(A,B,C,D,1);

[y2,x2,T2]=impulse(A-B*F,B,C,D,1);

figure(1)

plot(T1,y1,'-',T2,y2(:,1),':')

legend('no control','feedback gain f1',0);

xlabel('Time [s]')

ylabel('Displacement [m]')

return

問題13)----------------------------------------------------------------------

2慣性系は制御系設計のベンチマークテストでよく用いられるものであり,次の図のよう

な構成になっている.

これは,前出の 2 自由度振動系と同様にして,状態方程式で記述できる.この系の状態方

程式を求めよ.ここでは,一般的に状態方程式を次式のようにおく.ただし,出力は x1,x2

とする.

_x = Ax+Bu

y = Cx

オブザーバ型コントローラは,オブザーバと疑似的な状態フィードバックからなる次式の

ようなフィードバックコントローラである.

LyzLCBFALCzLyBFzAzCzyLBuAzz

Fzu

)()(

ここで,zがオブザーバの状態変数であり,これは出力 yからシステムの状態 xを次の意味

で推定する機構である.

0)()(lim

tztxt

オブザーバによる状態変数の推定誤差を e(t)=x(t)-z(t)とおくと,次式が成り立つ(導出

せよ).

u

m1 m2

k2

c2

x1 x2

Page 23: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

23

eLCAe )(

そこで,(A-LC)を安定行列にするように Lを選べば,オブザーバになることがわかる.Lを

オブザーバゲインと言う.(A-LC)と(A-LC)Tの固有値は等しいので,

TTTTLCALCA

であることから,ATを A,CTを B,LTを Fとみなすと,状態フィードバックの極配置 Mファ

イル place.m を用いて,オブザーバゲイン L が計算できることがわかる.閉ループ系の状

態変数を[x(t),e(t)]とすると,つぎのよう閉ループ系の状態方程式が成立することがわか

る(これを導出せよ).

e

x

LCA

BFBFA

e

x

0

2 つの行列(A-LC)と(A-BF)の両方とも安定行列であるならば,閉ループ系は漸近安定,つ

まり,任意の初期値に対して,次式が成り立つ.

limt!1

x(t) = 0; limt!1

e(t) = 0

つぎは,現代制御理論におけるオブザーバ(観測器)を用いたコントローラの設計例で

ある.複数の Mファイルはつぎのような構成になっている.

obspa.m オブザーバゲインの計算

obsctpa.m オブザーバを用いた補償器

param.m 問題12の param.mと同じ

param0.m 2慣性系のパラメータ設定

simobspa.m 例題プログラム(参考)

■ 使用方法

simobspa.mで,オブザーバの初期値をすべて零にする場合は

xb=[0 0 0 0]';

を,オブザーバの初期値を制御対象の初期値に合わせる場合は

xb=x; % to give an initial state for observer

を用いる.

--------------------------------------------------------------------------------

% ファイル名 param0.m

% two-inertia system

% 2慣性系がどうしてこのようなモデルになるのか説明せよ.

m1=1; m2=0.01;

k1=0; k2=100;

c1=0; c2=0.00001;

M=[m1 0; 0 m2];

Page 24: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

24

K=[k1+k2 -k2; -k2 k2];

C=[c1+c2 -c2; -c2 c2];

E=[1; 0];

inM=inv(M);

A=[zeros(2,2) eye(2); -inM*K -inM*C];

eig(A);

B=[0; 0; inM*E];

% mass 1 & 2 position

Cd=[1 0 0 0; 0 1 0 0];

Dd=zeros(2,1);

% mass 1 & 2 acceleration

Ca=A(3:4,:);

Da=B(3:4,:);

Return

--------------------

% ファイル名 obspa.m

% オブザーバとはなにか説明せよ.また,この Mファイルは何をしているのか説明せよ.

clear

param0 %param0.mの呼び出し

i=sqrt(-1)

P=[-20+100*i -20-100*i -20+15*i -20-15*i];

L=place(A',Cd',P);

eig(A-L'*Cd)

return

---------------------

%ファイル名 obsctpa.m

% observer-based controller by pole assignment

clf

clear

param0 % two-inertia system

i=sqrt(-1)

Po=[-20+100*i -20-100*i -20+15*i -20-15*i];

L=place(A',Cd',Po);

eig(A-L'*Cd)

Pc=[-10+100*i -10-100*i -15+15*i -15-15*i];

F=place(A,B,Pc);

Page 25: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

25

eig(A-B*F)

w=logspace(-1,3,1000);

[md,pd]=bode(ss(A-B*F-L'*Cd,L',-F,[0 0]),w);

f=w/2/pi;

md1=20*log10(md(:,1,:));

semilogx(f,md1(1,:))

xlabel('Frequency Hz')

ylabel('Gain dB')

axis([10^(-1) 10^2 50 100])

return

--------------

% ファイル名 simobspa.m

% Simulation for two-inertia system by observer-based controller

format short e

obsctpa

Af=A; Bf=B;

st=0.005;tmax=1;dnum=199;

[Afd,Bfd]=c2d(Af,Bf,st);

[Afd,Ld]=c2d(Af,L',st);

step1=round(tmax/st/dnum);

imax=step1*dnum;

r=[0 ; 0 ; 0; 0];

x=[-0.3 -0.3 0 0]';

%xb=[0 0 0 0]';

xb=x; % to give an initial state for observer

t=0;

num=1;loop1=step1;

for i=0:imax

u=-F*xb;

x=Afd*x+Bfd*u;

xb=Afd*xb+Bfd*u+Ld*(Cd*x-Cd*xb);

if loop1==step1

loop1=0;

ydat(num,1)=x(1);

ydat(num,2)=x(2);

ydat(num,3)=x(3);

Page 26: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

26

ydat(num,4)=x(4);

ydat(num,5)=xb(1);

ydat(num,6)=xb(2);

ydat(num,7)=xb(3);

ydat(num,8)=xb(4);

udat(num)=u;

tdat(num)=t;

num=num+1;

clc

% t

end

loop1=loop1+1;

t=t+st;

end

subplot(221)

plot(tdat,ydat(:,1))

xlabel('Time s')

ylabel('x1 [m]')

pause

subplot(223)

plot(tdat,ydat(:,2))

xlabel('Time s')

ylabel('x2 [m]')

pause

subplot(222)

plot(tdat,ydat(:,3))

xlabel('Time s')

ylabel('x1d [m/s]')

pause

subplot(224)

plot(tdat,udat)

xlabel('Time s')

ylabel('u [N]')

return

Page 27: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

27

問題14)---------------------------------------------------------

2次の振動系に対するサーボコントローラの設計例である.

poleint.m サーボ系設計

○ 関連する m-file ファイル

param.m 2自由度振動系のパラメータ設定

poleint2.m simpe.mの中で用いられるサーボ系設計プログラム

simpe.m 例題プログラム(参考)

simregi.m 例題プログラム(参考)

prefd1k0.m 極配置によるレギュレータ設計,simregi.mの中で使用

par1dk0.m 1/s(s+50)の状態方程式,prefd1k0.mで使用

sim1dk0.m 例題プログラム(参考)

pintd1.m 3種類の極配置によるサーボ系設計,sim1dk0.mの中で使用

par1dk10.m 積分特性変化後のパラメータ,pintd1.mの中で使用

------------------------------------------------------------------

% ファイル名 param.m

% two-degree-of-freedom system

m1=1; m2=0.01;

k1=100; k2=100;

c1=0.001; c2=0.00001;

M=[m1 0; 0 m2];

K=[k1+k2 -k2; -k2 k2];

C=[c1+c2 -c2; -c2 c2];

E=[1; 0];

inM=inv(M);

A=[zeros(2,2) eye(2); -inM*K -inM*C];

B=[0; 0; inM*E];

% mass 1 & 2 position

Cd=[1 0 0 0; 0 1 0 0];

Dd=zeros(2,1);

[num, den]=ss2tf(A,B,Cd,Dd);

return

% mass 1 & 2 acceleration

Ca=A(3:4,:);

Da=B(3:4,:);

Return

---------------

Page 28: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

28

% ファイル名 par1dk0.m

% one-degree-of-freedom system with k1=0

% use in prefd1k0.m

m1=1;

k1=0;

c1=50;

A=[0 1 ; -k1/m1 -c1/m1];

B=[0; 1/m1];

Cd=[1 0];

Dd=zeros(2,1);

-----------

% ファイル名 par1dk10.m

% one-degree-of-freedom system

m1=1;

k1=10;

c1=50;

A=[0 1 ; -k1/m1 -c1/m1];

B=[0; 1/m1];

Cd=[1 0];

Dd=zeros(2,1);

------------

%ファイル名 pintd1.m

% use in sim1dk0.m

par1dk10

Cd1=Cd(1,:);

[l,n]=size(Cd1);

[n,m]=size(B);

aa=[A zeros(n,l) ; Cd1 zeros(l,l)];

bb=[B ; zeros(l,m)];

co=ctrb(aa,bb);

rank(co)

P(:,1)=1.0e+02 *[

-0.13 + 0.147i;

-0.13 - 0.147i;

-0.5];

P(:,2)=1.0e+02 *[ -0.10+ 0.147i;

Page 29: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

29

-0.10 - 0.147i;

-0.5];

P(:,3)=1.0e+02 *[ -0.10+ 0.147i;

-0.10 - 0.147i;

-1.0];

for jj=1:3

F = place(aa,bb,P(:,jj));

f1d(:,:,jj)=F(1,1:2);

f2d(:,:,jj)=F(1,3);

end

--------------

% ファイル名 sim1dk0.m

clf

clear

format short e

pintd1

Af=A; Bf=B;

st=0.01;tmax=2;dnum=100;

[Afd,Bfd]=c2d(Af,Bf,st);

ae=0.001;

[aed,bed]=c2d(-ae,1,st);

for jj=1:3

f1=f1d(:,:,jj);

f2=f2d(:,:,jj);

step1=round(tmax/st/dnum);

imax=step1*dnum;

r=0.3;

x=[0 0]';

y=Cd1*x;

es=0;

xc=zeros(11,1);

t=0;

num=1;loop1=step1;

for i=0:imax

e=y-r;

es=aed*es+bed*e;

Page 30: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

30

u=-f1*x-f2*es;

x=Afd*x+Bfd*u;

if loop1==step1

loop1=0;

ydat(num,1,jj)=x(1);

ydat(num,2,jj)=x(2);

udat(num,jj)=u;

tdat(num,jj)=t;

num=num+1;

clc

% t

end

y=Cd1*x;

loop1=loop1+1;

t=t+st;

end

end

plot(tdat,ydat(:,1,1),'-',tdat,ydat(:,1,2),'--',tdat,ydat(:,1,3),':')

xlabel('Time [s]')

ylabel('Displacement of mass 1 [m]')

axis([0,1.0, 0, 0.34])

return

-------------------

% ファイル名 simregi.m

% Error by model variation

clf

clear

format short e

prefd1k0

% parameter variation------

m1=1;

k1d(1)=10; k1d(2)=0;

for iii=1:2

k1=k1d(iii);

c1=50;

A=[0 1 ; -k1/m1 -c1/m1];

Page 31: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

31

B=[0; 1/m1];

Cd=[1 0];

Dd=zeros(2,1);

% parameter variation------

Af=A; Bf=B;

st=0.01;tmax=2;dnum=100;

[Afd,Bfd]=c2d(Af,Bf,st);

step1=round(tmax/st/dnum);

imax=step1*dnum;

r=[0.3 0]';

x=[0 0]';

y=Cd1*x;

es=0;

xc=zeros(11,1);

t=0;

num=1;loop1=step1;

for i=0:imax

u=-f1*(x-r)-f2*es;

x=Afd*x+Bfd*u;

if loop1==step1

loop1=0;

ydat(num,1)=x(1);

ydat(num,2)=x(2);

udat(num)=u;

tdat(num)=t;

num=num+1;

clc

% t

end

y=Cd1*x;

loop1=loop1+1;

t=t+st;

end

data(:,iii)=ydat(:,1);

end

%subplot(221)

Page 32: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

32

plot(tdat,data(:,1),'--',tdat,data(:,2),'-')

xlabel('Time s')

ylabel('x1')

grid

axis([0,2.0,0,0.38])

legend('k=10','k=0')

return

subplot(223)

plot(tdat,ydat(:,2))

xlabel('Time s')

ylabel('x2')

pause

subplot(224)

plot(tdat,udat)

xlabel('Time s')

ylabel('u V')

----------------------

%ファイル名 poleint2.m

% Design of servo system

% use in simpe.m

param % two-degree-of-freedom system

Cd1=Cd(1,:);

[l,n]=size(Cd1);

[n,m]=size(B);

aa=[A zeros(n,l) ; Cd1 zeros(l,l)];

bb=[B ; zeros(l,m)];

co=ctrb(aa,bb);

rank(co)

P =1.0e+02 *[-0.0050 + 1.0051i;

-0.0050 - 1.0051i;

-0.0677 + 0.1468i;

-0.0677 - 0.1468i;

pe]

F = place(aa,bb,P)

f1=F(1,1:4);

f2=F(1,5);

Page 33: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

33

----------------

%ファイル名 prefd1k0.m

% use in simregi.m

par1dk0 % one-degree-of-freedom system with k1=0

Cd1=Cd(1,:);

[l,n]=size(Cd1);

[n,m]=size(B);

Preg =1.0e+02 *[

-0.1 + 0.147i;

-0.1 - 0.147i];

Freg = place(A,B,Preg);

f1=Freg;

f2=0;

--------------

% ファイル名 simpe.m

% Control of 2 Inertia System by LQI

%clg

clear

format short e

%lqint

ped(1)=-0.05; ped(2)=-0.1; ped(3)=-1.0;

for iii=1:3

pe=ped(iii);

poleint2

Af=A; Bf=B;

st=0.01;tmax=2;dnum=100;

[Afd,Bfd]=c2d(Af,Bf,st);

ae=0.00;

[aed,bed]=c2d(-ae,1,st);

step1=round(tmax/st/dnum);

imax=step1*dnum;

r=0.3;

x=[0 0 0 0]';

y=Cd1*x;

es=0;

xc=zeros(11,1);

Page 34: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

34

t=0;

num=1;loop1=step1;

for i=0:imax

e=y-r;

es=aed*es+bed*e;

u=-f1*x-f2*es;

x=Afd*x+Bfd*u;

if loop1==step1

loop1=0;

ydat(num,1)=x(1);

ydat(num,2)=x(2);

ydat(num,3)=x(3);

ydat(num,4)=x(4);

udat(num)=u;

tdat(num)=t;

num=num+1;

clc

% t

end

y=Cd1*x;

loop1=loop1+1;

t=t+st;

end

data(:,iii)=ydat(:,1);

end

plot(tdat,data(:,1),'-',tdat,data(:,2),'--',tdat,data(:,3),':')

xlabel('Time [s]')

ylabel('Displacement of mass 1 [m]')

axis([0,2.0, 0, 0.4])

legend('pe=-0.05', 'pe=-0.1', 'pe=-1.0')

return

subplot(221)

plot(tdat,ydat(:,1))

xlabel('Time s')

ylabel('x1')

pause

Page 35: Mats Lab...Mat’s Lab 7 8)データをワークスペースに保存する. 9)これでもう一度,再計算して,ワークスペースのデータを確認する. ここをクリック

Mat’s Lab

35

subplot(223)

plot(tdat,ydat(:,2))

xlabel('Time s')

ylabel('x2')

pause

subplot(222)

plot(tdat,ydat(:,3))

xlabel('Time s')

ylabel('x1d')

pause

subplot(224)

plot(tdat,udat)

xlabel('Time s')

ylabel('u V')

-----------------

% Design of servo system

%ファイル名 poleint.m

param % two-degree-of-freedom system

Cd1=Cd(1,:);

[l,n]=size(Cd1);

[n,m]=size(B);

aa=[A zeros(n,l) ; Cd1 zeros(l,l)];

bb=[B ; zeros(l,m)];

co=ctrb(aa,bb);

rank(co)

pe=-0.05; % pe = -0.05 or -0.1 or -1.0

P =1.0e+02 *[-0.0050 + 1.0051i;

-0.0050 - 1.0051i;

-0.0677 + 0.1468i;

-0.0677 - 0.1468i;

pe]

F = place(aa,bb,P)

f1=F(1,1:4);

f2=F(1,5);

return