Czy jest jakiś dwukierunkowy przełącznik poziomu 5v-3.3v?

27

Czy jest jakiś układ scalony, który łączy jakieś wejście / wyjście 3,3 V z wyjściem / wejście 5 V? Potrzebuję go przede wszystkim z powodu Arduino Due, ale jeśli istnieje taki dwukierunkowy układ scalony, który tak działa, byłoby świetnie.

Niektóre osoby radziły mi używać układów scalonych SN74AHC125 i CD4050, ale nie rozumiem, jak działają i jak się z nimi komunikować.

3bdalla
źródło
2
Jaki jest zamierzony zakres częstotliwości?
alexan_e
1
Załóżmy na przykład, że chcę podłączyć urządzenie 5 V do arduino 3,3 V. Nie mogłem dowiedzieć się, gdzie podłączyć wyjście 5 V i wejście 3,3 V. A co z wyjściem 3,3 V np. Z arduino do urządzenia 5 V. Co rozumiesz przez zakres częstotliwości?
3bdalla
1
Nie jestem pewien, czy mam rację, wcześniej nie zajmowałem się częstotliwościami, moim celem jest prosta elektronika: |
3bdalla
3
sparkfun ma tablicę zwaną „konwerter poziomu”
geometrikal
1
Zwykle używałem układów scalonych z instrumentów texas. Serie TXS i TXB mają dwukierunkowe translatory napięcia (np. TXS0102 mają dwa kanały)
frarugi87

Odpowiedzi:

44

Za pomocą jednego N-mosfetu można wykonać bardzo prosty translator poziomu dwukierunkowego:

wprowadź opis zdjęcia tutaj

Zastosowany mosfet powinien być modelem o niskim progu Vgs, aby mógł mieć stosunkowo niski Rds-ON (rezystancja ON) przy zamierzonym poziomie napięcia wejściowego (w tym przypadku 3,3 V).
BSS138 w jednym z takich przykładów ma Vgs-ty 1,5 V max i jest określony, aby miał niski opór źródła drenażu przy napięciach Vgs tak niskich jak 2,5 V (być może również nieco niższych).

Pokazany przykład wykorzystuje translację 3,3 V <-> 5 V, ale może również działać z 2,5 V <-> 3,3 V lub 2,5 V <-> 5 V, nawet między 2,5 V <-> 12 V. Zasięg jest ograniczony jedynie właściwościami zastosowanego mosfetu.

Pokazany obwód oparty jest na notatce aplikacyjnej z
dwukierunkowego mechanizmu zmiany poziomu NXP AN97055 dla magistrali I2C i innych systemów
Nowa krótsza wersja: AN10441 Techniki zmiany poziomu w konstrukcji magistrali I2C

Gdy L1 jest wysokie (3v3) lub gdy pływający R1 utrzymuje mosfet wyłączony, więc R2 pociąga stronę drenażu wysoko (do 5v).

Kiedy L1 zostanie pociągnięty nisko, mosfet przewodzi, a drenaż staje się niski.

Gdy do H1 zostanie przyłożony niski poziom (0), wówczas napięcie to jest przenoszone przez diodę podłoża na stronę źródłową (L1)

Należy pamiętać, że rozmiar oporu może wpływać na prędkość ( źródło obrazu )

wprowadź opis zdjęcia tutaj

Alternatywne rozwiązanie tranzystorowe wprowadź opis zdjęcia tutaj


Odpowiednie artykuły, które mogą Ci się przydać:

alexan_e
źródło
11

Ponieważ pytanie wydaje się być zorientowane na układ scalony zapewniający dwukierunkowe przesunięcie poziomu, rozważ rodzinę części TXB010x firmy Texas Instruments: TXB0102 ma 2 kanały, TXB0104 ma 4 kanały, a TXB0108 ma 8 kanałów.

Cechą wyróżniającą tę rodzinę układów scalonych jest to, że kierunek sygnału jest wykrywany automatycznie, więc oddzielny pin ustalający kierunek nie jest potrzebny.

Prędkości przełączania do 10 MHz działają niezawodnie. Teoretyczna maksymalna prędkość może być wyższa - arkusze danych nie są jednoznaczne w tej kwestii na podstawie tego, co mogę ustalić.

Mam TXB0108 działający między 3,6-woltowym MSP430 Launchpad a 5-woltowym Arduino Nano, więc przypadek użycia tego pytania jest objęty.

Aby to wypróbować, Adafruit oferuje wstępnie wbudowany moduł zawierający TXB0108 , który pozwala uniknąć problemów z lutowaniem części SMD. Mogą istnieć podobne opcje dla 0102 i 0104 od nich lub innych.

8-kanałowy dwukierunkowy konwerter poziomów logicznych - TXB0108

Jeśli celem jest przesunięcie poziomu sygnału I2C , co nie jest idealnie dostosowane do układów scalonych serii TXB, opcja, która konkretnie odnosi się do rezystora podciągającego i topologii I2C z otwartym kolektorem, to moduł taki jak ten , ponownie sprzedawany przez Adafruit i inni dostawcy.

Przesuwnik poziomu I2C

