#17 – Transistor e Arduino

Introduciamo ora i transistor, per scoprirne alcuni dei possibili utilizzi con Arduino. Come scopriremo, saranno fondamentali per i prossimi articoli.

Transistor

I transistor sono i mattoncini fondamentali di tutta la tecnologia dei giorni nostri.

Tantissimi dispositivi, dai processori, ai sistemi di controllo, etc., sono composti da milioni/miliardi di transistor. Basti pensare che un processore realizzato a 7nm (ad esempio un processore dei telefoni top di gamma moderni) contiene circa 6.9 miliardi di transistor. Il microcontrollore della nostra scheda Arduino ne ha più di 80mila.

Ci sono transistor di tutte le dimensioni e anche di diverse tipologie. Alcuni li possiamo vedere e maneggiare, per altri serve un microscopio (e anche potente). I transistor che utilizzeremo noi, fortunatamente, sono circa delle dimensioni delle resistenze ohmiche commerciali.

I transistor hanno diversi usi, ma noi li vedremo principalmente come una sorta di “interruttori comandabili“. Un’alternativa economica ai relé (per chi non ne avesse mai sentito parlare, li affronteremo in uno dei prossimi articoli) per basse tensioni/correnti, e una scelta obbligata per i segnali.

Transitor a Giunzione Bipolare (BJT)

Sono l’unico tipo di transistor che vedremo.

Transistor BJT KT819G

Il principio di funzionamento del BJT si fonda sulla possibilità di controllare la conduttività elettrica del dispositivo, e quindi la corrente elettrica che lo attraversa, mediante l’applicazione di una tensione tra i suoi terminali.

In particolare, un transistor BJT ha tre terminali:

Schema di transitor BJT. Crediti
  • Un collettore (C)
  • Una base (B), che serve per controllare la conduttività tra collettore ed emettitore
  • Un emettitore (E)

Ne abbiamo di due tipologie: PNP e NPN.

Schema transistor BJT. Crediti

Possiamo semplificare dicendo che i transistor sono composti da tre “mattoncini” di materiale semiconduttore, messi uno sull’altro.

Questi mattoncini possono essere di due tipi: N e P. Si tratta in realtà dello stesso materiale semiconduttore:

  • nel caso dei mattoncini N, il semiconduttore è stato “drogato”, ovvero sono stato aggiunti elettroni extra
  • per i mattoncini P, è stato fatto il processo opposto, e abbiamo quindi meno elettroni

In modo semplificato, possiamo dire che gli elettroni possono passare senza fatica da regioni N a regioni P, se applichiamo una piccola forza (tensione). Infatti le regioni P sono per loro natura “affamate” di elettroni (perché ne hanno pochi), e le regioni N ne hanno troppi.

Secondo questo ragionamento, è evidente che non sarà semplice per gli elettroni passare da una regione P ad una regione N: va contro l’equilibrio di carica.

La particolarità del transistor è la seguente: se la regione base si trova ad un potenziale maggiore dell’emettitore, gli elettroni possono passare “facilmente” anche da regioni P a regioni N.

Transistor BJT NPN. Crediti

I transistor NPN sono costruiti per far passare gli elettroni dall’emettitore al collettore, e di conseguenza la corrente scorre dal collettore all’emettitore. Nel transistor PNP succede l’opposto.

Analogia con l’acqua

Abbiamo già visto che può risultare più intuitivo visualizzare i fenomeni elettrici (finché è possibile), ricorrendo ad una analogia con l’acqua, nel tutorial su tensioni, correnti e resistenze.

Estendiamo l’analogia anche per i transistor. Come abbiamo già capito, i transistor sono una sorta di “interruttori”.

Quando il transistor è “chiuso”, blocca “completamente” il passaggio dell’acqua (entro certi limiti).

Transistor in modalità cut-off. Crediti

Analogamente, possiamo aprire completamente il transistor:

Transistor in modalità saturazione. Crediti

L’aspetto però interessante è il seguente: possiamo controllare linearmente l’apertura del transistor.

