Richtige Möglichkeiten zum Trennen von ICs bei niedrigem Stromverbrauch, um eine parasitäre Versorgung / Rückspeisung zu vermeiden

10

Ich arbeite an einem batteriebasierten AVR-basierten Projekt mit geringem Stromverbrauch, das einige verschiedene Geräte integriert, darunter einen Neopixel-Streifen und einen Adafruit-Pixie . Wenn sich das gesamte Gerät im Ruhezustand befindet, sollte es weniger als 0,1 mA verbrauchen, um die Lebensdauer des LiPo-Akkus zu maximieren.

Ich habe alles zum Laufen gebracht (gemessen 0,035 mA), bin mir aber nicht sicher, ob ich es unbedingt „richtig“ gemacht habe, und ich plane, ein Produkt darauf zu bauen, also würde ich es gerne richtig machen.

Geben Sie hier die Bildbeschreibung ein (Nicht gezeigt: eine Flyback-Diode für das Relais)

Das Hauptanliegen, das ich habe, ist die „parasitäre“ Stromversorgung von Geräten, wenn VCC über den von den Datenpins fließenden Strom getrennt wird. Zum Beispiel hat der Pixie (der über die serielle Schnittstelle kommuniziert) keinen Ausschaltmodus und selbst wenn er ausgeschaltet ist, leert er etwa eine Milliampere. Also platzierte ich ein kleines Relais, um die VCC zu trennen, und stellte fest, dass der serielle Pin den Pixie tatsächlich noch mit Strom versorgt. Hinweise an anderer Stelle deuten darauf hin, dass viele Chips eine Diode haben, die ihre digitalen Eingangspins als Leistungsschutz an VCC weiterleitet. Um dies zu lösen, musste ich die serielle Bibliothek und tatsächlich digitalWrite (PIN, LOW) im Ruhezustand anhalten.

Das Gleiche gilt für den WS2812b-Streifen. Durch das Trennen von VCC kann das Gerät weiterhin über den Daten-Pin mit Strom versorgt werden. Und in anderen Designs habe ich, wenn ich GND mit einem N-Kanal-MOSFET getrennt habe, das Gegenteil gesehen - einen Rückfluss von Strom durch die Datenleitung zur Erde! (Dies musste mit einer Diode pro Post auf PJRC gelöst werden.) Die WS2812b benötigen tatsächlich jeweils etwa eine Milliampere, selbst wenn sie nicht beleuchtet sind.

Die Frage lautet also: Gibt es eine allgemeine, „saubere“ Möglichkeit, VCC und GND während des Systemschlafens von Teilen eines Projekts zu trennen, wenn Datenpins im Mix vorhanden sind? Was ist die beste Vorgehensweise?

Einige Ideen:

  1. Erzwinge VCC zu GND (nicht sicher wie? Hbridge?). (Wenn ich das mache, was passiert mit den Datenpins, die hoch sind?)
  2. Platzieren Sie einen Tri-State-Puffer zwischen allen Datenpins und diesen Geräten und versetzen Sie den Tri-State-Puffer im Ruhezustand in einen hochohmigen Zustand. Trennen Sie VCC oder GND nur mit P- oder N-Mosfet
  3. Trennen Sie GND nur mit N Mosfet und platzieren Sie Dioden auf allen Datenpins
  4. Gibt es eine Art Power-Latch, der sowohl VCC als auch GND trennt und sie in einen Zustand mit hoher Impedanz versetzt (wie ein Drei-Zustands-Puffer für Strom?)? Auf diese Weise kann kein Strom aus den Datenleitungen "herausfließen".

Kann mich jemand auf die sauberste und wiederholbarste Art und Weise aufklären, wie ich mit dieser Art von Problem der Lasttrennung umgehen kann? (Unnötig zu erwähnen , dass ich Stunden damit verbracht habe, dieses Problem mit wenig Glück zu googeln, obwohl ich diesen technischen Hinweis zum Lastwechsel gefunden habe, der sich jedoch nicht mit Rückspeisung und parasitärer Leistung befasst.)

Jeremy Gilbert
quelle
Ja, das ist super ärgerlich. Ich habe tatsächlich Fälle gesehen, in denen die Stromversorgung eines GPIO-Pins einen AVR einschalten kann (Code ausführen), auch wenn die VCC-Pins nicht mit Strom versorgt werden ...
vicatcu
2
Lustige Beobachtung: Ich habe seit dem Posten dieser Frage noch einige Google-Suchanfragen durchgeführt und diese Frage auf SE wurde als Top-Rang eingestuft. Google hat diese Seite in weniger als 10 Minuten indiziert.
Jeremy Gilbert
Nur Kommentar: Richtige Isolationsschalter, wie andere vorgeschlagen haben, sind die beste Lösung, wenn eine Fernspannung nicht beseitigt werden kann. Es kann sein, dass die Verwendung von Schottky-Dioden zur Eingabe von Pins mit Kathoden, die gemeinsam und normalerweise bei Vcc sind und auf Masse geklemmt werden, wenn eine Isolation gewünscht wird, eine angemessene Eliminierung von Spannungen mit hoher Impedanz ermöglicht. Offensichtlich kann Schottky, der eine Stromversorgungsleitung mit niedriger Impedanz festklemmt, Ihren Tag verderben.
Russell McMahon
Wahrscheinlich ist es die beste Wahl, alle Ihre Verbindungen auf irgendeine Weise zu verbinden (µC-Pins mit drei Zuständen, Puffer mit drei Zuständen, analoge Schalter, was auch immer), wie Peter Smith und CL vorgeschlagen haben. Welche der Methoden besser ist, weiß ich nicht genau. Auf jeden Fall: Warum verwenden Sie ein Relais zum Schalten und keinen P-MOSFET (oder einen N-MOSFET auf der Unterseite, obwohl das Schalten auf der Unterseite hier wahrscheinlich etwas schwieriger sein wird)?
FlashCactus

Antworten:

5

Wenn ich dies tue, verwende ich normalerweise CMOS-Analogschalter auf den betroffenen Datenleitungen.

So etwas wie der ADG812 verfügt über 4 Kanäle mit SPST-Schaltern, die sich leicht für eine recht schnelle Logik eignen und im ausgeschalteten Zustand eine sehr hohe Impedanz zwischen den Schaltknoten bieten.

ADG812 aus Leckage

Das Schöne daran ist, dass die Technik sowohl für unidirektionale als auch für bidirektionale Datenleitungen funktioniert .

Diese Teile haben auch ein strahlendes Lächeln:

ADG812 Leistungsanforderungen

Die übliche Reihenfolge für das Ausschalten:

  1. Schalten Sie die Datenpfadschalter aus

  2. Domain ausschalten.

Power-up ist natürlich das Gegenteil.

[Aktualisieren]

Diese sind in der Tat unter anderen Namen bekannt, wie z. B. Durchgangstore und Übertragungsgatter .

Diese unterscheiden sich erheblich von einem echten Tri-State-Puffer (wie Sie im Diagramm im obigen Link sehen können), aber für gewöhnliche Logik ist der Effekt besser (dies ist von Natur aus ein bidirektionales Gerät), jedoch mit geringerer Leistung.

Peter Smith
quelle
Verzeihen Sie die Unwissenheit über die Frage, aber unterscheidet sich dies deutlich von einem Drei-Staaten-Puffer? (Und danke für die Antwort!)
Jeremy Gilbert
Diese sind auch als "Pass Gates" bekannt
Vicatcu
3

Wenn die Datensignale an Ihren Mikrocontroller angeschlossen sind, können Sie sie einfach hochohmig machen, indem Sie diese Pins als Eingänge konfigurieren. (Wenn der andere Chip sehr wenig Strom verbraucht, können Sie seinen Vcc wie ein Datensignal behandeln.)

Andernfalls können Sie analoge Schalter (74 x 66 Logikchips) verwenden, um sie zu trennen. Für unidirektionale Signale würde auch 74x125 funktionieren.

CL.
quelle
Sie müssen sie eigentlich nicht auf High-Z einstellen, sondern können nur die GPIO-Leitungen des Mikros auf Low setzen.
DoxyLover
1
Das wäre gefährlicher, wenn der andere Chip jemals das Signal hoch treiben könnte.
CL.
Ist das Umschalten der Pins auf Eingänge immer das Gleiche wie das Versetzen der Pins in einen hochohmigen Zustand? Ist das auf die meisten MCUs oder nur auf die AVRs verallgemeinert? Ist dieser Status derselbe, den Sie vom 74x125 erhalten würden, wenn OE deaktiviert ist?
Jeremy Gilbert
@JeremyGilbert Alle CMOS-Eingänge haben eine hohe Impedanz (es handelt sich um MOSFET-Gatter, die sich wie sehr kleine Kondensatoren verhalten). Ein deaktivierter 125er Ausgang hat kein Gate, aber der Unterschied ist vernachlässigbar.
CL.
1
@JeremyGilbert Eingaben sind in den meisten Anwendungen im Allgemeinen hoch-Z; Schließlich ist es schwer, etwas zu spüren, wenn Sie die Linie fahren. Das heißt, zumindest bei AVRs (und wahrscheinlich auch bei anderen, aber ich kenne die Einzelheiten nicht) müssen Sie auf die internen Pullups achten: Wenn sich der Pin im Eingangsmodus befindet (konfiguriert über DDRx) und Sie LOW to schreiben es (über PORTx) ist es im regulären Hi-Z-Modus. Wenn Sie jedoch im Eingabemodus HIGH schreiben, ist das interne Pullup aktiviert und von außerhalb sieht der Pin wie ein ~ 50K-Widerstand für VCC anstelle einer schwebenden Linie aus.
FlashCactus
1

Ich glaube nicht, dass es leider eine Einheitsstrategie gibt. Schalten Sie die Stromversorgung auf Subsysteme um, wie Sie es bereits getan haben. In der Software sind die Laufwerksstifte für Zustände mit geringer Leistung niedrig, es sei denn, dies würde zu einem stationären Zustand mit hoher Leistung führen. Fahren Sie in diesem Fall den Stift hoch. Lassen Sie niemals Eingänge schweben. Sequenzleistung nach Bedarf, um sichere Anfangsbedingungen herzustellen.

vicatcu
quelle
1

Ein böses Problem, das dazu führen kann, dass Mikrocontroller sehr seltsame Dinge tun.
Die schöne Lösung besteht darin, serielle Pulldown-E / A wie . Dies erfordert Pull-up-Widerstände auf SCK- und SDA-Leitungen. Die Pull-up-Widerstände sind mit der geschalteten Vcc-Leitung verbunden. Stellen Sie sicher, dass die geschaltete Vcc-Leitung beim Ausschalten gut auf Null Volt abfällt (lassen Sie sie nicht schweben). I2C

Sie haben diese Option nicht - Sie müssen asynchrone serielle E / A verwenden. Einige Mikrocontroller erlauben einen ähnlichen Ansatz wie I2C, um das Problem zu lösen. Wenn Sie den seriellen Ausgangspin so programmieren können, dass er nur Pulldown-fähig ist, anstatt den üblicheren Pull-up-for-1-Pull-down-for-0 -Wert, können Sie dem geschalteten Vcc einen Pull-up-Widerstand hinzufügen Stellen Sie eine Logik hoch.
Diese Lösung ist nicht so rauschresistent wie Ihr derzeitiger Ansatz, sollte jedoch das Problem der Rückspeisung Ihrer E / A-Module über den AVR lösen. Es ist keine "saubere" Lösung, aber für die Mikrocontroller in Ihren E / A-Modulen weitaus sicherer.

schematisch

simulieren Sie diese Schaltung - Schema erstellt mit CircuitLab

glen_geek
quelle