Lösung für Pegelumsetzung (3.3V Arduino Due <-> 5V Shield)

Der Mikrocontroller des neuen Arduino Due-Boards läuft mit 3,3 V, aber leider laufen die meisten Standard-Arduino-Zusatzschilde (Boards) mit 5 V, daher haben ihre E/A-Signale unterschiedliche Logikpegel.

Die Anzahl der Signale beträgt ungefähr 20 und umfasst:

  • Standard-Digitalleitungen (einige mit Hardware-Interrupt-Fähigkeit)
  • analoge E/A
  • Serielle UART-Leitungen
  • sowie SPI- und I2C-Signale

Jetzt möchte ich eine Zwischenabschirmung (Platine) hinzufügen, um die Kompatibilität zwischen der 3,3-V-Arduino-Due-Platine und allen Signalen einer beliebigen 5-V-Abschirmung zu erleichtern. Diese Zwischenplatine müsste eine Schnittstelle zwischen den 3,3-V-Signalen und den 5-V-Signalen (dh in beide Richtungen) ermöglichen.

Was ist der beste Weg, um eine bidirektionale Ebenenübersetzung für einen Fall wie den obigen zu erstellen? Hier meine ich mit "am besten" einfach unkompliziert, kostengünstig und würde ohne Probleme über die verschiedenen Abschirmungen und Signaltypen hinweg funktionieren.

Basierend auf meinen bisherigen Recherchen zu dieser Art von Ebenenverschiebung scheinen die verfügbaren Optionen zu sein:

  • Eine Reihe von Dioden, die einen Spannungsabfall erzeugen (dies wäre jedoch unidirektional)
  • Eine Reihe von Widerstandsteilern (wieder unidirektional)
  • Ein spezialisierter Level-Shifting-Chip?...
Widerstandsteiler sind von Natur aus ebenfalls unidirektional. Level-Shifter-ICs sind meistens unidirektional (obwohl die Richtung durch einen Stift geändert werden kann), obwohl einige auch automatisch sind.
@ gl3829: Hmm, hast du bestimmte Level-Shifter-ICs im Sinn, die bidirektional sind (die nicht darauf beschränkt sind, dass alle nur in die eine oder andere Richtung umgeschaltet werden)? Oder andere Zwei-Wege-Lösung?
Es gibt die TI TXB-Serie für bidirektional, aber sie sind teuer. Beispiel: ti.com/product/txb0108
@JoeBaker: Nicht so schlimm; Danke. Beim Suchen in derselben Kategorie wie der TXB0108 im Digikey-Katalog habe ich Folgendes gefunden: GTL2000 . Es hat 22 Kanäle, aber seine Spezifikationen sagen "Spannung" für Eingangstyp und Ausgangstyp, während Spezifikationen für TXB0108 usw. "Logik" für dasselbe sagen. Ich versuche herauszufinden, ob es einen Unterschied gibt.
Nützlicher Artikel hier: eetimes.com/electronics-news/4169927/… - Jetzt warten Sie einfach darauf, dass unser ansässiger LMGTFY das in eine "originale" Antwort umformuliert :-)
TI TXB würde ich auch empfehlen, aber überprüfen Sie unbedingt die Datenblattspezifikationen. Ihre Auto-Funktionalität hat einige Nachteile, was den Antriebsstrom oder die Geschwindigkeit betrifft, wenn ich mich richtig erinnere.

Antworten (2)

Ich habe ein kleines System entworfen, das für Ihre spezielle Anwendung funktionieren könnte. Hier ist das Schema:Level-Übersetzer

Ich habe den Referenzknoten vergessen, er muss an Klemme 2 von BT1 angeschlossen werden. Wie funktioniert das?

Von hoch nach niedrig

Nehmen wir zunächst einmal an, wir können den Strom, der in/von "low" fließt, vernachlässigen.

Wenn in R1 hochgezogen wird (5 V), fließt kein Strom, während die drei Dioden leiten. Unter der Annahme einer Vorwärtsabfallspannung von 0,6 V beträgt die Spannung bei Low 3,2 V, und der Strom, der von High fließt, beträgt ungefähr 320 uA.

Wenn High heruntergezogen wird (0 V), werden alle Dioden gesperrt, sodass die Spannung bei Low von R2 heruntergezogen wird. Der Strom, der so hoch sinken muss, beträgt ungefähr 500 uA.

Von niedrig bis hoch

Nehmen wir nun an, dass High keinen Strom verbraucht.

Wenn Low hochgezogen wird (3,3 V), können die Dioden nicht leiten, da die Spannung bei High mehr als 5 V betragen würde, also wird High von R1 hochgezogen, die Dioden sind ausgeschaltet und Low muss etwa 330 uA liefern.

Wenn Low heruntergezogen wird (0 V), sind die Dioden korrekt polarisiert, R2 hat null Volt, die Spannung bei High beträgt etwa 1,8 V und der durch Low gesenkte Strom beträgt etwa 180 uA.

Wie Sie sehen können, besteht das große Problem darin, dass 1,8 V etwas zu viel sind: Eine CMOS-Schaltung würde wahrscheinlich "niedrig" lesen, während eine TTL wahrscheinlich so "hoch" lesen würde. Ein besserer Ansatz könnte eine 1,5-V-Zenerdiode anstelle der drei kleinen Signaldioden verwenden, wobei die Kathode mit R1 und die Anode mit R2 verbunden ist. Der Widerstand muss wahrscheinlich reduziert werden, um den minimalen Polarisationsstrom der Zenerdiode zu erreichen.

Eine letzte Sache zu den Widerständen ist, dass Sie jeden Wert von 1k bis 100k verwenden können, natürlich entsprechen höhere Widerstandswerte einem geringeren Stromverbrauch, aber auch einem langsameren Einschwingverhalten und umgekehrt.

Sehr einfach, schlagen Sie einfach eine Abschirmung auf und es funktioniert, es ist keine Spannungskorrektur erforderlich. Das Due funktioniert problemlos mit dem Ethernet-Schild und dem WiFi-Schild. Wenn Ihre Stromzufuhr zu den Abschirmungen 3,3 Volt beträgt, haben die Chips auf diesen Abschirmungen keine Spannungsverstärker und geben dann 3,3 Volt aus. Wenn Sie ein Schild mit einem Controller darauf kaufen, überprüfen Sie das Datenblatt des Geräts und prüfen Sie, ob es eine 3,3-Volt-Stromaufnahme haben kann. CMOS High ist 1,5 Volt und darüber, glaube ich. (Es wäre fast unmöglich, bei dieser Spannung zu kommunizieren, ich würde sagen, Ihr sicheres Tief ist 3 Volt.) Wenn es 3,3 Volt liefern kann, schließen Sie es an und überprüfen Sie die Pin-Ausgänge, wenn es alle 3,3 Volt sind, stecken Sie es in den Arduino und Spaß haben :)