Transistor in modalità forward. Crediti

Questa proprietà è fondamentale quando lavoriamo con i segnali: a differenza di un relé (che può essere solo acceso o spento), i transistor sono in grado di “riprodurre” la forma del segnale di controllo (sulla base) nel filo controllato (magari a tensione differente).

In pratica, il transistor si comporta come un resistore, il cui valore della resistenza può essere comandato a piacere.

Modalità Operative

Analizziamo ora le modalità operative dei transistor BJT. Chiamiamo $latex V_{BE} $ la differenza di potenziale misurata dall’emettitore alla base, mentre $latex V_{CB} $ quella misurata dalla base al collettore.

Schema modalità transistor BJT NPN. Per il transitor PNP, invertire le disuguaglianze.

Forward Active

Se $latex V_{BE} $ è maggiore di un valore soglia (voltage drop), la giunzione base emettitore del transistor si attiva. Questo valore per molti transistor, a temperatura ambiente, è circa 0.6-0.7V

Se rileviamo la seguente relazione tra le tensioni, siamo in modalità forward.

Regola per forward (NPN)

Questa modalità è sicuramente la più utilizzata: permette infatti di amplificare il segnale in ingresso alla base.

La relazione tra le correnti che transitano nel transistor è contenuta nel fattore di amplificazione (o guadagno) $latex \beta$ (con cui si approssima $latex h_{FE} $). Questo valore dipende dal transistor che state utilizzando, ma di solito è circa 100 (può andare da 50 a 2000).

Relazione tra corrente del collettore e della base per NPN

Un transistor con $latex \beta = 100 $, in modalità forward, se attivato con una corrente di 1mA alla base, può assorbire una corrente di 100mA al collettore, se questa corrente è disponibile.

Quanta corrente uscirà dall’emettitore? La relazione è collegata ad un’altra costante $latex \alpha $.

Relazione tra corrente del collettore e dell’emettitore per NPN

Ovviamente, esiste una relazione tra $latex \alpha$ e $latex \beta $:

Relazione tra costante alfa e beta

Se quindi $latex \beta = 100, \alpha = 0.99 $. Se aggiungiamo $latex I_{B} = 1mA$, otteniamo $latex I_{C} = 100mA$ e $latex I_{E} = 101mA $.

Simulazione Forward Active

Già da questo esempio appare evidente un aspetto che approfondiremo in seguito: la corrente che arriva nella base, passa per il transistor verso l’emettitore (per NPN).

Saturazione

Se attiviamo la giunzione tra base ed emettitore, fornendo una $latex V_{BE} >= 0.6-0.7V $, possiamo trovarci in saturazione se:

Regola per la saturazione (NPN)

In particolare, possiamo rilevare che la tensione $latex V_{CE}$ è minore di un valore chiamato “CE saturation voltage“. Di solito, è compreso tra 0.05V e 0.2V.

In modalità di saturazione siamo nel caso dell'”interruttore chiuso”. In pratica, abbiamo fornito una corrente alla base, tale che la corrente che possiamo prelevare al collettore è maggiore di quella che il circuito può fornire.

Se riprendiamo l’esempio di prima, aggiungiamo una resistenza di $latex 100 \Omega $ per limitare la corrente in ingresso al collettore. Se considerassimo nel caso limite una caduta di 0V sul transistor, avremmo al massimo $latex 5V / 100 \Omega = 50mA $ di corrente in ingresso al collettore. Sappiamo però che senza carico ne avremmo a disposizione 100mA, quindi siamo in saturazione.

Simulazione Saturazione

Cut-off

Come suggerisce il nome, questa modalità è l’opposto della saturazione. Per entrare in questa modalità, basta che:

Regola per il cut-off (NPN)

In realtà come abbiamo visto, è sufficiente che $latex V_{BE} $ sia compresa tra 0 e il valore di voltage drop (circa 0.6-0.7V).

Il nostro transistor si comporterà quasi come un “interruttore aperto”.

