Hallo zusammen,
ich stehe vor einer Herausforderung und benötige eure Hilfe.
Ich möchte den Stromverbrauch meines Projektes verringern und bin auf
MOSFETS gestoßen.
Mein Projekt besteht aus einem ESP32, einem Sensor und einem Lora Modul.
Das ganze wird mit einer Batterie betrieben und ich stehe vor dem
Problem, dass Sensor und LoRa-Modul Strom verbrauchen, wenn der ESP im
Deep-Sleep Modus ist. Da kam mir die Idee, die Stromversorgung der
Module mit Mosfets zu steuern.
Ist es möglich die Stromversorgung mit Mosfets und den GPIO pins des ESP
zu steuern?
Welche Mosfets sind dafür geeignet?
Daten:
Beide Module werden mit 3,3Volt versorgt.
Sensor: ca. 5 mA
LoRa-Modul: ca. 120 mA
Vielen Dank im Voraus
Alex schrieb:> Ist es möglich die Stromversorgung mit Mosfets und den GPIO pins des ESP> zu steuern?
Ja.
> Welche Mosfets sind dafür geeignet?
Wenn man die PLus-Leitung abtrennen will:
P-MOSFETs die bei 2.5V schon sicher durchschalten, also bessere
LogicLevel.
Also so was wie AO3423 oder NDS332.
Alex schrieb:> Ist es möglich die Stromversorgung mit Mosfets und den GPIO pins des> ESP zu steuern?
Ja, sogar üblich.
> Welche Mosfets sind dafür geeignet?
Solche, die die "High-Side", also die Versorgungsspannung schalten
können. Im Prinzip also nur P-Kanal Logic-Level FETs mit einer
Threshold-Spannung im 1V Bereich.
Wobei du den Sensor mit seinen 5mA sogar aus einem IO-Pin des µC
versorgen könntest: High = Versorgung an / Low = Versorgung aus
p-Fets, die mit 3,3V Gatespannung zufrieden sind, den erforderlichen
Strom abkönnen und dabei ausreichend niederohmig sind.
Für was vergleichbares habe ich den IRLML6401 genommen.
Ich habe mich erneut informiert und nochmal eine Frage.
Ist ein N-Channel-MOSFET nicht die bessere Wahl?
Dann könnte ich den mit dem GPIO-Pin besser schalten.
Setze ich den PIN auf High schaltet der N-Ch-Mosfet durch...setze ich
den GPIO auf LOW schaltet der Mosfet nicht durch.
Hab ich das richtig verstanden.
Gate = GPIO PIN
Source = GND
Drain = Sensor -> 3,3V
Welcher N-Channel-Mosfet würde sich dafür eignen? Wie wähle ich den
richtigen aus?
Hallo Alex,
wenn ich dich jetzt richtig verstehe würdest du damit einen sauberen
Kurzschluss zwischen 3,3V und GND erzeugen. Wenn du den Sensor direkt an
3,3V anschließt und dann auch die Drain des NMOS, dann verbindet der
NMOS im geschlossenen Zustand deine 3,3V mit GND. Das ist nicht zu
empfehlen.
Der MOSFET sollte zwischen 3,3V und den Versorgungsanschlüssen deines
Sensors liegen. Ich würde also, wie oben schon geschrieben, einen PMOS
nutzen. Du kannst aber auch einen NMOS und einen PMOS zusammen schalten.
Dabei wird die Drain des NMOS an das Gate des PMOS geschaltet. Dann
kannst du das Gate des NMOS mit dem Controller ansteuern und dieser
steuert dann den PMOS. Dabei bitte nicht vergessen einen Widerstand
zwischen dem Gate und der Source Source jeweils bei PMOS und NMOS zu
schalten (Stichwort: definierter Zustand beim Einschalten). Hier noch
einmal zusammengefasst:
Drain NMOS: Gate PMOS
Gate NMOS: GPIO Pin
Source NMOS: GND
Drain PMOS: Versorgung Sensor
Gate PMOS: Drain NMOS
Source PMOS: 3,3V
Gruß
Olli
Alex schrieb:> Gate = GPIO PIN> Source = GND> Drain = Sensor -> 3,3V
Kannst du das mal als Schaltplan (**) malen. Sieht für mich derzeit
wie ein geschalteter Kurzschluss aus, wenn 3,3V irgendwie mit GND
verbunden werden...
> Welcher N-Channel-Mosfet würde sich dafür eignen?
Logic Level Mosfet
> Wie wähle ich den richtigen aus?
Anhand des Stromes, der Spannung, der Bauform usw...
> Hab ich das richtig verstanden.
Es ist übrigens eine ausgesprochen ungeschickte Idee, bei externen
Komponenten die Masse "abzuschalten", solange irgendein anderer
Anschluss dieser externen Komponente z.B. über einen IO-Pin oder einen
Schnittstellenpin noch GND-Pegel bekommt. Stichwort dazu "parasitäre
Versorgung".
Das kann auch im Fall einer abgeschalteten Vcc passieren, aber dort kann
man es wesentlich leichter erkennen.
> Hab ich das richtig verstanden.
Das mit "schließ den Sensor mit sienen 5mA an einen IO-Pin des µC an"
hast du schon gesehen?
(**) Schaltpläne sind das weltweit anerkannte Kommunikationsmittel (aka
Sprache) zwischen Elektronikern. Über so einen Schaltplan kann ich sogar
mit Leuten kommunizieren, von deren Muttersprache ich nicht mal wusste,
dass es sie gibt.
Ich habe mal einen Schaltplan gemalt. Ich hoffe ihr versteht was ich
meine.
Möchte ungern 5 mA über den GPIO schalten. Wollte es wenn dann richtig
machen und für das andere Modul muss ich 120 mA schalten.
Er schaltet der Sensor halt nach GND und nicht nach VCC. Ob das jezt
förderlich im Zusammenspiel von Sensor und ESP ist, dazu müßte man den
Rest kennen.
Alex schrieb:> Wollte es wenn dann richtig> machen
Problem, welches du beachten solltest: Es gibt ganz bestimmt noch mehr
Verbindungen zwischen Sensor/Funkmodul und ESP.
Wenn du einem die Stromversorgung klaust, kann es sein, dass trotzdem
noch Strom über die ESD-Schutzdioden fließt.
Also: Wenn du GND vom Sensor wegschaltest, solltest du alle
Datenleitungen zum Sensor auf HIGH oder HIGH-Z stellen...
Und wenn du VCC vom Sensor wegschaltest, die Datenleitungen auf LOW...
Zeichne einfach mal die Datenleitungen und die internen Schutzdioden in
den Schaltplan ein, dann siehst du die möglichen Stromkreise eher.
Alex schrieb:> Ich hoffe ihr versteht was ich meine.Darum kam es, dass ich schrieb:>> Es ist übrigens eine ausgesprochen ungeschickte Idee, bei externen>> Komponenten die Masse "abzuschalten"Εrnst B. schrieb:> Also: Wenn du GND vom Sensor wegschaltest, solltest du alle> Datenleitungen zum Sensor auf HIGH oder HIGH-Z stellen...
Weil sich quasi jedes Signal und die meisten Werte aus dem Datenblatt
auf den GND-Pin beziehen, ist es prinzipiell keine gute Idee, den GND
wegzuschalten und irgendwie floaten zu lassen.
Und ganz lustig wird es dann, wenn diese "weggeschaltete Masse" z.B.
über einen nur zeitweise Steckverbinder und das E-Werk doch wieder "so
halb" auf Massepegel gezogen wird....
Das LoRa Modul kannst du übrigens auch per Kommando in standby oder deep
sleep versetzen. Den Sensor wahrscheinlich auch, da wäre es vl. ratsam
mal zu erfahren welcher Sensor es denn ist.
Wenn die Funkion nicht da ist, dann kannst du sie einfach selbst
implementieren, Datenblatt raus, RFM95 Library Quellcode raus und los:
Registerdefinition für LoRa mode:
https://cdn.sparkfun.com/assets/learn_tutorials/8/0/4/RFM95_96_97_98W.pdf#page=102
Das Datenblatt sagt also dass es einen SLEEP (0b000) und einen STANDBY
(0b001) Modus gibt. Den kannst du aktivieren indem du in Register 0x01
die Bits 0, 1 und 2 auf den entsprechenden Wert (siehe oben) setzt. Du
musst natürlich vorher das Register auslesen und von diesem Wert nur die
ersten 3 Bits modifizieren, sonst verlierst du die restlichen
Einstellungen des Registers:
1
// Auslesen
2
uint32_t regOpMode = readRegisterSpi(0x01);
3
4
// Die ersten 3 Bits zurücksetzen und mit 0b001 beschreiben
5
regOpMode = (regOpMode & ~0b111) | 0b001;
6
7
// Zurückschreiben
8
writeRegisterSpi(0x01, regOpMode)
Die read/writeRegisterSpi funktionen wirst du mit Sicherheit in
irgendeiner Form im Quellcode der RFM95 Lib finden.
Man muss noch ein paar mehr Sachen beachten, z.B. ob die Konfiguration
beim aufwecken aus dem deep sleep verloren geht oder nicht usw. aber im
Grunde ist das alles sehr einfach!
@Alex: Das, was du machen willst, habe ich bereits mehrfach mit
folgenden Transistoren gemacht: BC337-40 [NPN] und IRF9250
[P-Channel-Mosfet); ein High Side-Switch also. Wie man so eine Schaltung
aufbaut kann man hier zB in Abb4 sehen:
https://dl6gl.de/schalten-mit-transistoren
Die Schaltungen werden dort zwar entweder mit "normalen" Transistoren
oder Mosfets gemacht, aber kann man ja auch mischen. Gibt vermutlich
passendere Transistoren, aber mit denen, die ich genannt habe, geht es
auf jeden Fall und die hatte ich noch daheim rumliegen.
Werte der Widerstände: R1: 10k, R2: habe ich weggelassen, R4: 10k, R5:
4,7k
Ein GPIO steuert den BC337 an, R4 sorgt als Pulldown-Widerstand für ein
definiertes Signal.
Wie schon von Vorpostern gesagt wurde muss man bissl aufpassen, wenn man
die Versorgungsspannung der Peripherie abschaltet, auf dem Bus jedoch
Spannung ist. Ich habe direkt am Anfang des Codes den GPIO, der die
Transistorschaltung ansteuert, auf High gesetzt und beim Ausschalten
ergibt sich ja kein Problem, da der GPIO im Deepsleep beim ESP32 eh auf
low geht.