Bagaimana cara menghitung nilai yang diperlukan untuk resistor pull-up?

98

Ada banyak tutorial yang menggunakan resistor pull-up atau pull-down bersamaan dengan saklar untuk menghindari tanah mengambang, misalnya

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

Banyak dari proyek ini menggunakan resistor 10K, hanya menyatakan bahwa itu adalah nilai yang baik.

Diberikan sirkuit tertentu, bagaimana cara menentukan nilai yang sesuai untuk resistor pull-down? Bisakah itu dihitung, atau apakah paling baik ditentukan dengan eksperimen?

Mark Harrison
sumber
Saya menemukan tutorial ini dari sparkfun pengantar yang bagus untuk pull-up dan pull-down resistor sparkfun Pull-up Resistor dan jawaban yang diberikan untuk pertanyaan Anda yang paling bagus diposting sangat bagus.
Richard Chambers

Jawaban:

82

Jawaban Cepat: Pengalaman dan eksperimen adalah bagaimana Anda mengetahui nilai pullup / pull-down yang tepat.

Jawaban Panjang: Resistor pullup / down adalah R di sirkuit timing RC. Kecepatan transisi sinyal Anda akan tergantung pada R (resistor Anda) dan C (kapasitansi sinyal itu). Seringkali kali C sulit diketahui secara pasti karena tergantung pada banyak faktor, termasuk bagaimana jejak tersebut diarahkan pada PCB. Karena Anda tidak tahu C, Anda tidak tahu apa yang seharusnya R. Di situlah pengalaman dan eksperimen masuk.

Berikut adalah beberapa aturan praktis ketika menebak nilai resistor pullup / down yang baik:

  • Untuk sebagian besar hal, 3.3k hingga 10k ohm berfungsi dengan baik.
  • Untuk sirkuit peka daya, gunakan nilai yang lebih tinggi. 50k atau bahkan 100k ohm dapat bekerja untuk banyak aplikasi (tetapi tidak semua).
  • Untuk sirkuit peka kecepatan, gunakan nilai yang lebih rendah. 1 k ohm cukup umum, sedangkan nilai serendah 200 ohm tidak pernah terdengar.
  • Terkadang, seperti dengan I2C, "standar" menentukan nilai spesifik untuk digunakan. Lain kali catatan aplikasi chip mungkin merekomendasikan nilai.

sumber
10
200 ohm untuk penarikan? Wow, itu banyak arus diam.
0x6d64
4
@ 0x6d64 - Anda menganggap busnya rendah saat diam.
Connor Wolf
3
Texas Instruments memiliki referensi yang sangat bagus yang tidak hanya menjelaskan cara menghitung nilai untuk resistor pull-up I2C, tetapi juga bagaimana rumus tersebut diturunkan. Lihat Laporan Aplikasi Perhitungan Resistor Penarik Bus I2C di ti.com/lit/an/slva689/slva689.pdf .
JamieSee
77

Gunakan 10 kΩ, ini nilai yang bagus.

Untuk lebih detail, kita harus melihat apa yang dilakukan pullup. Katakanlah Anda memiliki tombol yang ingin Anda baca dengan mikrokontroler. Tombol adalah saklar SPST (Single Pole Single Throw) sesaat. Ini memiliki dua titik koneksi yang terhubung atau tidak. Ketika tombol ditekan, kedua titik terhubung (saklar ditutup). Ketika dirilis, mereka tidak terhubung (sakelar terbuka). Mikrokontroler tidak secara inheren mendeteksi koneksi atau pemutusan. Yang mereka rasakan adalah tegangan. Karena saklar ini hanya memiliki dua keadaan, masuk akal untuk menggunakan input digital, yang dirancang untuk hanya di salah satu dari dua keadaan. Mikro dapat merasakan di mana input digital berada secara langsung.

Pullup membantu mengubah koneksi buka / tutup sakelar ke tegangan rendah atau tinggi yang dapat dirasakan mikrokontroler. Satu sisi saklar terhubung ke ground dan yang lainnya ke input digital. Ketika sakelar ditekan, saluran dipaksa rendah karena sakelar pada dasarnya memendekkannya ke ground. Namun, ketika sakelar dilepaskan, tidak ada yang mengarahkan saluran ke tegangan tertentu. Itu hanya bisa tetap rendah, mengambil sinyal terdekat lainnya dengan kopling kapasitif, atau akhirnya melayang ke tegangan tertentu karena sedikit kebocoran arus melalui input digital. Tugas resistor pullup adalah memberikan tingkat tinggi yang dijamin positif saat sakelar terbuka, tetapi tetap memungkinkan sakelar tersebut untuk mempersingkat jalur ke ground dengan aman saat ditutup.

