Livelli logici 3,3 V e 5 V e level shifter
Quando colleghiamo Arduino, ESP32, sensori e moduli digitali non basta verificare che usino tutti “0 e 1”. I dispositivi possono lavorare con tensioni logiche diverse e un livello perfettamente valido per un circuito può essere insufficiente o addirittura pericoloso per un altro. In questa guida vediamo soglie logiche, compatibilità 3,3 V/5 V e tecniche corrette di level shifting.
Cosa sono i livelli logici?
In un circuito digitale i valori 0 e 1 vengono rappresentati mediante intervalli di tensione. Non esiste quindi una sola tensione esatta per LOW e una sola tensione esatta per HIGH.
Per questo un’uscita da 3,3 V può essere perfettamente valida come HIGH per alcuni ingressi a 5 V, ma non per altri. La risposta corretta si trova sempre nelle specifiche elettriche del datasheet.
VIH, VIL, VOH e VOL
| Parametro | Significato |
|---|---|
| VIL(max) | Massima tensione garantita come ingresso LOW. |
| VIH(min) | Minima tensione garantita come ingresso HIGH. |
| VOL(max) | Massima tensione garantita dall’uscita quando produce LOW. |
| VOH(min) | Minima tensione garantita dall’uscita quando produce HIGH. |
HIGH valido: VIN ≥ VIH(min)
Margine di rumore
Per una comunicazione affidabile non basta che i livelli siano appena compatibili: è utile avere un certo margine tra ciò che l’uscita garantisce e ciò che l’ingresso richiede.
NML = VIL(max) − VOL(max)
3,3 V e 5 V sono automaticamente compatibili?
No. Dire che un dispositivo funziona a 3,3 V e un altro a 5 V non basta per stabilire la compatibilità logica. Bisogna controllare separatamente entrambe le direzioni della comunicazione.
3,3 → 5 V
Bisogna verificare se 3,3 V supera il VIH minimo dell’ingresso a 5 V.
5 → 3,3 V
Bisogna verificare se l’ingresso a 3,3 V tollera fisicamente 5 V.
GND comune
Per segnali single-ended serve normalmente un riferimento di massa comune.
Segnale da 3,3 V verso un ingresso a 5 V
Questa direzione può talvolta funzionare senza conversione, ma non va dato per scontato. Se il dispositivo a 5 V considera HIGH una tensione inferiore a 3,3 V, il collegamento può essere compatibile.
Segnale da 5 V verso un ingresso a 3,3 V
Questa è generalmente la direzione più delicata. Un GPIO a 3,3 V potrebbe non essere progettato per ricevere 5 V. Applicare una tensione superiore al limite assoluto può provocare correnti nei diodi di protezione interni o danneggiare il dispositivo.
Se l’ingresso non è 5 V tolerant, bisogna ridurre o tradurre il livello prima di collegarlo.
Partitore resistivo: soluzione semplice per 5 V → 3,3 V
Per segnali unidirezionali relativamente lenti è possibile usare un partitore resistivo.
R1 = 10 kΩ
R2 = 20 kΩ
Vout ≈ 5 × 20/(10+20) = 3,33 V.
Level shifter bidirezionale con MOSFET
Una soluzione molto comune per bus open-drain/open-collector utilizza un piccolo MOSFET N-channel e due resistenze di pull-up, una verso la tensione bassa e una verso la tensione alta.
Level translator integrati
Per segnali veloci, bus push-pull, molte linee o applicazioni più robuste si utilizzano spesso circuiti integrati dedicati alla traduzione dei livelli logici.
| Tipo | Quando usarlo |
|---|---|
| Buffer/translator unidirezionale | Direzione nota e fissa. |
| Translator bidirezionale con DIR | Bus che cambia direzione sotto controllo. |
| Auto-direction sensing | Quando l’integrato supporta il protocollo e il carico previsti. |
| Open-drain translator | I²C e linee cablate con pull-up. |
I²C tra dispositivi a 3,3 V e 5 V
I²C utilizza normalmente uscite open-drain: i dispositivi portano la linea LOW, mentre le resistenze di pull-up generano il livello HIGH. Per questo la traduzione bidirezionale con MOSFET è molto diffusa.
UART: RX e TX
UART utilizza normalmente due linee separate. Questo semplifica la conversione perché ogni linea è unidirezionale.
TX 3,3 V → RX Arduino 5 V: può essere direttamente compatibile solo se 3,3 V soddisfa VIH(min) dell’ingresso.
SPI e level shifting
SPI utilizza segnali push-pull e può lavorare a frequenze elevate. Le linee tipiche sono SCK, MOSI, MISO e CS. La direzione di ciascuna linea è normalmente nota.
| Linea | Direzione tipica |
|---|---|
| SCK | Master → Slave |
| MOSI | Master → Slave |
| MISO | Slave → Master |
| CS | Master → Slave |
Arduino 5 V ed ESP32 3,3 V
Questo è uno dei casi pratici più frequenti. Molte schede Arduino classiche utilizzano logica a 5 V, mentre ESP32 utilizza normalmente GPIO a 3,3 V.
ESP32 TX → Arduino RX: verificare il VIH dell’Arduino; spesso 3,3 V può essere riconosciuto, ma va controllata la specifica del dispositivo.
Livelli logici 3,3 V e 5 V a confronto
Level shifter bidirezionale con MOSFET
Errori comuni
- pensare che 3,3 V e 5 V siano sempre compatibili;
- considerare 0 e 1 come tensioni fisse universali;
- ignorare VIH e VIL;
- collegare 5 V a un GPIO 3,3 V senza verificarne la tolleranza;
- usare un partitore su un bus bidirezionale I²C;
- usare un level shifter MOSFET lento su SPI ad alta velocità;
- confondere tensione di alimentazione e soglie logiche;
- dimenticare la massa comune tra circuiti single-ended;
- credere che “5 V tolerant” significhi che il pin possa essere alimentato o pilotato in qualsiasi condizione;
- ignorare pull-up già presenti sui moduli commerciali.

