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ć.
integrated-circuit
interface
logic-level
3bdalla
źródło
źródło
Odpowiedzi:
Za pomocą jednego N-mosfetu można wykonać bardzo prosty translator poziomu dwukierunkowego:
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 )
Alternatywne rozwiązanie tranzystorowe
Odpowiednie artykuły, które mogą Ci się przydać:
Nie płać za translatory poziomów w systemach wykorzystujących wiele napięć zasilających - EDN
3V Tips 'n Tricks - Microchip
źródło
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.
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.
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.
źródło
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 )
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
źródło
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:
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.
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.
źródło
Jest ich wiele. Musisz określić, jaka jest twoja maksymalna częstotliwość, ile bitów potrzebujesz itp. Krótko mówiąc, możesz użyć dowolnego układu scalonego translatora poziomu napięcia. Texas Instruments ma zgrabne narzędzie wyboru do tego samego celu: http://www.ti.com/logic/docs/translationresults.tsp?sectionId=458&voltageIn=5.0&searchDirection=2&voltageOut=3.3#voltintf
źródło
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ę.
źródło
Ładne podsumowanie wszystkich metod znajduje się tutaj
http://playground.arduino.cc/Main/I2CBi-directionalLevelShifter
źródło
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.
źródło
Prostym rozwiązaniem jest użycie SN74LVC244AN. Może być zasilany napięciem 3V3 i na wejściu ma napięcie 5V.
źródło