Ada dua persyaratan utama yang bersaing pada ukuran resistor pullup. Itu harus cukup rendah untuk secara solid menarik garis tinggi, tetapi cukup tinggi untuk tidak menyebabkan terlalu banyak arus mengalir ketika saklar ditutup. Keduanya obyektif subyektif dan kepentingan relatif mereka tergantung pada situasi. Secara umum, Anda membuat pullup cukup rendah untuk memastikan garis tinggi ketika saklar terbuka, mengingat semua hal yang mungkin membuat garis rendah jika tidak.

Mari kita lihat apa yang diperlukan untuk menarik garis. Melihat hanya pada persyaratan DC mengungkap arus bocor dari jalur input digital. Input digital ideal memiliki impedansi tak terbatas. Yang nyata tidak, tentu saja, dan sejauh mana mereka tidak ideal biasanya dinyatakan sebagai arus bocor maksimum yang dapat keluar atau masuk ke pin. Katakanlah mikro Anda ditentukan untuk kebocoran maksimum 1 μA pada pin input digitalnya. Karena pullup harus menjaga garis tetap tinggi, kasus terburuk adalah mengasumsikan pin terlihat seperti sink arus 1 μA ke ground. Jika Anda menggunakan pullup 1 MΩ, misalnya, maka 1 μA akan menyebabkan 1 Volt melintasi resistor 1 MΩ. Katakanlah ini adalah sistem 5V, jadi itu berarti pin hanya dijamin hingga 4V. Sekarang Anda harus melihat spesifikasi input digital dan melihat apa persyaratan tegangan minimum untuk level logika yang tinggi. Itu bisa 80% dari Vdd untuk beberapa micros, yang akan menjadi 4V dalam kasus ini. Oleh karena itu penarikan 1 MΩ tepat di margin. Anda memerlukan setidaknya sedikit lebih sedikit dari itu untuk memastikan perilaku yang benar karena pertimbangan DC.

Namun, ada pertimbangan lain, dan ini lebih sulit untuk diukur. Setiap node memiliki beberapa kopling kapasitif untuk semua node lain, meskipun besarnya kopling jatuh dengan jarak sedemikian rupa sehingga hanya node terdekat yang relevan. Jika node-node lain ini memiliki sinyal padanya, sinyal-sinyal ini dapat berpasangan dengan input digital Anda. Penarikan nilai yang lebih rendah membuat impedansi saluran lebih rendah, yang mengurangi jumlah sinyal liar yang akan diambilnya. Ini juga memberi Anda level DC minimum yang dijamin lebih tinggi terhadap arus bocor, jadi ada lebih banyak ruang antara level DC dan di mana input digital mungkin menginterpretasikan hasilnya sebagai logika rendah, bukan logika tinggi yang dimaksud. Jadi berapa banyak yang cukup? Jelas bahwa penarikan 1 MΩ dalam contoh ini tidak cukup (resistansi terlalu tinggi). Hampir tidak mungkin untuk menebak sambungan ke sinyal terdekat, tapi saya ingin setidaknya urutan margin besarnya di atas kasus DC minimum. Itu berarti saya ingin pullup 100 kΩ atau lebih rendah setidaknya, meskipun jika ada banyak suara di sekitar saya ingin itu lebih rendah.

Ada pertimbangan lain yang mendorong pullup lebih rendah, dan itu adalah waktu naik. Jalur ini akan memiliki beberapa kapasitansi liar ke tanah, sehingga akan secara eksponensial membusuk ke nilai pasokan daripada langsung pergi ke sana. Katakanlah semua kapasitansi liar bertambah hingga 20 pF. Itu kali penarikan 100 kΩ adalah 2 μs. Dibutuhkan 3 konstanta waktu untuk mencapai 95% dari nilai settling, atau 6 μs dalam kasus ini. Itu tidak ada konsekuensi dalam waktu manusia jadi tidak masalah dalam contoh ini, tetapi jika ini adalah jalur bus digital yang ingin Anda jalankan pada kecepatan data 200 kHz itu tidak akan berhasil.

Sekarang mari kita lihat pertimbangan lain yang bersaing, yang merupakan arus terbuang saat saklar ditekan. Jika unit ini kehabisan daya saluran atau menangani daya yang besar, beberapa mA tidak masalah. Pada 5V dibutuhkan 5 kΩ untuk menggambar 1 mA. Itu sebenarnya "banyak" saat ini dalam beberapa kasus, dan jauh lebih dari yang dibutuhkan karena pertimbangan lain. Jika ini adalah perangkat yang bertenaga baterai dan sakelarnya bisa hidup untuk sebagian besar waktu, maka setiap μA mungkin penting dan Anda harus memikirkannya dengan sangat hati-hati. Dalam beberapa kasus, Anda dapat mencicipi sakelar secara berkala dan hanya mengaktifkan pullup untuk waktu yang singkat di sekitar sampel untuk meminimalkan penarikan saat ini.

