Frage
Kann ein einfacher NPN-BJT-Transistor verhindern, dass ein Debug-UART die MCU auf der Zielplatine rückspeist?
Problem
UARTs und zugehörige USB-zu-UART-Dongles (z. B. ein Dongle der Marke FTDI) werden häufig zum Debuggen von Mikrocontrollern auf PCBs verwendet. Das Problem besteht darin, dass die TX
Leitung vom FTDI-Gerät zum Mikrocontroller im Leerlauf durch das FTDI-Gerät hoch getrieben wird. Dies kann verhindern, dass Sie die MCU zurücksetzen können, indem Sie die Platine aus- und wieder einschalten, da beim Trennen der Stromversorgung zu VCC
, die Leitung +3.3V
auf der TX
Leitung durch die internen ESD-Dioden der MCU zu rückgespeist wird VCC
und die Spannungsschiene gestützt bleibt. Vorwiderstände funktionieren gut, um dadurch verursachte Schäden zu vermeiden, sind jedoch nicht vollständig geeignet, um sicherzustellen, dass das VCC
Netz bis in die Nähe herunterfällt0V
, da die Leistungsaufnahme der MCU erheblich abfällt, wenn sie sich abschaltet (z. B. durch "Brown-Out-Erkennung"), was bedeutet, dass die MCU in einem seltsamen Zustand schwebt oder, noch schlimmer, wiederholt beim Einschalten stecken bleibt!
Mögliche Lösung
Würde ein NPN-BJT, wie im Bild unten gezeigt, dieses Problem beheben? Ich werde das bei Gelegenheit auf dem Steckbrett testen, dachte aber, es könnte gut sein, auch hier zu fragen! Zumindest könnte es ein interessantes Gespräch oder eine Diskussion über andere Lösungen dafür beginnen.
Ich denke, der 0.7V
Abfall von der Basis zum Emitter wird in Ordnung sein, dies bedeutet nur, dass die MCU eher 2.6V
als HIGH als als 3.3V
. Ich habe dies ursprünglich mit einem MOSFET entworfen, aber die äquivalente Gate-Source-Schwellenspannung ist normalerweise viel größer als der Basis-Emitter-Abfall von 0.7V
, was bedeutet, dass das logische HIGH sogar kleiner sein kann als 2.6V
und Probleme verursachen kann.
Die Grundidee ist OK. Aber die Details sind falsch. Bei 3,3 V an der Basis des Transistors befindet sich der Transistor in einem seltsamen Zustand. Man könnte es sich an diesem Punkt eher wie zwei Dioden mit minimaler Transistorwirkung vorstellen. Der Basis-Emitter-Übergang wäre wie eine Pullup-Diode für MCU_UART_RX und der Basis-Kollektor-Übergang wäre wie eine Pullup-Diode für FTDI_TX.
Ich denke, FTDI_TX würde es schwer haben, den Kollektor niedrig zu fahren, wenn die Basis an 3,3 V angeschlossen ist. VIELLEICHT könnte ein Basiswiderstand die Situation retten, aber ich mag es immer noch nicht und vertraue ihm nicht.
Was Sie wahrscheinlich wollen, ist ein High-Side-PMOS-Schalter. Das Gate könnte von einem NMOS angesteuert werden, dessen Gate an 3,3 V gebunden ist. Wenn Sie Platz für zwei SOT-23-Pakete haben, sollte dies problemlos funktionieren. Möglicherweise finden Sie PMOS und NMOS zusammen in einem einzigen Gehäuse, um Platz zu sparen, wenn der Platz für SOT-23 zu knapp ist.
Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan
ODER Sie könnten einen analogen Busschalter mit der Ioff-Funktion verwenden. Diese bieten Isolierung, wenn sie ausgeschaltet sind. Ich lasse Sie eine Suchmaschine verwenden, um mehr über diese Option zu finden.
Nein, das geht nicht.
Unabhängig davon, ob der FTDI_TX angeschlossen ist oder nicht, bleibt der Emitter bei eingeschalteter 3,3-V-MCU-Versorgung immer auf hohem Pegel, wodurch eine Datenübertragung unmöglich wird.
Eine hackige, aber funktionale Alternative ist eine Reihendiode, kombiniert mit einem Pull-up auf der MCU-Seite.
Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan
Wenn ein hoher Pegel von FTDI übertragen wird, zieht der Pullup das RX-Signal hoch. Wenn ein niedriger Pegel übertragen wird, zieht die Diode ihn niedrig. Aufgrund der Abfallspannung der Diode wird der Rauschabstand an der MCU um etwa 0,3 V reduziert.
Aufgrund des reduzierten Rauschabstands würde ich dies nicht für primäre Kommunikationsbusse empfehlen. Es kann jedoch eine akzeptable Lösung für einen Debug-Port sein, der nur mit kurzen Kabeln verwendet wird.
115200
Baudrate läuft. Dies wird wahrscheinlich in Ordnung sein, aber möglicherweise wäre es eine gute Idee, den Pull-up auf 10 kΩ (Zeitkonstante jetzt 1/100 der Bitperiode) zu reduzieren.Es gibt einige großartige Antworten auf diese Frage. Ich habe jetzt etwas mehr gelesen und wollte ein vollständiges Beispiel für eine der vorgeschlagenen Optionen als Kommentar geben. Wie @Justme erwähnte, funktioniert die BJT-Methode nicht, da die Basis den Emitter hochhält und verhindert, dass das TX-Signal durchkommt. Wie @brhans und @mckeith erwähnt haben, ist ein Logik-IC mit der Funktion "Ioff"/"Ausschaltschutz" eine Lösung, wie unten gezeigt:
Beachten Sie, dass diese ICs eine etwas andere CMOS-Totem-Pole-Treiberkonfiguration haben, die verhindert, dass die Diode von der E/A-Leitung zur Vcc-Bildung geht (die manchmal als "ESD-Diode" verwendet oder bezeichnet wird). Anstatt das Substrat des P-Kanal-MOSFET direkt mit der Source (Vcc) zu verbinden, fügen sie eine zusätzliche Sperrdiode hinzu, die die Ioff-Funktionalität ermöglicht.
Mehr dazu finden Sie unter https://www.ti.com/lit/an/scea026/scea026.pdf .
Ich möchte eine etwas andere Methode zur Lösung dieses Problems skizzieren, obwohl sie aufgrund von Designanforderungen möglicherweise nicht zutrifft.
Alle diese billigen kleinen FTDI-Breakout-Boards haben einen Jumper, mit dem Sie auswählen können, ob das Board das Ziel auf 3,3 V oder 5 V hochziehen soll. Es gibt jedoch eine dritte Option: Lassen Sie den Jumper getrennt und verbinden Sie den VCC des Ziels mit dem VCC-Pin des Breakout-Boards.
Sie benötigen also 4 Drähte (RX, TX, VCC und GND), um den FTDI mit dem Ziel zu verbinden, aber Sie ermöglichen nicht nur verschiedene Spannungsoptionen, sondern dies würde auch Ihr Problem der Rückspeisung durch Schutzdioden lösen.
brhans
Spuk