Resistenze pull-up e pull-down
Un ingresso digitale non dovrebbe mai essere lasciato senza un livello logico definito. Le resistenze pull-up e pull-down servono proprio a questo: mantengono un nodo a HIGH oppure a LOW quando nessun altro dispositivo lo pilota. Sono fondamentali nei pulsanti, nei segnali di reset, negli ingressi dei microcontrollori e nei bus open-drain come I²C.
Che cos’è un ingresso flottante?
Un ingresso digitale è flottante quando non è collegato in modo definito né a un livello logico alto né a uno basso. Poiché gli ingressi dei moderni microcontrollori hanno impedenza molto elevata, bastano piccolissime correnti parassite, campi elettromagnetici o capacità dei collegamenti per far cambiare casualmente il livello letto.
Come funziona una resistenza pull-up
Una resistenza pull-up collega il nodo di ingresso a VCC. Quando nessun altro elemento pilota il nodo, la resistenza lo mantiene a livello logico HIGH.
Come funziona una resistenza pull-down
La pull-down è il contrario: collega il nodo a GND e lo mantiene a livello LOW quando nessun altro circuito lo pilota. Il pulsante viene normalmente collegato tra ingresso e VCC.
Pull-up e pull-down a confronto
| Configurazione | Stato di default | Con pulsante |
|---|---|---|
| Pull-up + pulsante verso GND | HIGH | LOW |
| Pull-down + pulsante verso VCC | LOW | HIGH |
Perché il pull-up è così comune con i pulsanti?
Molti microcontrollori includono pull-up interne, quindi basta collegare il pulsante tra il pin e GND. Questo riduce il numero di componenti esterni.
Pulsante premuto = LOW.
Logica attiva bassa
Quando una funzione viene attivata portando il segnale a LOW si parla spesso di active-low. Nei nomi dei segnali puoi incontrare convenzioni come:
- /RESET;
- RESET_N;
- CS#;
- EN̅.
Come scegliere il valore della resistenza
Per semplici ingressi digitali si incontrano spesso valori da 1 kΩ a 100 kΩ, con 4,7 kΩ e 10 kΩ molto comuni.
| Valore | Caratteristica |
|---|---|
| 1 kΩ | Pull forte, buona immunità al rumore ma maggiore corrente. |
| 4,7 kΩ | Compromesso molto comune. |
| 10 kΩ | Tipico per pulsanti e ingressi digitali lenti. |
| 47–100 kΩ | Basso consumo, ma nodo più sensibile a disturbi e capacità. |
Quanta corrente scorre nella pull-up?
Quando il nodo viene portato allo stato opposto, la resistenza si trova tra VCC e GND. La corrente è determinata dalla legge di Ohm:
Consumo quando il pulsante è premuto
Con una pull-up e pulsante verso GND, quando il pulsante è aperto idealmente la corrente è quasi nulla. Quando viene premuto scorre invece corrente attraverso la resistenza.
Cosa succede se la resistenza è troppo bassa?
- aumenta la corrente quando la linea viene portata allo stato opposto;
- aumenta il consumo;
- l’uscita open-drain deve assorbire più corrente;
- può superare i limiti del dispositivo che forza il LOW.
Cosa succede se la resistenza è troppo alta?
- il nodo diventa più sensibile alle correnti di leakage;
- aumenta la sensibilità ai disturbi;
- insieme alla capacità della linea aumenta il tempo di salita;
- la tensione HIGH reale può diminuire in presenza di leakage significativo.
Resistenze pull-up e pull-down interne
Molti microcontrollori integrano resistenze configurabili internamente. Sono comode perché eliminano componenti esterni, ma il loro valore può essere poco preciso e variare tra dispositivi.
Arduino e INPUT_PULLUP
Con Arduino è possibile attivare la pull-up interna usando:
Pull-up e pull-down su ESP32
ESP32 offre pull-up e pull-down interne su molti GPIO, ma non necessariamente su tutti i pin e in tutte le modalità.
Pull-up su RESET, ENABLE e linee critiche
Le linee di reset o enable devono avere uno stato noto anche mentre il microcontrollore sta iniziando ad alimentarsi e i GPIO non sono ancora configurati.
Uscite open-drain e open-collector
Un’uscita open-drain non genera attivamente il livello HIGH. Può soltanto:
- portare la linea a LOW;
- oppure rilasciarla in alta impedenza.
Serve quindi una pull-up esterna per ottenere il livello HIGH.
Perché I²C usa resistenze pull-up?
Le linee SDA e SCL di I²C sono tipicamente open-drain. I dispositivi possono soltanto portarle a LOW; le resistenze pull-up le riportano a HIGH.
Pull-up, capacità e costante di tempo
Una linea reale possiede capacità verso massa. La pull-up e questa capacità formano un circuito RC.
Clinea = 100 pF
τ = 10.000 × 100×10−12 = 1 µs.
Pull-up, pull-down e immunità al rumore
Una resistenza più bassa rende il nodo “più rigido”: una piccola corrente parassita produce una variazione di tensione inferiore.
Con 10 kΩ → ΔV = 0,1 V.
Errori comuni con pull-up e pull-down
- lasciare un ingresso digitale flottante;
- confondere pull-up e pull-down;
- dimenticare che un pulsante con pull-up produce logica invertita;
- usare una resistenza troppo bassa e sovraccaricare l’uscita che forza il LOW;
- usare una resistenza troppo alta in ambienti rumorosi;
- considerare le pull interne come valori precisi;
- aggiungere pull-up duplicate su un bus I²C senza considerare la resistenza equivalente;
- ignorare la capacità del bus;
- collegare una pull-up a una tensione non compatibile con il dispositivo;
- modificare involontariamente i livelli di boot/strap di un microcontrollore.

