|
Algoritmii de reglare s-au ales mai intai dupa metodele clasice, care se aplica sistemelor conventionale continue, respectiv criteriul modulului si proiectarea directa dupa perturbatie, din care au rezultat algoritmii PID continue.
Acesti algoritmi de reglare vor fi discretizati alegand o perioada de discretizare mica in comparatie cu consatanta de timp a procesului
T=Tf /100 T=0.001 [s]
rezultand algoritmi de reglare PID discreti cuasicontinui.
Parametrii de acord optimi ai regulatoarelor sunt:
Parametrii care dau performantele sistemului de reglare sunt:
Pentru: R(s)=1/s, rezulta:
Pentru: R(s)=1/2·s, rezulta:
Pentru o reglare numerica a procesului se considera un algoritm incremental PI obtinut prin discretizarea algoritmului PI analogic al regulatorului, de forma:
unde:
Efectuand inlocuirile:
Schema de implementare a algoritmului numeric este de forma:
Figura 9.1 - schema de implementare
Consideram un sistem numeric de reglare. Functia de transfer discretizata este:
;
Acest algoritm asigura un raspuns asimptotic stabil al sistemului pe baza compensarii polilor procesului. Se considera sistemul caracterizat prin functia de transfer:
H0 (z-1) = p1 · z-1 + p2 · z-2 +..+ pm ·z-m ;
Raspunsul asimptotic stabil la o intrare treapta se obtine daca este satisfacuta conditia:
p1+ p2 +..+ pm=1;
regulatorul furnizeaza pentru aceeasi intrare
comanda:
u (z-1) = u0 + u1 · z-1 + u2 · z-2 +..+ um · z-m-1 ;
Notand:
Q(z-1) = = u0 + ( u1 -u0 ) · z-1+.+ ( um -um-1 ) · z-m =
= q0 + q1 · z-1 + q2 · z-2 +.+ qm · z-m;
se obtine:
;
deoarece:
si
Cu ajutorul acestor relatii se poate determina parametrii regulatorului cu relatiile:
qi = q0ai ;( i = 1.ma );
pj= q0 · bi ; ( j = 1.mb );
din conditia de mai sus, care echivaleaza cu prezenta componentei integrale, se obtine:
;
Algoritmul poarta denumirea de algoritm Dead-Beat.
Comanda initiala depinde de parametrii procesului. Comanda initiala u0=q0 este detreminata de coeficientii bj ai modelului procesorului, si in anumite cazuri pate rezulta cu valori mari.
In cazul optimizarii comenzii ( Uopt ) oscilatiile comenzii dispar in regim stationar.
Aplicand algoritmul de Dead-Beat pentru functia de transfer :
;
a1=-1,3579; b1=0,0037;
a2= 0,3642; b2=0,0026;
alegand factorul de amplificare Km=1:4000, obtinem:
Utilizand algoritmul Dead-Beat pentru functia de transfer discretizat se obtine functia de transfer al regulatorului (care asigura algoritmul):
Schema de testare a buclei de reglare dupa referinta care contine regulatorul R pe calea directa e prezentata in figura urmatoare:
Figura 9.2 - schema de testare a regulatorului R
Plecand de la schema din figura 3. si apeland la procedurile din mediul de programare MATLAB se determina urmatoarele performante ale SRA:
1. raspunsul sistemului Yk(t) pentru o intrare de tip treapta unitara rk=1/(1-z);
2. comanda
3. eroarea ek(t) pentru intrarea treapta unitara;
4. raspunsul sistemului YPk(t) pentru o perturbatie Pk de tip treapta unitara aplicata succesiv in punctul 1 si 2.
Proiectarea regulatorului RP de face pe baza metodei clasice de proiectare dupa perturbatia masurabila a sistemelor continue:
Regulatorul RP este necauzal (tip PD). Pentru imbunatatirea performantelor SRA de tip derivativ se va alege un regulator cauzal de tip PD cu filtrare, avand urmatoarea functie de transfer:
Discretizand algoritmul de mai sus prin metoda trapezelor, respectiv introducand in aceasta relatie aproximatia urmatoare:
Schema de testare a buclei de reglare directa dupa perturbatie este:
Figura 9.4 - schema de testare dupa perturbatie
Plecand de la figura se va determina urmatoarele performante ale sistemului:
1. raspunsul sistemului dupa perturbatia treapta unitara Ypk(t), respectiv rejectia perturbatiei;
2. raspunsul sistemului Ypk(t) dupa perturbatia rampa;
3. raspunsul sistemului Ypk(t) dupa perturbatia sinusoidala;
4. raspunsul sistemului la perturbatie aleatoare.
Pentru testare se va utiliza urmatoarea functie de transfer:
Programul ' pr_mcc1.m ' testeaza sistemul inchis cu si fara filtrare la diferitele semnale de referinta . Semnalele de intrare sunt de tip treapta rampa, sinusoidal.
program_mcc1.m
clear;
clc;
% timpul de testare
t=0:0.001:0.6;
% generarea unui semnal sinusoidal
s=sin(t*150);
% Functia de transfer al filtrului
ts=0.016;
nf=[1];
mf=[4*ts 1];
% functia de transfer a sistemului inchis (dupa referinta)
n0=[0.00064 0.074 1];
m0=[4.096*10^(-6) 0.002 0.064 1]*0.0033;
% functia de transfer a sistemului inchis cu filtrare
[n0f,m0f]=series(nf,mf,n0,m0);
% trasarea graficelor
figure(1);
step(n0,m0,t);
title('Raspuns la treapta a SRA (fara filtrare)');
pause;
figure(2);
step(n0f,m0f,t);
title('Raspuns la treapta a SRA (cu filtrare)');
pause;
figure(3);
lsim(n0,m0,t',t);
grid;
title('Raspuns la rampa a SRA (fara filtrare)');
pause;
figure(4);
lsim(n0f,m0f,t',t);
grid;
title('Raspuns la rampa a SRA (cu filtrare)');
pause;
figure(5);
lsim(n0,m0,s',t);
grid;
title('Raspuns la semnal sinusoidal a SRA (fara filtrare)');
pause;
figure(6);
lsim(n0f,m0f,s',t);
grid;
title('Raspuns la semnal sinusoidal a SRA (cu filtrare)');
pause;
close(1);
close(2);
close(3);
close(4);
close(5);
close(6);
Programul ' program_mcc2.m ' calculeaza functia de transfer a sistemului dupa perturbatie si testeaza sistemul la o perturbatie tip treapta:
program_mcc2.m
clear;
clc;
% parametrii MCC
r=0.916;
ke=0.137;
tm=0.52;
% functia de transfer MCC
nm=[r/ke];
mm=[tm 0];
% functia de transfer a sistemului deschis exterior
ts=0.016;
nd=[4*ts 1];
md=conv([8*ts*ts 0 0],[ts 1]);
% calcularea functiei de transfer a sistemului inchis
[n1,m1]=feedback(1,1,nd,md,-1);
[n0,m0]=series(nm,mm,n1,m1);
% trasarea graficului
step(n0,m0,0:0.001:0.4);
title('Raspunsul sistemului la o perturbatie treapta');
grid;
pause;
close;
Programul ' program_mcc3.m ' realizeaza trasarea variabilelelor de stare a MCC
program_mcc3.m
clear;
clc;
% matricile sistem
A=[01 0
0012.81
0 -1.31 -8.8 ];
B=[0 0 9.61]';
C=[0 1 0];
D=0;
%t=1:20;
% calcularea starilor
[y,x]=step(A,B,C,D);
% reprezentare grafica
t=(0:length(y)-1)/length(y);
subplot(3,1,1);
plot(t,x(:,1));
title('Reprezentarea grafica a variabilelor de stare');
ylabel('Pozitia axului');
grid;
subplot(3,1,2);
plot(t,x(:,2));
ylabel('Viteza unghiulara');
grid;
subplot(3,1,3);
plot(t,x(:,3));
axis([-0.01 1 0 1]);
ylabel('Curentul rotoric');
grid;
pause;
close;
Programul ' program_ms1.m' discretizeaza partea fixa a procesului respectiv regulatorul de pe calea directa si la o referinta tip treapta calculeaza valoarea iesirii, a erorii de reglare a comenzii, respectiv la perturbatii treapta iesirea sistemului.
program_ms1.m
clc;
clear;
% functia de transfer continua
tf=1;
ts=0.01;
nc=[1];
mc=conv([tf 1],[ts 1]);
% discretizarea functiei de transfer
h=tf/100;
[a,b,c,d]=tf2ss(nc,mc);
[fi,gamma,cd,dd]=c2dm(a,b,c,d,h,'zoh');
[nd,md]=ss2tf(fi,gamma,cd,dd);
% discretizarea regulatorului
n=[50 50];
m=[1 0];
[a,b,c,d]=tf2ss(n,m);
[aa,bb,cc,dd]=c2dm(a,b,c,d,0.021,'zoh');
[nr,mr]=ss2tf(aa,bb,cc,dd);
% TRASAREA GRAFICELOR
% in-r out-y
[n1,m1]=series(nd,md,nr,mr);
[n2,m2]=cloop(n1,m1,-1);
figure(1);
dstep(n2,m2,16);
title('Raspunsul sistemului la o referinta treapta');
pause;
% in-r out-eps
[n1,m1]=series(nd,md,nr,mr);
[n2,m2]=feedback(1,1,n1,m1,-1);
figure(2);
dstep(n2,m2,16);
title('Eroarea de reglare la o referinta treapta');
pause;
% in-r out-u
[n1,m1]=feedback(nr,mr,nd,md,-1);
figure(3);
dstep(n1,m1,16);
title('Comanda la o referinta treapta');
pause;
% in-p1 out-u
[n1,m1]=feedback(nd,md,nr,mr,-1);
figure(4);
dstep(n1,m1,25);
grid;
title('Raspunsul sistemului la o perturbatie treapta (1)');
pause;
% in-r out-eps
[n1,m1]=series(nd,md,nr,mr);
[n2,m2]=feedback(1,1,n1,m1,-1);
figure(5);
dstep(n2,m2,16);
title('Raspunsul sistemului la o perturbatie treapta (2)');
pause;
close(1);
close(2);
close(3);
close(4);
close(5);
Programul ' program_ms2' realizeaza calcularea functiei transfer discretizate a SRA de a puterii reactive a unui MS si testarea sistemului la perturbatii
program_ms2.m
clc;
clear;
% functia de transfer continua
tf=1;
ts=0.01;
nc=[1];
mc=conv([tf 1],[ts 1]);
% discretizarea functiei de transfer
h=tf/100;
[a,b,c,d]=tf2ss(nc,mc);
[fi,gamma,cd,dd]=c2dm(a,b,c,d,h,'zoh');
[nd,md]=ss2tf(fi,gamma,cd,dd);
% discretizarea regulatorului
n=[1.01 1];
m=[0.101 1];
[a,b,c,d]=tf2ss(n,m);
[aa,bb,cc,dd]=c2dm(a,b,c,d,0.021,'
[nr,mr]=ss2tf(aa,bb,cc,dd);
% construirea sistemului;
[n1,m1]=series(nr,mr,-1,1);
[n2,m2]=series(n1,m1,nd,md);
[n0,m0]=parallel(1,1,n2,m2);
% trasarea raspunsurilor
% raspunsul sistemului la treapta
figure(1);
dstep(n0,m0,100);
grid;
title('Raspunsul sistemului la perturbatie treapta');
pause;
% raspunsul sistemului la rampa
t=0:100;
t=t';
figure(2);
dlsim(n0,m0,t');
grid;
title('Raspunsul sistemului la perturbatie rampa');
pause;
% raspunsul sistemului la un semnal aleator
for i=1:100
r(i)=0.5+rand(0.5);
end;
figure(3);
dlsim(n0,m0,r');
grid;
title('Raspunsul sistemului la perturbatie aleatoare');
pause;
% raspunsul sistemului la un semnal sinusoidal
t=0:0.001:0.3;
s=sin(t*90);
figure(4);
dlsim(n0,m0,s');
grid;
title('Raspunsul sistemului la perturbatie sinusoidala');
pause;
close(1);
close(2);
close(3);
close(4);
Programul ' program_ms3.m ' realizeaza testarea regulatorului dupa perturbatie la o intrare sinusoidala
program_ms3.m
clear;
clc;
tf=1;
ts=0.01;
nc=[1];
mc=conv([tf 1],[ts 1]);
% discretizarea functiei de transfer
h=tf/100;
[a,b,c,d]=tf2ss(nc,mc);
[fi,gamma,cd,dd]=c2dm(a,b,c,d,h,'zoh');
[nd,md]=ss2tf(fi,gamma,cd,dd);
% discretizarea regulatorului
n=[1.01 1];
m=[0.101 1];
[a,b,c,d]=tf2ss(n,m);
[aa,bb,cc,dd]=c2dm(a,b,c,d,0.021,'
[nr,mr]=ss2tf(aa,bb,cc,dd);
% construirea sistemului;
[n1,m1]=series(nr,mr,-1,1);
[n2,m2]=series(n1,m1,nd,md);
[n0,m0]=parallel(1,1,n2,m2);
% testarea sistemului
t=0:0.6:150;
s=ones(1,length(t))*0.5;
a=0.5*cos(0.01*pi*t);
y=s+a.*sin(0.3*pi*t);
subplot(211);
plot(t,y);
grid;
title('Forma semnalului de intrare')
subplot(212);
dlsim(n0,m0,y');
grid;
title('Iesirea sistemului');
pause;
close;
Observatii:
- Intrarea oscileaza in jurul valorii 0.5. Aceasta valoare este readusa la 0 de regulator, deci iesirea oscileaza in jurul valorii 0.
- Amplitudinea oscilatiilor e redusa.
1) Prof. dr. ing. Horatiu Zarnescu Ingineria reglarii automate - Curs
2) Prof. dr. ing. Horatiu Zarnescu Elemente de reglare automata - Curs, 1998