Ten moduł wykorzystuje MOSFETY BSS138 w sposób opisany w odpowiedzi Alexandra_e . Chociaż nie jest to pojedynczy układ scalony, o który pyta pytanie, być może spełnia on zamierzony cel. Alternatywnie, zbudowanie tego obwodu jest proste przy użyciu MOSFET-ów.

Anindo Ghosh
źródło
+1 Ładne znalezisko! ... Twój link do TXB0102 jest w rzeczywistości do TXS0102. Nie określiłem różnicy, ale jest to odnotowane w arkuszu danych TXS0102: „Podstawowym zastosowaniem aplikacji docelowej jest interfejs ze sterownikami open-drenażu we / wy danych, takich jak I2C lub 1-wire, gdzie dane jest dwukierunkowy i nie jest dostępny żaden sygnał sterujący. TXS0102 może być również stosowany w aplikacjach, w których sterownik push-pull jest podłączony do wejść / wyjść danych, ale TXB0102 może być lepszą opcją dla takich aplikacji push-pull. ” Oto rzeczywisty link do TXB0102
Tut
@Tut Ups, wpadka, dzięki. Moje własne potrzeby zostały spełnione przez TXB0108, więc inne są dla mnie bardziej „przyjemne”. :-)
Anindo Ghosh
10

Inną rzeczą, którą powinieneś wziąć pod uwagę, jest to, czy w ogóle potrzebujesz zmiany poziomu. Wiele układów ma tolerancyjne styki wejściowe 5 V nawet przy napięciu niższym, takim jak 3,3. Procesor atmega interpretuje również wszystko powyżej 0,6 * Vcc lub 3 V dla arduino jako wysoki poziom logiczny, więc sygnał 3,3 V może bezpośrednio napędzać styk arduino bez zmiany poziomu.

Zakładając, że używasz arduino 5 V i musisz porozmawiać z częścią 3,3 V, jeśli ta część ma tolerancyjne wejścia 5 V (wielu obecnie to robi), po prostu podłącz je i będzie działać. Jeśli twoja linia dwukierunkowa ma konstrukcję otwartego kolektora, taką jak i2c, w której urządzenia tylko obniżają linię, po prostu podłącz rezystory podciągające do 3,3 V zamiast 5 V i wszystko będzie działać.

W przeciwnym razie wszystko, co musisz zrobić, to upewnić się, że linia nie przekracza 3,3 V, możesz to zrobić za pomocą rezystora i zenera, umieścić rezystor na linii arduino, a następnie zenera, aby zacisnąć napięcie do 3,3 V. (źródło: repetae.net )zacisk rezystora Zenera

Możesz mieć ochotę żyć niebezpiecznie i po prostu użyć rezystora 10k i nic więcej. Powodem tego (czasami!) Jest to, że wewnątrz otrzymywanego układu znajduje się dioda zaciskowa, która przesuwa nadmierne napięcie do vcc lub 3,3 V. Ta dioda przepali się, jeśli spróbujesz przeciągnąć przez nią całą linię 3,3 V do 5 V. ma nietrywialne obciążenie, nie zmieni znacząco poziomu twojej linii energetycznej, ale jest wiele ostrzeżeń. Ogólnie rzecz biorąc, nie rób tego, chyba że masz lokalną, izolowaną magistralę 3,3 V i naprawdę nie możesz oszczędzić dodatkowych dwóch centów za zenera. Wspominam o tym tylko dlatego, że zobaczysz go w schematach tanich brudnych płyt Breakout, które dostajesz w serwisie eBay i możesz ulec pokusie, aby je skopiować, po prostu nie pozwól, by przekradła się przez deskę do krojenia do projektu produkcyjnego. :)

Edycja właśnie zauważyła, że ​​używasz nowszego arduino 3.3V, więc po prostu odwróć to, co powiedziałem powyżej, sztuczka z rezystorem zenera nadal będzie działać, chociaż najwyraźniej niektóre linie we / wy mogą być tolerowane na 5 V, wydaje się, że istnieje pewna różnica zdań na forach. Teensy 3.1 jest również ładną małą płytką ARM, która ma wszystkie styki tolerujące 5 V i jest o połowę niższa niż należna i lepiej zaprojektowana IMHO http://www.pjrc.com/store/teensy31.html

John Meacham
źródło
3

W dziale taniego [er?] Rozwiązania FET (z zaakceptowanej odpowiedzi opartej na przypisie NXP) można zastąpić BJT i ​​diodą Schottky'ego jak w Silicon Labs AN883 . Ich schemat jest nieco skomplikowany z innymi rzeczami, więc wyodrębniłem tutaj niezbędny bit i zmieniłem jego orientację, aby wyglądał jak w przyjętej odpowiedzi dla łatwego porównania dwóch schematów:

wprowadź opis zdjęcia tutaj

BJT wykonuje translację tylko w kierunku nisko-> wysokim ... dokładnie tak, jak omówiono w sekcji Przesuwnik poziomu w jednym tranzystorze . Schottky zastępuje diodę ciała FET dla translacji wysoka-> niska.

