Come calcolo il valore richiesto per una resistenza di pull-up?


98

Esistono molti tutorial che utilizzano un resistore pull-up o pull-down in combinazione con un interruttore per evitare un terreno flottante, ad es.

http://www.arduino.cc/en/Tutorial/button

Molti di questi progetti usano un resistore da 10K, semplicemente osservando che ha un buon valore.

Dato un circuito particolare, come posso determinare il valore appropriato per un resistore pull-down? Può essere calcolato o è meglio determinato dalla sperimentazione?


Ho trovato questo tutorial di sparkfun una buona introduzione ai resistori pull-up e pull-down I resistori pull-up sparkfun e le risposte fornite alla tua eccellente domanda postata sono ottime.
Richard Chambers,

Risposte:


82

Risposta rapida: l'esperienza e la sperimentazione è il modo in cui si determina il valore pullup / pulldown corretto.

Risposta lunga: la resistenza pullup / down è la R in un circuito di temporizzazione RC. La velocità di transizione del segnale dipenderà da R (resistenza) e C (capacità di quel segnale). Spesso C è difficile da sapere esattamente perché dipende da molti fattori, incluso il modo in cui tale traccia viene instradata sul PCB. Dato che non conosci C, non puoi capire quale R dovrebbe essere. È qui che arrivano esperienza e sperimentazione.

Ecco alcune regole empiriche quando si indovina un buon valore di resistenza pullup / down:

  • Per la maggior parte delle cose, 3.3k a 10k ohm funziona bene.
  • Per i circuiti sensibili alla potenza, utilizzare un valore più elevato. 50k o anche 100k ohm possono funzionare per molte applicazioni (ma non tutte).
  • Per i circuiti sensibili alla velocità, utilizzare un valore inferiore. 1k ohm è abbastanza comune, mentre valori fino a 200 ohm non sono inauditi.
  • A volte, come con I2C, lo "standard" specifica un valore specifico da utilizzare. Altre volte le note sull'applicazione dei chip potrebbero raccomandare un valore.

10
200 ohm per un pullup? Wow, questa è molta corrente di quiescenza.
0x6d64,

4
@ 0x6d64 - Stai supponendo che il bus sia basso quando è inattivo.
Connor Wolf,

3
Texas Instruments ha un ottimo riferimento che spiega non solo come calcolare il valore per un resistore pull-up I2C, ma come la formula viene effettivamente derivata. Vedere il report dell'applicazione Calcolo resistenza pullup bus I2C su ti.com/lit/an/slva689/slva689.pdf .
Jamie

77

Usa 10 kΩ, è un buon valore.

Per maggiori dettagli, dobbiamo guardare a cosa fa un pullup. Supponiamo che tu abbia un pulsante che vuoi leggere con un microcontrollore. Il pulsante è un interruttore SPST (Single Pole Single Throw) momentaneo. Ha due punti di connessione che sono collegati o meno. Quando si preme il pulsante, i due punti vengono collegati (l'interruttore è chiuso). Quando vengono rilasciati, non sono collegati (l'interruttore è aperto). I microcontrollori non rilevano intrinsecamente connessione o disconnessione. Quello che hanno senso è una tensione. Poiché questo interruttore ha solo due stati, ha senso utilizzare un ingresso digitale, che è progettato per essere solo in uno dei due stati. Il micro può rilevare in quale stato si trova direttamente un ingresso digitale.

Un pullup aiuta a convertire la connessione aperta / chiusa dell'interruttore in bassa o alta tensione che il microcontrollore può rilevare. Un lato dell'interruttore è collegato a terra e l'altro all'ingresso digitale. Quando si preme l'interruttore, la linea viene forzata in basso perché l'interruttore lo mette essenzialmente a terra. Tuttavia, quando l'interruttore viene rilasciato, nulla sta guidando la linea verso una particolare tensione. Potrebbe semplicemente rimanere basso, captare altri segnali vicini mediante accoppiamento capacitivo o eventualmente fluttuare a una tensione specifica a causa del piccolo bit di corrente di dispersione attraverso l'ingresso digitale. Il compito del resistore pullup è quello di fornire un livello elevato garantito positivo quando l'interruttore è aperto, ma consentire comunque all'interruttore di cortocircuitare in sicurezza la linea quando è chiuso.

