Forum: Mikrocontroller und Digitale Elektronik ESP8266 mit Selbsthaltung


von Neuling (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich würde gerne einen ESP8266 mit Selbsthaltung bauen. D.h ich drücke 
einen Taster, der ESP8266 bootet, führt einen Task aus und trennt dann 
die Versorgungsspannung (Batterie) wieder.

Dazu hab ich die Schaltung im Anhang aufgebaut. Nach meinem Verständnis 
sollte die Schaltung so funktionieren: Der SW Taster wird gedrückt und 
versorgt den uC mit Strom. Der uC zieht dann als erstes GPIO5 auf low 
und sorgt dafür, dass der uC auch weiterläuft wenn der Taster 
losgelassen wird. Sobald der uC mit der Ausführung des Tasks fertig ist, 
wird GPIO5 wieder auf high gezogen und trennt damit die Versorgung.

Allerdings funktioniert die Schaltung leider nicht so gewünscht. Wenn 
ich den Taster drücke sehe ich, dass GPIO5 auf low gezogen wird. Doch 
sobald ich den Taster wieder loslasse, ist die Versorgungsspannung 
unmittelbar weg - d.h keine Selbsthaltung.

Ist der p-FET den ich verwende nicht geeignet oder hab ich da irgendwo 
nen Denkfehler?

Ich hab hier im Forum bereits ein paar Schaltungsvorschläge mit Relais 
gefunden. Allerdings hab ich bereits eine kleine Test-Platine fertigen 
lassen, die ich gerne (wenn möglich) mit Fädeldraht retten möchte.

Vielen Dank für eure Zeit!

von Helmut -. (dc3yc)


Angehängte Dateien:

Lesenswert?

Warum so aufwändig? Nimm eine CR123A-Zelle mit 1.5Ah und einen ESP-12. 
Wenn du den zwischen den Aktionen in den DeepSleep schickst, hält der 
ewig. Ausser du drückst ihn alle 3 Sekunden. Meine Schaltung ist im 
Anhang.

von Stefan F. (Gast)


Lesenswert?

Schon wieder einer, der es mit einem Transistor versucht. Ich habe 
keine Lust, erneut zu erklären, warum das nicht geht. Benutze einfach 
mal die Suchfunktion, falls es dich interessiert.

Du musst es mit zwei Transistoren machen, egal ob MOSFET oder Bipolar. 
Siehe 
http://stefanfrings.de/mikrocontroller_buch/Einstieg%20in%20die%20Elektronik%20mit%20Mikrocontrollern%20-%20Band%202.pdf 
Kapitel 3.4.3.1 oder 3.4.4.1

von Neuling (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Schon wieder einer, der es mit einem Transistor versucht. Ich habe
> keine Lust, erneut zu erklären, warum das nicht geht. Benutze einfach
> mal die Suchfunktion, falls es dich interessiert.
>
> Du musst es mit zwei Transistoren machen, egal ob MOSFET oder Bipolar.
> Siehe
> 
http://stefanfrings.de/mikrocontroller_buch/Einstieg%20in%20die%20Elektronik%20mit%20Mikrocontrollern%20-%20Band%202.pdf
> Kapitel 3.4.3.1 oder 3.4.4.1

Danke für den Link! Ich nehme an du willst auf das hier hinaus, oder?

> Wenn die zu schaltende Spannung höher ist, als die des Mikrocontrollers, 
brauchst du zwei Transistoren.

Allerdings hat in meinem Fall die Batterie auch nur 3V. D.h das dürfte 
in meinem Fall keine Rolle spielen, oder versteh ich da was falsch?

> Warum so aufwändig? Nimm eine CR123A-Zelle mit 1.5Ah und einen ESP-12.
Wenn du den zwischen den Aktionen in den DeepSleep schickst, hält der
ewig. Ausser du drückst ihn alle 3 Sekunden. Meine Schaltung ist im
Anhang.

Danke, aber mich hat irgendwie das Prinzip der Selbsthaltung 
interessiert. Wollte das schon immer mal ausprobieren. Werd deinen 
Schaltungsvorschlag aber im Hinterkopf behalten!

von Helmut -. (dc3yc)


Lesenswert?

Übrigens, der S1 ist der Aufwachknopf! Meine Schaltung verbindet sich 
dann mit dem MQTT-Server per WLAN, sendet eine Nachricht und legt sich 
wieder schlafen.

von Stefan F. (Gast)


Lesenswert?

Die Höhe der Spannung ist hier nicht dein Problem. Oder doch - 
irgendwie.

Na gut, ich erkläre es doch:

Bei CMOS ICs dürfen allgemein an allen Pins maximal 0,5V über VCC und 
maximal 0,5V unter GND anliegen. Wenn du diese Grenzen überschreitest, 
leiten die internen ESD Schutzdioden. In ausgeschaltetem Zustand (also 
VCC = 0V) darf an keinem Pin mehr als 0,5V anliegen.

Beim ESP8266 steht das komischerweise nicht im Datenblatt (oder ich bin 
blind).

Preisfrage: Welche Spannung liegt im aus geschalteten Zustand an GPIO5 
durch R2 an?

Es ist die volle Batteriespannung. Und weil das mehr ist, als erlaubt, 
wird ein gewisser durch R2 begrenzter Strom fließen. An R2 fällt 
Spannung ab, so dass der Transistor einschaltet obwohl du das nicht 
willst.

Du hast aber auch noch ein anderes Problem:
> Doch sobald ich den Taster wieder loslasse, ist die
> Versorgungsspannung unmittelbar weg - d.h keine Selbsthaltung.

Womöglich ist dein Transistor kaputt oder der I/O Pin.

von Neuling (Gast)


Lesenswert?

Aaah, jetzt hab ich's verstanden. Herzlichen Dank für die ausführliche 
Erklärung!

Ich werd mich morgen mal daran versuchen die Schaltung entsprechend 
umzuzeichnen und werd dann einen neuen Schaltungsentwurf hier posten. 
Vielen Dank nochmal!

von Stefan F. (Gast)


Lesenswert?

Ich habe mir nochmal das Datenblatt des ESP8266 angetan, um da nach 
weiter nach zu forschen. Da steht:

VIL = -0.3 V bis 0.25 · VIO
VIH = 0.75 · VIO bis 3.6 V

In ausgeschaltetem Zusstand ist VIO = 0V, die Spannung an den I/O Pins 
muss demnach zwischen -0,3 V und 3,6 V liegen. Scheinbar erlaubt dieser 
Chip tatsächlich ausnahmsweise signifikant Spannung an seinen Pins auch 
wenn er keine Versorgungsspannung hat.

Dann müsste deine Schaltung mit dem einen Transistor aber 
funktionieren.

Irgendwo ist da noch der Wurm drin. Messe mal nach, welche Spannung in 
ausgeschaltetem Zustand an deinem GPIO Pin anliegt und wie hoch die 
Batteriespannung zu diesem Zeitpunkt genau ist.

von Neuling (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Ich habe mir nochmal das Datenblatt des ESP8266 angetan, um da
> nach
> weiter nach zu forschen. Da steht:
>
> VIL = -0.3 V bis 0.25 · VIO
> VIH = 0.75 · VIO bis 3.6 V
>
> In ausgeschaltetem Zusstand ist VIO = 0V, die Spannung an den I/O Pins
> muss demnach zwischen -0,3 V und 3,6 V liegen. Scheinbar erlaubt dieser
> Chip tatsächlich ausnahmsweise signifikant Spannung an seinen Pins auch
> wenn er keine Versorgungsspannung hat.
>
> Dann müsste deine Schaltung mit dem einen Transistor aber
> funktionieren.
>
> Irgendwo ist da noch der Wurm drin. Messe mal nach, welche Spannung in
> ausgeschaltetem Zustand an deinem GPIO Pin anliegt und wie hoch die
> Batteriespannung zu diesem Zeitpunkt genau ist.

Vielen Dank für deine Hilfestellung und die Zeit die du dafür 
investierst - ich weiß das sehr zu schätzen!

Wenn der Schalter nicht gedrückt ist, dann messe ich am GPIO: 3.08V
Die Batteriespannung ist: 3.10V

Sieht soweit gut aus, oder?

Machts Sinn den FET vielleicht mal zu tauschen? (ist von einer größeren 
aliexpress Bestellung)

von Stefan F. (Gast)


Lesenswert?

Neuling schrieb:
> Wenn der Schalter nicht gedrückt ist, dann messe ich am GPIO: 3.08V
> Die Batteriespannung ist: 3.10V

> Sieht soweit gut aus, oder?

Ja sieht gut aus, dann kann man der Angabe im Datenblatt wohl vertrauen 
(was bei Espressif nicht selbstverständlich ist, aber lassen wir das).

> Machts Sinn den FET vielleicht mal zu tauschen?

Würde ich mal versuchen. Und kontrolliere mal, ob die Software den GPIO 
Pin wirklich auf LOW setzt. Du wartest aber schon lange genug, bevor du 
den Taster wieder los lässt, oder?

von Joachim B. (jar)


Lesenswert?

Stefan ⛄ F. schrieb:
> Du wartest aber schon lange genug, bevor du
> den Taster wieder los lässt, oder?

wann geift denn die Selbsthaltung, vor oder nach dem Connect Versuch, 
vielleicht nur eine unglückliche Programmierung, -> setup(); -> Port 
init, setzen und dann erst WiFi!

von Neuling (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Würde ich mal versuchen. Und kontrolliere mal, ob die Software den GPIO
> Pin wirklich auf LOW setzt. Du wartest aber schon lange genug, bevor du
> den Taster wieder los lässt, oder?

Ich werds zur Sicherheit nochmal durchmessen, aber ich bin mir ziemlich 
sicher dass das gestern gepasst hat.

Jep, der Taster sollte lange genug gedrückt sein (ich schau am UART mit 
und printe mir ne Message raus sobald der GPIO Pin in den Output Mode 
versetzt und auf low gezogen wird. Danach lass ich den Taster los.

Joachim B. schrieb:
> wann geift denn die Selbsthaltung, vor oder nach dem Connect Versuch,
> vielleicht nur eine unglückliche Programmierung, -> setup(); -> Port
> init, setzen und dann erst WiFi!

Das passiert direkt als erstes in der setup() Funktion - dort wird der 
GPIO Pin in den Output Mode versetzt und auf low gezogen. (Ich verwende 
der Bequemlichkeit halber das Arduino Framework, weil ich mir für das 
simple Programm den Aufwand mit esp-idf nicht antuen will). Danach 
verbindet sich der uC mit WiFi, schickt eine Message per MQTT und zieht 
den GPIO Pin wieder auf high. In der loop() Funktion von Arduino hab ich 
einfach nur ein yield(), für den Fall das mal jemand den Taster länger 
hält als ein paar Sekunden.

Danke für eure Hilfe, ich werd jetzt mal als nächstes den Mosfet 
tauschen.

von Michael U. (amiga)


Lesenswert?

Hallo,

Stefan ⛄ F. schrieb:
> Ich habe mir nochmal das Datenblatt des ESP8266 angetan, um da nach
> weiter nach zu forschen.

aus dem Datenblatt vom 12.10.2013 Seite 15 unten:

All digital IO pins are protected from over-voltage with a snap-back 
circuit connected between
the pad and ground. The snap back voltage is typically about 6V, and the 
holding voltage is 5.8V.
This provides protection from over-voltages and ESD. The output devices 
are also protected
from reversed voltages with diodes.

Hat sich bei auch bisher so verhalten bei versehentlicher Mißhandlung.
Daher kam vermutlich auch die Mär mit der 5V Toleranz, die richtige 
Funktion garantiert Espressif aber nur bis 3,6V am Pin.

Zum TO: ich hätte auch gesagt, daß es eigentlich so gehen müßte.
Mir hat aber eigentlich gereicht, den ESP8266 in deepSleep zu schicken 
und per Taster am Reset aufzuwecken.

Gruß aus Berlin
Michael

: Bearbeitet durch User
von Neuling (Gast)


Lesenswert?

Michael U. schrieb:
> Mir hat aber eigentlich gereicht, den ESP8266 in deepSleep zu schicken
> und per Taster am Reset aufzuwecken.

Jep, rückblickend hätte das wahrscheinlich eh gereicht. Aber irgendwie 
wollte ich mal was mit Mosfets machen und da bisschen Erfahrung sammeln 
und da hat sich das kleine Projekt hier angeboten.


Ich hab jetzt den Mosfet getauscht und jetzt funktioniert es - der 
Mosfet war anscheinend wirklich defekt. Vielen Dank an alle Helfer hier 
- insbesondere an Stefan für seine Geduld & die ausführlichen 
Erklärungen. Hab einiges gelernt!

Ein Frage hätte ich noch: Wie überbrücke ich am besten die Zeit nach dem 
Tasterdruck bevor der uC übernimmt? Wenn ich den Taster drücke und 
sofort wieder loslasse, dann passierts manchmal, dass der Impuls so 
schnell ist, dass die Versorungsspannung schon wieder weg ist bevor der 
ESP den Pin auf low gezogen hat.

Soweit ich gelesen hab, braucht der ESP relativ lang zum Booten (bis zu 
300ms, wegen der RF calibration), d.h die Zeit müsste ich irgendwie 
überbrücken. Wie macht man sowas am besten? Monoflop? Oder ein kleiner 
uC, der schnell bootet (Attiny?) für die Selbsthaltung sorgt und dann 
den ESP einschaltet?

von Stefan F. (Gast)


Lesenswert?

Neuling schrieb:
> Wie überbrücke ich am besten die Zeit nach dem
> Tasterdruck bevor der uC übernimmt?

Dafür bräuchtest du ein Monoflop, das den Impuls verändert. Der Aufwand 
lohnt aber wohl kaum. Vor allem würde es nebenbei die Ruhestromaufnahme 
erhöhen.

In diesem Zusammenhang könntest du dir mal bistabile Relais anschauen. 
Die behalten ihren ein/aus Zustand auch ohne Strom bei, sie brauchen nur 
kurze Impulse.

Obwohl auch das in deinem Fall keine besonders elegante Lösung wäre, 
finde ich. Deep-Sleep ist besser.

von Neuling (Gast)


Angehängte Dateien:

Lesenswert?

Ich hab gelesen, dass manche den ATtiny als günstiges Monoflip 
missbrauchen. Könnnte da sowas wie im Anhang funktionieren?

Die Idee wäre folgende: Der Schalter wird gedrückt und startet sowohl 
den ATtiny als auch den ESP. Wenn ich das hier[1] richtig verstanden 
habe, dann sollte der ATtiny mit dem internem RC Oszillator schnell 
genug starten, um dann rechtzeitig die Selbsthaltung zu aktivieren. 
Sobald der ESP mit dem Task fertig ist, zieht er den GPIO5 auf high. Das 
signalisiert dem ATtiny, dass er nun die Batterie wieder trennen kann.

Kann das so funktionieren? Oder ist das kompletter Schwachsinn?

Ich hab vorhin mal den Stromverbrauch von meiner Schaltung gemessen, der 
derzeit bei 1.5uA liegt. Soweit ich das gelesen hab liegt verbraucht der 
ESP im deep sleep Modus ca 15uA. Da ich aufs Jahr gesehen nicht so viele 
Tasterbetätigungen hab, könnte ich so glaub ich etwas Batteriekapazität 
sparen.

[1] 
https://microchipsupport.force.com/s/article/Calculating-the-device-startup-time-SUT-from-reset-for-ATmega-and-ATtiny-devices

von Stefan F. (Gast)


Lesenswert?

Ich denke schon, dass das klappen könnte, aber da fehlt noch was mit 
Bluetooth und Blockchain.

von Neuling (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Ich denke schon, dass das klappen könnte, aber da fehlt noch was
> mit
> Bluetooth und Blockchain.

Bluetooth? Du meinst sicher AI oder? ;-)

Nur zum Verständnis: Ist die Schaltung kompletter Murcks oder "mit 
Kanonen auf Spatzen schießen"? Letzteres wär vom Lerneffekt betrachtet 
jetzt weniger schlimm für mich als ersteres.

von Patrick L. (Firma: S-C-I DATA GbR) (pali64)


Lesenswert?

Neuling schrieb:
> Nur zum Verständnis: Ist die Schaltung kompletter Murcks oder "mit
> Kanonen auf Spatzen schießen"? Letzteres wär vom Lerneffekt betrachtet
> jetzt weniger schlimm für mich als ersteres

Also dann ist es nicht so schlimm :-)
es sieht Funktionell aus und müsste gehen.

Aber ein Kondensator an der Steuergate würde die Auschaltzeit etwas raus 
ziehen, das die Schaltung etwas unempfindlicher gegen Spikes ist.

von Stefan F. (Gast)


Lesenswert?

Neuling schrieb:
> a) Ist die Schaltung kompletter Murcks oder
> b) "mit Kanonen auf Spatzen schießen"?

Ich nehme b.

Wenn du Spaß an der Sache hast, warum probierst du es nicht einfach, 
anstatt lange zu fragen?

von Stephan F. (sfre)


Lesenswert?

Hi. Ich habe mit Interesse euren Beitrag verfolgt.
Kannst Du mir vielleicht mal den finalen Schaltplan zukommen lassen?
LG
Stephan

von Hermann K. (r2d2)


Angehängte Dateien:

Lesenswert?

Hinweis: Ich hab erst zu spät gesehen, dass der Thread schon relativ alt 
ist.

Im Anhang wäre eine schnelle Schaltungsidee von mir für die 
Selbsthaltung während der Controller startet.

Direkt nach dem Einschalten wird Q10 dank R1 leitend und hält damit das 
Gate von Q9 auf GND. Q9 ist damit ebenfalls aktiv. GPIO5 ist noch als 
Eingang konfiguriert. Schaltet man GPIO5 jetzt auf Ausgang und Low um 
sperrt Q10 und damit auch Q9. Der Controller geht aus.

Ein Problem könnte es sein, dass der Reset vom Controller zu schnell zu 
schlägt und GPIO wieder auf High-Z schaltet bevor die Spannung sauber 
weg ist. Das müsste man mal ausprobieren. Hängt ein bisschen von den 
Schaltschwellen der Transistoren und der Resetschaltung im Controller 
ab. Aus diesem Grund ist R2 relativ niederohmig, da sollte das 
Abschalten schnell gehen. Ggf. kann man auch einen kleinen Kondensator 
am Gate von Q10 gegen GND ergänzen. Der sollte dann vom GPIO-Treiber 
schnell entladen werden aber eine Weile brauchen bis er über R1 wieder 
geladen wäre.

von Stefan F. (Gast)


Lesenswert?

Hermann K. schrieb:
> Schaltet man GPIO5 jetzt auf Ausgang und Low um
> sperrt Q10 und damit auch Q9. Der Controller geht aus.

Und dann hast du wieder den gleichen Zustand wie beim Einschalten der 
Stromversorgung: Ergo geht er wieder an.

von Joachim B. (jar)


Lesenswert?

Hermann K. schrieb:
> Im Anhang wäre eine schnelle Schaltungsidee

taugt selten was

Stefan ⛄ F. schrieb:
> Und dann hast du wieder den gleichen Zustand wie beim Einschalten der
> Stromversorgung: Ergo geht er wieder an.

ohne das zu prüfen glaube ich das auch!

Eine funktionierende Schaltung gibts doch hier seit Jahren:

Transistortester!
https://www.mikrocontroller.net/articles/Datei:Schaltplan_transistortester.png

Taster zum Einschalten, Rückkopplung vom µC

von Hermann K. (r2d2)


Lesenswert?

Stefan ⛄ F. schrieb:
> Hermann K. schrieb:
>> Schaltet man GPIO5 jetzt auf Ausgang und Low um
>> sperrt Q10 und damit auch Q9. Der Controller geht aus.
>
> Und dann hast du wieder den gleichen Zustand wie beim Einschalten der
> Stromversorgung: Ergo geht er wieder an.

Nein, hat man nicht. Beim Einschalten wurde ja VCC über den Taster 
eingespeist. Sobald Vcc auf 0V gefallen ist sperren sowohl Q9 als auch 
Q10.

von Hermann K. (r2d2)


Lesenswert?

Joachim B. schrieb:
> ohne das zu prüfen glaube ich das auch!
Dann prüf das lieber mal. Wenn du glauben willst bist du bei der 
Religion besser aufgehoben.

> Eine funktionierende Schaltung gibts doch hier seit Jahren:
>
> Transistortester!
> https://www.mikrocontroller.net/articles/Datei:Schaltplan_transistortester.png
>
> Taster zum Einschalten, Rückkopplung vom µC

Das funktioniert aber hier nicht zuverlässig, weil der ESP ~300ms zum 
booten braucht. Drückt man nur kurz auf den Taster geht er an und gleich 
wieder aus. Wie der OP weiter oben geschrieben hat. Deshalb hat er einen 
ATtiny verwendet für das aktivhalten, was natürlich totaler Overkill 
ist.

von Hermann K. (r2d2)


Angehängte Dateien:

Lesenswert?

Ich hab die Schaltung jetzt noch simuliert. Ergebnis: Funktioniert, aber 
der Kondensator (C1) am Gate schadet wirklich nicht für eine 
zuverlässige Funktion.

Schaltung ist wie oben gezeigt, mit ein paar zusätzlichen Komponenten 
für die Simulation:
- Q1: Ausgangstreiber des ESP8266.
- D1: Statt dem Schalter
- R3: Modell für die zu schaltende Last (ESP8266 + sonstiges Zeug).

Bei t=100ms gebe ich einen 1ms langen Puls auf die Leitung SWITCH => Vcc 
schaltet ein und bleibt an.
Bei t=1s dann ein 1us langer Puls auf GPIO5 => Vcc schaltet aus und 
bleibt aus.

von Stefan F. (Gast)


Lesenswert?

Hermann K. schrieb:
> Nein, hat man nicht. Beim Einschalten wurde ja VCC über den Taster
> eingespeist.

Ach ja, R1 hängt nicht direkt der Batterie.

Hermann K. schrieb:
> Deshalb hat er einen
> ATtiny verwendet für das aktivhalten, was natürlich totaler Overkill
> ist.

Andererseits kann der ATtiny gleich die Tiefentladung des Akkus 
verhindern und einen auto-off Timer enthalten.

von Stephan F. (sfre07)


Angehängte Dateien:

Lesenswert?

Hallo.
ich wollte nun mal, nach 11 Wochen Dauerbetrieb eine Rückmeldung geben.
ca. am 20.12.2021 ging also mein Briefkaastenmelder mit 4 AA Akkus in 
Betrieb und schickt mir immer wenn neue Post kommt auf Telegram eine 
Message..
wenn ich dem Analogeingang des WEMOS trauen kann, dann sieht die 
Batterie noch gut aus.
Also in dem Sinne, bleibt gesund!
Lieben Gruß
Stephan

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.