Alimentazione breadboard con MOSFET IRF520

Tutorial Alimentazione – Corrente con BJT, MOSFET e batteria.

Transistor BC547 come interruttore ( corrente < 100mA @5V )

Per carichi più impegnativi è possibile utilizzare un transistor come interruttore e sfruttare l’uscita Vcc di Arduino, capace di erogare molti più milliampere e senza i limiti imposti dal microprocessore.

Un piccola premessa, l’uscita 5V di Arduino è alimentata dalla sorgente con cui alimentiamo lo stesso Arduino. Pertanto se abbiamo collegato Arduino ad una porta USB, a monte di tutto ci sarà un limite di 500mA di cui tener conto. Se invece stiamo alimentando Arduino con il connettore 7-12V o con il pin Vin, il limite è imposto dal regolatore di tensione, i cui limiti dipendono dalla tensione in ingresso, più sale il voltaggio e più calore viene generato dal regolatore e pertanto minore sarà il carico che può sostenere, a 7V potrebbe arrivare fino a 600/700mA ma oltre i 12V il valore scende a 200/300mA. E’ comunque bene stare lontani da tali limiti.

Ci accingiamo ad alimentare il led sfruttando la corrente erogata da Vcc che però non è controllabile come la corrente erogata da un pin output, ci serve un modo per controllare l’accensione: un transistor può fungere da interruttore digitale controllabile.

Immagine schema transistorUn transistor è un componente elettronico dotato di 3 piedini: base, collettore ed emettitore. La sua caratteristica principale è che la corrente che fluisce tra collettore ed emettitore è consentita dalla presenza di una piccola corrente entrante nella base. Ci sono molti transistor sul mercato ognuno con le sue caratteristiche di correnti massime, tensioni operative e fattori di amplificazione. Pertanto la scelta del giusto transistor non è immediata, occorre selezionare accuratamente i transistor verificando che tutti i parametri operativi siano compatibili con il circuito che si sta realizzando.

Usare un transistor come interruttore è una tecnica molto efficiente da implementare in quanto l’energia dissipata dal transistor è praticamente nulla se il circuito è studiato bene.

Quando si ha a che fare con i transistor, i piedini sono nominati con le lettere bce e si usano le notazione Vbe, Vce, Ib, Ic per indicare tensioni tra due pin o correnti sui vari pin.

Un transistor si comporta come interruttore quando, se si fornisce corrente Ib, questa è sufficiente a saturare la corrente Ic. Livelli di corrente intermedi Ib, in cui il transistor si comporta da amplificatore, sono volutamente evitati e ci si limita al comportamento binario acceso/spento.

La potenza assorbita è data dalla formula P=dV*I; nel caso del transistor dV è la differenza di tensione tra collettore ed emettitore Vec ed I è Ic.

Quando il transistor lascia il circuito aperto si ha che Ic=0 e quindi la potenza è nulla a prescindere da Vec. Quando il circuito si chiude il transistor non oppone resistenza tra collettore ed emettitore e Vec è molto piccola, quindi anche la potenza assorbita P è molto piccola.

Il limite di questa tecnologia è dato dalla corrente massima che può fluire per il collettore c;  è importante comprendere che se la corrente Ib non fosse sufficiente a saturare Ic, la tensione tra Vce non sarebbe trascurabile e quindi sul transistor verrebbe dissipata potenza, che se non è preventivata può essere in grado di bruciare il componente. Per questo i transistor usati come amplificatori (cioè operanti lontani dalla regione di saturazione) sono spesso dotati di dissipatori termici.

Per questo tutorial useremo il BC547, verifichiamo il datasheet. Le tensioni operative sono compatibili, ed ha una Ic di 100mA più che sufficiente per il nostro scopo. Osservando il grafico Figure 9. Collector Saturation Region si vede che con appena 5mA di corrente Ib siamo pienamente nella regione di saturazione.

Per ottenere i 5mA sulla base necessari a saturare il transistor, occorre limitare la corrente con un resistore in serie, se non lo facessimo, Arduino cercherebbe di imporre 5V tra base ed emettitore e le correnti sarebbero tali da bruciare sia il pin di uscita di Arduino sia il transistor.

Con la legge di Ohm possiamo calcolare il valore di R: avendo 5V tra pin arduino e ground e Vbe circa 0,7V secondo il datasheet, si ottiene che R deve generare un dV di 4.3V; R=Vr/I = 4.3/0.005 =860Ω, la resistenza standard di 1kΩ  andrà quindi bene.

