Forum: Mikrocontroller und Digitale Elektronik Hysterese: Temperaturschalter entkopplung


von Maddin (Gast)


Lesenswert?

hi,

ich habe ein termometer mit einer genauigkeit von 0.1 grad aufgebaut.

jetzt möchte ich bei einer bestimmten temperatur einen schlatvorgang 
auslösen...

zusätzlich willl ich vermeiden, das dieser jetzt die ganze zeit ein und 
aus schaltet wenn sich die temperatur im bereich der schlatschwelle 
bewegt...

ich stelle mir eine funktion vor, die die schalttemperatur, die 
hysterese und die aktuelle temp übergeben bekommt, und eine eins oder 
null zurückgibt...

z.b: aktuelle temp =14,3 grad
schalttemp 15,0 grad +/- 0,5grad

maddin

von Karl H. (kbuchegg)


Lesenswert?

Ja, und. Wo liegt das Problem?

  if( aktuelle_Temp > Schalttemp + Hysterese )
    return Schalte_Aus;
  else if( aktuelle_Temp < Schalttemp - Hysterese )
    return Schalte_Ein;
  else
    return Mach_nichts;

Der Schluessel liegt in der Erkenntnis, dass es insgesamt
3 Zustände gibt:
  Schalte_Aus
  Schalte_Ein
  Mach_nichts : Was immer momentan Sache ist, eingeschaltet
                oder ausgeschaltet, behalte den Zustand bei.

von Karl H. (kbuchegg)


Lesenswert?

Man kann das dann auch mithilfe einer globalen Variablen
zusammenfassen
1
uint8_t Derzeitig;
2
3
uint8_t NeuerZustand( uint8_t Temp, uint8_t Schalttemp, uint8_t Hysterese )
4
{
5
  if( Temp > Schalttemp + Hysterese )
6
    Derzeitig = AUS;
7
  else if( Temp < Schalttemp - Hysterese )
8
    Derzeitig = EIN;
9
10
  return Derzeitig;
11
}

von Maddin (Gast)


Lesenswert?

wenn die tempertur in dem obigen bsp steigt, soll er bei 15,0 grad 
einschalten...

wenn die temperatur über 15,0 plus hyst steigt, soll er, wenn sie wieder 
fällt, auch bei 15,0 grad wieder ausschalten..

wenn die temperatur allerdings nicht über 15,0 grad plus hyst steigt, 
soll er erst bei 15,0 grad - hyst schalten, usw...

das ganze wird recht komplex, und da dachte ich, evtl hat schonmal 
jemand das selbe problem gelöst...

im grunde genommen, soll er wirklich immer genau bei der eingetsellten 
temp schalten, ausser wenn die temperatur den angegebenen "trägen 
bereich (ich dachte dies ist hysterese)" nicht in einem durchgang 
verlässt, sie also um den schaltbereich schwankt...dann soll darauf 
reagiert werden wie sie ihn verlässt

ich hoffe man kann das verstehen....

von Karl H. (kbuchegg)


Lesenswert?

Maddin wrote:
> wenn die tempertur in dem obigen bsp steigt, soll er bei 15,0 grad
> einschalten...
>
> wenn die temperatur über 15,0 plus hyst steigt, soll er, wenn sie wieder
> fällt, auch bei 15,0 grad wieder ausschalten..
>
> wenn die temperatur allerdings nicht über 15,0 grad plus hyst steigt,
> soll er erst bei 15,0 grad - hyst schalten, usw...
>

 if( Temp > 15 ) {
   OffTemp = 15 - Hysterese
   Schalte_EIN
 }

 if( Temp > 15 + Hyster ) {
   OffTemp = 15
   Schalte_EIN
 }

 if( Temp < OffTemp )
   Schalte_AUS

So ungefähr?

von Maddin (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Karl Heinz,

dank dir für die schnellen antworten, doch leider ist das ganze nicht so 
trivial...

ich habe im anhang mal ein bildchen, evtl verdeutlicht das was ich 
meine.

tut mi leid, das ich es nicht gleich mit angehängt habe, aber ich dachte 
hysterese erklärt mein problem ausreichend....

das ganze muss warscheinlich eine art state maschine sein, die sich den 
temperaturverlauf merkt, um dann entsprechend zu reagieren....

ich dachte, vielleicht hat jemand einen schönen code der genau dieses 
problem löst...

maddin

von Maddin (Gast)


Angehängte Dateien:

Lesenswert?

...ach ja, was dieses problem der state  maschine noch verschlimmert ist 
die tatsache das die temp werte auch noch sehr weit auseinander liegen 
können.... sie also nicht langsam durch die hyst  wandern müssen... und 
somit dann ausserhalb liegen...

dann müssen in der state maschine gleich mehrere stati durchlaufen 
werden...

aber evtl. habe ich da ja aúch noch einen denkfehler...oder vielleicht 
kann man das ja auch noch einfacher lösen...

maddin

von Karl H. (kbuchegg)


Lesenswert?

In deiner Grafik widerspricht sich erste Zeile / Links
mit zweiter Zeile / rechts

In beiden Fällen kommt die Temp-Kurve von oberhalb
der Hysterese, sinkt unter die Schalttemperatur
unterschreitet aber nicht die untere Hysteresegrenze
und steigt wieder an.

Nur einmal wird bei der Schaltschwelle geschaltet
und einmal bei der oberen Hystereseschwelle

von Karl H. (kbuchegg)


Lesenswert?

Versuch noch mal klarer zu beschreiben,
wenn denn nun welche Schaltgrenze gilt.
Das führt dich dann auch zu den richtigen
Abfragen.

von Maddin (Gast)


Lesenswert?

Hi,

...die wiedersprechen sich nicht...

in der ersten zeile links wird das ganze voll durchlaufen, also es wird 
jedes mal die hysterese verlassen...

in der zeichnung 2te zeile rechts, wird sie druchlaufen, aber nicht 
verlassen, letztendlich wird sie dann nach unten verlassen, in dem fall 
muss ich auf der unteren schwelle der hyst schalten, da das ganze nur so 
einen sinn ergibt... ansonsten bräuchte ich keine hysterese, da dann 
immer geschaltet werden würde...

m.

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.