Sunday 18 March 2018

Pull-Up dan Pull Down Resistor

Pull-Up dan Pull-Down resistor adalah penambahan resistor pada I/O MCU (Microcontroller unit), yang membedakan antara Pull-up dan Pull-down adalah penempatan resistor pada kutup arus listrik, juga pada input.

Untuk Pull-up resistor, salah satu kaki resistor dihubungkan ke kutub Vcc (5v/3.3v pada RasPi), sedangkan kaki resistor yang lain dicabangkan, satu ke pin input MCU, dan yang lain ke switch on/off untuk disambungkan ke ground (0V).
Rangkaian Pull-Up

Pada gambar diatas kita bisa lihat, Vcc tersambung ke pin, sehingga pin akan mendapatkan signal HIGH, dan ketika push button ditekan, arus Vcc akan mengalir ke ground (0v), sehingga pin akan mendapat signal LOW. Kondisi ini mirip (tidak sama) dengan kondisi "normaly close".

Sedangkan Pull-down resistor, salah satu kaki resistor dihubungkan ke kutub ground (0v), sedangkan kaki resistor yang lain dicabangkan, satu ke pin input MCU, dan yang lain ke switch on/off untuk disambungkan ke Vcc (5v/3.3v).

Rangkaian Pull-Down

Pada rangkaian pull-down, Vcc tidak terhubung dengan pin, tetapi pin terhubung dengan ground (0v),
pin dalam keadaan LOW, dan ketika push button ditekan, Vcc akan terhubung dengan pin, kondisi pin sekarang menjadi HIGH. Rangkaian ini mirip dengan kondisi "normally open".

Kegunaanya adalah untuk menstabilkan signal antara HIGH atau LOW yang akan diterima pin lebih akurat. Bila kita tidak menggunakan rangkaian pull-up atau pull-down, signal yang akan terbaca pada pin akan berubah-ubah. Kondisi yang berubah-ubah ini disebut floating.

Kondisi floating ini terjadi karena pin input tidak terhubung ke salah satu kondisi (Vcc atau 0v) yang menjadi dasar pin input mengetahui statusnya HIGH atau LOW. Status HIGH diperoleh bila pin input terhubung dengan Vcc, dan status LOW diperoleh bila pin terhubung dengan ground (0v). Karena pin tidak terhubung dengan salah satu kondisi tersebut, kondisi pin menjadi floating, karena pada pin tersebut memiliki listrik juga, sehingga pin dapat terbaca HIGH karena listriknya sendiri, dan LOW karena pin tersebut juga terhubung ke ground secara internal menggunakan resistor (1MOhm).

Lihat gambar di bawah ini:


Bila kita tekan push button 1, maka pin akan menghasilkan LOW, bila kita tekan push button 2 maka pin akan menghasilkan HIGH. Bila pin tidak terhubung kesalah satu syarat tersebut, pin akan menghasilkan HIGH dan LOW tidak terkendali, karena didalam MCU, pin terhubung dengan Vcc dan ground. Gambar MCU yang terhubung dengan Vcc dan Ground diilustrasikan secara kasar, gambar tersebut hanya untuk menerangkan kondisi floating saja.

Pada prinsipnya antara Pull-up dan Pull-down adalah sama, Pull-up adalah menghubungkan pin dengan Vcc yang dijembatani resistor, dan Pull down adalah menghubungkan pin dengan 0v yang dijembatani oleh resistor. sehingga pin akan selalu terhubung dengan ground (0v) atau Vcc setiap saat.

Besar tahanan pada resistor secara kasar menggunakan 10kΩ-20kΩ baik untuk pull-up maupun pull-down dengan voltase 3.3v. Bila tahanan resistor terlalu besar (1MΩ) pada pull-up resistor kemungkinan pin tidak akan mendapatkan kondisi HIGH, karena arus listrik didapatkan terlalu kecil. Perlu diketahui juga rangkaian pin pada MCU terhubung ke ground (0v) dengan menggunakan resistor 1MΩ.

