sto cercando avvicinarmi al digital signal processing senza nessuna esperienza e senza tante basi matematiche.
Sto provando a controllare un convertitore buck con un filtro digitale IIR in forma diretta tipo 1 a virgola fissa. So che in virgola mobile e' piu' semplice l'analisi ma poi sarebbe difficile l'implementazione.
Ho fatto uno scriptino in matlab per tirare fuori i coefficienti in z partendo da un compensatore in s del terzo ordine, poi ho disegnato un modello in simplis per simulare le ac e transitorio.
Per regolare regola ma vedo dei cicli limite che non mi sembrano trascurabili e vorrei capirci di piu'.
script matlab
- Codice: Seleziona tutto
%plant coefficients
s=tf('s');Ri=1;Rc=0.02;Ro=32;Co=2.2e-6;Lo=47e-6;Ts=1e-6;Vi=12;Vr=1;Vo=3.3;
%filter transfer function
Gfilter=(1+(Co*Rc)*s)/(1+(Ri/Ro)+(((Lo/Ro)+(Rc*Co)+(Ri*Co)+((Ri*Rc*Co)/Ro))*s)+(((Ro+Rc)/Ro)*Lo*Co*(s^2)));
%plant transfer function
Gmod=Vi/Vr;Gplant=Gmod*Gfilter;
%compensator coefficients
P0=2*pi*(0.1/Ts);P1=2*pi*500;P2=0.9*2*pi*(1/Ts);P3=0.9*2*pi*(1/Ts);Z1=1/sqrt(Lo*Co);Z2=1/sqrt(Lo*Co);
%compensator transfer function
Gcomp=((s+Z1)*(s+Z2))/((s+P1)*(s+P2)*(s+P3));
%loop gain cross-over
Kp=abs(1/(evalfr(Gcomp,1i*P0)*evalfr(Gplant,1i*P0)));Gloop=Kp*Gcomp*Gplant;
%plot margins
margin(Gloop);hold on;bode(Gplant,Gcomp*Kp);figure(2);pzmap(Gloop);figure(3);nyquist(Gloop);
%step response
Gsys=feedback(Gloop,1);figure(4);hold on;opt=stepDataOptions('InputOffset',0,'StepAmplitude',Vo);step(Gsys,opt);
%discrete plant transfer function
GplantD=c2d(Gplant,Ts,'zoh');figure(5);bode(GplantD);hold on;
%discrete compensator transfer function
GcompD=c2d(Kp*Gcomp,Ts,'tustin');figure(5);bode(GcompD);
%discrete loop transfer function
GloopD=(GcompD*GplantD);GsysD=feedback(GloopD,1);figure(5);margin(GloopD);figure(6);pzmap(GloopD);
%comparison
figure(7);bode(Gloop,GloopD);figure(4);step(GsysD,opt);GcompD
Modello simplis
compensatore
loop gain ac (in virgola mobile)
load step transient (con quantizzazione)
come vedete nell'ultima immagine oscilla a regime.
Manca il modulatore e il filtro ma non riesco ad inserire piu' di tre allegati, comunque si tratta di un semplice buck, l'uscita del DAC va in un comparatore che confronta con una rampa ed esce il PWM.
Lo scaling delle costanti e' di 2^q dove q e' 16, ma non cambia anche variandolo.
Il peso dell'LSB in volt dell'ADC e' maggiore di quello del DPWM, condizione che dovrebbe essere rispettata per evitare cicli limite.
C'e' anche un ADC di feedforward sul VIN che fissa 5bit di duty e questo effettivamente aiuta un po ma non e' sufficiente.
So che quella del rapporto tra le risoluzioni IN/OUT non e' l'unica condizione ma non conosco nel dettaglio le altre dato che sono un somaro.
Ho letto qualcosa sul troncamento e il round off ma chiedo aiuto qui nella speranza che qualche buon anima mi indirizzo meglio.
Se serve uno zoom o qualche altra info non esitate a chiedere.
Dove sbaglio?
Grazias

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)