Nella pratica però il transistor lascerà scorrere comunque una corrente (piccola), tanto maggiore quanto maggiore sarà il valore di $latex V_{BE} $. Nella seguente simulazione andiamo a provare con valori tra -0.7V e 0.7V

Simulazione Cut-Off

Reverse Active

Se scambiamo i segni alla disuguaglianza del forward, la corrente ovviamente percorrerà la direzione opposta:

Regola per il reverse (NPN)

Non è però una modalità in cui vogliamo usare il transistor. In genere, significa che abbiamo collegato al contrario il transistor.

Per i PNP, basta scambiare il verso di tutte le disuguaglianze viste finora.

Transistor come interruttori

Prima di vedere come utilizzare i transistor con Arduino nello specifico, vediamo come utilizzare un transistor (NPN) come un generico interruttore.

Nell’esempio, lo utilizzeremo per alimentare un led ad alta potenza. Non potremmo infatti alimentarlo direttamente con Arduino, in quando ha bisogno di più corrente di quanta possiamo fornirne dal pin (40mA).

Dobbiamo quindi prendere la corrente dall’esterno.

Interruttore NPN. Crediti

L’interruttore si chiude (passa corrente) se mettiamo tra la base e il GND una tensione di almeno 0.6V. Si apre se la suddetta tensione è inferiore a questo valore (ma positiva!) .

Il motivo per cui usiamo una resistenza dal valore elevato prima della base è ovvio: vogliamo che la minor corrente possibile segua la strada che va dalla base all’emettitore.

Vediamo ora una simulazione:

Simulazione interruttore NPN (supponiamo di collegare a massa la base quando l’interruttore è aperto)

Come possiamo vedere, il transistor porta ad una caduta di potenziale di 0.7V circa:

Valori di tensioni sul percorso B-E per BJT NPN

Il lettore attento si potrebbe chiedere: dato che esistono “precise” relazioni, come abbiamo visto, tra corrente sulla base e quella che transita per il transistor, come posso scegliere il valore corretto per la resistenza sulla base?

La corrente sulla base, moltiplicata per il guadagno, indica la massima corrente teorica che può essere assorbita dal collettore, che non è detto sia quella reale. Dobbiamo infatti considerare che la corrente disponibile al collettore del transistor possa essere limitata a monte da resistenze, o altri componenti.

Nella simulazione, abbiamo un led che causa una caduta di potenziale di circa 2V (ogni tipologia di led ne ha una caratteristica). Abbiamo quindi 3V sulla resistenza da $latex 100\Omega $, e una corrente per il led di circa 30mA.

Il transistor tra la base e l’emettitore porta ad una caduta di potenziale di circa 0.7V. Di conseguenza, la tensione sulla resistenza da $latex 10k\Omega $, è circa 4.3V. La corrente che arriva quindi alla base è quindi 0.43mA.

Il limite teorico per $latex I_{C} = \beta * I_{B} = 100 * 0.43mA = 43mA $. Ma di questi, solo 30mA possono effettivamente scorrere.

Poiché abbiamo una differenza tra il valore massimo e quello reale di una decina di mA, la resistenza $latex 10k\Omega $ è vicina a quella limite (circa $latex 14k\Omega $). Se aumentiamo il valore della resistenza oltre il valore limite, andremo a limitare la corrente che volevamo imporre sul led.

Andiamo a vedere questo fenomeno togliendo i componenti a monte del transistor (così non avremo limiti alla corrente), e modificando i valori della resistenza alla base.

Simulazione con resistenza da $latex 100k\Omega $

Possiamo vedere che senza limitazioni, la corrente che può transitare diventa infatti quella massima teorica:

Simulazione con resistenza da $latex 1k\Omega $

Però, se adesso torniamo con questa ultima resistenza al circuito originario:

Simulazione con resistenza inferiore

Come possiamo vedere, il limite teorico è 430mA, tuttavia ne utilizziamo solo 30mA. È esattamente quello che succedeva con la resistenza da $latex 10k\Omega $.