Selain pertimbangan khusus seperti operasi baterai, 100 kΩ adalah impedansi yang cukup tinggi untuk membuat saya gugup menerima suara. Arus 1 mA terbuang sia-sia saat sakelar dinyalakan sepertinya tidak perlu besar. Jadi 500 µA, yang berarti impedansi 10 kΩ hampir benar.

Seperti yang saya katakan, gunakan 10 kΩ. Itu nilai yang bagus.

Olin Lathrop
sumber
1
Dan persyaratan tambahan adalah bahwa beberapa sakelar, misalnya sakelar tipe 'kebijaksanaan' yang umum, ditentukan hanya untuk arus yang sangat rendah, misalnya 1 mA. Perhatikan bahwa 10k (pada 5V atau lebih rendah) memenuhi persyaratan ini, tetapi harus diingat jika nilai resistor yang lebih rendah dipertimbangkan.
Wouter van Ooijen
1
@Wouter - switch kebijaksanaan favorit saya tidak hanya memiliki maksimum 50mA (1mA tampaknya rendah bagi saya), tetapi juga minimum. Untuk menjaga kontak tetap bersih, saya menempatkan kapasitor secara paralel ke sakelar, idenya adalah bahwa arus hubung singkat memuncak saat sakelar menjaga kontak tetap bersih. Meskipun umur hanya 100.000 siklus ditentukan dalam pengujian, kami tidak punya masalah menggunakannya hingga 200.000 siklus.
stevenvh
@stevenvh Bisakah Anda menjelaskan lebih lanjut tentang kapasitor secara paralel dengan sakelar? Bagaimana bisa, membuat arus hubung singkat awal tetap tinggi menjaga kontak tetap bersih?
abdullah kahraman
Situasi ini di mana Anda bisa melihat kopling kapasitif yang berlebihan mempengaruhi nilai resistor pull-up. Tampaknya gila, tapi ternyata tidak. Saya memiliki keluaran tri-state yang menjengkelkan, yang saya baca dengan ADC. Satu papan satu, 220k pull-up sudah cukup sehingga semua tri-state dapat dibaca oleh ADC. Di lain (papan lebih ketat), saya perlu 100k pull-up. Kupikir aku sedang pil gila mengejar ini sepanjang pagi.
Leroy105
23

Pertama, tutorial semacam ini tidak berguna, mereka tidak akan mengajarkan Anda elektronik. Anda harus belajar cara menggambar skema , kabel datang sesudahnya.
Jadi, karena tidak memiliki skema, saya harus mengambilnya sendiri dari diagram pengkabelan. OK, itu tidak terlalu sulit, tetapi ketika Anda menggambar skematis Anda melihat ada sesuatu yang hilang: apa yang terhubung dengan saklar kebijaksanaan? Anda harus tahu itu untuk menjawab pertanyaan Anda. Saya kira itu adalah input digital dari mikrokontroler, tetapi tidak ada cara untuk mengetahuinya.

Ada dua situasi: tact switch terbuka, dan switch tertutup.

Ω5V10kΩμ

μμμ×Ω× VDD

Bagaimana jika kita memilih nilai resistor yang berbeda? Nilai yang lebih rendah berarti penurunan tegangan yang lebih sedikit dan tegangan input akan lebih tinggi dari 4.99V. Tetapi kemudian akan ada lebih banyak arus melalui resistor ketika saklar ditutup, dan itu adalah sesuatu yang tidak Anda inginkan.
Nilai resistor yang lebih tinggi akan baik-baik saja ketika sakelar ditutup, karena akan ada lebih sedikit arus, tetapi tegangan input pada mikrokontroler akan lebih rendah dari 4.99V. Kami memiliki beberapa ruang kepala di sini, jadi nilai yang agak lebih tinggi mungkin OK.

kesimpulan

  1. Ω
  2. Belajar menggambar skema, dan membaca lembar data
stevenvh
sumber
7
Saya tidak setuju bahwa itu tidak berguna, bahkan diagram pengkabelan yang dibuat dengan Fritzing mungkin sekarang lebih umum daripada skema ketika datang ke Arduino. Penonton harus dipertimbangkan.
Dave Newton