Esistono due requisiti concorrenti principali sulla dimensione della resistenza di pullup. Deve essere abbastanza basso da tirare in alto la linea, ma abbastanza alto da non far fluire troppa corrente quando l'interruttore è chiuso. Entrambi sono ovviamente soggettivi e la loro importanza relativa dipende dalla situazione. In generale, il pullup è abbastanza basso da essere sicuro che la linea sia alta quando l'interruttore è aperto, date tutte le cose che potrebbero rendere la linea bassa altrimenti.

Diamo un'occhiata a ciò che serve per tirare su la linea. Osservando solo il requisito CC si scopre la corrente di dispersione della linea di ingresso digitale. L'ingresso digitale ideale ha un'impedenza infinita. Quelli veri non lo fanno, ovviamente, e la misura in cui non sono ideali viene solitamente espressa come una corrente di dispersione massima che può uscire o entrare nel pin. Supponiamo che il tuo micro sia specificato per una perdita massima di 1 µA sui suoi pin di ingresso digitali. Poiché il pullup deve mantenere la linea alta, il caso peggiore è supporre che il pin sembri un dispersore di corrente da 1 µA a terra. Se si dovesse utilizzare un pullup da 1 MΩ, ad esempio, quel 1 µA provocherebbe 1 Volt sul resistore da 1 MΩ. Diciamo che questo è un sistema a 5 V, quindi ciò significa che il pin è garantito solo per un massimo di 4 V. Ora devi guardare le specifiche dell'ingresso digitale e vedere qual è il requisito di tensione minima per un livello logico alto. Questo può essere l'80% di Vdd per alcuni micro, che in questo caso sarebbe 4V. Pertanto un pullup da 1 MΩ è proprio al margine. È necessario almeno un po 'meno di quello per un comportamento corretto garantito a causa di considerazioni DC.

Tuttavia, ci sono altre considerazioni e queste sono più difficili da quantificare. Ogni nodo ha un accoppiamento capacitivo con tutti gli altri nodi, sebbene l'entità dell'accoppiamento diminuisca con la distanza in modo tale che siano rilevanti solo i nodi vicini. Se questi altri nodi hanno segnali su di essi, questi segnali potrebbero accoppiarsi all'ingresso digitale. Un pullup di valore inferiore riduce la impedenza della linea, riducendo la quantità di segnale parassita che raccoglierà. Fornisce inoltre un livello CC minimo garantito più elevato rispetto alla corrente di dispersione, quindi c'è più spazio tra quel livello CC e in cui l'ingresso digitale potrebbe interpretare il risultato come un livello logico basso anziché il valore logico alto previsto. Quindi quanto basta? Chiaramente il pullup da 1 MΩ in questo esempio non è abbastanza (una resistenza troppo alta). È quasi impossibile indovinare l'accoppiamento ai segnali vicini, ma vorrei almeno un margine di grandezza dell'ordine rispetto al caso DC minimo. Ciò significa che voglio almeno un pullup di 100 kΩ o inferiore, anche se se c'è molto rumore intorno vorrei che fosse più basso.

C'è un'altra considerazione che fa abbassare il pullup, e questo è il tempo di salita. La linea avrà una certa capacità parassita a terra, quindi decadrà esponenzialmente verso il valore di fornitura invece di andare immediatamente lì. Diciamo che tutta la capacità parassita aggiunge fino a 20 pF. In questo caso il pullup di 100 kΩ è di 2 µs. Ci vogliono 3 costanti di tempo per arrivare al 95% del valore di assestamento, o 6 µs in questo caso. Ciò non ha alcuna conseguenza nel tempo umano, quindi non importa in questo esempio, ma se si trattasse di una linea di bus digitale che si desidera eseguire a una velocità di dati di 200 kHz, non funzionerebbe.

