Ciao,
sono un po' perplesso su un comportamento alquanto strano della simulazione di un semplice controllore. Per chi ha scilab ecco il breve codice:
T = 5; // durata gradino dt = 0.01; // tempo campionamento tau = 0.5; // costante di tempo del sistema
kp = 2; // guadagno P ki = 0.1; // guadagno I
t1 = -ones(1, T/dt); // gradino negativo t2 = zeros(1, T/dt); // e t = cat(2, t1, t2); // positivo
P = (1-exp(-dt/tau))/(%z-exp(-dt/tau)); P.dt = dt; // fdt del sistema C = kp + ki / (%z - 1); // controllore PI H = (P * C) / (1 + P * C); // fdt anello chiuso O = C / (1 + P * C); // uscita controllore E = 1/ (1 + P * C); // segnale errore
yP = flts(t, tf2ss(P)); yH = flts(t, tf2ss(H)); yO = flts(t, tf2ss(O)); yE = flts(t, tf2ss(E));
plot2d2("onn", ((0:size(t, 'c') - 1).*dt)', yP', style=[color("blue")]); plot2d2("onn", ((0:size(t, 'c') - 1).*dt)', yH', style=[color("green")]); plot2d2("onn", ((0:size(t, 'c') - 1).*dt)', yO', style=[color("black")]); plot2d2("onn", ((0:size(t, 'c') - 1).*dt)', yE', style=[color("red")]);
la curva blu è la risposta al gradino del sistema in anello aperto (senza controllore insomma). Quella verde con il controllore, quellla rossa il segnale di errore e infine quella nera l'uscita del controllore.
Tranne quest'ultima le altre hanno senso. Non capisco perché se il segnale errore (curva rossa) va a zero, come è giusto che sia, l'uscita del controllore (curva nera) sia diversa da zero.
Dove mi perdo?
Grazie! Marco / iw2nzm