% Tabula Rasa
clear all;close all;clc;


Regler = input('P oder PI? ' ,'s');
Typ = input('Scheibe oder Luefter? ' ,'s');
Step_size = 0.01;
TF      = 5;                       % s Laenge der Simulation


if strcmpi(Typ,'Scheibe')           % Parameter fuer "Scheibe" definieren
    Theta       = 210.2*10^(-6);    % kgm^2 Traegheitsmoment
    ML          = 0e-3;             % Nm    Lastmoment
    
    
    % Eigene Werte an passender Stelle einfuegen (Scheibe):
    if strcmpi(Regler,'P')          % Parameter P-Regler
        KP      = 0;
        TI      = Inf;
    elseif strcmpi(Regler,'PI')     % Parameter PI-Regler
        KP      = 0;
        TI      = Inf;
    else
        error('''%s'' is no valid controller.', Regler);
    end
elseif strcmpi(Typ,'Luefter')       % Parameter fuer "Luefter" definieren
    Theta       = 407.6*10^(-6);    % kgm^2 Traegheitsmoment
    ML          = 6e-3;             % Nm    Lastmoment
    
    
    % Eigene Werte an passender Stelle einfuegen (Luefter):
    if strcmpi(Regler,'P')          % Parameter P-Regler
        KP      = 0;
        TI      = Inf;
    elseif strcmpi(Regler,'PI')     % Parameter PI-Regler
        KP      = 0;
        TI      = Inf;
    else
        error('''%s'' is no valid controller.', Regler);
    end
    
else
    error('''%s'' is no valid plant.', Typ);
end

% ===================================================
% Sprungskalierung
UFF     = 1.0;      % V             Sprung des FeedForward
USoll   = 1.0;      % V             Fuehrungssprung des Sollwertes

% ============================================

% Spannungsverstaerker
KV      = 5.0;      % -             Verstaerkungsfaktor

% Antriebsmotor
RA      = 8.5;      % V/A           Ankerwiderstand
LA      = 1.3e-3;   % Vs/A          Ankerinduktivitaet
KG      = 52.5e-3;  % V/(rad/s)     Generatorkonstante
KM      = 51.2e-3;  % Nm/A          Motorkonstante

%Tachogenerator
KT      = 19.1e-3;  % V/(rad/s)     Tachogeneratorkonstante

% Analogfilter
omega_F = 20;       % rad/s         Eck-Frequenz
DF      = 1.414/2;  % -             Daempfungsgrad

% Zustandsraumdarstellung:
% x1 = IA, x2 = Omega , x3, x4 = UOmega, x5
% ============================================

A = [-RA/LA    -KG/LA      0               -KV/LA*KP  KV/LA;
    KM/Theta  0           0               0          0    ;
    0         KT*omega_F  -2*DF*omega_F   -omega_F   0    ;
    0         0           omega_F         0          0    ;
    0         0           0               -1/TI      0   ];

B = [KV/LA*UFF 0           KV/LA*KP*USoll;
    0         -ML/Theta   0             ;
    0         0           0             ;
    0         0           0             ;
    0         0           1/TI*USoll   ];

C = [0   0 0 1   0  ;
    0   0 0 -KP KP];

D = [0   0 0        ;
    UFF 0 KP*USoll];

% Erzeugen des Zustandsraummodells
SYS = ss(A,B,C,D);

% Sprungantworten
t = 0 : Step_size : TF;
y = step(SYS,t);  % y ist eine Matrix!



% =========================================================================
% Plots
figure(1);
tiledlayout(2,2)

% Plot 1
nexttile;
plot(t,y(:,1,3),'b', 'DisplayName', 'Systemantwort')
title('Systemantwort U_{Soll}-Sprung');
grid on;box on
hold on;
%Hilfsline für Anregezeit
plot(t,0.90*ones(size(t))*y(end,1,3),'m', 'DisplayName', '90% des Endwertes');
%Hilfslinien für Ausregelzeit
plot([t, nan, t],[1.05*ones(size(t))*y(end,1,3), nan, 0.95*ones(size(t))*y(end,1,3)],'c--', 'DisplayName', 'Endwert +/- 5%');
xlabel('Zeit [s]');
ylabel('\Delta U_{\omega} [V]');
legend

% Plot 2
nexttile;
title('Systemantwort U_{FF}-Sprung')
grid on;box on
hold on;
plot(t,y(:,1,1)+3.82,'b', 'DisplayName', 'Systemantwort')
%Hilfslinien für Ausregelzeit
plot([t, nan, t],[1.05*ones(size(t))*(y(end,1,1)+3.82), nan, 0.95*ones(size(t))*(y(end,1,1)+3.82)],'c--', 'DisplayName', 'Endwert +/- 5%');
xlabel('Zeit [s]');
ylabel('\Delta U_{\omega} [V]');
legend

% Plot 3
nexttile;
title('Stellgroesse fuer U_{Soll}-Sprung');
grid on;box on
hold on;
plot(t,y(:,2,3)+2.2,'b')
xlabel('Zeit [s]');
ylabel('U_R [V]');

% Plot 4
nexttile;
title('Stellgroesse fuer U_{FF}-Sprung');
grid on;box on
hold on;
plot(t,y(:,2,1)+2.2,'b')
xlabel('Zeit [s]'); ylabel(' U_R [V]');