next up previous contents
Next: filtra Up: Listati Previous: Listati   Contents

provac

function [ z ] = provac( file,data,vSoglia,er2Max )

%PROVAC Esecuzione della prova C

%  Vengono eseguiti automaticamente tutti i calcoli

%  relativi alla prova C di laboratorio.

 

%Caricamento dati

prn=load(file);

t=prn(:,1);

vce=prn(:,2);

vr=prn(:,4);

dati=load(data);

vcemax=dati(1);

R1=dati(2);

vbeSat=dati(3);

ib=dati(4);

 

%Correzione dell'errore di offset

eo=max(vce)-vcemax;

vce=vce-eo;

 

%Distinzione valori crescenti e decrescenti

ic=vr/R1;

DicProva=diff(ic);

[Fic,Dic]=filtra(ic);

[pos,neg]=posneg(Dic);

vceNeg=vce(neg);

icNeg=ic(neg);

 

%Interpolazione lineare

i=find(vceNeg>1);

x=vceNeg(i);

y=icNeg(i);

[m,n]=minquad(x,y);

e=max(abs(y-m*x-n));

er=e/max(icNeg)*100;

icLin=m*vceNeg+n;

 

%Selezione dei dati

%Estrazione tratto esponenziale

i=find(vceNeg>vSoglia);

vceSoglia=vceNeg(i);

icSoglia=icNeg(i);

x1=vbeSat-vceSoglia;

y1=-icSoglia+icLin(i);

 

%Estrazione tratto Ic>0

[x1,i]=sort(x1);

y1=y1(i);

i=find(y1<0);

inizio=max(i)+1;

fine=length(y1);

x1=x1(inizio:fine);

y1=y1(inizio:fine);

 

%Riduzione effetto quantizzazione

%Inizializzazione

fine=length(y1);

er2=er2Max+1;

i=1;

%Ciclo per riduzione errore relativo

while er2>er2Max

x2=x1(i:fine);

y2=y1(i:fine);

logy=log(y2);

[q,p]=minquad(x2,logy);

p=exp(p);

yLin=p*exp(q*x2);

e2=max(abs(logy-log(yLin)));

er2=e2/max(icNeg)*100;

if i==10

error('Aumentare er2Max');

end

i=i+1;

end

 

%Verifica modello

vceMod=linspace(vSoglia,max(vce),1000);

icMod=m*vceMod+n-p*exp(q*(vbeSat-vceMod));

 

%Parametri

iceo=p;

betaF=(n-p)/ib;

va=(n-p)/m;

etavt=1/q;

 

plot(ic);

xlabel('campioni');

ylabel('Ic [mA]');

title('Corrente di collettore');

pause;

 

plot(DicProva);

xlabel('campioni');

title('Andamento approssimato della derivata della corrente di collettore');

pause;

 

plot(Fic);

xlabel('campioni');

ylabel('Ic [mA]');

title('Corrente di collettore filtrata passa basso');

pause;

 

plot(Dic);

xlabel('campioni');

title('Andamento approssimato della derivata della corrente di collettore filtrata');

pause;

 

plot(t,ic), hold on, plot(t(neg),ic(neg),'ro'), hold off;

xlabel('t [s]');

ylabel('Ic [mA]');

title('dIc/dt<0');

pause;

 

plot(vceNeg,icNeg,'.');

xlabel('Vce [V]');

ylabel('Ic [mA]');

title('Caratteristica sperimentale');

pause;

 

plot(vceNeg,icNeg,'+',vceNeg,icLin,'r-');

xlabel('Vce [V]');

ylabel('Ic [mA]');

title('Verifica dell''interpolazione lineare');

pause;

 

plot(vceNeg,icNeg,'+',vceSoglia,icSoglia,'ro');

xlabel('Vce [V]');

ylabel('Ic [mA]');

title('Verifica del valore di soglia');

pause;

 

plot(vceNeg,icNeg,'+',vceMod,icMod,'r-');

xlabel('Vce [V]');

ylabel('Ic [mA]');

title('Verifica del modello e visualizzazione parametri');

 

ax=axis;

xlabel('Vce [V]');

ylabel('Ic [mA]');

 

riga1=[' ICEO=' num2str(iceo) ' mA'];

riga2=['BETAF=' num2str(betaF) ' '];

riga3=['VA=' num2str(va) ' V'];

riga4=['ETA*VT=' num2str(etavt) ' V'];

riga5=['Er=' num2str(er) ' V'];

riga6=['Er2=' num2str(er2) ' V'];

 

text(ax(2)-ax(2)*1/10,ax(4)-ax(4)*1/7,riga1,'HorizontalAlignment','right');

text(ax(2)-ax(2)*1/10,ax(4)-ax(4)*2/7,riga2,'HorizontalAlignment','right');

text(ax(2)-ax(2)*1/10,ax(4)-ax(4)*3/7,riga3,'HorizontalAlignment','right');

text(ax(2)-ax(2)*1/10,ax(4)-ax(4)*4/7,riga4,'HorizontalAlignment','right');

text(ax(2)-ax(2)*1/10,ax(4)-ax(4)*5/7,riga5,'HorizontalAlignment','right');

text(ax(2)-ax(2)*1/10,ax(4)-ax(4)*6/7,riga6,'HorizontalAlignment','right');

 

stringa=['Numero di campioni scartati nella seconda interpolazione:  ' num2str(i-1)];

disp(stringa);

pause;

 

bjt(iceo,2,etavt,betaF,va,vce,vbeSat,ib);

 

pause;

close;


next up previous contents
Next: filtra Up: Listati Previous: Listati   Contents
2001-10-22