Ora diamo un'occhiata all'altra considerazione concorrente, che è la corrente sprecata quando si preme l'interruttore. Se questa unità si sta esaurendo o è alimentata in modo sostanziale, pochi mA non contano. A 5 V sono necessari 5 kΩ per assorbire 1 mA. Questo è in realtà "molto" di corrente in alcuni casi, e ben più del necessario a causa delle altre considerazioni. Se si tratta di un dispositivo alimentato a batteria e l'interruttore potrebbe essere acceso per una frazione sostanziale del tempo, allora ogni µA può avere importanza e devi pensarci molto attentamente. In alcuni casi è possibile campionare l'interruttore periodicamente e attivare il pullup solo per un breve periodo intorno al campione per ridurre al minimo l'assorbimento di corrente.

Oltre a considerazioni speciali come il funzionamento della batteria, 100 kΩ è un'impedenza abbastanza elevata da farmi innervosire dal raccogliere rumore. 1 mA di corrente sprecata quando l'interruttore è acceso sembra inutilmente grande. Quindi 500 µA, il che significa che l'impedenza di 10 kΩ è circa giusta.

Come ho detto, utilizzare 10 kΩ. È un buon valore.


1
Un ulteriore requisito è che alcuni interruttori, ad esempio i comuni interruttori di tipo "tattile", siano specificati solo per una corrente molto bassa, ad esempio 1 mA. Si noti che 10k (a 5 V o inferiore) soddisfa questo requisito, ma deve essere tenuto presente quando si considerano valori di resistenza inferiori.
Wouter van Ooijen,

1
@Wouter - i miei interruttori tattili preferiti non hanno solo un massimo di 50 mA (1 mA mi sembra basso), ma anche un minimo. Per mantenere puliti i contatti, posiziono un condensatore in parallelo all'interruttore, l'idea è che il picco di corrente di cortocircuito durante la commutazione mantiene puliti i contatti. Nonostante sia stata specificata una durata di soli 100000 cicli nei test, non abbiamo avuto problemi ad usarli per 200000 cicli.
Stevenvh,

@stevenvh Potresti spiegare di più sul condensatore in parallelo con l'interruttore? Come mai, rendendo alta la corrente di corto circuito iniziale mantiene puliti i contatti?
Abdullah Kahraman,

Questa situazione in cui è possibile vedere un eccessivo accoppiamento capacitivo che influenza un valore della resistenza di pull-up. Sembra folle, ma non lo è. Ho un'odiosa uscita in tre stati, che sto leggendo con un ADC. Una scheda, un pull-up da 220k è sufficiente affinché tutti i tri-stati possano essere letti dall'ADC. Su un'altra (tavola più stretta), ho bisogno di un pull-up da 100k. Pensavo di aver preso pillole pazze per inseguirlo per tutta la mattina.
Leroy105,

23

Innanzitutto, questo tipo di tutorial è inutile, non ti insegneranno l'elettronica. Devi imparare a disegnare uno schema , il cablaggio viene dopo.
Quindi, mancando lo schema, ho dovuto derivarlo da me stesso dallo schema elettrico. OK, non è stato così difficile, ma quando disegni lo schema vedi che manca qualcosa: a cosa si collega l'interruttore tattile? Devi saperlo per rispondere alla tua domanda. Presumo che sia un input digitale del microcontrollore, ma non c'è modo di saperlo.

Esistono due situazioni: interruttore tattile aperto e interruttore chiuso.

Ω5V10kΩμ

μμμ×Ω× VDD

E se avessimo scelto un valore di resistenza diverso? Un valore inferiore significherebbe una minore caduta di tensione e la tensione di ingresso sarebbe persino superiore a 4,99 V. Ma poi ci sarebbe più corrente attraverso il resistore quando l'interruttore è chiuso, ed è qualcosa che non vuoi.
Un valore di resistenza superiore sarebbe OK quando l'interruttore è chiuso, poiché ci sarebbe meno corrente, ma la tensione di ingresso sul microcontrollore sarà inferiore a 4,99 V. Qui abbiamo un po 'di margine, quindi un valore un po' più alto potrebbe essere OK.

conclusione

  1. Ω
  2. Impara a disegnare schemi e a leggere schede tecniche

7
Non sono d'accordo sul fatto che sia inutile, infatti gli schemi elettrici realizzati con Fritzing ora sono probabilmente comuni agli schemi quando si tratta di Arduino. Il pubblico deve essere preso in considerazione.
Dave Newton,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.