ArduinoElettronica analogica

MOSFET: funzionamento, parametri del datasheet e pilotaggio con Arduino ed ESP32

Come funziona il MOSFET, come leggere VGS(th), RDS(on), Qg e Rth sul datasheet e come pilotarlo in low-side, high-side e PWM da Arduino ed ESP32, con calcolo di perdite e dissipatore.

Il MOSFET (Metal-Oxide-Semiconductor Field-Effect Transistor) è il componente che in pratica si usa per accendere, spegnere e regolare in PWM quasi tutti i carichi in continua: il MOSFET come interruttore comanda strisce LED, motori, ventole, elettrovalvole, resistenze di riscaldamento. Rispetto al transistor BJT è comandato in tensione e non in corrente, e quando è completamente acceso si comporta come una resistenza di pochi milliohm: per questo commuta decine di ampere scaldando poco.

Il MOSFET ha però alcune trappole che colgono di sorpresa chi parte da Arduino o ESP32: la tensione di soglia VGS(th) non è la tensione a cui il componente si accende davvero, molti modelli “famosi” non conducono bene con 5 V di gate e quasi nessuno conduce bene con i 3,3 V dell’ESP32, il gate si comporta come un condensatore che va caricato e scaricato a ogni commutazione. In questa guida vediamo struttura e zone di lavoro, i parametri del datasheet con dati reali di quattro componenti diffusi, gli schemi low-side e high-side, le perdite in PWM, il dimensionamento del dissipatore con un esempio numerico completo e il codice essenziale per Arduino ed ESP32.

Struttura e simboli del MOSFET

Un MOSFET ha tre terminali: gate (G), drain (D) e source (S). Il gate è separato dal semiconduttore da un sottilissimo strato di ossido di silicio: è un isolante, quindi in regime statico il gate non assorbe corrente (le correnti di dispersione IGSS sono dell’ordine dei 100 nA massimi). Gate, ossido e semiconduttore formano di fatto un condensatore.

Nel MOSFET a canale N ad arricchimento (enhancement), che è il tipo usato nella quasi totalità dei circuiti di potenza, il substrato tra source e drain è di tipo P (per un ripasso sui drogaggi si veda semiconduttori di tipo N e di tipo P). Con gate a 0 V non esiste un percorso conduttivo e il dispositivo è spento. Applicando una tensione positiva tra gate e source, il campo elettrico attraverso l’ossido richiama elettroni sotto il gate e forma un canale N che collega source e drain: più è alta VGS, più il canale è “largo” e minore è la sua resistenza. Il MOSFET a canale P funziona in modo duale: conduce quando il gate è più negativo del source, cioè con VGS < 0.

I MOSFET a svuotamento (depletion), che conducono già con VGS = 0, non si usano nella commutazione da microcontrollore e non sono trattati qui.

Simboli del MOSFET a canale N e a canale P ad arricchimento con terminali gate, drain, source e diodo body intrinseco

Il diodo body

Nei MOSFET di potenza a struttura verticale il source è collegato internamente al substrato (body). La giunzione PN tra body e drain diventa così un diodo intrinseco sempre presente, disegnato nel simbolo: nel canale N ha l’anodo sul source e il catodo sul drain, nel canale P l’anodo sul drain e il catodo sul source. Le conseguenze pratiche sono tre:

  • un MOSFET blocca la tensione in un solo verso: se il drain di un N-MOS va sotto il source, il diodo body conduce qualunque sia la tensione di gate;
  • il diodo body può fare da diodo di ricircolo nei ponti H, ma è relativamente lento e ha una caduta alta (per l’IRLZ44N VSD max 1,3 V a 25 A);
  • montare il MOSFET “al contrario” (drain e source scambiati) produce un interruttore che resta sempre acceso attraverso il diodo.

Zone di lavoro: interdizione, ohmica e saturazione

