Dies ist eine alte Version des Dokuments!


← Kapitel 10: Übungsaufgabe Batterietester | ↑ Übersicht |

Hysterese

Unter einer Hysterese versteht man, wenn ein System bei ein und demselben Eingangswert verschiedene Werte ausgeben kann. Diese Ausgangswerte sind abhängig von dem Zustand des Systems vor dem Eingangswert.

Einfach und anhand eines Beispiels kann man das so erklären:

Eine Thermostat schaltet einen Heizkörper ein. Wenn der Raum eine Temperatur von 20°C erreicht schaltet das Termostat ab. Ohne Hysterese würde die Heizung bei 19,999°C wieder ein- und nach kurzer Zeit sofort wieder ausschalten. Um ein zu schnelles Ein- und Ausschalten zu vermeiden wird eine Hysterese eingebaut, das bewirkt folgendes:

  • Der Raum wird aufgeheizt
  • Die Heizung wird bei 20°C abgeschaltet
  • Der Raum kühlt ab
  • Die Heizung wird bei 18°C eingeschaltet

In diesem Fall entspricht die Hysterese 2°C.

Wir können erkennen, dass es zwei verschiedene Zustände für die Heizung gibt: Zwischen 18°C und 20°C kann das Thermostat ein- oder ausgeschaltet sein. Welcher Zustand gerade ausgegeben wird, ist abhängig von der Vorgeschichte, ob der Raum aufgeheizt wird oder abkühlt.

Wir betrachten nun unser Beispiel vom Schwellwertschalter.

Wir laden den Code auf den Controller und drehen das Poti an die Stelle, an der die grüne LED aus- und die rote LED angeht.

Wenn wir nun ein wenig rumspielen, erhalten wir einen Zustand, an dem beide LEDs leuchten. Das liegt daran, dass wir keine Hysterese im Code haben und wir genau an der Schwelle vom eingestellten Analogwert sind.

Angenommen wir überwachen mit diesem Schwellwertschalter eine Spannung und geben einen Alarm aus, wenn die Spannung zu hoch ist: Was passiert an der Schaltschwelle?

Richtig! Der Alarm würde dauern ein- und ausgehen was definitiv kein gewünschtes Ergebnis ist.

Wir müssen also eine Hysterese in unseren Code einbauen.

Was wir dafür extra benötigen haben wir oben gelernt:

  • Eine Variable die sich merkt, ob der Wert sinkt oder steigt
  • Eine Hysterese

Bevor wir aber den Code anpacken lernen wir noch eine wichtige Funktion:

In den Kapiteln zuvor haben wir gelernt, wie wir anhand einer if-Abfrage entscheiden können, welche Codeteile ausgeführt werden und welche nicht. Diese Abfrage sieht vereinfacht so aus:

if(BEDINGUNG)
{
  #CODE#
}

Das hat uns in den bisherigen Beispielen schon viel gebracht, was passiert jetzt aber, wenn wir zwei Bedingungen abfragen möchten? Angenommen BEDINGUNG1 und BEDINGUNG2 sollen zutreffen um Code auszuführen. Das können wir so lösen:

if(BEDINGUNG1)
{
  if(BEDINGUNG2)
  {
    #CODE#
  }
}

Ja, das funktioniert, ist aber nicht sonderlich elegant. Um das Ganze besser zu lösen gibt es praktischerweise die so genannten logischen Verknüpfungen.

Für uns sind vorerst folgende zwei wichtig:

Logische Verknüpfung Funktion
&& Logisches UND
|| Logisches ODER

Diese Verknüpfungen machen also nichts anderes, als zwei Bedingungen zu vergleichen und entsprechend einen Wert auszugeben.

Schnell Beispiele zum besseren Verständnis:

Verknüpfung Ergebnis
false && false false
false && true false
true && true true
false || false false
false || true true
true || true true

Unser Codebeispiel von oben können wir also so lösen:

if(BEDINGUNG1 && BEDINGUNG2)
{
  #CODE#
}