Der Mikrocontroller wird über die UART-Verbindung mit Strom versorgt

Ich habe ein benutzerdefiniertes ARM Cortex M3-Board, das über UART mit einem Raspberry Pi 4 kommuniziert. Nur drei Drähte verbinden den Pi mit der MCU: Tx, Rx, GND. Wenn die MCU-Stromversorgung ausgeschaltet wird, schaltet sich das Gerät nicht ab, sondern zieht 17 mA vom Rx-Pin und kann die 3,3-V-Schiene auf 1,7 V bringen, was ausreicht, um die MCU am Laufen zu halten oder zumindest ein Zurücksetzen zu verhindern. Vermutlich geschieht dies über die Schutzdioden, wenn die 3,3-V-Versorgung ausgeschaltet ist.

Der Pi und die MCU werden von unabhängigen Netzteilen betrieben, sind jedoch im selben Gehäuse montiert und teilen sich eine Masse. Das UART-Kabel ist zwischen ihnen nur 10 cm lang.

Was ist der richtige Weg, um die Stromversorgung zwischen diesen Geräten zu trennen und gleichzeitig die UART-Kommunikation zu ermöglichen? Ich benötige keine galvanische Trennung, ich möchte nur den Rückfluss der Stromversorgung verhindern. Irgendwelche Vorschläge?

Ich habe derzeit 1-kΩ-Widerstände in Reihe mit den Rx- und Tx-Leitungen, was verhindert, dass die MCU vom Pi mit Strom versorgt wird. Es fließt jedoch immer noch Strom zum 3,3-V-Bus, und ich weiß nicht, ob dies die seriellen Daten beeinträchtigen wird.

(Bearbeiten: Ich möchte die allgemeine Natur dieser Frage betonen. Es ist üblich, Push-Pull-Verbindungen zwischen Geräten mit Schnittstellen wie SPI, UART oder nur GPIO-Bits zu haben. Diese alle haben das Potenzial, ein nicht mit Strom versorgtes Gerät über mit Strom zu versorgen die Schutzdioden.)

Was ist die Baudrate?
Warum muss man irgendetwas isolieren? Wenn die MCU ausgeschaltet ist, ändern Sie einfach den TXD-Ausgang, der hoch fährt, entweder auf niedrig oder Eingang. Das ist eine Softwarelösung, die keine Hardware benötigt.
Die Baudrate ist 115200, aber ich könnte sie mit bis zu 400 kBaud verwenden, wenn sie stabil ist.
Die Stromversorgung wird versehentlich vom Raspberry Pi TX (GPIO14) Pin 8 geliefert. Ich bin mir nicht sicher, ob der UART deaktiviert und dieser Pin HighZ in der Software gesteuert werden kann. Auch der Pi weiß nicht, dass die MCU ausgeschaltet ist.
Glückwunsch. Sie haben das Problem erfasst und das ist 99% der Lösung.
Können Sie den UART auf einen 5-V-toleranten Pin umleiten? Hat deine MCU die? Wenn ja, haben sie keine Diode zur 3V3-Leitung (sonst wären sie nicht 5V-tolerant ...) Dies könnte Ihr Problem ohne zusätzliche Hardware lösen.
@DavidMolony Danke, aber ich glaube nicht, dass das 5-V-tolerante IO helfen wird. Beim STM32G4 haben die 5-V-toleranten Pins von FT_c immer noch Schutzdioden, die an VDD_FT klemmen, vermutlich von einer Ladungspumpe auf 5 V. Wenn andererseits die VDD_FT-Quelle abschaltet, verhindert sie möglicherweise ein Lecken durch die Diode zur Abschalt-VDD.

Antworten (3)

Es gibt Puffer, die das beheben (Suchbegriff: "ioff partial power down"). Solange der Puffer von der VCC der benutzerdefinierten ARM-Platine mit Strom versorgt wird, blockiert er den Strom, wenn VCC fehlt.

Sie können es aber auch mit zwei Transistoren beheben, einem PMOS wie dem BSS84 und einem NMOS wie dem BSS138. Siehe Schema unten. Verwenden Sie V CC auf Ihrer benutzerdefinierten Armplatine, um den BSS138 einzuschalten. Dadurch wird wiederum der BSS84 eingeschaltet, damit das Signal durchkommen kann.

Aber wenn VCC nicht vorhanden ist, schaltet sich der BSS138 aus, und dann schaltet sich auch der BSS84 aus, und es kann kein Strom von PI_TX zu PI_TX_SW fließen. R2 wird wahrscheinlich nicht benötigt. Es gibt wahrscheinlich schon etwas zwischen VCC und GND, das VCC zusammenbrechen lässt.

Dies ist die kurze Version der Antwort, da ich beurteile, dass Ihr Erfahrungsniveau bereits ziemlich fortgeschritten ist. Bitte zögern Sie jedoch nicht, bei Bedarf eine Ausarbeitung oder Klarstellung im Kommentarbereich anzufordern.