Il comportamento del MOSFET si legge sulle caratteristiche di uscita ID–VDS, una famiglia di curve, ciascuna a VGS costante. Si distinguono tre zone.

  • Interdizione (cut-off): VGS sotto la soglia, il canale non esiste e scorre solo la corrente di dispersione IDSS (microampere). È lo stato “spento” di un interruttore.
  • Zona ohmica o di triodo: VGS ben sopra la soglia e VDS piccola. La corrente cresce quasi linearmente con VDS: il canale si comporta come una resistenza, la RDS(on), tanto più bassa quanto più alta è VGS. È lo stato “acceso” di un interruttore.
  • Zona di saturazione: VDS > VGS − VGS(th). Il canale si strozza dal lato del drain e la corrente diventa quasi indipendente da VDS, fissata da VGS. È la zona degli amplificatori e dei generatori di corrente.

Attenzione alla terminologia, che è la principale fonte di confusione: la saturazione del MOSFET corrisponde alla zona attiva del BJT, mentre la “saturazione” del BJT (transistor completamente acceso) corrisponde alla zona ohmica del MOSFET. Un MOSFET usato come interruttore deve stare in zona ohmica quando è acceso, non in saturazione.

Andamento teorico delle caratteristiche di uscita ID-VDS con zone ohmica, di saturazione e interdizione e della caratteristica di trasferimento ID-VGS in scala logaritmica con la soglia VGS(th)

Le curve della figura sono calcolate con il modello quadratico semplificato del MOSFET, con parametri illustrativi; i valori reali vanno sempre letti sui grafici Typical Output Characteristics e Typical Transfer Characteristics del datasheet. In zona di saturazione il modello dà:

\(I_D \approx \frac{K}{2}\left(V_{GS}-V_{GS(th)}\right)^2\)

Vicino alla soglia pochi decimi di volt di gate cambiano moltissimo la corrente: è la zona in cui finisce un MOSFET “standard” pilotato a 3,3 V.

I parametri chiave del datasheet

Per ogni grandezza del datasheet va letta anche la condizione di prova, che spesso conta più del numero.

VDS e ID: tensione e corrente massime

V(BR)DSS è la tensione drain-source massima a gate spento. Va scelta con margine sulla tensione di alimentazione, considerando le sovratensioni dovute alle induttanze: per un carico a 12 V un MOSFET da 30 V è il minimo ragionevole. La corrente ID in tabella è invece un dato quasi teorico: per l’IRLZ44N vale 47 A a TC = 25 °C e 33 A a TC = 100 °C, cioè con il contenitore mantenuto a quella temperatura da un dissipatore ideale. La corrente realmente sostenibile la decidono la dissipazione e il dissipatore, come vedremo nell’esempio.

VGS(th): perché non è la tensione di accensione

La tensione di soglia è definita come la VGS alla quale scorre una corrente di drain minuscola, con VDS = VGS: 250 µA per IRLZ44N, IRF540N e AO3400A, appena 25 µA per l’IRLB8721. Alla soglia il MOSFET è quindi “appena socchiuso”, non acceso. Inoltre è data come intervallo (per l’IRF540N da 2,0 a 4,0 V) e diminuisce con la temperatura (l’IRLB8721 dichiara circa −7 mV/°C).

La grandezza che conta per un interruttore è un’altra: la VGS alla quale il costruttore garantisce la RDS(on). Se il datasheet specifica la RDS(on) solo a 10 V, il componente va pilotato a 10 V; se la specifica anche a 4,5 V o 2,5 V, quelle sono le tensioni di gate garantite.

RDS(on) alla VGS indicata

La resistenza in conduzione determina le perdite statiche, P = ID² · RDS(on). Va letta sempre insieme alla tensione di gate e alla corrente di prova, e corretta per la temperatura: la RDS(on) aumenta con la temperatura di giunzione, tipicamente del 40–80 % tra 25 °C e 125–150 °C. Per l’AO3400A, per esempio, il datasheet riporta a 10 V un massimo di 26,5 mΩ a 25 °C e 38 mΩ a 125 °C (fattore 1,43). Il valore esatto si ricava dal grafico Normalized On-Resistance vs. Temperature.

Qg, Ciss e capacità parassite

Le capacità Ciss, Coss e Crss (capacità di Miller) sono misurate a VGS = 0 ma variano molto con la tensione; per i tempi di commutazione è più utile la carica di gate Qg: la quantità di carica che il circuito di comando deve fornire per portare il gate dalla tensione zero a quella di prova. Si divide in Qgs (carica fino al plateau) e Qgd (carica di Miller, fornita mentre la tensione di drain scende): durante la fase Qgd la tensione di gate resta ferma sulla tensione di plateau ed è lì che il MOSFET dissipa di più.

