Apakah ada bidirectional 5v-3.3v level shifter?

27

Apakah ada IC yang menghubungkan 3.3V Input / Output ke 5V Output / Input? Saya membutuhkannya terutama untuk Due Arduino tetapi jika ada IC dua arah yang berfungsi seperti itu akan bagus.

Beberapa orang menyarankan saya untuk menggunakan IC SN74AHC125 dan CD4050, tapi saya tidak mengerti bagaimana mereka bekerja atau bagaimana berinteraksi dengan mereka.

3bdalla
sumber
2
Berapa kisaran frekuensi yang dimaksud?
alexan_e
1
Sebagai contoh anggap saya ingin menghubungkan perangkat 5V ke arduino 3.3V. Saya tidak tahu di mana menghubungkan output 5V dan input 3.3V. Dan bagaimana dengan output 3.3V dari Arduino misalnya ke perangkat 5V? Apa yang Anda maksud dengan rentang frekuensi?
3bdalla
1
Saya tidak yakin saya mengerti maksud Anda, saya belum pernah berurusan dengan frekuensi sebelumnya, tujuan saya adalah untuk elektronik sederhana: |
3bdalla
3
sparkfun memiliki papan, yang disebut 'konverter level'
geometrikal
1
Biasanya saya menggunakan IC dari instrumen texas. Seri TXS dan TXB memiliki penerjemah tegangan dua arah (mis. TXS0102 memiliki dua saluran)
frarugi87

Jawaban:

44

Penerjemah tingkat dua arah yang sangat sederhana dapat dibuat dengan satu N-MOSFET tunggal:

masukkan deskripsi gambar di sini

MOSFET yang digunakan harus menjadi model dengan ambang Vgs rendah, sehingga ia dapat memiliki RDS-ON (resistensi ON) yang relatif rendah pada level tegangan input yang dimaksudkan (3.3V dalam kasus ini).
BSS138 dalam salah satu contohnya, ia memiliki Vgs-th dari 1.5v max dan dispesifikasikan memiliki resistansi sumber-saluran yang rendah dengan tegangan Vgs serendah 2.5v (mungkin sedikit lebih rendah juga).

Contoh yang ditampilkan menggunakan terjemahan 3.3v <-> 5v tetapi juga dapat bekerja dengan 2.5v <-> 3.3v atau 2.5v <-> 5v, bahkan antara 2.5v <-> 12v. Kisaran hanya dibatasi oleh karakteristik MOSFET yang digunakan.

Sirkuit yang ditampilkan didasarkan pada catatan aplikasi dari NXP
AN97055 Bi-directional level shifter untuk I2C-bus dan sistem lainnya
Versi lebih pendek: AN10441 Teknik pemindahan level dalam desain I2C-bus

Ketika L1 tinggi (3v3) atau mengambang R1 membuat MOSFET mati sehingga R2 menarik sisi drain tinggi (ke 5v).

Ketika L1 ditarik rendah maka MOSFET melakukan dan tiriskan menjadi rendah.

Ketika level rendah (0) diterapkan ke H1 maka tegangan itu ditransfer melalui dioda substrat ke sisi sumber (L1)

Harap dicatat bahwa ukuran resistansi dapat memengaruhi kecepatan ( sumber gambar )

masukkan deskripsi gambar di sini

Solusi transistor alternatif masukkan deskripsi gambar di sini


Artikel yang relevan mungkin berguna bagi Anda:

alexan_e
sumber
11

Karena pertanyaan tampaknya berorientasi pada IC yang menyediakan pengalihan tingkat dua arah, pertimbangkan keluarga Texas Instruments TXB010x: TXB0102 memiliki 2 saluran, TXB0104 memiliki 4 saluran, dan TXB0108 memiliki 8 saluran.

Fitur menonjol dari keluarga IC ini adalah bahwa arah sinyal secara otomatis dirasakan, sehingga pin pengaturan arah yang terpisah tidak diperlukan.

Beralih kecepatan hingga 10 MHz bekerja dengan andal. Kecepatan maksimum teoritis mungkin lebih tinggi - lembar data tidak eksplisit tentang hal ini dari apa yang dapat saya tentukan.

Saya memiliki TXB0108 yang bekerja di antara Launchpad MSP430 3,6 Volt dan Arduino Nano 5 Volt, sehingga penggunaan case dari pertanyaan tersebut tercakup.

Untuk tujuan mencobanya, Adafruit menawarkan modul prebuilt yang menggabungkan TXB0108 , yang menghemat masalah menyolder bagian SMD. Mungkin ada opsi serupa untuk 0102 dan 0104 dari mereka atau orang lain.

8-channel Bi-directional Logic Level Converter - TXB0108

Jika maksudnya adalah untuk menggeser level sinyal I2C , yang tidak cocok untuk IC seri TXB, opsi yang secara khusus menangani pull-up resistor dan topologi kolektor terbuka I2C adalah modul seperti ini , sekali lagi dijual oleh Adafruit dan vendor lainnya.

Level I2C shifter

