% ISCIE 56-4 2012
% 初学者のための図解でわかる制御工学I

% PID制御（MATLABファイル）

% ---------------------------------------
% | デモ     | Simulinkモデル | 結果の表示 |
% ---------------------------------------
% | P制御    | PIDmodel.mdl  | figure(1) |
% | P-D制御  |  PDmodel.mdl  | figure(2) |
% | I-PD制御 | IPDmodel.mdl  | figure(3) |
% ---------------------------------------


clear
format compact

%% 台車のパラメータと目標値 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%モデル G = b/(s(s+a))
a = 8.5879;
b = 36.081;
%目標値
ref = 1.5;


%% P制御（3.1節）%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%----------------------------------
%2次の規範モデル
omegaM = 10;  
zetaM  = 0.7; 
% Pゲインの設定
kP = omegaM^2/b;
kD = 0;
kI = 0;
% simulinkシミュレーション
sim('PIDmodel')
% 結果の表示（figure(1)）
figure(1);subplot(2,1,1);
plot(t,y,'linewidth',2); hold on 
plot(t,r,'linewidth',1);
grid on

%----------------------------------
%２次の規範モデル
omegaM = 20;
zetaM  = 0.7;
% Pゲインの設定
kP = omegaM^2/b;
kD = 0;
kI = 0;
% simulinkシミュレーション
sim('PIDmodel')
% 結果の表示（figure(1)）
figure(1);subplot(2,1,1);
plot(t,y,'--','linewidth',2);

%----------------------------------
% グラフの整形
figure(1);
xlim([0 1.0])
ylim([0 2.5])
set(gca,'xtick',0:0.2:1.2)
set(gca,'ytick',0:0.5:3)
set(gca,'fontname','arial','fontsize',16)
xlabel('time  t [s]','fontname','arial','fontsize',18)
ylabel('y(t)','fontname','arial','fontsize',18)


%% P-D制御（3.2節）%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%----------------------------------
%２次の規範モデル
omegaM = 10;
zetaM  = 1/sqrt(2);
% P,Dゲインの設定
kI = 0;
kP = omegaM^2/b;
kD = (2*zetaM*omegaM-a)/b;
% simulinkシミュレーション
sim('PDmodel')
% 結果の表示（figure(2)）
figure(2);subplot(2,1,1); hold on 
plot(t,y,'linewidth',2); 
plot(t,r,'linewidth',1);
grid on

%----------------------------------
%２次の規範モデル
omegaM = 20;
zetaM  = 1/sqrt(2);
% P,Dゲインの設定
kI = 0;
kP = omegaM^2/b;
kD = (2*zetaM*omegaM-a)/b;
% simulinkシミュレーション
sim('PDmodel')
% 結果の表示（figure(2)）
figure(2);subplot(2,1,1);
plot(t,y,'--','linewidth',2); 

%----------------------------------
% グラフの整形
figure(2);
xlim([0 1.0])
ylim([0 2.5])
set(gca,'xtick',0:0.2:1.2)
set(gca,'ytick',0:0.5:3)
set(gca,'fontname','arial','fontsize',16)
xlabel('time  t [s]','fontname','arial','fontsize',18)
ylabel('y(t)','fontname','arial','fontsize',18)
box on;


%% I-PD制御(3.3節) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%3次の規範モデル
omegaM = 20;

%----二項係数標準形------------------
alpha1 = 3;
alpha2 = 3;
% P,I,Dゲインの設定
kI = omegaM^3/b;
kP = alpha1*omegaM^2/b;
kD = (alpha2*omegaM-a)/b;
% simulinkシミュレーション
sim('IPDmodel')
% 結果の表示（figure(3)）
figure(3);subplot(2,1,1); hold on 
plot(t,y,'linewidth',2); 
plot(t,r,'linewidth',1);
grid on

%----バターワース標準形---------------
alpha1 = 2;
alpha2 = 2;
% P,I,Dゲインの設定
kI = omegaM^3/b;
kP = alpha1*omegaM^2/b;
kD = (alpha2*omegaM-a)/b;
% simulinkシミュレーション
sim('IPDmodel')
% 結果の表示（figure(3)）
figure(3);subplot(2,1,1);
plot(t,y,'--','linewidth',2); 

%----------------------------------
% グラフの整形
figure(3);
xlim([0 1.0])
ylim([0 2.5])
set(gca,'xtick',0:0.2:1.2)
set(gca,'ytick',0:0.5:3)
set(gca,'fontname','arial','fontsize',16)
xlabel('time  t [s]','fontname','arial','fontsize',18)
ylabel('y(t)','fontname','arial','fontsize',18)
box on;
