Forum: Mikrocontroller und Digitale Elektronik MOSFET: Schalter für Stromversorgung zweier Module


von Alex (Gast)


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

von Michael B. (laberkopp)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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

von H.Joachim S. (crazyhorse)


Lesenswert?

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.

von Alex (Gast)


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?

von Oliver L. (olubritz)


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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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.

: Bearbeitet durch Moderator
von Alex (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Ulf L. (ulf_l)


Lesenswert?

Hallo

Wo ist denn da ein KS?
1
 VCC
2
  |
3
Sensor
4
  |
5
Drain
6
7
Source
8
  |
9
 GND
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.

von Alex (Gast)


Lesenswert?

Angenommen ich liege richtig mit meinem Schaltkreis und habe keinen 
Kurzschluss.

Wäre der IRF3708 ein N-Kanal-Mosfet den ich verwenden könnte?

von Εrnst B. (ernst)


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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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

: Bearbeitet durch Moderator
von Florian (Gast)


Lesenswert?

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.

von Alex (Gast)


Lesenswert?

Wie kann ich denn das RFM95W mit Arduino Code in den Schlafmodus setzen? 
Ist mir nicht bekannt...

von Florian (Gast)


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!

von Torsten (Gast)


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.

von Torsten (Gast)


Lesenswert?

Ups, ich sehe eben erst, dass du 3.3 V schalten willst. Dann passt der 
von mir genannte IRF9520 nicht. Sorry.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.