Forum: Mikrocontroller und Digitale Elektronik Steuerung Batterie oder Netz.ESP8266


von Peter K. (Firma: Solarkraftzwerg) (pedro42)


Lesenswert?

ESP8266

Ich möchte eine Hysterese für einen Umschaltzeitpunkt programmieren,
wobei die Schwellwerte:
 < 11,1V und  > 12V betragen.

Aber Schwankungen sollten abfangen sein, d.h. der Schwellwert sollte ca. 
2min. über, oder unterschritten sein bevor
 "digital.print" HIGH oder LOW
gesetzt wird.

Kann mir jemand einen Tipp geben, wie ich das recht einfach umsetzen 
kann?

: Bearbeitet durch User
von Achim M. (minifloat)


Lesenswert?

Wie wird denn die Spannung gemessen?

Kannst du die Schwellwert-Überprüfung nicht in Software mit einem 
zyklisch (z.B. alle 100msec) ausgeführten Programmabschnitt erledigen?
Da drin dann zwei Zählvariablen bedienen und bei Endwert den Pin 
entsprechend setzen.

Es empfiehlt sich, außerhalb der genannten Grenzen noch weitere Grenzen 
zum unverzögerten Zustandswechsel zu nutzen.

Was ein digital.print ist, weiß ich leider nicht.

mfg mf

: Bearbeitet durch User
von Klaus R. (klara)


Lesenswert?

Peter K. schrieb:
> Kann mir jemand einen Tipp geben, wie ich das recht einfach umsetzen
> kann?

Also, das ganze soll mit einem ESP8266 umgesetzt werden? Zunächst mußt 
Du einen passenden Spannungsteiler einrichten um 10 V bis 14 V messen zu 
können. Und dann mußt Du nur entsprechend auf Deine Meßwerte reagieren. 
Im einfachsten Fall wird das eine IF-Abfrage in Schleife sein. Wo ist 
das Problem?
mfg Klaus

von Peter K. (Firma: Solarkraftzwerg) (pedro42)


Lesenswert?

Ich bekomme den Messwert über einen Spannungsteiler auf AnalogIN....
das hab ich schon, ich suche nur noch nach einer "schlanken Lösung" um 
erst nach einem Zeitraum von ca. 2 min zu Schalten um
Mess-Spannungs-Schwankungen die durch Lasten mit hohem Anlaufstrom 
ausgelöst werden auszuschließen.

Ja klar eine "If Abfrage Schleife, ich möchte aber erst schalten wenn 
die Schwellen stabil unter oder überschritten werden....

von Jens G. (jensig)


Lesenswert?

Peter K. schrieb:
> Aber Schwankungen sollten abfangen sein, d.h. der Schwellwert sollte ca.
> 2min. über, oder unterschritten sein bevor
>  "digital.print" HIGH oder LOW
> gesetzt wird.

Die Spannung wird mit einem ADC erfaßt. Entweder ständig in der Mainloop 
machen, oder via ADC-Interupt beim Schwellwert feuern lassen.
Wenn Schwellwerte über-/unterschritten werden, startest Du einen Timer, 
der nach 2min die Print-Routine auslöst (Timerinterupt).
Wenn vor Ablauf der zwei Minuten die Schwellwerte in der jeweils anderen 
Richtung überschritten werden, wird der Timer zurückgesetzt und 
gestoppt.
Mußt Du jetzt nur noch in Software gießen ...

von Peter K. (Firma: Solarkraftzwerg) (pedro42)


Lesenswert?

danke, für den Input,
ich werde mich mit der Lösung zurückmelden....

von Rainer W. (rawi)


Lesenswert?

Peter K. schrieb:
> Ich möchte eine Hysterese für einen Umschaltzeitpunkt programmieren,
> wobei die Schwellwerte:
>  < 11,1V und  > 12V betragen.

Dann musst du unterschiedliche Schwellwert verwenden.
Umschaltung auf High bei Überschreitung von 12.0V, umschaltung auf Low 
bei Unterschreitung von 11,1V.

> Aber Schwankungen sollten abfangen sein, d.h. der Schwellwert sollte ca.
> 2min. über, oder unterschritten sein bevor
>  "digital.print" HIGH oder LOW
> gesetzt wird.

Dazu musst du deine Daten Filtern. Wie ein geeignetes Filter aussieht, 
hängt davon ab, wie deine Daten schwanken (Rauschen, Spikes, ...), d.h. 
was die herausfiltern willst.

von Manfred P. (pruckelfred)


Lesenswert?

Jens G. schrieb:
> Wenn Schwellwerte über-/unterschritten werden, startest Du einen Timer,
> der nach 2min die Print-Routine auslöst (Timerinterupt).

Für solchen Kinderkram braucht man keinen Interrupt. Man setzt sich 
einen Zeitstempel und vergleicht zyklisch gegen den Systemtimer.

Es macht dabei auch Sinn, mehrere Messungen zu machen und den Mittelwert 
zu bilden, Oversampling genannt. Der ESP steht in den Ruf, eingermaßen 
wackelige Werte zu liefern.

von Jens G. (jensig)


Lesenswert?

Manfred P. schrieb:
> Für solchen Kinderkram braucht man keinen Interrupt. Man setzt sich
> einen Zeitstempel und vergleicht zyklisch gegen den Systemtimer.

Das ist alles nur eine Frage des Geschmacks ...

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


Lesenswert?

Peter K. schrieb:
> Aber Schwankungen sollten abfangen sein, d.h. der Schwellwert sollte ca.
> 2min. über, oder unterschritten sein bevor "digital.print" HIGH oder LOW
> gesetzt wird.
Diese Spec hat ein leicht erkennbares "Loch". Was sollte dann in so 
einem Fall passieren:
1
15V . . . ----         -         -         -         -         ---- . . .
2
10V           |       | |       | |       | |       | |       |
3
5V             -------   -------   -------   -------   -------
4
0V
5
t(min)   0    1    2    3    4    5    6    7    8    9   10   11   12
Also wenn die Spannung im Mittel über lange Zeit die Grenze klar 
unterschreitet, aber eben niemals länger als 2 Minuten?

Abhilfe: simple Mittelwertbildung mit langer Zeitkonstante und dazu die 
Hysterese. Dann tauchen zwar die selbst ausgedachten und gewünschten 2 
Minuten nirgends auf, aber das Verhalten "Schwankungen sollten abfangen 
sein" ist wie gewollt.

: Bearbeitet durch Moderator
von Peter K. (Firma: Solarkraftzwerg) (pedro42)


Lesenswert?

Danke für die "Beiträge"
die Mittelwert Bildung ist die Lösung!

// Mittelt ADC-Werte zur besseren Stabilität der ADC-Reading.
// Es werden Samples aufeinanderfolgende Messwerte aufgenommen
// Der jeweils höchste und niedrigste wird verworfen.
// Der Messwert ist der Mittelwert aus den Samples-2 verbliebenen 
Werten.
// Der Messwert wird anschließend gegen die eingestellte Hysterese 
geprüft.

von Gerald B. (gerald_b)


Lesenswert?

Der ADC vom ESP8266 misst Hausnummern, nimm einen externen 
Analogwandler. Mit einem RC Glied die Analogspannung glätten, kann auch 
Wunder bewirken. Danach noch eine Mittelwertbildung und du kannst das 
letzte Bit sauber auflösen.

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.