Proviamo l’alimentazione dei 3 led in parallelo con un BC547. Ogni LED avrà un resistenza da 220Ω in serie sull’anodo per limitare la corrente a meno di 20mA. La resistenza in serie con il pin5 di arduino limiterà la corrente a meno di 5mA. Il transistor, oltre a far scorrere i 60mA dati dalla somma dei tre led, porterà a GND anche la corrente proveniente da Arduino, per un totale di 65mA.

corrente di 60mA, 3 LED in parallelo alimentati con Transistor BC546

 

 

 

Con Fritzing ho generato anche uno schema per rendere più chiari i collegamenti da effettuare sulla Breadboard.

Transistor come interruttore di corrente pilotato da ArduinoAnalizziamo assieme lo schema per comprendere meglio il circuito.

Se il pin5 di arduino è portato a livello LOW, la tensione tra pin e GND è zero, pertanto non c’è corrente che attraversa la base del transistor. In queste condizioni, la corrente non può fluire nemmeno tra collettore ed emettitore: il transistor si comporta come un interruttore aperto ed i led sono quindi spenti.

Quando invece portiamo il segnale di Arduino a HIGH abbiamo un dV di 5V verso ground innescando corrente su quel ramo del circuito. Ad equilibrio raggiunto, 0.7V saranno presenti tra base ed emettitore (secondo le specifiche riportate nel datasheet) e di conseguenza 4.3V saranno applicati sulla resistenza R3. Essendo questa da 1k, la corrente effettiva sarà di 4.3mA. Tale corrente è sufficiente per saturare il transistor (vedere Figura 9 del datasheet), che quindi chiuderà il circuito facendo fluire corrente attraverso i led. Per ogni coppia Led+resistenza in parallelo, ci saranno 5V meno Vce (che è di circa 0.1V secondo le specifiche); il led ha una caduta di tensione che dipende dal colore scelto, nel mio caso 2V determinando così una tensione di 5-2-0.1V sulla resistenza: Vr=2.9V. Pertanto la corrente effettiva che attraversa ogni led sarà I=Vr/R = 13.2mA.

La corrente che attraversa il transistor è quindi 3×13.2 = 39.6mA ed essendo Vce=0.1V la potenza assorbita dal transistor è di ~4mW.

Ovviamente in questa esemplificazione con led in parallelo, molta energia è dissipata dalle resistenze R1,R2 ed R3, inoltre le resistenze scelte sono più abbondanti di quelle teoricamente necessarie; tutto questo comporta che il circuito reale non è poi così efficiente come da teoria, ma lo scopo del tutorial era mostrare come alimentare un carico senza troppe complicazioni. Se volete, potete provare a disporre 6 led, in tre rami con due led in parallelo, calcolando la resistenza necessaria per il dV di 1V così da usare meglio la corrente erogata.

Altri tutorial mostrano il caso d’uso di un motore, che sicuramente ha necessità di essere alimentato da un transistor, tuttavia, l’uso di un motore avrebbe complicato il circuito dovendo questo anche gestire le controcorrenti generate dal motore in fase di rilascio, rendendo meno semplice la comprensione del funzionamento del transistor.

Un ultimo aspetto prima di passare oltre, un transistor usato come interruttore è capace di cambiare il suo stato molto velocemente, parliamo di nanosecondi. Nel caso del BC547 servono 35ns per l’attivazione e 300ns per la disattivazione. Ciò comporta che un segnale PWM (un’onda quadra ) viene amplificato fedelmente dal nostro transistor che riporterà la stessa onda quadra al carico: così non solo possiamo accendere e spegnere i led, ma possiamo anche variarne la luminosità come se lo avessi collegato direttamente al pin.

Sketch

Vi riporto una piccola variazione dell’esempio “fade” dell’IDE arduino.


int led = 5;           // pin PWM collegato al transistor
int brightness = 0;    // luminosità corrente
int fadeAmount = 5;    // direzione

void setup() {
    pinMode(led, OUTPUT);
}

void loop() {
 
  analogWrite(led, brightness);

  brightness = brightness + fadeAmount;

  if (brightness <= 10 || brightness >= 255) {
    fadeAmount = -fadeAmount;
  }
  
  delay(5);
}

Attivati a questo punto, sembra che non ci siano poi grandi differenze rispetto all’esempio precedente, ma in realtà c’è un cambiamento sostanziale: Arduino non sta alimentando i led tramite il microprocessore, sta solo comandando un transistor affinché lo faccia! Per comodità e progressività nella spiegazione, il transistor è stato alimentato dal Vcc di Arduino ma potremmo alimentarlo anche con una diversa fonte di energia come una batteria e slegarci dai limiti di carico della piattaforma.