Gibt es einen bidirektionalen 5-V-3,3-V-Pegel-Shifter?

27

Gibt es einen IC, der einen 3,3-V-Eingang / Ausgang mit einem 5-V-Ausgang / Eingang verbindet? Ich brauche es hauptsächlich für einen Arduino Due, aber wenn es einen bidirektionalen IC gibt, der so funktioniert, wäre es großartig.

Einige Leute haben mir geraten, die ICs SN74AHC125 und CD4050 zu verwenden, aber ich verstehe nicht, wie sie funktionieren oder wie ich mit ihnen kommunizieren soll.

3bdalla
quelle
2
Was ist der vorgesehene Frequenzbereich?
alexan_e
1
Angenommen, ich möchte ein 5-V-Gerät an ein 3,3-V-Arduino anschließen. Ich konnte nicht herausfinden, wo ich den 5-V-Ausgang und den 3,3-V-Eingang verbinden sollte. Und was ist mit der Ausgabe von 3,3 V von einem Arduino zum Beispiel an ein 5-V-Gerät? Was meinst du mit Frequenzbereich?
3.
1
Ich bin mir nicht sicher, ob ich deinen Standpunkt verstehe, ich habe mich vorher nicht mit Frequenzen befasst, mein Zweck ist die einfache Elektronik: |
3.
3
sparkfun hat eine Platine, die als "Pegelwandler" bezeichnet wird
geometrikal
1
Normalerweise habe ich ICs von Texas Instruments verwendet. TXS- und TXB-Serien haben bidirektionale Spannungsumsetzer (z. B. TXS0102 haben zwei Kanäle)
frarugi87

Antworten:

44

Ein sehr einfacher bidirektionaler Level-Übersetzer kann mit einem einzigen N-Mosfet erstellt werden:

Bildbeschreibung hier eingeben

Der verwendete Mosfet sollte ein Modell mit einer niedrigen Vgs-Schwelle sein, damit er bei dem vorgesehenen Eingangsspannungspegel (in diesem Fall 3,3 V) einen relativ niedrigen Rds-ON (EIN-Widerstand) aufweisen kann.
BSS138 hat in einem solchen Beispiel einen Vgs-Wert von maximal 1,5 V und ist für einen niedrigen Drain-Source-Widerstand mit Vgs-Spannungen von nur 2,5 V (möglicherweise auch etwas niedriger) spezifiziert.

Das gezeigte Beispiel verwendet eine 3,3 V <-> 5 V-Übersetzung, kann jedoch auch mit 2,5 V <-> 3,3 V oder 2,5 V <-> 5 V arbeiten, sogar zwischen 2,5 V <-> 12 V. Die Reichweite ist nur durch die Eigenschaften des verwendeten Mosfets begrenzt.

Die gezeigte Schaltung basiert auf einem Anwendungshinweis von NXP
AN97055 Bidirektionaler Pegelumsetzer für I2C-Bus und andere Systeme.
Neue kürzere Version: AN10441 Pegelumsetzungsmethoden im I2C-Bus-Design

Wenn L1 hoch ist (3v3) oder schwebt, hält R1 den Mosfet ab, so dass R2 die Drain-Seite hoch zieht (auf 5v).

Wenn L1 niedrig gezogen wird, leitet der Mosfet und der Drain wird niedrig.

Wenn ein niedriger Pegel (0) an H1 angelegt wird, wird diese Spannung durch die Substratdiode zur Source-Seite (L1) übertragen.

Bitte beachten Sie, dass die Widerstandsgröße die Geschwindigkeit beeinflussen kann ( Bildquelle )

Bildbeschreibung hier eingeben

Alternative Transistorlösung Bildbeschreibung hier eingeben


Relevante Artikel, die Sie vielleicht nützlich finden:

alexan_e
quelle
11

Da sich die Frage an einem IC zu orientieren scheint, der eine bidirektionale Pegelverschiebung bietet, betrachten Sie die TXB010x-Teilefamilie von Texas Instruments: TXB0102 hat 2 Kanäle, TXB0104 hat 4 Kanäle und TXB0108 hat 8 Kanäle.

