%   Script DREHZR.M
%
%  Gleichstrommotor
%
% J. Lunze
% 11.11.2002
% für 2. Auflage: 30.12.2006
% für 3. Auflage: 16.1.2012
% für 4. Auflage: 5.1.2016
% für 5. Auflage: 25.10.2019
%
%
clear
close all
%                   Motorparameter
%
%   Modell des Gleichstrommotors
R=0.5;         % Ohm
J=13E-4;        % Nms^2/rad
kM=30E-3;       % Vs/rad
kT=30E-3;       % Nm/A
kR=3E-5;         % Nms/rad
L=5E-2;        % H
n=2;
A=[-R/L  -kM/L;
    kT/J   -kR/J];
B=[1/L; 0];
C=[0 1];
D=0;
Motor=ss(A, B, C, D);
%printsys(A, B, C, D);

%%  Bleibende Regelabweichung bei P-Regelung
%
figure(1)
ks=dcgain(Motor)
kP=[0:0.01:2];
E=[];
k=0;
for k=1:length(kP)
    E(k)=kP(k)*ks/(1+kP(k)*ks);
end
%
subplot(4,1,[1,2]);
plot(kP, E, 'b')
hold on
plot(0.2, 0.2*ks/(1+0.2*ks), 'bo');
plot(0.05, 0.05*ks/(1+0.05*ks), 'bo');
plot(1, 1*ks/(1+1*ks), 'bo');
plot([0 2],[1 1],'k:');
axis([0 2 0 1.05]);
yticks([0 0.5 1]);
xticks([0 0.5 1 1.5 2]);
latexxlabel('$$k_{\rm P}$$');
latexylabel('$$\omega$$ in $$\frac{\rm rad}{\rm s}$$');
rotateY;
latextitle('Statischer Wert der Drehzahl');
hold off

%%  Übergangsverhalten des P-Regelkreises
%
figure(2)
Cquer=C;
Dquer=D;
for kP=[0.05 0.2 1]
    Aquer=[-R/L  -kM/L-kP/L;
            kT/J   -kR/J];
    Bquer=[kP/L; 0];
    Regelkreis=ss(Aquer, Bquer, Cquer, Dquer);
    [Y, T]=step(Regelkreis);
    plot(T, Y, 'b');
    hold on
end
plot([0 2], [1 1],'k:');
axis([0 1 0 1.5]);
yticks([0 0.5 1 1.5]);
xticks([0 0.2 0.4 0.6 0.8 1]);
latextext(0.8, 1.1, '$$k_{\rm P}=1$$');
latextext(0.6, 0.75, '$$k_{\rm P}=0,\!2$$');
latextext(0.7, 0.5, '$$k_{\rm P}=0,\!05$$');
latexxlabel('$$t$$ in s');
latexylabel('$$\omega$$ in $$\frac{\rm rad}{\rm s}$$');
rotateY;
hold off;

%%   Drehzahlregelung mit I-Regler
%
figure(3)
Cquer=[0 1 0];
Dquer=D;
for kI=[0.01 0.03 0.05]
    Aquer=[-R/L  -kM/L      -kI/L;
            kT/J   -kR/J     0;
            0        1       0];
    Bquer=[0; 0; -1];
    Regelkreis=ss(Aquer, Bquer, Cquer, Dquer);
    [Y, T]=step(Regelkreis);
    plot(T, Y, 'b');
    hold on
end
plot([0 10], [1 1],'k:');
axis([0 10 0 1.5]);
yticks([0 0.5 1 1.5]);
xticks([0 2 4 6 8 10]);
latextitle('Drehzahlregelung mit I-Regler');
latextext(2, 1.3, '$$k_{\rm I}=0,\!05$$');
latextext(2.2, 0.85, '$$k_{\rm I}=0,\!03$$');
latextext(5, 0.7, '$$k_{\rm I}=0,\!01$$');
latexxlabel('$$t$$ in s');
latexylabel('$$\omega$$ in $$\frac{\rm rad}{\rm s}$$');
rotateY;
hold off;

%%   Verschlechterung der Regelgüte durch Messverzögerung
%
%
figure(4)
kI=0.03;
Tm=0.001;           %  Messzeitkonstante, zunächst vernachlässigbar klein
Aerw=[-R/L  -kM/L 0;
    kT/J   -kR/J 0;
     0       1/Tm   -1/Tm];
Berw=[1/L; 0; 0];
Cerw=[0 0 1];
Derw=0;
Aquererw=[Aerw -kI*Berw;
          Cerw   0   ];  % am Reglereingang wirkt die verzögerte Drehzahl
Bquererw=[0; 0; 0; -1];
Cquererw=[0 1 0 0];    % im Bild wird die tatsächliche Drehzahl dargestellt
Dquererw=0;
Regelkreiserw=ss(Aquererw, Bquererw, Cquererw, Dquererw);
[Yerw, Terw]=step(Regelkreiserw);
%
subplot(4,1,[1,2]);
plot(Terw, Yerw, 'b--');
hold on
for Tm=[0.3, 0.6];           %  Messzeitkonstante güteverschlechternd
    Aerw=[-R/L  -kM/L 0;
        kT/J   -kR/J 0;
         0       1/Tm   -1/Tm];
    Aquererw=[Aerw -kI*Berw;
              Cerw   0   ];
    Regelkreiserw=ss(Aquererw, Bquererw, Cquererw, Dquererw);
    [Yerw, Terw]=step(Regelkreiserw);
    plot(Terw, Yerw, 'b');
end
plot([0 max(Terw)],[1 1],'k:');
latextitle('Drehzahlregelung mit Messverz\"ogerung');
xleer;
latexylabel('$$\omega$$ in $$\frac{\rm rad}{\rm s}$$');
rotateY;
axis([0 10 0 1.5]);
yticks([0 0.5 1 1.5]);
hold off;
%
%   Vergleich von tatsächlicher und gemessener Drehzahl
%
subplot(4,1,[3,4]);
Tm=0.3;
Aerw=[-R/L  -kM/L 0;
      kT/J   -kR/J 0;
       0       1/Tm   -1/Tm];
Aquererw=[Aerw -kI*Berw;
           Cerw   0   ];
Cquererw1=[0 1 0 0;     % tatsächliche Drehzahl
           0 0 1 0];    % Messwert der Drehzahl
Dquererw1=[0; 0];
Regelkreiserw1=ss(Aquererw, Bquererw, Cquererw1, Dquererw1);
Yerw1=step(Regelkreiserw1, Terw);
plot(Terw, Yerw1(:,1), 'b', Terw, Yerw1(:,2), 'b--');
hold on;
plot([0 max(Terw)],[1 1],'k:');
latexxlabel('$$t$$ in s');
latexylabel('$$\omega$$ in $$\frac{\rm rad}{\rm s}$$');
rotateY;
axis([0 10 0 1.5]);
yticks([0 0.5 1 1.5]);
xticks([0 2 4 6 8 10]);
hold off;



%%     Bilder in .EPS-Dateien
%
Epsbildc15('drehzr');
