MOSFET: Schalter für Stromversorgung zweier Module

Gast #6123231
Lesenswert?

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
Moderator (Firma: Titel) Persönliche Seite #6123241
Lesenswert?

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
Gast #6138624
Lesenswert?

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?
#6138645
Lesenswert?

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
Moderator (Firma: Titel) Persönliche Seite #6138647
Lesenswert?

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.
#6138791
Lesenswert?

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.
Moderator (Firma: Titel) Persönliche Seite #6138806
Lesenswert?

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....
Gast #6139974
Lesenswert?

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!
Gast #6140118
Lesenswert?

@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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren