Sia dato un doppio integratore
Si vuole sintetizzare un controllore digitale D(z) tale che la
frequenza naturale e lo smorzamento
siano
rispettivamente pari a 0.3rad/sec e 0.7.
Come primo passo si progetta per tentativi nel dominio delle frequenze un controllore tempo continuo. Per verificare che la rete anticipatrice
è tale che il sistema in anello chiuso soddisfi le specifiche richieste, si tracci il luogo delle radici di
e si controlli in quale punto cadono i poli del sistema in anello chiuso quando la costante di proporzionalità è K=0.81. Il codice matlab che genera il lugo delle radici di questo sistema è:
Matlab code - drag and drop:
Il risultato di questo matlab script è riportato in Fig. 1.8.% M-file: rlocus1.m clg numG=1; denG=[1 0 0]; numD=[1 .2]; denD=[1 2]; num=conv(numG,numD); den=conv(denG,denD); poles=roots(den); zeros=roots(num); K1=0:.05:1.22; K2=[1.25 1.28]; % K for break-in and break-away points K3=1.5:5:100; K=[K1 K2 K3]; Ko=.81; r=rlocus(num,den,K); ro=rlocus(num,den,Ko); axis('square') axis([-2.5 .5 -1.5 1.5]) plot(r,'-'),grid hold on plot(ro,'*') plot(-.2,0,'o') plot(-2,0,'x') plot(0,.01,'x') plot(0,-.01,'x') title('Piano s --- locus vs. K') xlabel('Re(s)') ylabel('Im(s)') hold off axis('normal')
Figure 1.8: Luogo delle radici per D(s)G(s).
Al fine di discretizzare il controllore D(s) dobbiamo per prima cosa scegliere la frequenza di campionamento. Il sistema in anello chiuso ha una pulsazione naturale che è pari 0.3rad/sec e quindi la sua banda passante sarà di circa 0.3rad/sec. Cautelativamente scegliamo una pulsazione di campionamento venti volte più alta
Con un tempo di campionamento di circa 1sec la tecnica di discretizzazione matched Z transform fornisce il seguente controllore digitale
In Fig. 1.9 sono rappresentati entrambe le risposte al gradino dell'anello chiuso nella versione tempo continuo e tempo discreto. Il codice Matlab che lo genera è:
Matlab code - drag and drop:
% M-file: ver1.m numGs=1; denGs=[1 0 0]; % s^2 numDs=.81*[1 .2]; denDs=[1 2]; numC=conv(numGs,numDs); denC=conv(denGs,denDs); [numCL,denCL]=feedback(numC,denC,1,1); tf=30; t=0:.2:tf; y=step(numCL,denCL,t); axis([0 30 0 1.5]) plot(t,y),grid hold on T=1; [numGz,denGz]=c2dm(numGs,denGs,T,'zoh'); numDz2=.389*[1 -.82]; denDz2=[1 -.135]; numz2=conv(numGz,numDz2); denz2=conv(denGz,denDz2); [numCLz2,denCLz2]=feedback(numz2,denz2,1,1); N=tf/T+1; td=0:1:tf; yd2=dstep(numCLz2,denCLz2,N); plot(td,yd2,'-',td,yd2,'*') title('Risposte al gradino') xlabel('Tempo (sec)') ylabel('Uscita del sistema') hold off
Figure 1.9: Risposte al gradino dell'anello chiuso nella versione tempo
continuo e tempo discreto.