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.
Jawaban:
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.
sumber
# 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.
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.
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.
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.)
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.
Kemudian saya mengatur 4 modul relay input tipe transistor NPN (KY019), dan menghubungkan 4 input modul relay ke 4 output saluran UDN2981.
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.
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.
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).
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.
Diskusi
ULN2803 dan UDN2981 Pro dan Kontra
Pro
ULN2803 dan UDN2981 dapat langsung digerakkan oleh sinyal logika TTL atau CMOS dengan tegangan pasokan 3,3V atau 5V.
Output 500mA pengenal mereka dengan dioda penjepit cocok untuk mengganti relay dan motor penggerak.
Cons
ULN2803 dan terutama UDN2981 tidak begitu umum.
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.
# 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.
/ ...
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
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.
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.
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.
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.
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.
Tautan Diagram
35 : https://i.stack.imgur.com/cWkRi.jpg
sumber