Das herausragende Merkmal dieser IC-Familie ist, dass die Signalrichtung automatisch erfasst wird, sodass kein separater Richtungssetzstift erforderlich ist.

Schaltgeschwindigkeiten bis 10 MHz arbeiten zuverlässig. Die theoretische Höchstgeschwindigkeit kann höher sein - die Datenblätter geben diesbezüglich keine Auskunft, was ich feststellen kann.

Ich habe einen TXB0108, der zwischen einem 3,6-Volt-MSP430-Launchpad und einem 5-Volt-Arduino Nano arbeitet, sodass der Anwendungsfall der Frage abgedeckt ist.

Zum Ausprobieren bietet Adafruit ein vorgefertigtes Modul mit dem TXB0108 an , mit dem Sie kein SMD-Teil mehr löten müssen. Möglicherweise gibt es ähnliche Optionen für die 0102 und 0104 von ihnen oder anderen.

8-Kanal bidirektionaler Logikpegelwandler - TXB0108

Wenn ein I2C-Signal pegelverschoben werden soll , was für die ICs der TXB-Serie nicht ideal ist, ist eine Option, die speziell den Pull-up-Widerstand und die Open-Collector-Topologie von I2C berücksichtigt, ein solches Modul , das ebenfalls von Adafruit vertrieben wird und andere Anbieter.

I2C Level Shifter

Dieses Modul verwendet BSS138-MOSFETs wie in der Antwort von alexan_e beschrieben . Obwohl es sich nicht um einen einzelnen IC handelt, wie in der Frage angegeben, erfüllt er möglicherweise den beabsichtigten Zweck. Alternativ ist es einfach, diese Schaltung unter Verwendung von MOSFETs selbst aufzubauen.

Anindo Ghosh
quelle
+1 Schöne Entdeckung! ... Ihr Link zu TXB0102 ist eigentlich zum TXS0102. Ich habe den Unterschied nicht festgestellt, aber dies ist im Datenblatt des TXS0102 vermerkt: "Die primäre Zielanwendung besteht in der Verbindung mit Open-Drain-Treibern in den Daten-E / As wie I2C oder 1-Wire, in denen die Daten gespeichert sind ist bidirektional und es ist kein Steuersignal verfügbar. Der TXS0102 kann auch in Anwendungen verwendet werden, in denen ein Push-Pull-Treiber an die Daten-E / A angeschlossen ist, der TXB0102 ist jedoch möglicherweise eine bessere Option für solche Push-Pull-Anwendungen. " Hier ist der aktuelle Link zu TXB0102
Tut
@Tut Ups, Fehler, danke. Meine eigenen Bedürfnisse werden vom TXB0108 erfüllt, so dass die anderen für mich eher ein "Wissenswertes" sind. :-)
Anindo Ghosh
10

Eine andere Sache, die Sie berücksichtigen sollten, ist, ob Sie überhaupt eine Pegelverschiebung benötigen. Viele Chips haben 5-V-tolerante Eingangsstifte, selbst wenn sie mit einer niedrigeren Spannung betrieben werden, z. B. 3,3. Die atmega-CPU interpretiert auch alles über 0,6 * Vcc oder 3V für ein Arduino als logisches Hoch, sodass ein 3,3-V-Signal einen Arduino-Pin ohne Pegelverschiebung direkt ansteuern kann.

Angenommen, Sie verwenden ein 5-V-Arduino und müssen mit einem 3,3-V-Teil sprechen. Wenn das Teil 5-V-tolerante Eingänge hat (viele heutzutage), schließen Sie es einfach an, und es funktioniert. Wenn Ihre bidirektionale Leitung ein Open-Collector-Design ist, wie z. B. i2c, bei dem die Geräte die Leitung nur nach unten ziehen, schließen Sie einfach die Pull-up-Widerstände an 3,3 V anstelle von 5 V an, und es funktioniert.

Andernfalls müssen Sie nur sicherstellen, dass die Leitung nicht über 3,3 V hinausgeht. Sie können dies mit einem Widerstand und einem Zener tun. Legen Sie einen Widerstand auf die Arduino-Leitung und dann einen Zener, um die Spannung auf 3,3 V zu begrenzen. (Quelle: repetae.net )Zenerklemme

Sie könnten versucht sein, gefährlich zu leben und nur den 10k-Widerstand und sonst nichts zu benutzen. Der Grund dafür (manchmal!) Ist, dass sich im empfangenden Chip eine Klemmdiode befindet, die die Überspannung auf Vcc oder 3,3 V ableitet. Diese Diode brennt durch, wenn Sie versuchen, die gesamte 3,3-V-Leitung bis zu 5 V durchzuziehen (zusätzlich zu den Schäden, die durch das Ziehen dieser Leitung auf 5 V verursacht werden). Mit dem Widerstand fließt jedoch nicht viel Strom und es wird die 3,3-V-Leitung angenommen hat eine nicht triviale Last, die den Pegel Ihrer Stromleitung nicht wesentlich ändert, aber es gibt viele Vorbehalte. Tun Sie dies also im Allgemeinen nur, wenn Sie einen lokalen, isolierten 3,3-V-Bus haben und die zusätzlichen zwei Cent für den Zener wirklich nicht sparen können. Ich erwähne es nur, weil Sie es in Schaltplänen für spottbillige Breakout-Boards sehen, die Sie bei ebay bekommen und vielleicht versucht sind, es zu kopieren. lass es einfach nicht am Steckbrett vorbei in ein Produktionsdesign schleichen. :)

Edit hat gerade bemerkt, dass Sie das neuere 3,3-V-Arduino verwenden, also invertieren Sie einfach das, was ich oben gesagt habe. Der Zener-Widerstandstrick funktioniert immer noch, obwohl anscheinend einige der E / A-Leitungen auf der fälligen 5-V-Toleranz sind und es einige Meinungsverschiedenheiten zu geben scheint in den Foren. Das teensy 3.1 ist auch ein nettes kleines ARM-Board, das alle 5-V-toleranten Pins hat und weniger als die Hälfte der Kosten des IMHO http://www.pjrc.com/store/teensy31.html ausmacht

John Meacham
quelle
3

Aus der Abteilung für billige Lösungen kann der FET (aus der akzeptierten Antwort basierend auf der NXP-Note) durch eine BJT- und eine Schottky-Diode wie in Silicon Labs AN883 ersetzt werden . Ihr Schema ist ein bisschen kompliziert mit anderen Dingen, also habe ich das Wesentliche hier extrahiert und es neu ausgerichtet, so dass es wie in der akzeptierten Antwort zum einfachen Vergleich der beiden Schemata aussieht:

Bildbeschreibung hier eingeben

Der BJT übersetzt nur in der Low-> High-Richtung ... genau wie in Single Transistor Level Up Shifter beschrieben . Der Schottky ersetzt die Body-Diode des FET für die High-> Low-Translation.

Unten sehen Sie den vergrößerten Messbereich für einen 3,3 <-> 1,8-V-Übersetzer. Sie schlagen dieses Schema auch für eine 5 - 1,8 V-Übersetzung usw. vor. Bei einer 3,3 - 1,8 V-Übersetzung hatte ein MMBT3904 nur einen Abfall von 150 mV (Sättigung). Die BAS40-Diode hatte einen Abfall von 350 mV in die entgegengesetzte Richtung. Diese Offsets wirken sich (offensichtlich) auf den Low-Pegel-Ausgang auf der Low- bzw. High-Seite des Übersetzers aus.

Bildbeschreibung hier eingeben

Sie hatten schöne CMOS-Geräte auf beiden Seiten, so dass die Eingangsimpedanz kein großes Problem darstellte. Es gab keine sichtbare Verschlechterung / Verschiebung der logisch hohen Ränder in ihrer 1 V / Div-Kurve, daher habe ich mich nicht darum gekümmert, sie hier aufzunehmen. Die Eingangsimpedanz ihrer Geräte betrug nach dem, was ich aus einer Simulation ersehen kann, mindestens 1 Ohm. Die logisch hohen Ränder beginnen sich unterhalb der Eingangsimpedanz von etwa 100 K zu verschlechtern.

Außerdem empfehlen sie diesen BJT-basierten Übersetzer nur bis etwa 300 kHz.