Modul ini menggunakan BSS138 MOSFET dengan cara yang dijelaskan dalam jawaban oleh alexan_e . Meskipun bukan IC tunggal seperti pertanyaan yang diajukan, mungkin IC memenuhi tujuan yang dimaksud. Atau, mudah untuk membuat sirkuit ini sendiri menggunakan MOSFET.

Anindo Ghosh
sumber
+1 Temuan bagus! ... Tautan Anda ke TXB0102 sebenarnya ke TXS0102. Saya belum menentukan perbedaannya, tetapi ini dicatat dalam lembar data TXS0102: "Penggunaan aplikasi target utamanya adalah untuk berinteraksi dengan driver drain terbuka pada data I / Os seperti I2C atau 1-kawat, di mana data adalah dua arah dan tidak ada sinyal kontrol yang tersedia. TXS0102 juga dapat digunakan dalam aplikasi di mana driver push-pull terhubung ke data I / Os, tetapi TXB0102 mungkin merupakan pilihan yang lebih baik untuk aplikasi push-pull tersebut. " Inilah tautan sebenarnya ke TXB0102
Tut
@Tut Ups, slip-up, terima kasih. Kebutuhan saya sendiri dipenuhi oleh TXB0108, jadi yang lain lebih dari "senang tahu" bagi saya. :-)
Anindo Ghosh
10

Hal lain yang harus Anda pertimbangkan adalah apakah Anda benar-benar membutuhkan pengalihan level sama sekali. Banyak chip memiliki pin input toleran 5V bahkan ketika berjalan pada tegangan yang lebih rendah seperti 3.3. CPU atmega juga menafsirkan apa pun di atas 0,6 * Vcc atau 3V untuk arduino sebagai logika yang tinggi, sehingga sinyal 3.3V dapat langsung menggerakkan pin arduino tanpa pergeseran level.

Dengan asumsi Anda menggunakan arduino 5V dan perlu berbicara dengan bagian 3.3V, jika bagian tersebut memiliki input toleran 5V (banyak yang melakukannya saat ini), cukup sambungkan mereka dan itu akan berfungsi. Jika garis dua arah Anda adalah desain kolektor terbuka, seperti i2c di mana perangkat hanya menarik garis rendah maka cukup pasang resistor pull up ke 3.3V, bukan 5V dan semuanya akan berfungsi.

Kalau tidak semua yang perlu Anda lakukan adalah memastikan garis tidak pergi di atas 3.3V, Anda dapat melakukannya dengan resistor dan zener, letakkan resistor pada garis arduino kemudian zener untuk menjepit tegangan ke 3.3V. (sumber: repetae.net )zener resistor penjepit

Anda mungkin tergoda untuk hidup dalam bahaya dan hanya menggunakan resistor 10k dan tidak ada yang lain. Alasan ini (kadang-kadang!) Berfungsi adalah bahwa ada dioda penjepit di dalam chip penerima yang menipiskan tegangan berlebih ke vcc atau 3.3V. Dioda ini akan terbakar jika Anda mencoba menarik seluruh garis 3.3V hingga 5V melaluinya (selain kerusakan apa pun yang disebabkan oleh menarik garis itu ke 5V), namun dengan resistor tidak banyak arus akan mengalir dan dengan asumsi garis 3.3V Anda memiliki beban non-sepele di atasnya itu tidak akan mengubah tingkat saluran listrik Anda secara substansial tetapi ada banyak peringatan. Jadi, secara umum, jangan lakukan ini kecuali Anda memiliki bus 3.3V lokal yang terisolasi dan benar-benar tidak dapat menyisihkan dua sen tambahan untuk zener. Saya hanya menyebutkannya karena Anda akan melihatnya dalam skema untuk papan pelarian tanah murah yang Anda dapatkan di ebay dan mungkin tergoda untuk menyalinnya, tapi jangan biarkan itu menyelinap melewati papan tempat memotong roti menjadi desain produksi. :)

Sunting baru saja mengetahui bahwa Anda menggunakan arduino 3.3V yang lebih baru, jadi cukup balikkan apa yang saya katakan di atas, trik zener resistor masih akan berfungsi meskipun tampaknya beberapa garis i / o pada waktunya mungkin toleran 5v, sepertinya ada beberapa ketidaksepakatan di forum. The amat kecil 3.1 juga merupakan papan ARM kecil yang bagus yang memiliki semua pin 5V toleran dan kurang dari setengah biaya karena dan dirancang lebih baik IMHO http://www.pjrc.com/store/teensy31.html

John Meacham
sumber
3

Dari departemen solusi [er?] Yang murah, FET (dari jawaban yang diterima berdasarkan appnote NXP) dapat diganti dengan dioda BJT dan Schottky seperti pada Silicon Labs AN883 . Skema mereka agak rumit dengan hal-hal lain, jadi saya telah mengekstraksi bagian penting di sini dan mengorientasikannya sehingga terlihat seperti pada jawaban yang diterima untuk perbandingan yang mudah dari kedua skema:

masukkan deskripsi gambar di sini

BJT melakukan terjemahan dalam arah> tinggi-rendah saja ... persis seperti yang dibahas dalam transistor tingkat atas Shifter . Schottky menggantikan dioda tubuh FET untuk terjemahan high-> rendah.

Di bawah ini adalah pengukuran lingkup yang diperbesar untuk penerjemah 3.3 <-> 1.8V; mereka juga mengusulkan skema ini untuk terjemahan 5 <-> 1.8V dll. Ketika melakukan terjemahan 3.3 <-> 1.8V, MMBT3904 hanya memiliki penurunan 150mV (saturasi). Dioda BAS40 mengalami penurunan 350mV ke arah yang berlawanan. Offset ini mempengaruhi (jelas) output level logika-rendah pada sisi rendah dan tinggi masing-masing penerjemah.

masukkan deskripsi gambar di sini

Mereka memiliki perangkat CMOS yang bagus di kedua sisi, jadi impedansi input tidak banyak masalah. Tidak ada degradasi yang terlihat / offset margin logika-tinggi dalam jejak 1V / div mereka, jadi saya belum repot-repot memasukkannya di sini. Impedansi input perangkat mereka setidaknya 1Mohm dari apa yang dapat saya katakan dari simulasi. Logika-margin tinggi mulai menurun di bawah impedansi masukan 100K atau lebih.

Juga, mereka merekomendasikan penerjemah berbasis BJT ini hanya hingga 300KHz atau lebih.

Saya tidak yakin yang mana dari solusi ini yang lebih murah dalam prakteknya, FET atau Schottky + BJT ... tetapi yang satu ini tentu membutuhkan lebih banyak bagian ... kecuali jika Anda menggunakan salah satu paket transistor + dioda, yang memang ada, misalnya PZMT1101 . Tetapi Anda juga membutuhkan 3 resistor.

Mendesis
sumber
Berapa konsumsi daya / daya yang diharapkan saat ini dari metode ini dibandingkan dengan metode berbasis FET?
KyranF
@ KirranF: Saya belum membandingkan mereka, tetapi jika Anda khawatir tentang itu baik tidak akan cerah karena pull-up. Versi CMOS berdaya rendah terlihat seperti m.eet.com/media/1103155/Fig2.gif Itu dari eetimes.com/document.asp?doc_id=1231111 yang merupakan artikel bagus yang membandingkan berbagai pendekatan.
Fizz
Terima kasih atas tautannya. Saya menduga pendekatan BJT akan menjadi kekuatan yang sangat tinggi dibandingkan pada saat-saat ketika basis jenuh. Beban konstan resistor pull up memang mengkhawatirkan untuk desain apa pun, terutama desain yang dioperasikan dengan baterai.
KyranF
@ KyranF: Saya sudah melihatnya dalam simulasi: transistor dan dioda menghilangkan daya uW sedangkan resistor menghilangkan mW. Sebenarnya BJT menghilang sekitar 100uW, dioda 1uW. FET atau BJT tidak akan masalah di sini ... resistor memiliki jalur ke ground untuk disipasi statis yang penting. Ini dengan impedansi input 1Meg.
Fizz
@ KirranF: Saya mencoba menggunakan model BSS138LT1 ON, tapi itu memberikan disspasi daya rata-rata negatif di LTspice (-63uW) ... jadi saya pikir model mereka mungkin bermasalah. Sampah masuk sampah keluar. Juga mulai berosilasi (pada frekuensi yang jauh lebih tinggi daripada sinyal) ketika didorong dari sisi yang tinggi. Ini adalah model subckt daripada model MOS sederhana, jadi sulit untuk mengetahui apa yang terjadi. [lanjutan]
Fizz
2

Juga, jika Anda mencari isolasi listrik yang bagus serta fungsi pergeseran level dua arah, saya akan merekomendasikan ISO1541 . Ini cukup murah dan memberikan perlindungan yang baik melalui isolasi.

dr3patel
sumber
1

Solusi paling sederhana adalah menjalankan semua sirkuit Anda di 3.3V. Chip HC akan dengan senang hati berjalan di level itu.

Ketika itu tidak mungkin, Anda bisa membuat segala sesuatunya jauh lebih sederhana ketika Anda membatasi diri ke satu arah. Chip HCT pada 5V akan menerima level 3.3V dengan baik, dan pembagi dua resistor sederhana dapat mengurangi 5V menjadi 3.3V. Beberapa UC memiliki toleransi 5V pada pin mereka, jadi Anda tidak perlu pembagi. Dan jika Anda meletakkan 5V pullup pada pin, dan beralih antara arde dan terbuka (= input), Anda memiliki output 0-5V yang lumayan.

Untuk menggabungkan bus terbuka-kolektor (I2C, dallas 1-wire) trik BS138 adalah cara untuk pergi. Ada chip kecil untuk I2C yang menempatkan dua FET dalam satu rumah. (PCA9306 dll.)

Tetapi jika Anda benar-benar ingin terjemahan dua tingkat: chip seperti itu ada, periksa misalnya TXB0108.

Wouter van Ooijen
sumber
-4

Solusi sederhana menggunakan SN74LVC244AN. Dapat diberdayakan dengan 3V3 dan berbayar 5V pada input.

Grad
sumber
5
Itu bukan dua arah.
Matt Young
Tidak, tetapi 74LVC4245 adalah.
Bregalad