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
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.
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 | }
|
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....
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?
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
...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
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
Versuch noch mal klarer zu beschreiben, wenn denn nun welche Schaltgrenze gilt. Das führt dich dann auch zu den richtigen Abfragen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.