127 lines
2.7 KiB
Matlab
127 lines
2.7 KiB
Matlab
%% Satellite - Scenario 2
|
||
%
|
||
% Assignment 1 in Fuzzy systems
|
||
%
|
||
% author:
|
||
% Christos Choutouridis ΑΕΜ 8997
|
||
% cchoutou@ece.auth.gr
|
||
%
|
||
|
||
%
|
||
clear; clc; close all;
|
||
|
||
s = tf('s');
|
||
|
||
% Givens
|
||
% -------------------------------------------------------
|
||
Gp = 10/((s+1)*(s+9)); % given plant
|
||
spec.Mp_max = 0.07; % 7% overshoot
|
||
spec.Tr_max = 0.6; % 0.6sec rise time
|
||
spec.SteadyStateValue = 1.0; % step of 1
|
||
|
||
Ts = 0.01;
|
||
|
||
% Configuration
|
||
Ke = 1;
|
||
Kde=0.29; % Calculated with scenario1_tune.m
|
||
Kdu=0.33;
|
||
fis = mkFIS();
|
||
|
||
Gz = c2d(Gp, Ts, 'zoh');
|
||
Gd = ss(Gz);
|
||
Ad=Gd.A; Bd=Gd.B; Cd=Gd.C; Dd=Gd.D;
|
||
|
||
|
||
% Control inputs
|
||
tEnd = 16;
|
||
t = 0:Ts:tEnd;
|
||
|
||
% 2a
|
||
r_step = zeros(size(t));
|
||
r_step(t < 4) = 60;
|
||
r_step(t >= 4 & t < 8) = 20;
|
||
r_step(t >= 8) = 40;
|
||
|
||
x = zeros(size(Ad,1),1);
|
||
y = 0;
|
||
% logs
|
||
Y = zeros(size(t)); U = zeros(size(t)); E = zeros(size(t));
|
||
|
||
clear satFZ_PI; % Init satFZ_PI
|
||
for k = 1:numel(t)
|
||
% calculate error
|
||
e = r_step(k)/60 - y;
|
||
|
||
%evaluate controller
|
||
u = satFZ_PI(fis, e, Ke, Kde, Kdu, Ts);
|
||
|
||
% plant update (ZOH)
|
||
x = Ad*x + Bd*u;
|
||
y = Cd*x + Dd*u;
|
||
|
||
% keep logs
|
||
Y(k) = y; U(k) = u; E(k) = e;
|
||
end
|
||
|
||
f1 = figure( ...
|
||
'Color','w', ...
|
||
'Name',sprintf('MultiStep responce'), ...
|
||
'Position',[200 200 1200 800] ...
|
||
);
|
||
plot(t, r_step, 'k--', 'LineWidth',1.2); hold on;
|
||
plot(t, Y*60, 'b', 'LineWidth',1.2);
|
||
grid on; xlabel('Time (s)'); ylabel('Amplitude');
|
||
title('Scenario 2A: multi-step (60->20->40)');
|
||
legend('r','y','Location','best');
|
||
|
||
% save figure
|
||
exportgraphics(f1, sprintf('MultiStep Responce_FZ.png'), 'Resolution', 300);
|
||
% exportgraphics(f1, sprintf('Step Responce_FZ.pdf'));
|
||
|
||
|
||
% 2b
|
||
r_trap = zeros(size(t));
|
||
ix = (t <= 5);
|
||
r_trap(ix) = 60/5 * t(ix);
|
||
ix = (t > 5 & t <= 8);
|
||
r_trap(ix) = 60;
|
||
ix = (t > 8 & t <= 16);
|
||
r_trap(ix) = 60 * (1 - (t(ix) - 8)/(16 - 8));
|
||
|
||
x = zeros(size(Ad,1),1);
|
||
y = 0;
|
||
% logs
|
||
Y = zeros(size(t)); U = zeros(size(t)); E = zeros(size(t));
|
||
|
||
clear satFZ_PI; % Init satFZ_PI
|
||
for k = 1:numel(t)
|
||
% calculate error
|
||
e = r_trap(k)/60 - y;
|
||
|
||
%evaluate controller
|
||
u = satFZ_PI(fis, e, Ke, Kde, Kdu, Ts);
|
||
|
||
% plant update (ZOH)
|
||
x = Ad*x + Bd*u;
|
||
y = Cd*x + Dd*u;
|
||
|
||
% keep logs
|
||
Y(k) = y; U(k) = u; E(k) = e;
|
||
end
|
||
info = stepinfo(Y, t, 1);
|
||
|
||
|
||
f2 = figure( ...
|
||
'Color','w', ...
|
||
'Name',sprintf('Trapezoid responce'), ...
|
||
'Position',[200 200 1200 800] ...
|
||
);
|
||
plot(t, r_trap, 'k--', 'LineWidth',1.2); hold on;
|
||
plot(t, Y*60, 'b', 'LineWidth',1.2);
|
||
grid on; xlabel('Time (s)'); ylabel('Amplitude');
|
||
title('Scenario 2B: trapezoid (0->60, hold, 60->0)');
|
||
legend('r','y','Location','best');
|
||
|
||
% save figure
|
||
exportgraphics(f2, sprintf('Trapezoid Responce_FZ.png'), 'Resolution', 300);
|
||
% exportgraphics(f2, sprintf('Step Responce_FZ.pdf')); |