PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hysterese



guenter1604
01.09.2009, 15:01
Hallo Experten,

wie programmiert man eine hübsche Hysterese?

Vitis
01.09.2009, 21:58
do

Hysterese:

loop

Hysterese von was für was?

PicNick
02.09.2009, 06:59
Denke mir, allgemein, du verwendest für steigendes und fallendes X verschiedene Grenzwerte bzw. Faktoren für die y=f(x) Funktion.

sast
02.09.2009, 07:20
Wenn wir mal davon ausgehen, dass du zB die Hysterese bei Schmitttriggern meinst (wir sind ja schließlich in einem Robotikforum) dann könnte das in Pseudocode so aussehen


if out==1 then
if in<min then out = 0;
endif
else
if in>max then out = 1;
endif
endif


sast

guenter1604
02.09.2009, 07:56
Entschuldigung, ich war ein bisschen Wortkarg...

Ein ADC mißt eine Spannung ADCSpannung. Mit einem Select-case wird diese ausgewertet. Es tritt jedoch an den Übergängen ein flattern auf, wenn die Spannung leicht um den Grenzwert UGrenze schwankt. Wie bei einem Schmitt-Trigger, wie sast schon erwähnt hat soll die Hysterese das verhindern


ADCSpannung = getadc(0)

select case ADCSpannung
case is < UGrenze
'tuwas
case UGrenze to UGrenze2
'tuwas anderes

usw.

PicNick
02.09.2009, 10:08
Naja, ZWISCHEN den Grenzen passiert ja genau nix.
eigentlich:


select case ADCspannung
case is > LimitHi: OUT = 1
case is < LimitLow: OUT = 0
end select

guenter1604
02.09.2009, 10:43
Jetzt fällt der Groschen. Anstatt nur eines Grenzwertes definiere ich 2, die um die Hysterese auseinanderliegen. Dazu definiere ich noch eine Variable "OldValue", die mir die aufsteigende oder abfallende Flanke anzeigt.

Luftcode



select case ADCSpannung
case is < UGrenzeUnten
'tuwas
OldValue = unten
case UGrenzeUnten to UGrenzeOben
'ich bin die Hysterese
if OldValue = unten then
'tu das gleiche wie unten
else
'tu das gleiche wie oben
endif
case is > UGrenzeOben
'tuwas
OldValue = oben
end select

sast
02.09.2009, 10:56
@Robert
ja so kurz gehts auch :)

Jetzt wird das Ganze etwas klarer. Du musst dir aber im klaren sein, dass du beim Festlegen einer scharfen Grenze (UGrenze) immer mit solchen Schwankungen zu kämpfen hast.
Entweder du weichst die Grenze auf und nutzt unseren Vorschlag zB mit UGrenze-X und UGrenze+X als min und max, oder du mittelst über mehrere Werte, oder machst einen "wenn geändert dann Vergleich" indem du den Wert mit Wert_old vergleichst und nur änderst wenn eine bestimmte Größenschwelle überschritten wird und dein Case arbeitet dann immer mit Wert_old.
Das ist im Grunde immer irgendwie das Selbe, nur an verschiedenen Stellen im Code realisiert.

sast

Edit:
mein Post kommt wie immer zu spät. Naja gut wenn du alleine in die richtige Richtung denkst.
Aber mal im Ernst, seit einigen Wochen ist das RN ziemlich häufig wegen "Überlastung" nicht richtig erreichbar, da macht das Antworten manchmal echt keinen Spass. Liegt das an den neuen Servern, oder ist das RN wirklich so stark frequentiert?

guenter1604
02.09.2009, 13:39
Hallo,

danke für die Mithilfe, das VORLÄUFIGE Ergebnis unter:

http://www.gerold-online.de/cms/wheelie/mein-wheelie/ladegeraet.html

Günter