SOA e resistenze termiche

La SOA (Safe Operating Area) è il grafico ID–VDS in scala logaritmica che delimita le combinazioni di tensione e corrente sopportabili per impulsi di varia durata e in continua (linea DC). In commutazione il MOSFET attraversa la zona ad alta potenza per tempi brevissimi; diventa invece critica quando il MOSFET lavora in zona lineare per tempi lunghi (limitatori di corrente, carichi elettronici, soft-start, gate pilotato lentamente).

I dati termici sono le resistenze termiche: RθJC giunzione-contenitore, RθCS contenitore-dissipatore (con pasta termica), RθJA giunzione-ambiente senza dissipatore. Con la temperatura massima di giunzione (175 °C per i TO-220 qui considerati, 150 °C per l’AO3400A) permettono il calcolo termico.

Quattro MOSFET a confronto

La tabella riporta i dati principali dai datasheet ufficiali Infineon (ex International Rectifier) e Alpha & Omega, a TJ = 25 °C. Per Qg e RDS(on) sono indicate le condizioni di prova.

Parametro IRF540N IRLZ44N IRLB8721 AO3400A
Contenitore TO-220 TO-220 TO-220 SOT-23
V(BR)DSS 100 V 55 V 30 V 30 V
ID continua 33 A (TC = 25 °C) 47 A (TC = 25 °C) 62 A (TC = 25 °C) 5,7 A (TA = 25 °C)
VGS max ±20 V ±16 V ±20 V ±12 V
VGS(th) min–max 2,0–4,0 V (250 µA) 1,0–2,0 V (250 µA) 1,35–2,35 V (25 µA) 0,65–1,45 V (250 µA)
RDS(on) max 44 mΩ a 10 V 22 mΩ a 10 V
25 mΩ a 5 V
35 mΩ a 4 V
8,7 mΩ a 10 V
16 mΩ a 4,5 V
26,5 mΩ a 10 V
32 mΩ a 4,5 V
48 mΩ a 2,5 V
Qg 71 nC max (VGS = 10 V) 48 nC max (VGS = 5 V) 7,6 nC tip. (VGS = 4,5 V) 6 nC tip. (VGS = 4,5 V)
Ciss tipica 1960 pF 1700 pF 1077 pF 630 pF
RθJC / RθJA 1,15 / 62 °C/W 1,4 / 62 °C/W 2,3 / 62 °C/W RθJA 125 °C/W (su 1 in² di rame)
Gate da Arduino 5 V No Sì Sì (margine ridotto) Sì
Gate da ESP32 3,3 V No Non garantito Non garantito Sì

MOSFET logic level e il problema dei 3,3 V

Si chiama logic level un MOSFET la cui RDS(on) è garantita a una tensione di gate compatibile con la logica: 4,5–5 V per i classici “logic level”, 2,5 V o meno per i tipi a bassissima soglia. La tabella mostra il caso tipico: l’IRF540N, popolarissimo nei kit, è specificato solo a 10 V e con una soglia che può arrivare a 4 V; a 5 V di gate il costruttore non garantisce nulla e un esemplare può restare semi-acceso, scaldando moltissimo. L’IRLZ44N (la “L” della sigla indica proprio il gate logic level) è garantito a 5 V e a 4 V, e va bene per Arduino Uno.

Con l’ESP32 il problema si sposta più in basso. Il datasheet Espressif garantisce in uscita VOH ≥ 0,8 · VDD, cioè 2,64 V con alimentazione a 3,3 V, alla corrente di carico specificata. A quella tensione l’IRLZ44N e l’IRLB8721 sono appena sopra la soglia massima e la loro RDS(on) non è specificata: alcuni esemplari funzioneranno, altri dissiperanno watt al posto di milliwatt. Le soluzioni corrette sono tre:

  1. un MOSFET con RDS(on) garantita a 2,5 V, come l’AO3400A (48 mΩ max a 2,5 V e 3 A), adatto a carichi di qualche ampere;
  2. un gate driver alimentato a 10–12 V con ingresso compatibile 3,3 V, che porta il gate di un MOSFET di potenza alla tensione per cui è specificato (vedi più avanti);
  3. una traslazione di livello con un transistor e una resistenza di pull-up verso la tensione di carico, accettabile per commutazioni lente.

