Breve Programma

di il
4 risposte

Breve Programma

Sapreste darmi un'indicazione per questo mio script matlab..
ottengo sempre 0 come risultato ma non riesco a coglierne i motivi nè a
trevare soluzioni

Vgback=-40
L=0.000001
W=0.0000021
Ctop=0.000000552
Cback=0.000000012
Rs=800
u0=700
Vc=0.45
V0gtop=1.45
Vgtop=1:0.5:4
V0gback=2.7
V0=V0gtop+(Cback/Ctop)*(V0gback-Vgback)
Rc=L/(W*u0*Ctop*Vc)
gamma=Rs/Rc
Vg0=Vgtop-V0
Vsd=-24:8:24
m=length(Vsd)
n=length(Vgtop)
for i=1:n
for j=1:m
if Vgtop(i) < V0
Id(i,j)=0
elseif Vsd(j) <= (Vgtop(i) - V0)
I0(i,j)=(Vgtop(i)-(Vsd(j)/2)-V0)*(2*W/L)*u0*Vc*Ctop
Id(i,j)=[Vsd(j)-Vc+I0(i,j).*Rs+sqrt((Vsd(j)-Vc+I0(i,j).*Rs).^2-Vsd(j)*I0(i,j).*4*Rs)].*[1/(4*Rs)]
elseif Vsd(j) >= (Vgtop(i) - V0)
Id(i,j)=[-Vc+(Vgtop(i)-V0).*(1+gamma)+sqrt(Vc^2-(Vgtop(i)-V0).*2*Vc*(1+gamma))].*[gamma/(Rs*(1+gamma)^2)]
end
end
end
figure(1)
plot(Vsd,Id(1,:),'r-',Vsd,Id(2,:), 'r-',Vsd,Id(3,:),'r-')
xlabel('Vsd (V)')
ylabel('Id (A)')
title('Caratteristica I-V di un GFET in zona linare')
figure(2)
plot(Vsd,Id(1,:),'g-',Vsd,Id(2,:), 'g-',Vsd,Id(3,:),'g-')
xlabel('Vsd (V)')
ylabel('Idsat (A)')
title('Caratteristica I-V di un GFET in saturazione')