Poniżej znajduje się ich powiększony zakres pomiaru dla translatora 3,3 <-> 1,8 V; proponują również ten schemat dla translacji 5 <-> 1,8 V itp. Podczas tłumaczenia 3,3 <-> 1,8 V, MMBT3904 miał tylko 150 mV (nasycenie) spadku. Dioda BAS40 miała spadek 350mV w przeciwnym kierunku. Przesunięcia te wpływają (oczywiście) na wyjściowy niski poziom logiczny po niskiej i odpowiednio wysokiej stronie translatora.

wprowadź opis zdjęcia tutaj

Po obu stronach mieli ładne urządzenia CMOS, więc impedancja wejściowa nie stanowiła większego problemu. Nie było widocznej degradacji / przesunięcia wysokich logicznie marginesów w ich śladzie 1V / div, więc nie zawracałem sobie tym głowy tutaj. Impedancja wejściowa ich urządzeń wynosiła co najmniej 1 Om z tego, co mogę powiedzieć z symulacji. Wysokie logicznie marginesy zaczynają się obniżać poniżej 100K impedancji wejściowej lub mniej więcej

Ponadto zalecają ten translator oparty na BJT tylko do około 300 kHz.

Nie jestem pewien, które z tych rozwiązań jest tańsze w praktyce, FET lub Schottky + BJT ... ale ten z pewnością potrzebuje więcej części ... chyba że użyjesz jednego z tych istniejących pakietów diod + tranzystorów, np . PZMT1101 . Ale potrzebujesz również 3 oporników.

Syczeć
źródło
Jaki jest oczekiwany pobór prądu / zużycie energii dla tej metody w porównaniu do metody opartej na FET?
KyranF
@ KyranF: Nie porównałem ich, ale jeśli martwisz się tym, albo nie będzie różowa z powodu podciągnięć. Wersje CMOS o małej mocy wyglądają jak m.eet.com/media/1103155/Fig2.gif To pochodzi z eetimes.com/document.asp?doc_id=1231111, co jest dobrym artykułem porównującym różne podejścia.
Fizz,
Dzięki za linki. Podejrzewam, że podejście BJT byłoby bardzo dużą mocą w porównaniu z czasami nasycenia bazy. Stałe obciążenie rezystorów podciągających jest naprawdę niepokojące dla każdego projektu, szczególnie w przypadku projektów zasilanych bateryjnie.
KyranF
@ KyranF: Spojrzałem na to w symulacji: tranzystor i dioda rozpraszają uW mocy, podczas gdy rezystory rozpraszają mW. W rzeczywistości BJT rozprasza około 100uW, dioda 1uW. FET lub BJT nie będą tu miały znaczenia ... ważne są rezystory mające ścieżkę do ziemi dla rozpraszania ładunków elektrostatycznych. Dotyczy to impedancji wejściowych 1 Meg.
Fizz,
@ KyranF: Próbowałem użyć modelu BSS138LT1 ON, ale daje to ujemną średnią dyspersję mocy w LTspice (-63uW) ... więc myślę, że ich model może być problematyczny. Syf na wejściu, syf na wyjściu. Również zaczął oscylować (przy znacznie wyższej częstotliwości niż sygnał), gdy jest napędzany z wysokiej strony. Jest to model subkktyczny, a nie prosty model MOS, więc trudno jest rozgryźć, co się dzieje. [ciąg dalszy]
Fizz,
2

Ponadto, jeśli szukasz doskonałej izolacji elektrycznej, a także dwukierunkowego przełączania poziomu, polecam ISO1541 . Jest dość tani i zapewnia dobrą ochronę poprzez izolację.

dr3patel
źródło
1

Najprostszym rozwiązaniem jest zasilenie wszystkich obwodów napięciem 3,3 V. Żetony HC z radością będą działać na tym poziomie.

Jeśli nie jest to możliwe, możesz uprościć sprawę, ograniczając się do jednego kierunku. Układ HCT przy napięciu 5 V dobrze akceptuje poziomy 3,3 V, a prosty dzielnik z dwoma rezystorami może zmniejszyć napięcie 5 V do 3,3 V. Niektóre uC mają tolerancję 5 V na swoich pinach, więc nie potrzebujesz dzielnika. A jeśli umieścisz podciągnięcia 5 V na stykach i przełączysz między masą a otwartym (= wejście), uzyskasz wyjście 0-5 V.

W przypadku sprzęgania otwartych kolektorów (I2C, Dallas 1-wire) trick BS138 jest dobrym rozwiązaniem. Istnieją małe układy scalone dla I2C, które umieszczają dwa FET w jednej obudowie. (PCA9306 itp.)

Ale jeśli naprawdę chcesz translacji na poziomie dwu-korekcyjnym: takie układy istnieją, sprawdź na przykład TXB0108.

Wouter van Ooijen
źródło
-4

Prostym rozwiązaniem jest użycie SN74LVC244AN. Może być zasilany napięciem 3V3 i na wejściu ma napięcie 5V.

Grad
źródło
5
To nie jest dwukierunkowe.
Matt Young
Nie, ale 74LVC4245 jest.
Bregalad