Allora perché utilizzare una resistenza di 10k è meglio di 1k in questo caso? Semplicemente perché la corrente che arriva alla base, è subito rimessa nel GND, e quindi va persa. Con 10k ne sprechiamo di meno.

Ad essere precisi, facendo così però andiamo ad aumentare leggermente il valore $latex V_{BE} $, sebbene l’effetto sia trascurabile in questo circuito.

Transistor e Arduino

È molto semplice controllare un transistor su Arduino. Basta semplicemente ricordarsi delle limitazioni di corrente dei pin.

Quando comandiamo il transistor con Arduino, non dimentichiamoci che la massima corrente che possiamo prendere da un pin è 40mA (consigliati 20mA). Se ci dimentichiamo di mettere una resistenza di almeno $latex 110\Omega $ tra il pin e il transistor, bruceremo il pin!

Nel seguente esempio, utilizziamo Arduino per controllare un led. Abbiamo già visto come farlo alimentandolo direttamente dal pin, adesso utilizziamo un transistor. In questo modo, non abbiamo limiti ai led che possiamo controllare (o meglio, siamo limitati solo dal numero dei pin della scheda).

Ricordiamo infatti, che senza transistor con Arduino possiamo comandare al massimo 10 led a 20mA ciascuno (vedi limitazioni corrente).

I led in genere si accontentano di una corrente tra i 5mA e i 20mA. Inoltre inducono una caduta di potenziale (sono diodi, come vedremo) tabellata:

Caduta potenziale led

Vogliamo accendere e spegnere un led rosso, con la massima corrente ammessa (20mA). Poiché prenderemo l’alimentazione direttamente dal 5V, abbiamo bisogno di trovare il valore della resistenza principale, per avere una corrente di 20mA che attraversa il led.

Dato che il led rosso fornisce una caduta di potenziale di 1.8V, abbiamo 3.2V sulla resistenza. Scegliamo quindi una resistenza di $latex R_{1} = \frac{3.2V}{0.020A} = 160\Omega $.

Per il transistor invece, ci basta imporre che il limite superiore per la corrente in ingresso nel collettore sia maggiore di 20mA. La corrente di base deve essere almeno 0.2mA. Scegliamo una corrente ad esempio di 1mA. Poiché il transistor fornisce una caduta di potenziale di 0.7V tra base ed emettitore, la resistenza della base sarà ad un potenziale di 4.3V. Imponiamo una corrente di 1mA scegliendo una resistenza di $latex 4.3k\Omega $. Poiché si tratta di un valore non commerciale, ne prendiamo una da $latex 4.7k\Omega $ (avremo una corrente di circa 0.9mA).

Ricordiamoci che un transistor NPN va messo con l’emettitore collegato a GND, in modo che il valore $latex V_{BE} $ dipenda solo dal nostro comando.

Lo schema sarà il seguente:

Schema di controllo per led con transistor e Arduino
(Collettore a sinistra, Base in centro, Emettitore a destra)

Se andiamo a misurare i valori nella simulazione:

Valori corrente della simulazione

I valori concordano con quelli teorici, considerando che il led in figura induce una caduta di potenziale di 2V, invece dei reali 1.8V

Per comandare più led, utilizziamo lo stesso principio:

Controllo di 7 led grazie a transistor e Arduino

Per comandare più di 18 led con transistor e Arduino, possiamo utilizzare una espansione I/O oppure un modulo multiplexer.

Ovviamente quest’ultimo non è il metodo migliore per comandare dei led, e infatti vedremo metodi molto più semplici ed efficaci in un articolo apposito.

Per il momento, continuiamo analizzando il prossimo componente: il diodo.

2 comments

  1. Ronnie

    Complimenti per la professionalità e la chiarezza. Un lavoro davvero di alto livello. Grazie.

    1. Andrea Aspesi

      Grazie, sono contento sia stato utile, dato che queste guide sono un esperimento in realtà

Comments are closed.