GPIO: Mengapa tombol kawat ke ground bukan + 3.3V?

13

Pada sebagian besar contoh, saya telah melihat tombol pengkabelan untuk input GPIO, tombol tersebut dikabel sehingga ketika ditutup, rangkaian diselesaikan antara pin dan ground, menghasilkan input rendah pada pin. Sebuah resistor pull-up digunakan untuk mengatur nilai input menjadi tinggi. Kode pada Pi kemudian dapat mendeteksi rendah sebagai tombol.

Saya telah menghubungkan tombol ke + 3.3v sehingga sinyalnya tinggi karena ini tampaknya lebih masuk akal dan membuat kode lebih logis tetapi pasti ada alasan mengapa kebanyakan orang lebih suka menghubungkan ke ground. Apa kelebihannya?

howard10
sumber
Catatan: Ketika saya mengatakan 'pull up resistor' saya maksudkan resistor eksternal fisik atau resistor pull-up internal, yang dikonfigurasi dalam kode.
howard10

Jawaban:

17

Salah satu alasan utama mengapa tombol kabel dan logika untuk GND lebih disukai (dan kemudian disalin di internet) adalah karena pengoptimalan daya.

  • Menarik pin RENDAH dengan resistor ke GND biaya 0 watt.
  • Menarik pin TINGGI dengan resistor ke + Vcc membutuhkan daya.

Pada sirkuit kompleks atau sirkuit yang mengandalkan baterai, daya ini sangat berharga.

Alasan lain termasuk generasi EMF rendah. Pada Perangkat nirkabel yang menarik logika tinggi akan menyebabkan cross talk yang tidak perlu pada penerima RF yang sangat sensitif. Pada transceiver semacam itu ada pesawat GND yang digunakan untuk memfilter noise dan disinilah semua logika diturunkan. Prosesor kemudian menggunakan pesawat GND untuk menyaring suara yang berpindah.

Piotr Kula
sumber
3
Bagaimana cara menarik ke atas atau ke bawah dengan resistor menghabiskan daya? Arus mengalir ke input impedansi sangat tinggi pada Pi, yang akan mengurangi setiap arus turun ke sub-microAmps, yang merupakan microWatts daya.
stefandz
OK, tapi katakan saja padaku kalau aku salah. menarik pin ke bawah, yang merupakan 0v = 0wattspenggunaan, tetapi menarik pin ke atas >0watts- apa pun, mikro, mili, nano, tidak masalah. Seperti disebutkan, pada daya baterai setiap nano watt membantu. Tapi seperti yang sudah dijawab di sini ... pada USB itu tidak ada artinya. Apakah saya salah?
Piotr Kula
1
Belum tentu benar. Input digital adalah impedansi tinggi ke ground - true. Tapi mereka bukan hanya resistor. Mereka adalah gerbang input, biasanya untuk FET dan gerbang ini tidak ideal. Mereka memiliki arus bocor, dan arus bocor ini bisa dalam arah, masuk atau keluar. Oleh karena itu pulldown Anda bisa mengkonsumsi satu atau dua microwatt, sama seperti pullup.
stefandz
Jika Anda harus merancang perangkat tertanam yang menggunakan baterai 2AA dan permintaan pelanggan akan berjalan setidaknya selama 12 bulan. Dan Anda harus menarik turun / naik GPIO. Yang mana yang akan Anda gunakan untuk menghemat daya paling banyak. (Kami berbicara manajemen mikro di sini)
Piotr Kula
4
Untuk apa nilainya, saya melakukan beberapa pengukuran pada ini - dan kemenangan pull-down (untuk konsumsi daya) tetapi hanya saja. 10k pullup menjadi 3.3V = 9fW (ya femtowatts) - pulldown 10k ke ground = 5fW. Ini tentu saja tidak menghemat sedikit wilayah baterai.
stefandz
9

Ada alasan historis yang rumit mengapa insinyur kelistrikan biasanya menarik input tinggi dengan resistor, dan menggunakan sakelar untuk mengardekannya.

Namun alasan ini tidak terlalu relevan dengan hobi penggunaan Raspberry Pi. Gunakan apa pun yang masuk akal bagi Anda.

Jika Anda membuat produk komersial, atau ingin desain Anda menjadi sedikit lebih baik, Anda akan memilih pull-up dengan grounding switch untuk alasan praktis berikut:

  • Kabel arde yang panjang memiliki risiko radiasi EMI / EMC yang lebih rendah dibandingkan dengan yang tersambung ke daya
  • Membumikan sesuatu, dan menemukan titik dasar untuk terhubung, lebih mudah daripada kabel listrik
  • Jika sakelar atau kabel, biasanya ditempatkan agak jauh dari sirkuit, menjadi rusak dan baik menyambungkan kawat atau bagian sakelar internal ke kasing atau pengguna, tidak ada salahnya dilakukan - semuanya ada di tanah
Adam Davis
sumber
2

Secara ketat tidak perlu untuk resistor pull-up, GPIO BMC memiliki resistor pull-up internal yang diaktifkan ketika diprogram sebagai input, meskipun tidak ada salahnya.

Ini adalah praktik yang buruk untuk menghubungkan pin GPIO langsung ke 3V3 atau GND. GPIO bersifat dua arah, dan jika diprogram sebagai input, ini tidak akan menimbulkan masalah. Di sisi lain jika diprogram sebagai output akan menyebabkan arus berlebih ditarik.

Desain yang baik (aman) akan menggunakan resistor seri (1 kΩ) secara seri dengan tombol untuk membatasi arus. Untuk alasan yang dibuat oleh Adam Davis, lebih disukai untuk menghubungkan tombol ke ground, dan menemukan resistor pelindung dekat dengan pin GPIO.

Milliways
sumber
Satu-satunya masalah adalah bahwa selama fase boot 1-3 pin-pin ini mengambang (penyerahan GPU ke CPU) kemudian pada Fase 4 selama Linux Kernel melakukan boot, PIN diatur ke kondisi yang benar. Ini dapat menyebabkan masalah serius dengan gerbang yang menunggu logika. Jadi, disarankan untuk menariknya ke bawah agar periode mengambang saat boot tidak membuat sirkuit Anda menjadi gila!
Piotr Kula
1

Saya tidak berpikir ada alasan untuk memilih satu daripada yang lain di RPi. Kebanyakan orang mungkin hanya menyalin atau porting sirkuit yang mereka lihat di tempat lain.

Saat menghubungkan rangkaian (dengan kabel atau PCB) tidak apa-apa untuk memilih yang mana yang lebih nyaman dan menerjemahkannya ke makna yang tepat dalam perangkat lunak Anda.

John La Rooy
sumber
0

Di masa lalu TTL butuh lebih banyak saat ini untuk menarik pin rendah daripada menariknya tinggi. Jadi resistor pullup bisa menjadi resistansi yang lebih tinggi (dan karenanya lebih sedikit pemborosan daya) dibandingkan resistor pull-down. Itu tidak masalah dengan CMOS modern tetapi kebiasaan lama sulit.

Peter Green
sumber
-1

Menghubungkan pin ke ground dengan resistor pullup internal berarti Anda menggunakan lebih sedikit bagian. Yang Anda butuhkan hanyalah sebuah tombol; tidak perlu resistor eksternal untuk membatasi arus.

tavis
sumber