Verifica rapida per l’AO3400A pilotato da ESP32 con una striscia LED da 12 V e 2 A: con la RDS(on) massima a 2,5 V corretta a caldo (48 mΩ · 1,43 ≈ 69 mΩ) si dissipano 2² · 0,069 ≈ 0,28 W; con la RθJA di 125 °C/W la giunzione arriva a circa 40 + 35 = 75 °C a 40 °C ambiente. Il valore di RθJA vale però solo con il pad di rame di prova del costruttore: su un circuito stampato con piste minime la temperatura sarà più alta.

MOSFET come interruttore low-side (N-MOS)

La configurazione più semplice e più usata è il low-side: il carico è collegato tra il positivo e il drain, il source va a massa. Il MOSFET a canale N commuta il “lato basso” del carico e la tensione di comando è riferita a massa, quindi il GPIO la può fornire direttamente.

Schema di pilotaggio low-side con MOSFET a canale N comandato da Arduino o ESP32 con resistenza di gate, resistenza di pull-down, diodo di ricircolo sul carico e massa comune

Resistenza di gate

All’istante della commutazione il gate scarico è quasi un cortocircuito verso massa: senza resistenza, la corrente di picco sarebbe limitata solo dalla resistenza interna dell’uscita del microcontrollore. La resistenza di gate RG limita il picco (con 150 Ω e 5 V circa 33 mA teorici, meno nella realtà per la resistenza interna del pin) e smorza le oscillazioni formate dall’induttanza dei collegamenti con la capacità di gate. Valori tipici con pilotaggio diretto da GPIO: 100–220 Ω. Una RG più grande rallenta la commutazione e aumenta le perdite, come vedremo nel calcolo.

Resistenza di pull-down

Durante il reset e l’avvio del firmware i GPIO sono ingressi ad alta impedenza. Un gate flottante può caricarsi per accoppiamento capacitivo o per disturbi e accendere parzialmente il MOSFET, che in zona lineare si surriscalda. La resistenza RPD da 10–100 kΩ tra gate e source tiene il MOSFET spento finché il microcontrollore non prende il controllo; va montata vicino al MOSFET, a valle di RG. Il partitore che forma con RG è trascurabile (150 Ω contro 10 kΩ: −1,5 %).

Diodo di ricircolo con carichi induttivi

Un motore, una bobina di relè o un’elettrovalvola sono induttanze: quando il MOSFET si apre, la corrente non può annullarsi istantaneamente e la tensione di drain sale fino a trovare un percorso (v = L · di/dt, vedi l’approfondimento sugli induttori). Senza protezione supera la V(BR)DSS e manda il MOSFET in valanga a ogni spegnimento. Il diodo di ricircolo D1, in antiparallelo al carico con il catodo verso il positivo, offre alla corrente un percorso e limita la tensione di drain a circa VCC + VF. Il diodo deve sopportare la corrente del carico; in PWM conviene uno Schottky, veloce e con bassa caduta. Il diodo body del MOSFET non protegge da questa sovratensione: è orientato in modo da condurre solo se il drain va sotto il source.

Infine la massa comune: il GND del microcontrollore deve essere collegato al negativo dell’alimentatore di potenza, altrimenti la tensione VGS non è definita. La corrente del carico però non deve passare nelle piste di massa della scheda logica: il ritorno di potenza va portato direttamente dal source al negativo dell’alimentatore.

Pilotaggio high-side con P-MOS e traslazione di livello

A volte il carico deve restare collegato a massa: un’utenza che ha la carcassa a massa, un modulo con il negativo in comune con altri circuiti, un sensore alimentato. Si commuta allora il lato alto con un MOSFET a canale P: il source va al positivo e il MOSFET conduce quando il gate viene portato sotto il source di alcuni volt. Il GPIO a 3,3 V o 5 V non può farlo direttamente: con 12 V sul source, un gate a 3,3 V corrisponderebbe a VGS = −8,7 V, cioè MOSFET acceso anche con il GPIO alto. Serve uno stadio di traslazione di livello con un NPN (o un piccolo N-MOS).