Sekarang kita coba hitung arus yang akan diterima pin (hukum Ohm) dengan menggunakan resistor 10kΩ-secara umum:

V = I R
dimana V adalah Vcc yang akan mengaliri listrik ke pin (5v atau 3.3V)
R adalah tahanan resistor 10kΩ(voltase 5v untuk input tidak direkomendasikan, gunakan 3.3v untuk input pin Raspi)
Jadi 
I = V / R
I = 5v / 10.000Ω
I = 0.0005 A atau 0.5mA

Atau kita ingin memberikan arus listrik ke pin sebesar 1mA, dengan menggunakan tegangan 3.3v

V = I R
R = V / I
R = 3.3 / 0.001
R = 3300 atau 3.3kOhm

Harap diingat satuan unit yang digunakan rumus diatas untuk V adalah volt, I adalah amper (bukan miliamper) dan R adalah Ω (Ohm bukan kilo atau mega Ohm) jadi bila satuan unit berbeda, kita harus mengkonversikannya dahulu.

Besarnya arus listrik yang direkomendasikan mengalir ke pin, secara resmi dari produsen Raspberry Pi, tidak saya temukan. Kata rekomendasi arus listrik untuk pin di blog ini berdasarkan pengalaman dan informasi dibeberapa forum terkait.

Kondisi HIGH dan LOW ini tidak selamanya benar, dengan 3,3v - 5v akan memberikan input HIGH atau 1, dan bila 0v akan memberikian input LOW atau 0. Ini disebabkan tiap MCU memiliki standar yang berbeda-beda. Contoh datasheet untuk TTL 7400 series dibawah ini:

Pada table diatas yang masih 1 familly TTL 7400 memiliki perbedaan yang berbeda pada arus listrik yang digunakan, walaupun pengguna voltase yang sama.

Jadi kondisi HIGH dan LOW voltase (V) dan arus listrik (I) berbeda pada antara TTL (transistor-transistor logic) sehingga antara RasPi dan Arduino, kemungkinan akan lain kondisinya. Baca lagi datasheetnya.

Untuk menggali lebih dalam kondisi HIGH dan LOW, kita asumsikan 3.3v/5v adalah kondisi voltase HIGH, dan 0v adalah kondisi voltase LOW. Diantara 0v-3.3v/5v ini ada 3 bagian kondisi yang berbeda, yaitu:

  1. 0v sampai LOWmax volt adalah kondisi LOW
  2. LOWmax volt sampai HIGHmin volt adalah kondisi floating
  3. HIGHmin volt sampai 3.3v/5v adalah kondisi HIGH
Nilai LOWmax volt dan HIGHmin volt ini yang harus kita ketahui, untuk menentukan HIGH tegangan minimun dan LOW tegangan maksimal. Kurang lebih gambarnya seperti dibawah ini:
Kita akan mencari nilai floating dengan asumsikan lagi Vcc HIGHmin adalah 2v, 50µA  dan Vcc LOWmax adalah 0.8v, -2mA menurut salah satu type TTL table diatas.

RHIGHmax = (Vcc - VHIGHmin) / IHighmin
RHIGHmax = (3.3v - 2v) / 0.00005
RHIGHmax = 26000Ω
RHIGHmax 26kΩ

RLOWmin = (Vcc-VLOWmax)/ILOWmax
RLOWmin = (3.3v - 0.8) / 0.000002
RLOWmin = 1250000Ohm 
RLOWmin = 1.25MΩ

Kesimpulanya berdasarkan data seperti itu (data dari asumsi, bukan sesungguhnya pada RasPi atau Arduino) dengan menggunakan resistor 26kΩ sampai 1.25MΩ kita masuk ke area floating. Kurang dari 26kΩ masuk kondisi HIGH, lebih dari 1.25MΩ masuk kondisi LOW.

2 comments: