Nyalakan relay 5V dari pin GPIO

22

Saya memiliki bank relay (5) yang ingin saya jalankan dari Pi saya. Saya menggunakan relay Konektivitas 5V TE, yang ditenagai oleh kit relay daya tinggi Sparkfun, yang menggunakan transistor NPN untuk memicu relai.

Sejauh ini masalah yang saya alami adalah saya tidak bisa menghidupkan relay. Apakah pin keluaran GPIO tidak memasok 5V? Saya pikir Pi lakukan pada GPIO.

hightekjonathan
sumber
4
Tidak ada pin Gpio yang 3,3 volt.
Steve Robillard
Lalu apakah Anda tahu cara saya bisa memodifikasi sirkuit saya?
hightekjonathan
1
Ini akan membutuhkan pasokan 5 volt dan ingat untuk menghubungkan semua alasan bersama - Saya melakukan ini untuk mengganti lampu sinyal menara seperti ini ebay.com/itm/...
Steve Robillard
2
Saya akan menyarankan membuatnya bekerja dengan catu daya terpisah terlebih dahulu kemudian mengatasi kompleksitas kebutuhan daya Pi dan portabilitas. Seperti yang mereka katakan cara terbaik untuk makan gajah adalah satu gigitan pada satu waktu.
Steve Robillard
1
Semua alasan terikat bersama. Dan positif 5v terhubung ke common di darlington. Saya mengikuti diagram.
hightekjonathan

Jawaban:

36

Kenapa tidak seperti ini saja?

Raspberry Pi beralih antara 0 dan 3V3, lebih dari cukup untuk memenuhi Q1, yang mengambil alih pekerjaan "berat": menghidupkan / mematikan relai + 5V. Tergantung pada relay yang Anda gunakan, modifikasi kecil untuk D1 dan Q1 mungkin berlaku.

Raspberry Pi mengendalikan relay

GeertVc
sumber
Jawaban yang sangat bagus! Dan cara yang sangat aman untuk melakukan ini.
Piotr Kula
3
Jawaban yang bagus, yang seharusnya memecahkan "pertanyaan relay" sekali dan untuk semua. Mungkin akan lebih baik untuk menambahkan bahwa fakta bahwa tegangan pasokan Pi dan relay harus sama atau setidaknya berbagi GND umum. Sementara ini mungkin tampak jelas bagi insinyur listrik itu bisa menjadi perangkap bagi pemula.
Ghanima
@ Ganima: Ya, Anda ada benarnya, pasti. Tapi seperti yang Anda sebutkan, bagi saya itu "jelas" jika saya melihat simbol tanah, bahwa ini adalah untuk kedua belah pihak (di sini: raspberry dan estafet). Dan saya sengaja menyalakan relay dengan + 5V (bahkan bisa + 24V atau apa pun tegangan DC rendah aman) untuk secara eksplisit menunjukkan kepada audiens itu tujuan dari rangkaian di atas untuk memiliki tegangan yang berbeda di kedua situs. Itulah tujuan dari rangkaian itu.
GeertVc
1
Apa tujuan R2?
erikH
2
@ erikH: resistor ini akan memastikan basis Q1 memiliki level yang tetap (dalam hal ini, terhubung ke ground) jika input di R1 akan mengambang. Jika Anda yakin input tidak akan pernah mengambang, maka R2 tidak diperlukan, tapi itu semacam "perlindungan". Jika input dapat mengambang dan Anda tidak memiliki R2 yang terhubung, maka transistor dapat mulai beralih dengan cara yang tidak terkontrol.
GeertVc
7

# Pengantar #

OP ingin menggunakan Rpi untuk secara aman mengontrol bank dari modul relay 5 Beefcake Sparkfun . Dia punya masalah karena level logika Rpi GPIO adalah 3.3V, tetapi relay-nya menggunakan kontrol logika 5V. Dia ingin tahu bagaimana memodifikasi Rpi untuk mengatasi masalah perbedaan tingkat logis. Pilihannya termasuk yang berikut: menggunakan transistor BC5468 untuk menggerakkan koil relay; mendapatkan relay isolasi opto dan mengendarainya menggunakan ULN2803; menggunakan driver sumber seperti UDN2981, ...

Setelah diselidiki, saya sekarang menyarankan beberapa solusi, dengan pro dan kontra masing-masing. OP dapat memilih solusi setelah perdagangan risiko, keandalan, biaya dll.

# Isi #

Solusi 1 - Memodifikasi resistor bias transistor NPN

Solusi 2 - Menggunakan UDN2981 untuk menggeser sinyal 3.3IO GPIO Rpi menjadi 5V

Solusi 3 - Menggunakan 74HC03 dan 74HC04 untuk menggeser sinyal 3.3IO GPIO Rpi menjadi 5V

Solusi 4 - Menggunakan 74HCT125 untuk melakukan konversi tingkat logis

Solusi 5 - Menggunakan TXS0102 untuk melakukan konversi level logis

Bagian 6 - Menggunakan 2N2222 untuk melakukan konversi level logis

Solusi 7 - Menggunakan 2N7000 untuk melakukan konversi level logis

FAQ1 - Bagaimana cara menghidupkan Rpi dan modul relay dan mengikat bersama-sama

FAQ2 - Bagaimana menghindari masalah input mengambang

FAQ3 - Relay saya selalu menyala, apakah input Tinggi atau Rendah, apakah karena sinyal Rpi Rendah tidak cukup rendah?

FAQ3 - GPIO Rpi saya Sinyal rendah tidak dapat mematikan relai, tetapi mengatur GPIO sebagai input akan dilakukan. Apakah saya akan melukai Rpi saya jika melakukannya?

Saran Pemecahan Masalah Perangkat Keras

Saran Pemecahan Masalah Perangkat Lunak

Referensi

# Solusi 1. Memodifikasi biasing transistor NPN untuk membuatnya 3.3V kompatibel #

Ada dua jenis solusi umum:

(1) memodifikasi sirkuit input level logika 5V modul untuk beradaptasi dengan sinyal 3.3V,

(2) menggunakan konverter level logis 3.3V ke 5V untuk menggeser sinyal 3.3V dari Rpi menjadi 5V.

Saya sekarang mulai dengan (1).

Penyelidikan

Modul relai Beefcake Sparkfun memiliki transistor NPN 2N3904 (Q2) yang menggerakkan koil (U1). Ini dirancang untuk sinyal logika 5V Arduino.

Skema kit kontrol relay SparkFun

Saya memiliki modul transistor NPN yang sama, KY019 yang dapat digerakkan oleh sinyal 3.3V dari Rpi. Jadi saya memeriksa persyaratan sinyal inputnya untuk menemukan mengapa KY019 dapat menghibur sinyal 3.3V tetapi Beecake tidak bisa.

KY019 spec

Saya menemukan bahwa KY-019 memiliki level pemicu 2.5V dan 0.1mA . Sinyal ini diperkuat oleh transistor NPN menjadi 50mA, cukup tinggi untuk mengaktifkan koil untuk mengaktifkan relai.

Tongling coil spec

Rpi GPIO (dengan tingkat tinggi di atas 2.8V , dan batas maksimum saat ini 16mA ), dapat dengan mudah mendapatkan 4mA, seharusnya tidak ada masalah langsung mengemudi modul.

Koil memiliki waktu respons 10 mS. Saya memprogram pin GPIO Rpi 17 untuk beralih modul relay pada periode 40mS (25cps) dan menemukan relay mengklik bahagia seperti yang diharapkan. (Saya menggunakan kabel penghubung sepanjang 2 meter untuk sinyal GPIO, jadi sinyal pada saat input relay agak bising.)

Uji beralih KY019

Cara memodifikasi modul Beefcake agar kompatibel dengan logika 3.3V

Transistor Beefcake NPN memiliki resistor pembatas arus R2 dengan nilai 1K. Resistor ini membatasi arus basis pada level tinggi logika Arduino 5V. Arus basis dalam batas, setelah amplifikasi (biasanya hFE> 100), cukup besar untuk mengaktifkan koil.