Schema high-side con MOSFET a canale P IRF9540N e traslazione di livello con transistor NPN 2N3904, partitore di gate R1 R2 e diodo di ricircolo

Funzionamento: con GPIO basso il transistor Q1 è interdetto, R1 porta il gate al potenziale del source e il P-MOS è spento. Con GPIO alto Q1 si satura e il gate viene tirato verso massa attraverso R2; R1 e R2 formano un partitore che fissa VGS ≈ −12 · 10/11 ≈ −10,9 V, dentro il limite di ±20 V dell’IRF9540N e oltre i −10 V a cui è specificata la sua RDS(on) (0,117 Ω max). Il partitore è indispensabile con alimentazioni oltre 15–20 V, dove collegare il gate direttamente a massa supererebbe la VGS massima. Il dimensionamento del BJT segue le regole viste nell’articolo sul transistor BJT NPN:

Esempio di calcolo: stadio di traslazione per P-MOS high-side
VCC = 12 V, R1 = 10 kΩ, R2 = 1 kΩ, GPIO = 3,3 V, Q1 = 2N3904

Corrente di collettore Q1:  IC ≈ 12 V / (10 kΩ + 1 kΩ) ≈ 1,1 mA
Tensione di gate:           VGS ≈ -12 · 10 / 11 ≈ -10,9 V
Corrente di base:           IB = (3,3 - 0,7) V / 4,7 kΩ ≈ 0,55 mA
Beta forzato:               1,1 / 0,55 ≈ 2  -> Q1 saturato con ampio margine
RBE = 100 kΩ: tiene Q1 spento con GPIO flottante (sottrae circa 7 µA)

Spegnimento: il gate si ricarica solo attraverso R1 = 10 kΩ
Corrente iniziale 12 V / 10 kΩ = 1,2 mA; Qg max 97 nC
t_off dell'ordine di Qg / I ≈ 97 nC / 1,2 mA ≈ 80 µs
-> adatto a ON/OFF o PWM di poche centinaia di Hz, non a 20 kHz

La logica non è invertita: GPIO alto significa carico acceso. La lentezza di spegnimento dipende da R1: abbassarla accelera ma aumenta la corrente di Q1 a carico acceso. Per un high-side veloce o per correnti elevate si usa uno stadio push-pull sul gate oppure un N-MOS con driver a bootstrap.

PWM e perdite di commutazione

In PWM il MOSFET alterna conduzione e interdizione a frequenza fissa e la potenza media sul carico è proporzionale al duty cycle D (vedi ingressi analogici e uscite PWM con Arduino). Le perdite del MOSFET sono la somma di due termini.

Le perdite di conduzione dipendono dal valore efficace della corrente; con un carico resistivo e corrente costante durante la conduzione:

\(P_{cond} = I_D^2 \cdot R_{DS(on)} \cdot D\)

Le perdite di commutazione nascono perché, durante ogni transizione, tensione e corrente sono contemporaneamente diverse da zero. La stima più usata è quella del carico induttivo con diodo di ricircolo, in cui durante ogni transizione la tensione resta piena finché la corrente non è commutata; con un carico puramente resistivo, dove tensione e corrente variano insieme, le perdite reali sono circa un terzo, quindi la formula è prudente:

\(P_{sw} \approx \frac{1}{2} V_{DS} \, I_D \left(t_{on}+t_{off}\right) f_{PWM}\)

I tempi di transizione si stimano dalla carica di gate e dalla corrente che il circuito di comando riesce a fornire durante il plateau. La carica che conta è quella spesa mentre tensione e corrente si scambiano, approssimabile con Qsw ≈ Qgd + Qgs/2:

\(I_{G,on} \approx \frac{V_{drv}-V_{plateau}}{R_G} \qquad I_{G,off} \approx \frac{V_{plateau}}{R_G} \qquad t \approx \frac{Q_{sw}}{I_G}\)

