Disegnamo le caratteristiche di un Mosfet con Scilab

Sfondo caratteristiche mosfet

In un post precedente abbiamo visto come disegnare curve, singole o sovrapposte, con Scilab. Ora voglio illustrare come sia possibile visualizzare le funzioni di due variabili mediante famiglie di curve, interpretando una variabile come parametro e l’altra come l’unica variabile indipendente. In pratica vedremo come “tracciare” le curve caratteristiche di un componente elettronico, facendo riferimento ad un ipotetico MOSFET.

Ricordiamo brevemente che un MOSFET è un componente elettronico a tre terminali (Drain, Gate e Source) e che la corrente di Drain (Id) è funzione della tensione tra Gate e Source (Vgs) e della tensione tra Drain e Source (Vds). Anziché lavorare con una funzione di due variabili, è tipico interpretare la relazione fra Id e Vds come una funzione (una curva) che cambia al variare di Vgs, che viene quindi usato come parametro.
Senza entrare nel dettaglio del funzionamento del MOSFET, che non è argomento di questo post, possiamo scrivere:

I_d=K [(V_{gs}-V_{t}) V_{ds}-\frac{1}{2}V_{ds}^2)]

se la tensione Vds è inferiore a (Vgs-Vt), altrimenti:

I_d=K(V_{ds}^2)

dove K è una costante che dipende dalla caratteristiche geometriche e fisiche del componente e Vt è un valore di soglia al di sotto del quale non c’è conduzione (Id=0).

Per visualizzare queste caratteristiche occorre costruire (se non le abbiamo già disponibili) delle matrici in cui ogni riga rappresenta la relazione (Vds,Id) per un particolare valore di Vgs.

Metodo iterativo

Il primo modo, più intuitivo, segue la definizione ed è basato su cicli for innestati, come in un qualsiasi linguaggio procedurale:

 

Vt=0.5;
ID=0.2;

Vgs=0:1:8;
Vds=0:1:15;

[rx,cx]=size(Vgs);
[ry,cy]=size(Vds);

// Metodo di costruzione iterativo
 for kx=1:cx
  if Vgs(kx)>Vt
   VGS=Vgs(kx)-Vt;
  else
   VGS=0;
  end
  for ky=1:cy
   if Vds(ky)<VGS
    id(kx,ky)=ID*(VGS*Vds(ky)-0.5*Vds(ky)^2);
   else
    id(kx,ky)=0.5*ID*VGS^2
   end
  end
 end

plot(Vds',id')
plot(Vds(Vgs>Vt)-Vt,0.5*ID*(Vgs(Vgs>Vt)-Vt).^2,'ro--')

Dopo aver definito le costanti, ed i vettori relativi alle variabili indipendenti (con valori arbitrariamente inventati per il solo scopo di realizzare il grafico) si costruisce la matrice in modo iterativo, inserendo gli opportuni valori, uno alla volta. La definizione della variabile VGS è stata fatta solo per migliorare la leggibilità del codice, oltre che per evitare di ripetere sempre lo stesso calcolo.

A questo punto si può procedere con la parte grafica. Con il primo comando disegnamo la famiglia di curve (Vds,Id) al variare di Vgs semplicemente passando come primo parametro il vettore della variabile indipendente Vds e come secondo la matrice Id.
Il comando plot, in caso di matrici, disegna le curve per colonne. Nel nostro caso occorre trasporre la matrice (e di conseguenza anche il primo vettore), dato che avevamo inserito i dati di interesse per righe. Ovviamente si poteva creare la matrice direttamente con le relazioni (Vds,Id) sulle colonne ma poteva risultare meno intuitivo e soprattutto in questo modo (con le trasposte nel comando) si evidenzia meglio come utilizzare il comando plot.
Il secondo grafico (ricordiamo che plot non cancella il grafico precedente) aggiunge la parabola che si ottiene per Vds=(Vgs-Vt) e che separa la regione di triodo da quella di saturazione.
In questa riga di comando ci sono alcune cose interessanti da notare. Innanzitutto la selezione degli indici: la relazione logica (Vgs>Vt) seleziona solo gli indici per cui la condizione è verificata, in maniera compatta senza ricorrere ad un preliminare ciclo for per l’estrazione dei dati utili. Tale condizione si è resa necessaria per garantire compatibilità fra le dimensioni dei due vettori.
L’altra è l’opzione di visualizzazione del grafico che imposta il colore rosso, la linea a tratti ed i singoli punti con il simbolo ‘o’.

Il risultato è mostrato nella seguente figura:

