% ISCIE 2012年6月号
% 「離散時間制御」
% サンプル値制御系の安定性【例題１】のデモ

%% 初期化
clear
format compact

s = tf('s');

%% 制御対象
a = 8.5879;
b = 36.081;
G = b/(s*(s+a));
[A,B,C,D]=ssdata(G);

%% I-PD 制御器, Ky(s)とKr(s)
wn = 30;
a1 = 3;
a2 = 3;
ki = wn^3/b;
kp = a1*wn^2/b;
kd = (a2*wn-a)/b;
Ky = (kp + ki/s + kd*s);
Kr = ki/s;

%% I-PD 制御器の離散化（双一次変換）
h = 0.02; % サンプリング周期
Kdr = c2d(Kr,h,'tustin');
Kdy = c2d(Ky,h,'tustin');

[Akdr,Bkdr,Ckdr,Dkdr]=ssdata(Kdr);
[Akdy,Bkdy,Ckdy,Dkdy]=ssdata(Kdy);

%% シミュレーション
sim iscie_sim_stability; % Simulink シミュレーション

%% 時間応答のプロット
plot(yout.time, yout.signals.values, 'r--');
hold on
plot(yout_c.time, yout_c.signals.values, 'b');
plot(ref.time,ref.signals.values, 'k-.');
legend('Control by bilinear transform', 'Continuous-time control', 'Reference');
xlabel('Time t [s]');
ylabel('y(t)');
grid on;