La tensione di plateau si legge sul grafico Gate Charge del datasheet; per un MOSFET logic level è tipicamente tra 2,5 e 3,5 V. Con un GPIO a 5 V e 150 Ω la corrente di gate durante il plateau è di circa 13–20 mA e la commutazione dura microsecondi; con un gate driver da qualche ampere dura decine di nanosecondi. Il grafico seguente, calcolato con questa formula (stima prudente) per l’esempio della prossima sezione, mostra l’effetto sulla frequenza PWM.

Stima teorica delle perdite di conduzione e di commutazione dell'IRLZ44N con carico 12 V 10 A in funzione della frequenza PWM, con pilotaggio diretto da GPIO e con gate driver

Alla frequenza PWM standard di Arduino Uno (490 Hz, 980 Hz sui pin 5 e 6) le perdite di commutazione con pilotaggio diretto sono trascurabili rispetto a quelle di conduzione. A 20 kHz, frequenza scelta spesso per rendere il PWM inudibile nei motori, diventano più grandi delle perdite di conduzione: è il segnale che serve un gate driver.

Quando serve un gate driver

Un gate driver carica e scarica il gate con picchi di alcuni ampere e, alimentato a 10–12 V, porta la VGS dove la RDS(on) è minima. Serve quando:

  • la frequenza PWM supera qualche kHz con MOSFET di potenza (Qg di decine di nC);
  • il microcontrollore lavora a 3,3 V e il MOSFET adatto alla corrente richiesta non è specificato a 2,5 V;
  • la corrente è elevata e si vuole la RDS(on) a 10 V invece di quella a 4,5 V;
  • il MOSFET è in configurazione high-side a canale N o in un ponte H (driver con bootstrap).

Un esempio di driver low-side è il UCC27517 di Texas Instruments: 4 A di picco in uscita, alimentazione da 4,5 a 18 V, soglia di ingresso alta di 2,2 V tipici (2,4 V max) indipendente dall’alimentazione, quindi compatibile con un GPIO a 3,3 V. Richiede un condensatore ceramico di disaccoppiamento vicino al pin di alimentazione.

Esempio completo: dissipazione e dissipatore

Progetto d’esempio: Arduino Uno comanda in PWM a 490 Hz una resistenza di riscaldamento da 12 V e 10 A (120 W) con un IRLZ44N in low-side, RG = 150 Ω, temperatura ambiente nel contenitore 40 °C. Si dimensiona il caso peggiore, D = 1 (carico sempre acceso).

Esempio di calcolo: IRLZ44N, 12 V / 10 A, gate a 5 V, PWM 490 Hz

1) Verifiche sui massimi
   V(BR)DSS = 55 V > 12 V                       -> OK, ampio margine
   ID = 10 A << 33 A (TC = 100 °C)               -> OK
   VGS = 5 V < 16 V                             -> OK

2) Perdite di conduzione (D = 1)
   RDS(on) max a VGS = 5 V, 25 °C:  25 mΩ
   Fattore di temperatura ipotizzato (TJ ≈ 100-125 °C): 1,6
   RDS(on) a caldo = 25 · 1,6 = 40 mΩ
   Pcond = 10² · 0,040 = 4,0 W

3) Perdite di commutazione
   Qsw ≈ Qgd + Qgs/2 = 25 + 8,6/2 ≈ 29,3 nC   (valori max a VDS = 44 V: stima prudente)
   Vplateau ipotizzata ≈ 3 V
   IG,on  = (5 - 3) / 150 ≈ 13,3 mA  -> t_on  ≈ 29,3 nC / 13,3 mA ≈ 2,2 µs
   IG,off = 3 / 150 = 20 mA          -> t_off ≈ 29,3 nC / 20 mA  ≈ 1,47 µs
   Esw = 0,5 · 12 · 10 · (2,2 + 1,47) µs ≈ 220 µJ per periodo
   Psw = 220 µJ · 490 Hz ≈ 0,11 W      (a 20 kHz sarebbero 4,4 W)

4) Potenza totale
   Ptot ≈ 4,0 + 0,11 ≈ 4,1 W
   (potenza nel circuito di gate Qg·Vdrv·f = 48 nC · 5 V · 490 Hz ≈ 0,1 mW: trascurabile)

5) Senza dissipatore
   TJ = TA + Ptot · RθJA = 40 + 4,1 · 62 ≈ 295 °C   -> IMPOSSIBILE (max 175 °C)

6) Dissipatore necessario (obiettivo TJ ≤ 110 °C, margine sui 175 °C)
   Rth,tot max = (110 - 40) / 4,1 ≈ 17 °C/W
   RθSA max = 17 - RθJC - RθCS = 17 - 1,4 - 0,5 ≈ 15 °C/W
   con pad isolante (circa +1 °C/W):  RθSA ≤ 14 °C/W

7) Verifica con un dissipatore commerciale da 10 °C/W
   TJ = 40 + 4,1 · (1,4 + 0,5 + 10) ≈ 89 °C   -> OK; a circa 90 °C il fattore 1,6 è prudente

Il calcolo termico segue la “legge di Ohm termica”, con resistenze termiche in serie:

\(T_J = T_A + P_{tot}\left(R_{\theta JC}+R_{\theta CS}+R_{\theta SA}\right)\)

Con un gate driver a 12 V la RDS(on) scenderebbe a 22 mΩ max (10 V), cioè 3,5 W a caldo invece di 4,0, con perdite di commutazione trascurabili anche a 20 kHz. Spesso però conviene di più un MOSFET a resistenza minore: con l’IRLB8721 (16 mΩ max a 4,5 V) la conduzione cala di circa un terzo.

Codice PWM per Arduino ed ESP32

Su Arduino Uno basta analogWrite(), con valori da 0 a 255 sui pin 3, 5, 6, 9, 10, 11. Il pin va portato basso subito nel setup(), anche se la pull-down tiene già spento il MOSFET durante il reset.

// Arduino Uno: PWM su MOSFET low-side (pin 9 = Timer1, 490 Hz)
const uint8_t PIN_GATE = 9;

void setup() {
  pinMode(PIN_GATE, OUTPUT);
  digitalWrite(PIN_GATE, LOW);      // carico spento all'avvio
}

void loop() {
  for (int d = 0; d <= 255; d++) { // rampa da 0 % a 100 %
    analogWrite(PIN_GATE, d);
    delay(10);
  }
  delay(1000);
  analogWrite(PIN_GATE, 0);
  delay(1000);
}

È possibile alzare la frequenza dei pin 9 e 10 a circa 31,4 kHz (16 MHz / 510) con TCCR1B = (TCCR1B & 0b11111000) | 0x01;, ma la modifica interferisce con le librerie che usano il Timer1 (per esempio Servo) e, soprattutto, con il pilotaggio diretto da GPIO l’esempio precedente dissiperebbe circa 7 W solo in commutazione.

Sull’ESP32 con core Arduino 3.x la API LEDC è cambiata rispetto alla versione 2.x: i canali vengono assegnati automaticamente e le funzioni lavorano sul numero di pin. ledcAttach(pin, frequenza, risoluzione) configura il pin, ledcWrite(pin, duty) imposta il duty cycle; il vecchio schema ledcSetup() + ledcAttachPin() non esiste più. La risoluzione massima dipende dalla frequenza: con il clock a 80 MHz, a 20 kHz si arriva a 11 bit (80 MHz / 20 kHz = 4000 ≈ 211,97).

// ESP32, core Arduino 3.x: PWM a 20 kHz, risoluzione 10 bit
const uint8_t  PIN_GATE = 18;
const uint32_t PWM_FREQ = 20000;   // 20 kHz: solo con gate driver o MOSFET a bassa Qg
const uint8_t  PWM_RES  = 10;      // duty da 0 a 1023

void setup() {
  Serial.begin(115200);
  if (!ledcAttach(PIN_GATE, PWM_FREQ, PWM_RES)) {
    Serial.println("Errore di configurazione LEDC");
  }
  ledcWrite(PIN_GATE, 0);          // carico spento
}

void loop() {
  for (uint32_t d = 0; d <= 1023; d += 8) {
    ledcWrite(PIN_GATE, d);
    delay(10);
  }
  delay(1000);
  ledcWrite(PIN_GATE, 0);
  delay(1000);
}

In alternativa, il core 3.x offre anche analogWrite(pin, valore) compatibile con Arduino (0–255), con analogWriteFrequency() e analogWriteResolution() per cambiare frequenza e risoluzione. Ricordare che a 3,3 V il MOSFET deve essere specificato a 2,5 V oppure va interposto un gate driver.

Confronto con BJT, IGBT e relè

Dispositivo Comando Caduta in conduzione Velocità Impiego tipico
BJT In corrente (corrente di base continua) VCE(sat) 0,1–1 V Buona per piccoli segnali Piccoli carichi fino a qualche centinaio di mA, traslatori di livello
MOSFET In tensione (corrente solo nelle commutazioni) ID · RDS(on), anche pochi mV Molto alta (ns) Carichi DC fino a decine di A, PWM, convertitori a bassa e media tensione
IGBT In tensione, tipicamente 15 V VCE(sat) 1,5–3 V Media (coda di corrente) Alte tensioni e potenze: inverter, azionamenti, saldatrici
Relè Bobina (serve un transistor) Resistenza di contatto, nessuna soglia Lenta (ms), vita meccanica limitata Isolamento galvanico, carichi AC, commutazioni rare

Per i carichi in continua da qualche ampere il MOSFET è quasi sempre la scelta migliore. Il BJT resta comodo come traslatore o per carichi piccoli, l’IGBT vince oltre alcune centinaia di volt e il relè serve quando occorre isolamento o si commuta la rete, come descritto in gestione carichi AC con Arduino o Raspberry.

Errori comuni

  • Scegliere il MOSFET sulla VGS(th): una soglia di 2 V non significa che a 3,3 V il MOSFET sia acceso. Conta la VGS a cui è garantita la RDS(on).
  • Usare IRF540N, IRFZ44N o simili con 5 V o 3,3 V di gate: sono specificati a 10 V. Il circuito sembra funzionare a vuoto e scalda sotto carico.
  • Gate flottante: senza pull-down il MOSFET può accendersi parzialmente all’accensione o con il cavo del GPIO scollegato.
  • Dimenticare il diodo di ricircolo con motori, relè ed elettrovalvole, contando sul diodo body che invece non interviene.
  • Massa non comune o in comune nel punto sbagliato: la corrente del carico che scorre nella massa della scheda logica sposta i riferimenti e causa reset e letture errate.
  • Fidarsi della ID di tabella: senza dissipatore un TO-220 sopporta circa 1–2 W, non 47 A.
  • Montaggio high-side con N-MOS e gate a 5 V: il source sale fino a circa VG − VGS(th), il carico riceve pochi volt e il MOSFET lavora in zona lineare dissipando il resto.
  • Superare la VGS massima (±12 V per l’AO3400A, ±16 V per l’IRLZ44N) con gate driver o partitori alimentati dalla tensione di carico; con transitori sul gate si aggiunge uno zener di protezione gate-source.
Checklist di progetto: MOSFET come interruttore per microcontrollore

 1. V(BR)DSS >= 2 x tensione di alimentazione (sovratensioni induttive).
 2. RDS(on) garantita alla VGS realmente disponibile:
    5 V -> specificata a 4,5 V o 4 V;  3,3 V -> specificata a 2,5 V
    (oppure gate driver).
 3. Pconduzione con RDS(on) a caldo (x 1,5-1,8) e corrente efficace.
 4. Pcommutazione da Qg, corrente di gate e frequenza PWM.
 5. TJ = TA + P · Rth totale con margine sui 150-175 °C.
 6. RG 100-220 Ω da GPIO, pull-down 10-100 kΩ gate-source.
 7. Diodo di ricircolo su ogni carico induttivo.
 8. Massa comune, ritorno di potenza separato dalla massa logica.
 9. Fusibile sulla linea di alimentazione del carico.
10. VGS massima mai superata (driver, partitori, transitori).

Fonti e approfondimenti

Articoli collegati

Admin | MST-Tutorial

Appassionato di elettronica, elettrotecnica e programmazione. Fondatore di MST-Tutorial, condivido con entusiasmo conoscenze, esperienze e progetti legati all’innovazione tecnologica, con l’obiettivo di rendere accessibili concetti tecnici complessi attraverso tutorial chiari e pratici.

Articoli Correlati

Pulsante per tornare all'inizio