Wenn es nicht notwendig ist, auf der PI-Seite sparsam mit Strom umzugehen, können Sie R1 auf etwa 10 kOhm ändern.

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Dies funktioniert gut, solange VCC 3,3 oder 5 V beträgt. Es funktioniert beispielsweise nicht zuverlässig bei VCC = 1,8 V.
+1 Coole Lösung. Beeinflusst R1 die Schaltgeschwindigkeit?
Danke, so eine Lösung habe ich gesucht. Ich werde nach einem ioff-Puffer suchen, der dies schlüsselfertig tun kann. Ich dachte, es gäbe eine einfache Lösung mit diskreten Transistoren, aber ich konnte es nicht ganz herausfinden.
Ich bin dabei, mein ARM-Board neu zu drehen (wenn ich eines der Teile finden kann), also bin ich froh, den richtigen Weg zur Lösung dieses Isolationsproblems zu kennen.
Die zwei Transistoren sind kostengünstiger, aber der Puffer ist einfacher und sauberer und kompakter. Der Pufferpaket-IC ist so klein wie ein Transistor. Ich würde die Transistoren nur verwenden, wenn es sich um ein hochvolumiges Design handelt ODER wenn die Puffer aufgrund von Teileknappheit nicht verfügbar sind.
@devnull Ich glaube nicht. Oder nicht viel. Ich denke, die Geschwindigkeitsbegrenzung wird die Miller-Kapazität im BSS84 sein. Das Problem mit dem 470 k ist, dass, wenn im BSS138 ein Leckstrom vorhanden ist, der BSS84 möglicherweise anfängt, sich ein wenig einzuschalten, wenn wir es nicht wollen. Ich denke, 470 k werden in Ordnung sein, aber ich würde nicht viel höher gehen.

Der klassische Weg ist die Verwendung eines "4050" ( Beispiel ) zum Puffern des eingehenden Signals. Ein 4050 leitet keinen Strom vom Eingang an Vdd weiter. Vdd sollte an die Stromversorgung des M3-Boards angeschlossen werden. Es gibt viele weitere moderne "Level-Übersetzer" -Chips, die Sie ebenfalls verwenden könnten.

Der 4050 könnte sich in der Praxis so verhalten, aber ich sehe im Datenblatt nichts, was auf die von @mkeith oben beschriebene Art von "Ioff" -Verhalten hindeutet. Vielleicht habe ich etwas verpasst.
@Mike Siehe Abbildung 6 im Datenblatt. Dem Eingang fehlt die Diode zu Vdd, die normalerweise in CMOS vorhanden ist. Diese Diode ist der Pfad, dem die passive Leistung folgt.
Ich frage mich, ob dieselbe Diode für den 16-V-Überspannungsschutz mit einem niedrigen Rückwärtsdurchbruch verwendet wird. Natürlich sind diese Datenblattschemata repräsentativ für das Verhalten, nicht für die tatsächliche Implementierung.
@Mike Standard CMOS begrenzt Überspannung an den Versorgungsschienen durch Dioden. Ein 4050 macht das mit der negativen Schiene, aber ja, er verwendet einen Diodendurchbruch für positives Clipping. Dies ist nicht so effektiv, und 4050er sind bekanntermaßen etwas anfälliger für ESD-Schäden als Standard-CMOS

Vielleicht einen nicht invertierenden Tri-State-Puffer in die TX-Leitung einbauen. Wie ein SN74AHC1G125 oder ähnlich. Verwenden Sie einen Pullup auf /OE zum Pi und fahren Sie ihn mit der MCU aktiv niedrig.

Das klingt, als wäre es der richtige Weg. Aber leidet der Puffer unter dem gleichen Problem, wenn Vin > Vcc, wenn die MCU ausgeschaltet ist? Wenn OE = Lo ist, ist der Ausgang ausgeschaltet, aber wird der Eingangsüberspannungsschutz auf VCC zurückgeführt?
Sicherheitshalber könnten Sie nach 125 Pufferalternativen mit Ioff-Funktion wie folgt suchen: farnell.com/datasheets/2192952.pdf Es verhindert einen Rückwärtsfluss, wenn VCC niedrig ist.
Puffer, die so konzipiert sind, dass sie im ausgeschalteten Zustand isolieren, verwenden dieses Zauberwort „ioff“ oder häufig den magischen Ausdruck „ioff teilweise ausgeschaltet“. Wenn das OP also nach diesen magischen Phrasen sucht, wird die Erleuchtung sicherlich folgen.
Lassen Sie den Puffer einfach eingeschaltet und schalten Sie den Ausgang mit dem OE-Pin aus.
Gibt es einen Grund, dafür einen Puffer mit OE-Funktion zu bevorzugen? Der 74LV1G06 sollte genauso gut funktionieren, oder? ti.com/lit/ds/symlink/sn74lvc1g06.pdf . Solange der ARM eingeschaltet ist, wäre die Ausgabe erlaubt.
Das OE-Ding könnte funktionieren, wenn Sie den Puffer eingeschaltet lassen. In diesem Fall brauchen Sie IOFF nicht. Sie versorgen den Puffer von der PI-Seite mit Strom, und OE kommt von der Seite der benutzerdefinierten Armplatine. Wenn Sie die IOFF-Route wählen, versorgen Sie den Puffer von der Armseite mit Strom und benötigen kein OE. Ich denke, diese zweite Option ist sauberer. Weil (ich nehme an) Sie den Puffer auf das Armbrett legen werden. Mit der Option IOFF benötigen Sie VCC von der PI-Seite überhaupt nicht.