Hab da wirklich gerade nochmal ein wenig mit herumgespielt und an den Reglerparametern gedreht. Hab auch mal einen Anti-Windup für den Integratoranteil wie bei mir eingebaut. Mir ist auch aufgefallen, warum du keinen D-Anteil brauchst: du hast deinen Regler auf Drehzahlebene aufgebaut, ich hingegen auf Positionsebene. Jedenfalls hab ich jetzt folgende Parameter verwendet:
Kp=50
Ki=3
Kd=1

Der Regler funktioniert jetzt schön zackig und ohne Überschwinger

Klicke auf die Grafik für eine größere Ansicht

Name:	malthy1_zps5a0c709a.png
Hits:	9
Größe:	5,3 KB
ID:	29867 Klicke auf die Grafik für eine größere Ansicht

Name:	malthy2_zps2d1b7109.png
Hits:	7
Größe:	6,4 KB
ID:	29868

Hier nochmal der ganze Code:
Code:
clear all;
close all;
clc;

if 0
    % sprünge
    soll = [zeros(1, 100) ...
            ones(1, 200)*20 ...
            zeros(1, 100) ...
            ones(1, 200)*-40 ...
            zeros(1, 100) ...
            ones(1, 200)*60 ...
            zeros(1, 100) ...
            ones(1, 200)*80 ...
            zeros(1, 100)];
else
    % rampen
    soll = [-80:2:80 ...
            -80:1:80 ...
            -80:0.5:80 ...
            -80:0.25:80];
end

% streckeneigenschaften
v = 0.38;
T1 = 13;

% PID parameter
Kp = 50;
Ki = 3;
Kd = 1;
Ta = 1; % entspr. 2.048 ms

% init
u=0;
y = 0;
eSum = 0;
eOld = 0;
yOld = 0;

for i = 1:length(soll)
    w = soll(i);
    
    %% PID
    e = w - y;
    if abs(u)<208       %Anti-Windup, Integrator abschalten wenn Ausgang in Begrenzung
        eSum = eSum + e;
    end
    P = Kp*e;
    I = Ki * Ta * eSum;
    D = Kd/Ta*(e - eOld);
    u = P+I+D;
    eOld = e;
    u(u>208) = 208; % max. stellwert
    u(u<-208) = -208;

    
    %% PT1 strecke
    y = yOld + 1/T1 * (v * u - yOld);
    yOld = y;
    
    %% doku
    y_(i) = y;
    u_(i) = u;
    w_(i) = w;
    e_(i) = e;
    P_(i) = P;
    I_(i) = I;
    D_(i) = D;

end

% darstellung
disp(['Summenfehler: ' num2str(eSum)])

subplot(2, 1, 1)
plot(soll, 'LineWidth', 2)
hold on
plot(y_, 'r', 'LineWidth', 2)
set(gca, 'XLim', [0 length(y_)])
xlabel('Zeit [Ticks]')
ylabel('Drehzahl')
legend('soll', 'ist')

subplot(2, 1, 2)
plot(P_, 'LineWidth', 2)
hold on
plot(I_, 'g', 'LineWidth', 2)
plot(u_, 'r', 'LineWidth', 2)
set(gca, 'XLim', [0 length(y_)])
xlabel('Zeit [Ticks]')
ylabel('Wert')
legend('P', 'I', 'Stellwert')