Perhitungan arus Arduino 5V GPIO ke modul relai Beefcake:

Arduino saat ini saya ~ (4V [Tinggi Arduino] - 1V [VCE (sat)]) / 1K [R]) = 3V / 1K = 3mA

Namun, sinyal Tinggi logika Rpi lebih rendah dari Arduino, sehingga arus terbatas yang sesuai lebih kecil dan setelah amplifikasi tidak cukup besar untuk menggerakkan koil.

Rpi arus i ~ ((3V [Rpi Tinggi] - 1V) / 1K = 2mA

Modifikasi sederhana - cukup ganti 1K R2 dengan resistor yang lebih kecil, katakanlah 510R.

Rpi current i (setelah modifikasi) = (3V - 1V) / 501R = 4mA

Saya membuat perkiraan pendidikan berdasarkan analisis rangkaian dan eksperimen. Saya kira dugaan saya 90% benar.

Analisis resiko

Meskipun transistor NPN 2N3094 sinyal kecil dapat digunakan untuk switching beban kecil, itu tidak dapat diandalkan. Untuk switching relai, lebih aman menggunakan transistor daya seperti SS8050, UDN2981, yang dirancang khusus untuk beban induktif.

OP menginginkan metode yang aman yang tidak akan menggoreng Pi-nya, jadi untuk keandalan, driver sumber seperti UDN2981 adalah cara yang harus dilakukan.

/ ...

# Solusi 2 - Menggunakan UDN2981 untuk menggerakkan modul relai Beefcake #

Komentar menunjukkan bahwa modul relay Sparkfun Beefcake OP adalah pemicu tingkat tinggi, oleh karena itu driver wastafel yang umum digunakan ULN2803 tidak dapat digunakan. Driver yang mirip dengan ULN2803, tetapi sumber saat ini, daripada tenggelam saat ini, harus digunakan sebagai gantinya

Saya pikir UDN2981 adalah driver yang cocok untuk modul relay OP.

Saya berhasil memverifikasi UDN2981 mengendarai modul relay tirgger tingkat tinggi mirip dengan Beefcak, dan ULN2803 modul pemicu rendah. Di bawah ini adalah ringkasan.

UDN2981 yang mengendalikan pemicu tinggi, modul relay jenis input transistor NPN

Saya pertama kali menguji secara manual UDN2981, tanpa menghubungkan ke Rpi, untuk berkedip 4 LED, untuk memastikan sirkuit berfungsi dengan baik.

uln2803 udn2981 foto

Kemudian saya mengatur 4 modul relay input tipe transistor NPN (KY019), dan menghubungkan 4 input modul relay ke 4 output saluran UDN2981.

KY019 x 4

Lalu saya menghubungkan 4 pin RpIO 3.3V GPIO langsung ke input saluran 4 UDN2981. Saya menggunakan fungsi python berikut untuk beralih 4 modul relay pada 25 cps.

fungsi python untuk mengaktifkan 4 relay

Hasilnya bagus. 4 modul relai klik dan LED berkedip pada 25cps seperti yang diharapkan. Sinyal output GPIO Rpi tetap di dekat 3.3V, dan output sinyal UDN sekitar 4.0V, menyiratkan bahwa tidak ada input yang kelebihan beban.

Alihkan bentuk gelombang modul

UDN2981 mengendalikan modul relay pemicu tinggi, terisolasi-opto

OP juga mempertimbangkan menggunakan modul relai terisolasi opto karena lebih aman. Saya telah berhasil menggunakan UDN2981 yang sama untuk mengontrol 4 pemicu tingkat tinggi, modul relai terisolasi opto (MK055).

Modul relai MK055

Sebenarnya UDN2981 dapat digunakan untuk mengontrol segala jenis modul pemicu Tinggi, tidak peduli transistor NPN atau tipe terisolasi OPTO.

Namun, untuk modul pemicu Rendah, apakah transistor PNP atau opto terisolasi, driver sumber UDN2981 tidak berfungsi, ULN2803 atau driver sink lainnya harus digunakan.

ULN2803 mengendalikan input transistor PNP pemicu rendah atau modul relai terisolasi opto

Saya berhasil memverifikasi driver sink ULN2083 dapat mengontrol 4 modul relay terisolasi rendah memicu opto. Saya pertama kali menguji secara manual berkedip 4 LED, kemudian menggunakan fungsi python yang sama di atas untuk menguji 4 modul. Hasilnya juga bagus.

Modul relai MK101

Diskusi

ULN2803 dan UDN2981 Pro dan Kontra

Pro

  1. ULN2803 dan UDN2981 dapat langsung digerakkan oleh sinyal logika TTL atau CMOS dengan tegangan pasokan 3,3V atau 5V.

  2. Output 500mA pengenal mereka dengan dioda penjepit cocok untuk mengganti relay dan motor penggerak.

Cons

  1. ULN2803 dan terutama UDN2981 tidak begitu umum.

  2. Mereka memiliki 8 saluran dan karenanya memiliki ukuran paket DIP 18 pin yang lebih besar. Untuk saluran yang lebih sedikit, 74HC03 / 04 atau 74HCT125 yang lebih umum dengan paket DIP 14 pin lebih umum dan lebih mudah ditangani ..

# Solusi 3 - Menggunakan 74HC03 dan 74HC04 untuk menggeser sinyal 3.3IO GPIO RPi #

Menggunakan UDN2981 untuk menggerakkan modul relai adalah cara yang sangat mematikan, karena dirancang dengan built in fly back dioda untuk secara langsung memberi energi relai.

UDN2981 tidak umum dan tidak untuk pemula yang bereksperimen. Untuk pemula, IC gerbang logika yang sangat umum dan murah, 74HC03 Quad NAND gates, dan HC04 Hex Inverters dapat melakukan pekerjaan yang sama seperti UDN2981, mengubah sinyal logika 3.3V.

Saya telah berhasil memverifikasi HC03 dan HC04 menggeser logika 3.3V ke 5V dan menemukan itu berfungsi untuk input transistor dan modul pemicu tingkat tinggi yang di opto terisolasi.

hc03 04 skema konverter

hc03 hc04 ky019 mk047

hc03 hc04 ky019 ky047

# Referensi #

R1. Bagaimana cara kerja Relay Listrik? - TechyDIY

R2. Relay Switch Circuit - Tutorial Elektronik

R3. Panduan Hookup Kontrol Relay Beefcake - SparkFun

R4. Buffer Digital dan Buffer Tri-state - Tutorial Elektronik

R5. Resistor Penarik - Tutorial Elektronik

R6. Tutorial Level Logika - SparkFun

Arduino Voh 4.2V, Vol 0.9V

R7. Tegangan pin dan GPIO Rpi spesifikasi saat ini

Rpi Voh 2.4V, Vol 0.7V

R8. Bipolar Transistor - Tutorial Elektronik

================

# A.3 Konverter Level Logis menggunakan HCT125 #

Jadi saya menguji konverter lainnya, HCT125. Saya senang menemukan bahwa itu bekerja dengan baik. Sinyal HCT125 dikonversi 5V0 tidak jatuh ketika terhubung ke modul relai transistor NPN.

Konverter tingkat HCT125

/ ...

Akhir dari Lampiran

** * Jawaban Panjang Untuk dihapus * **

Jawaban panjang ini terlalu panjang lebar dan berantakan. Sekarang saya mencoba untuk menghapus paragraf yang tidak relevan dan mungkin menggantinya dengan mengajukan pertanyaan yang relevan dan menjawab sendiri.


Cara memeriksa Photo Coupler / Opto Isolated Relay Module

  1. Dapatkan kawat jumper.
  2. Hubungkan satu ujung ke pin sinyal / input modul relai.
  3. Pegang ujung lainnya dan sentuh pin Vcc (+) dan Gnd (-) dan periksa hasilnya di bawah ini.

Modul Hasil Tes Modul Relai

2.1 Jenis input transistor

Untuk tipe input transistor NPN bipolar yang populer, sinyal driver sumber (sinyal GPIO Rpi atau sinyal GPIO RPi setelah konversi level logis 3,3V ke 5V) menuju ke basis transistor melalui serangkaian LED dan resistor biasing.

Contoh modul relay jenis input transistor (BJT NPN)

Ada rangkaian relay switching yang tidak begitu populer seperti yang dijelaskan dalam tutorial switching relay ini

2.2 Jenis input Photocoupler

Relay tipe input photocoupler memiliki phtocoupler sebagai input. Mesin fotocoupler menggerakkan transistor lain yang pada gilirannya menggerakkan koil relay.


Lampiran C - Konverter level logis menggunakan TXS0102

Sekarang saya tahu bahwa Rpi GPIO dapat langsung menggerakkan modul relai, tetapi ada dua masalah. Pertama, sinyal GPIO dengan kabel penghubung yang panjang berisik, karenanya tidak dapat diandalkan. Kedua, flywheel diode 1N4148 mungkin tidak sepenuhnya menekan koil kembali EMF, dan jika sayangnya 1N4148 rusak, atau tidak terhubung dengan benar (kontak yang buruk, sambungan solder kering dll), bagian belakang EMF dapat merusak Rpi.

Jadi saya memutuskan untuk menggunakan konverter level logis untuk menggeser sinyal Rpi GPIO dari 3V3 ke 5V. Saya pertama kali mencoba TXS102 converter dan ternyata berfungsi dengan baik. Selain memindahkan GPIO siganl, kebisingan di level tinggi juga sangat berkurang.

Foto dan gelombang TXs0102

Namun, saya menemukan masalah besar ketika memberi makan 5V GPIO dikonversi ke modul relay. Relai masih menyala dan mati seperti sebelumnya, dengan sinyal 3V3, tetapi ketika saya menggunakan ruang lingkup untuk memeriksa bentuk gelombang, saya menemukan sangat mengejutkan bahwa sinyal 5V turun setengahnya, menjadi 2.2V .

Saya menduga alasannya adalah bahwa TXS0102 dapat menenggelamkan arus jauh lebih baik daripada sumber arus ke modul relay. Untuk memverifikasi dugaan saya, saya mengumpankan sinyal 5V ke modul relay lain, tipe fotocoupler pull down, model MK01.

Kali ini saya menemukan sinyal 5V tidak menjatuhkan jumlah yang terlihat.

Jadi saya segera menyimpulkan bahwa modul relay tipe transistor NPN adalah pilihan yang buruk. Saya akan berhenti menguji relay semacam ini dari sekarang, dan beralih ke jenis relay photocoupler.

Saya juga menguji modul driver photocoupler lain MK101. Modul ini memiliki jumper untuk memilih pemicu Tinggi atau Rendah. Saya menemukan bahwa untuk pemicu Rendah, level sinyal 5V yang dikonversi TSX0102 tidak terpengaruh. Tetapi ketika pemicu Rendah dipilih, level sinyal 5V yang dikonversi turun menjadi sekitar 2.5V, meskipun relai masih bekerja.

txs0102 menguji modul pemicu tinggi rendah


Apendiks E - Konverter level logis menggunakan HC04

HCT125 tidak begitu umum. Jadi saya mencoba satu lagi rangkaian konverter, menggunakan HC03 quad open drain gerbang NAND dan HC04 hex inverter. Ketika saya menguji output HC04, saya merasa sangat bising. Saya menduga salah satu alasannya adalah saya menggunakan catu daya yang dirrerent, satu untuk rpi, satu lagi untuk konverter. Bahkan saya menghubungkan titik-titik dasar catu daya untuk membuat titik bersama, kebisingan tidak hilang. Saya kemudian menggunakan satu catu daya untuk rpi dan konverter, dan kebisingan menghilang.

Output konverter berisik

masukkan deskripsi gambar di sini

Saya mencoba sinyal keluaran HC04 untuk modul relai dalam mode pemicu rendah (yang memerlukan arus tenggelam, tetapi tidak dalam mode pemicu tinggi (yang membutuhkan sumber arus), jadi saya akan menambahkan gerbang HC04 hex NOT yang dapat sumber arus ke modul relai.

Lampiran F - HC04 Level Converter Floating Input Problem

Terakhir kali ketika saya pertama kali mencoba konverter level berbasis HC03, pada modul relai fotokopel, saya menemukan bahwa jika saya membiarkan input mengambang, modul itu mengeluarkan suara dan relai dinyalakan dan dimatikan dengan gila-gilaan. Saya pikir frekuensinya mungkin 1kHz. Saya tidak yakin apakah itu semacam osilasi umpan balik positif. Tetapi ketika saya menggunakan ruang lingkup untuk memeriksa, saya menemukan ternyata 50Hz! Saya kira itu semacam resonansi. Tetapi saya tidak tahu apa perbedaan antara resonansi dan osilasi. Mungkin saya harus goggle lagi. Bagaimanapun, saya pikir saya perlu menambahkan resistor naik / turun di suatu tempat.

HC04 Level converter masalah input mengambang


Di bawah ini akan dipersingkat atau dihapus

# Lampiran #

# A1. Papan modul relai terisolasi / Photo coupler relay dan skema #

Modul relai terisolasi Opto memiliki photo coupler yang merupakan IC 4 pin. Gambar di bawah ini menunjukkan photoCoupler PC1 (dengan 4 pin berlabel 1, 2, 3, 4 berwarna hijau) dan transistor Q1. IC tidak selalu ditandai. Dalam gambar ini, PC1 adalah EL354, dan Q1 8050.

Photocoupler tipe input modul relay foto

Modul relai input Photocoupler

Tautan Diagram

 35 : https://i.stack.imgur.com/cWkRi.jpg

tlfong01
sumber
1
tlfong01: "Jadi sinyal GPIO 3V3 Rpi dapat langsung mengarahkan relai." : Anda seharusnya tidak mengatakan bahwa karena membaca baris ini mungkin memberi kesan kepada orang-orang non-teknis mereka dapat langsung menghubungkan pin GPIO dari RPi ke koil relay. Dengan konsekuensi yang menghancurkan ... Ada alasan untuk penambahan 2N3904 ... Anda harus mengatakan "Jadi sinyal GPIO 3V3 RPi dapat langsung menggerakkan modul relay " sebagai gantinya ...
GeertVc
Terima kasih telah menunjukkan kesalahan ceroboh saya karena tidak memikirkan orang-orang non-teknis. Dan ketika saya melakukan koreksi, saya menemukan saya membuat kesalahan lain dengan memasukkan dua gambar KY019 yang identik. Sebenarnya yang pertama adalah skema modul SparkFun.
tlfong01
Tidak masalah, kami di sini untuk saling membantu ... :-)
GeertVc
Alasan ada perbedaan menggunakan GPIO langsung vs GPIO dengan shifter adalah shifter dimaksudkan untuk memberikan tegangan spesifik (5V). Pin logika 3.3V, di sisi lain, ditentukan dengan ambang batas yang menunjukkan perbedaan antara rendah dan tinggi. Untuk pi, ini berarti lebih dari 1.3V tinggi . Jika Anda tenggelam melalui resistensi ke tanah (yaitu, menarik arus), Anda harus mendapatkan 3.3V, tapi itu mungkin bukan apa yang input pada relay lakukan - mengapung.
goldilocks
@goldilocks: Ya, ini membingungkan. OA mengatakan relay kit-nya menggunakan transistor NPN untuk memicu relay [coil], Satu jawaban sepertinya menyarankan untuk memodifikasi transistor [ke BC5468]. Saran lain adalah menggunakan darlington ULN2803, .. Saya perlu membaca komentar sekali lagi untuk menjernihkan pikiran saya.
tlfong01