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.
(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:
- Erzwinge VCC zu GND (nicht sicher wie? Hbridge?). (Wenn ich das mache, was passiert mit den Datenpins, die hoch sind?)
- 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
- Trennen Sie GND nur mit N Mosfet und platzieren Sie Dioden auf allen Datenpins
- 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.)
Antworten:
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.
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:
Die übliche Reihenfolge für das Ausschalten:
Schalten Sie die Datenpfadschalter aus
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.
quelle
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.
quelle
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.
quelle
Ein böses Problem, das dazu führen kann, dass Mikrocontroller sehr seltsame Dinge tun.I2C
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).
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.
simulieren Sie diese Schaltung - Schema erstellt mit CircuitLab
quelle