Caratteristiche MosfetLe varie curve hanno colori differenti, assegnati in automatico secondo un ordine predeterminato.

Metodo matriciale

Vediamo ora come sfruttare le potenzialità di Scilab, pensato per operare su matrici, in modo da evitare i cicli for e scrivere codice più compatto (ed efficiente). Riporto di seguito solo la parte di codice modificata:

// Metodo matriciale
 app=ones(rx,cy);
 VGS=Vgs'*app-Vt;

 app=ones(ry,cx);
 VDS=app'*Vds;

 ind=find(VDS>=VGS);
 id=ID*((VGS).*VDS-0.5*VDS.^2);
 id(ind)=0.5*ID*(VGS(ind)).^2;
 ind0=find(VGS<0)
 id(ind0)=0;
 plot(Vds',id')
 plot(Vds(Vgs>Vt)-Vt,0.5*ID*(Vgs(Vgs>Vt)-Vt).^2,'ro--')

La matrice Id viene costruita come funzione di due variabili matriciali, associando ad ogni elemento Id(x,y) il valore che si ottiene inserendo nella funzione gli elementi corrispondenti nelle matrici Vgs(x,y) e Vds(x,y) costruite replicando per righe il vettore colonna Vgs’ e per colonne il vettore riga Vds. Non riporto la figura ottenuta, che è la stessa del caso precedente.

Per maggior chiarezza visualizzo le due matrici:

VDS  =

column  1 to 13

 0.    1.    2.    3.    4.    5.    6.    7.    8.    9.    10.    11.    12.
 0.    1.    2.    3.    4.    5.    6.    7.    8.    9.    10.    11.    12.
 0.    1.    2.    3.    4.    5.    6.    7.    8.    9.    10.    11.    12.
 0.    1.    2.    3.    4.    5.    6.    7.    8.    9.    10.    11.    12.
 0.    1.    2.    3.    4.    5.    6.    7.    8.    9.    10.    11.    12.
 0.    1.    2.    3.    4.    5.    6.    7.    8.    9.    10.    11.    12.
 0.    1.    2.    3.    4.    5.    6.    7.    8.    9.    10.    11.    12.
 0.    1.    2.    3.    4.    5.    6.    7.    8.    9.    10.    11.    12.
 0.    1.    2.    3.    4.    5.    6.    7.    8.    9.    10.    11.    12.

column 14 to 16

 13.    14.    15.
 13.    14.    15.
 13.    14.    15.
 13.    14.    15.
 13.    14.    15.
 13.    14.    15.
 13.    14.    15.
 13.    14.    15.
 13.    14.    15.

VGS  =

column  1 to 12

- 0.5 - 0.5 - 0.5 - 0.5 - 0.5 - 0.5 - 0.5 - 0.5 - 0.5 - 0.5 - 0.5 - 0.5
  0.5   0.5   0.5   0.5   0.5   0.5   0.5   0.5   0.5   0.5   0.5   0.5
  1.5   1.5   1.5   1.5   1.5   1.5   1.5   1.5   1.5   1.5   1.5   1.5
  2.5   2.5   2.5   2.5   2.5   2.5   2.5   2.5   2.5   2.5   2.5   2.5
  3.5   3.5   3.5   3.5   3.5   3.5   3.5   3.5   3.5   3.5   3.5   3.5
  4.5   4.5   4.5   4.5   4.5   4.5   4.5   4.5   4.5   4.5   4.5   4.5
  5.5   5.5   5.5   5.5   5.5   5.5   5.5   5.5   5.5   5.5   5.5   5.5
  6.5   6.5   6.5   6.5   6.5   6.5   6.5   6.5   6.5   6.5   6.5   6.5
  7.5   7.5   7.5   7.5   7.5   7.5   7.5   7.5   7.5   7.5   7.5   7.5

column 13 to 16

- 0.5  - 0.5  - 0.5  - 0.5
  0.5    0.5    0.5    0.5
  1.5    1.5    1.5    1.5
  2.5    2.5    2.5    2.5
  3.5    3.5    3.5    3.5
  4.5    4.5    4.5    4.5
  5.5    5.5    5.5    5.5
  6.5    6.5    6.5    6.5
  7.5    7.5    7.5    7.5

Conclusioni

In questo articolo abbiamo visto come rappresentare funzioni di due variabili mediante matrici per visualizzarle su grafici parametrici, utilizzando come esempio le curve caratteristiche di un MOSFET.
Se ti è piaciuto condividilo, e lascia un commento se c’è qualcosa che vuoi approfondire.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Pin It on Pinterest