Ich bin mir nicht sicher, welche dieser Lösungen in der Praxis günstiger ist, FET oder Schottky + BJT ... aber diese benötigt sicherlich mehr Teile ... es sei denn, Sie verwenden eines der existierenden Dioden + Transistor-Pakete, z . B. PZMT1101 . Sie benötigen aber auch 3 Widerstände.

Fizz
quelle
Wie hoch ist die zu erwartende Stromaufnahme / Leistungsaufnahme dieser Methode im Vergleich zur FET-basierten Methode?
KyranF
@KyranF: Ich habe sie nicht verglichen, aber wenn du dir darüber Sorgen machst, wird es wegen der Klimmzüge auch nicht rosig. Die stromsparenden CMOS-Versionen sehen aus wie m.eet.com/media/1103155/Fig2.gif Das ist aus eetimes.com/document.asp?doc_id=1231111 , ein guter Artikel, der verschiedene Ansätze vergleicht.
Fizz
Danke für die Links. Ich vermute, dass der BJT-Ansatz im Vergleich zu Zeiten, in denen die Base gesättigt ist, eine sehr hohe Leistung aufweisen würde. Die konstante Belastung der Pull-up-Widerstände ist in der Tat für jede Konstruktion, insbesondere für batteriebetriebene Konstruktionen, besorgniserregend.
KyranF
@KyranF: Ich habe es mir in der Simulation angeschaut: Der Transistor und die Diode verbrauchen uW an Leistung, während die Widerstände mW verbrauchen. Tatsächlich verbraucht der BJT ungefähr 100 uW, die Diode 1 uW. FET oder BJT spielen hier keine Rolle ... es kommt darauf an, dass Widerstände einen Erdungspfad für die statische Ableitung haben. Dies ist mit 1Meg Eingangsimpedanzen.
Fizz
@KyranF: Ich habe versucht, das Modell BSS138LT1 von ON zu verwenden, aber das führt zu einer negativen durchschnittlichen Verlustleistung in LTspice (von -63uW). Ich denke, das Modell ist möglicherweise problematisch. Müll rein ... Müll raus. Außerdem begann es zu schwingen (bei einer viel höheren Frequenz als das Signal), wenn es von der hohen Seite angetrieben wurde. Es ist eher ein Subckt-Modell als ein einfaches MOS-Modell, daher ist es schwierig herauszufinden, was los ist. [Fortsetzung]
Fizz
2

Außerdem würde ich ISO1541 empfehlen, wenn Sie eine hervorragende elektrische Isolierung sowie bidirektionale Pegelverschiebungsfunktionen suchen . Es ist ziemlich billig und bietet guten Schutz durch Isolation.

dr3patel
quelle
1

Die einfachste Lösung besteht darin, alle Stromkreise mit 3,3 V zu betreiben. HC-Chips laufen problemlos auf diesem Niveau.

Wenn das nicht möglich ist, können Sie die Dinge viel einfacher machen, wenn Sie sich auf eine Richtung beschränken. Ein HCT-Chip mit 5 V akzeptiert 3,3 V-Pegel, und ein einfacher Teiler mit zwei Widerständen kann 5 V auf 3,3 V reduzieren. Einige uC sind 5V-tolerant an ihren Stiften, so dass Sie den Teiler nicht benötigen. Und wenn Sie 5V-Pullups auf die Pins legen und zwischen Masse und offen (= Eingang) wechseln, haben Sie einen passablen 0-5V-Ausgang.

Für die Kopplung von Open-Collector-Bussen (I2C, Dallas 1-Wire) bietet sich der BS138-Trick an. Es gibt kleine Chips für I2C, die die beiden FETs in einem Gehäuse unterbringen. (PCA9306 usw.)

Aber wenn Sie wirklich eine Übersetzung auf zwei Ebenen wollen: Es gibt solche Chips, prüfen Sie zum Beispiel TXB0108.

Wouter van Ooijen
quelle
-4

Eine einfache Lösung ist die Verwendung des SN74LVC244AN. Kann mit 3V3 betrieben werden und ist an den Eingängen mit 5V belastbar.

Grad
quelle
5
Das ist nicht bidirektional.
Matt Young
Nein, aber der 74LVC4245 ist.
Bregalad