mats lab...mat’s lab 7 8)データをワークスペースに保存する....
TRANSCRIPT
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)でもよい.
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.
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.
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とした.
Mat’s Lab
5
4)simulinkファイルのモデルプロパティの callbackに Mファイルを指定して,simulink
実行の際に自動起動させるように設定する.
5)実行して,scopeを表示させる.
パラメータを定義した m ファイル名
を拡張子を省いて入れる.
Mat’s Lab
6
6)刻みがおかしいので,コンフィグレーションパラメータの相対許容誤差を小さくする.
7)再計算して,scopeを表示させる.
Mat’s Lab
7
8)データをワークスペースに保存する.
9)これでもう一度,再計算して,ワークスペースのデータを確認する.
ここをクリック
ここをクリック
ワークスペースに保存する変数名を指定する.
時間付構造体を指定するのが便利
Mat’s Lab
8
10) 構造体データのアクセスの仕方
11) Mファイルで図を表示する.
データが保存されてい
るのが分かる
who コマンドの実行
Mat’s Lab
9
12)図を figと epsの両方の形式で保存する.
Fig:MATLAB形式,eps:extended postscript形式
ファイル名の指定:拡張子 fig
Mat’s Lab
10
ファイル名の指定:拡張子 eps
保存されていることが確認できる.
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;
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
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) +
-
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);
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
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
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
:
:
:
:
この系に対して,つぎのような手順で制御系の解析と設計を行ってみよう.ただし,コン
トローラはつぎのようなものを用いる.
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)
+
-
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
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 応答計算プログラム
--------------------------------------------------------------------------------
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
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
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];
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);
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);
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
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
---------------
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;
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;
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];
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)
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);
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);
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
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