4 Risposte

  • Re: Breve Programma


    Ciao, ho letto il tuo post e vorrei provare ad aiutarti.
    Se ho capito bene vorresti plottare i risultati dell'analisi statica di un FET.
    In tal caso, avrei bisogno di qualche delucidazione sulle costanti che hai utilizzato. Potresti aggiungere un commento alle costanti in modo che possa comprendere meglio cosa rappresentino?
    Ad esempio:
    L - Lunghezza del canale
    W - Altezza della regione del canale
    Dato che non ricordo tutte le relazioni necessarie, saresti così gentile da aggiungere anche quelle.
    Da una prima analisi dei risultati (supponendo corretto il tuo codice) mi verrebbe da dire che la Vgs ha raggiunto la tensione di pinch-off ed osservando i grafici direi che i parametri non vanno bene (nel senso che gli intervalli scelti sono poco significtivi).
    Devo dire, però, che qualche dubbio sulla trasposizione delle relazioni mi è venuta perchè è strana la presenza di valori complessi nella Id (sarebbero dovuti essere al più reali ma non complessi data la natura delle equazioni).
    Buon pomeriggio.
  • Re: Breve Programma

    Ciao grazie mille per le tempestiva risposta.
    Non posso darti purtroppo con precisione tutte le altre indicazioni. I discorsi teorici sono ancora applicati in fase sperimentale. Ma L lunghezza canale. W Larghezza del dispositivo. Vbackgate =-40V.
    Ctop e Cback sono le capacità considerate dal modello in esame. Altri parametri sono misurati sempre in via sperimentale come mobilità tensioni di soglia nel punto di Dirac ecc.
    Ma il problema restano i valori complessi che non dovrei avere e le dimensioni delle matrici che non si ritrovano.

    V0=V0gtop+(Cback/Ctop)*(V0gback-Vgback) tensione di soglia
    dove V0gtop e V0gback corrispondono alla tensioni di top e back gate nel punto di Dirac, e corrispondono rispettivamente a circa 1.45 V e 2.7 V, mentre
    Id=[Vsd-Vc+I0*Rs+sqrt((Vsd-Vc+I0*Rs)^2-Vsd*I0*4*Rs)]*[1/(4*Rs)]
    in corrente in zona lineare
    La corrente di soglia è I0=(Vgtop-(Vsd/2)-V0)*(2*W/L)*u0*Vc*Ctop
    mentre Vg0 = Vgtop - V0 tensione di gate nel punto di Dirac.
    Inoltre in regime di saturazione la corrente è

    Idsat=[(Vgtop-V0)*(1+gamma)-Vc+sqrt(-(Vgtop-V0)*2*Vc*(1+gamma)+Vc^2)]*[gamma/(Rs*(1+gamma)^2)]

    non posso essere più preciso, mi spiace. poi comunque altri parametri come la transconduttanza ecc. non mi interessano per le simulazioni..
    Ad ogni modo ti ringrazio se riesci a determinare dov'è il problema.
    e comunque grazie per la disponibilità.
  • Re: Breve Programma


    Ciao,
    ho trovato alcune errori sintattici (mancano 3-4 "end") ma il problema non è solo questo.
    Ora mi sto concentrando sul codice. Supponendo la correttezza delle formule teoriche mi concentro sul resto.
    Una cosa però posso anticipartela, l'uso delle parentesi è errato. In Matlab le parentesi non possono essere utilizzate come in algebra. Le parentesi [] in Matlab indicano un intervallo e quindi se la tua relazione contiene una quadra la devi sostituire con due tonde (es.: "[" -> "(("). Sembra che funzioni uguale ma non è così .
    Potresti ricontrollare le relazioni seguenti:
    [img
    http://foto.libero.it/asdrubale4682/foto/tuttelefoto/Relazioni
    [/img]
    ho qualche dubbio.
    Buona giornata.
  • Re: Breve Programma


    Ciao, come ti avevo detto in precedenza a seguire trovi quanto avevi richiesto:
    
    clear all
    clc
    clf
    
    Vgback= -40
    %L=0.000001
    L= 1e-6
    %W=0.0000021
    W= 2.1e-6
    %Ctop=0.000000552
    Ctop= 552e-9
    %Cback=0.000000012
    Cback=12e-9
    Rs=800;
    u0=700
    Vc=0.45
    V0gtop=1.45
    %Vgtop=1:0.5:4
    Vgtop=linspace(2.3,3,20)
    
    V0gback=2.7
    V0=V0gtop+(Cback/Ctop)*(V0gback-Vgback)
    
    Rc=L/(W*u0*Ctop*Vc)
    gamma=Rs/Rc
    Vg0=Vgtop-V0
    %Vsd=-24:8:24
    %Vsd= linspace(0,0.015,20)
    Vsd= linspace(0,0.01,40)
    
    m=length(Vsd)
    n=length(Vgtop)
    I0= zeros(n,m)
    Id= zeros(n,m)
    
    for i=1:n
        for j=1:m
            if Vgtop(i) < V0
                Id(i,j)=0
            else
                if Vsd(j) < (Vgtop(i) - V0)
                    I0(i,j)=(Vgtop(i)-(Vsd(j)/2)-V0)*(2*W/L)*u0*Vc*Ctop
                    Id(i,j)=((Vsd(j)-Vc+I0(i,j)*Rs+sqrt((Vsd(j)-Vc+I0(i,j)*Rs)^2-Vsd(j)*I0(i,j)*4*Rs)))*((1/(4*Rs)))                
                else
                    if Vsd(j) >= (Vgtop(i) - V0)
                        Id(i,j)=((-Vc+(Vgtop(i)-V0)*(1+gamma)+sqrt(Vc^2-(Vgtop(i)-V0)*2*Vc*(1+gamma))))*((gamma/(Rs*(1+gamma)^2)))
                    end
                end
            end
        end
    end
    figure(1)
    clf
    plot(Vsd,Id)
    xlabel('Vsd (V)')
    ylabel('Id (A)')
    title('Caratteristica I-V di un GFET in zona linare')
    
    figure(2)
    clf
    %plot(Vsd,Id(1,:),'g-',Vsd,Id(2,:), 'g-',Vsd,Id(3,:),'g-')
    xlabel('Vsd (V)')
    ylabel('Idsat (A)')
    title('Caratteristica I-V di un GFET in saturazione')
    
    Allora, i problemi erano i seguenti:
    - mancavano 4 end
    - uso scorretto delle parentesi
    - i valori complessi dipendevano dalla presenza di radicandi negativi nelle espressioni delle Id. Tali valori dipendono direttamente dalle scelte fatte per quanto concerne Vgtop e Vsd. Modificando gli estremi di tali intervalli dovresti risolvere il problema.
    - i plot delle varie curve lo ottieni così: plot(Vsd,Id), mentre il plot che avevi usato "avrebbe stampato" solo le prime 3 curve.
    - presenza di un segno "=" posizionato nel codice in modo; la sua presenza avrebbe significato l'esistenza di al più un valore (per fissato Vgtop) appartenete simultaneamente tanto alla regione di triodo (lineare) quanto a quella di saturazione, il che è un assurdo.
    Osservando i plot delle figure 1 e 2 non capisco dove siano le differenze; credo sia il caso di controllare.
    Credo sia tutto, io ho provato e "funziona" (si vedono delle curve). L'interpretazione dei dati spetta a te.
    Spero d'esserti stato d'aiuto.
    Buona serata.
    [/color]
Devi accedere o registrarti per scrivere nel forum
4 risposte