Arduino: Funktion um Werte langsam anzunähern?

amarok2

Erfahrener Benutzer
#1
Hallo,

ich brauche eine funktion, die einen einen wert dem anderen annähert

umso länger diese werte nicht gleich sind, umso schneller soll sich der ausgabewert anpassen.
und umso weiter diese werte auseinander liegen umso schneller soll er sich anpassen.

kann mir da jemand weiterhelfen?

habe schon ein bisschen mit PID reglern rumgespielt, was aber nicht so funktioniert wie ich das möchte...
 

brandtaucher

Erfahrener Benutzer
#2
Muss zugeben, so richtig habe ich noch nicht verstanden, was Du meinst. Vielleicht hilft Dir folgendes:

Ich habe ein Barometer mittels Luftdrucksensor programmiert. Problem war, die jeweils neu gemessenen Werte zu berücksichtigen, dabei aber die Streuung zu verringern und den alten Wert mit einzubeziehen. Die Lösung:

md = 0.94 * ld + 0.06 * realPressure;

Der angezeigte Luftdruck wird mit 94 % berücksichtigt, der neu gemessene Wert fließt mit 6 % ein. Je höher der neue Wert berücksichtigt wird, desto schneller erreicht man den aktuell gemessenen Wert, desto weniger "glatt" ist der angezeigte Wert, da er mehr springt.

md= neuer Luftdruck (wird dann am Ende in ld geschrieben)
ld= letzter Luftdruck
realPressure= zuletzt vom Barometer gelieferter Wert, der in in md (bzw. ld) einfließen soll.

Hilft Dir das? So kannst Du auch zwei beliebige andere Wert annähern und bestimmen, welcher Wert mehr berücksichtigt werden soll oder bei 50% beide gleich stark übernehmen.
 
Zuletzt bearbeitet:

amarok2

Erfahrener Benutzer
#3
hmm...
ne bringt leider nicht das was ich suche... bzw. es funktioniert bei mir irgentwie nicht richtig. (sobald der eingabewert konstant bleibt bleibt auch die ausgabe gleich egal, wo sie gerade steht.

habe etwas rumexperimentiert und mit nem ringbuffer den gesuchten effekt gefunden. bzw. nicht ganz:

test.png
Rot = Poti an A0
Blau = Schneller / kleiner buffer
Orange = langsamer / großer buffer

das geht mir aber zu linear, gibts ne möglichkeit das etwas exponentieller zu machen?
also zuerst gehts langsam hoch / runter danach wirds immer schneller?

also so wie die schwarze linie die ich dazu gezeichnet habe...

hoffe ihr versteht was ich meine?
 
Zuletzt bearbeitet:

nichtgedacht

Erfahrener Benutzer
#4
ich brauche eine funktion, die einen einen wert dem anderen annähert

umso länger diese werte nicht gleich sind, umso schneller soll sich der ausgabewert anpassen.
und umso weiter diese werte auseinander liegen umso schneller soll er sich anpassen.
Moin

Das ist die Beschreibung eines PI Reglers.

Diff = Soll - Ist
Kp = proportional Konstante
Ki = integral Konstante

I = Integral Anteil (statische oder globale Variable)
P = Proportional Anteil

regler() {

Diff = Soll - Ist

I = I + Diff * Ki
P = Diff * Kp

PI = I + P

Ist = Ist + PI
}

Je nachdem mit welcher Frequenz regler() aufgerufen wird ändert sich Ki.
Um Ki davon unabhängig zu machen könnte man auch schreiben I = I + Diff * Ki * Delta t

Gruß
Dieter
 
FPV1

Banggood

Oben Unten