Forum: Mikrocontroller und Digitale Elektronik Suchverfahren auf Mikrocontrollern


von Ralf (Gast)


Lesenswert?

Hallo,

ich bin gerade auf der Suche nach Infos zum Thema 'numische
Suchverfahren'. Dazu gibt es eigentlich auch eine Menge Bücher usw..
Das ganze bezieht sich aber meistens alles nur auf die theoretischen
Aspekte und nicht darauf, wie man diese Verfahren nachher auch wirklich
umsetzt. Oder wenn es in die Praxis geht, dann werden diese Verfahren
meistens auf PCs mit aufwendigen float-Rechnungen eingesetzt. Bei
Mikrocontrollern ist man da wohl schnell am Ende der Rechenleistung.
Hat vielleicht einer von euch an paar gute Links oder Buchtips, wo das
ganze auch mal für den Bereich Mikrocontroller etwas näher betrachtet
wird?
Ich möchte z.B. das Minimum eines AD-Wandlerwertes suchen, damit ich
die Stellgröße eines Reglers optimal einstellen kann.

Viele Grüße,

Ralf

von Eckhard (Gast)


Lesenswert?

Hallo,

versuch dein glück mal hier :

http://www.ma.utexas.edu/documentation/nr/bookcpdf.html

Eckhard

von crazy horse (Gast)


Lesenswert?

in dem Fall brauchst du keine aufwändige Suchfunktion, einfach in der
AD-Wandler-Routine direkt mit einer min/max-Variablen vergleichen, wenn
kleiner/grösser die min/max-Variable nachführen. Kostet nur wenige
Takte, und du hast jederzeit ein aktuelles Maximum oder Minimum zur
Verfügung.

von Ralf (Gast)


Lesenswert?

Hi,

@Eckhard: Danke, die Seite werde ich mir mal ansehen.

@crazy horse: Das mit der min/max-Variable wäre schon klar, das Problem
ist nur, dass ich die Stellgröße meines Reglers in geeigneter Weise
variieren muß, um das Minimum des AD-Wandlerwertes zu finden. Steigere
ich z.B. meine Stellgröße immer weiter, so fällt zunächst der
Wandlerwert zunächst und steigt weiter hinten wieder an, z.B. entspr.
einer quadratischen Kennlinie. Es gibt also irgendwo im
Stellgrößenbereich einen Punkt, bei dem der AD-Wert sein Optimum
(Minimum) besitzt. Nun möchte ich nicht der Reihe nach alle möglichen
Stellgrößen durchfahren, sondern den gesuchten Wert schon in wenigen
Schritten finden. Ich weiß also zunächst nicht wo sich das Optimum
befindet und in welche Richtung ich mich bewegen muß. Das ganze sollte
aber möglichst schnell funktionieren und möglichst ohne aufwendige
Rechnerei gehen.

Viele Grüße,

Ralf

von Henning (Gast)


Lesenswert?

einfach einen schrit in beliebige richtung machen, vergleichen ob die
abweichung größer oder kleiner geworden ist und dann den nächsten
schritt in die entsprechende richtung (weiter nach vorn oder umkehrern)
beschreiten. wenn man am optimalen punkt ist und mehr als x mal jeweils
1 oder 2 schritte nach oben oder unten gemacht hat dort
stehenbleiben...


...wenn ihr wisst was ich meine :) (hab grad ne komische wortwahl)

von tobias hofer (Gast)


Lesenswert?

sind dann deine wandler werte in einer tabelle gespeichert?

ich glaube dann ist das mit dem einen schritt in eine richtung und dann
wieder einen nicht sehr effizient.
liegen die wert in einer tabelle vor zuerst diese sortieren. da gibt es
auch wieder verschieden schnelle und komplizierte algorythmen.
z.b. bubble sort wäre einfach aber nicht sehr schnell.

oder verstehe ich dein problem falsch?

gruss
tobias

von Ralf (Gast)


Lesenswert?

Hi,

meine Wandlerwerte sind nicht in einer Tabelle hinterlegt. Sie hängen
im Prinzip nur davon ab, wie ich die Stellgröße meines Reglers
einstelle. Den richtigen Wert der Stellgröße kenne ich nicht. Diesen
muß ich aus dem AD-Wandlerwert ermitteln. Ich weiß nur, dass der
AD-Wandlerwert eine 'Badewannenkurve' durchläuft und dass ich meine
optimale Stellgröße dann erreicht habe, wenn ich das Minimum in der
AD-Wandlerkurve gefunden habe. Ich suche nun gute Verfahren, dieses
Minimum möglichst schnell und mit möglichst wenig Rechenleistung zu
finden.
Ich habe mir im ersten Ansatz überlegt, dass ich erst mal in groben
Schritten meine Stellgröße variiere und dabei immer den Wert des
AD-Wandlers überprüfe. Wenn ich dann eine Richtungsumkehr in der
Steigung des Wandlerwertes erkenne, will ich dann mit der Hälfte der
Schrittweite rückwärts laufen bis zur nächsten Umkehr der Steigung
usw.. So hoffe ich das Minimum zu finden. Aber vielleicht gibt es ja
auch bessere Verfahren?

Viele Grüße,

Ralf

von Andreas Jäger (Gast)


Lesenswert?

Hallo Ralf,

um Extremwerte (Minimum, Maximum) einer Kurve zu finden gibt es
verschiedene Verfahren (Regula-Falsi, Newton'sche Näherungsverfahren).
Diese setzen vorraus, dass die Kurve als Funktion y=f(x) beschrieben
ist, was bei Dir aber wohl nicht gegeben ist.

Eine Kurve 2ter-Ordnung ("Badewanne") hat nur ein Extremwert, den Du
in der von Dir beschriebenen Weise finden kannst. Hat die Kurve mehrere
Extremwerte, musst Du die Anfangsschritte der Stellgrößenänderung
kleiner wählen, da Du sonnst ein Minimum uberspringen könntest. Du
findest dann zwar ein lokales Minimum, das aber nicht das kleinste
ist.

Wie schnell musst Du denn das Mininmum finden? Ändert sich die Funktion
der Kurve im Betrieb?

MfG
Andreas

von edi (Gast)


Lesenswert?

FUZZY LOGIC

von OliverK (Gast)


Lesenswert?

Morgen,

ein erster, wenn auch nocht nicht zu Ende gebrachter Gedanke ist
folgender:

Du fährst ein grobes Raster über das Intervall der Stellgrößen in
äquidistanten Schritten. Du merkst Dir zwei Größen (min1, i1) und i2.
Wobei ix die Stellgröße ist, zu dem minx gehört. Jedesmal, wenn Du ein
neues Minimum (min_neu < min1) findest, schiebst Du den alten Stellwert
i1 nach i2:  i2 = i1. (min1, i1) wird durch das neue Minimum ersetzt.

Nach dem Durchfahren kannst Du folgendes feststellen:

Wenn i2 < i1 ist, mußt Du die Wanne weiter von i1 aus in Richtung der
größeren Stellwerten durchsuchen (feines Sieb).

Wenn i2 < i1 ist, ..., dann Richtung kleinere Stellwerte.



Sag mal, ist die Folge Deiner AD-Werte streng monoton (ADWi > ADWi+1
bzw. ADWi < ADWi+1) bzw. monoton (ADWi >= ADWi+1 bzw. ADWi =< ADWi+1)?

Wenn da ein Rauschen drauf sein sollte, wirds komplizierter.


Grüße
Oliver

von Ralf (Gast)


Lesenswert?

Moin moin,

eigentlich habe ich nicht besonders viel Zeit. Das ganze muss optimaler
Weise in einer Zeit von unter einer Sekunde passieren. Da ich nebenbei
noch andere Dinge berechnen (anderer Regler, sowie weitere Berechnung
die in Echtzeit ablaufen müssen ohne viel Zeitverzug (<10us)) muss habe
ich nicht besonders viel Zeit um diese Berechnungen auch noch
durchzuführen. Das AD-Signal ist bei mir auch relativ stark verrauscht.
Ich habe allerdings schon eine hardwareseitige Mittelwertbildung und
auch noch eine softwareseitige Filterung eingebaut. Das Signal ist also
relativ stabil. Der Werteverlauf lässt sich ungefähr durch eine
quadratische Kennlinie annähern.

Gruß,

Ralf

von tobias hofer (Gast)


Lesenswert?

wie andreas gesagt hat hat je deine kurve nur eine extremalstelle.
du sagst du könntest den werteverlauf annähern.
wir können also die zu erwartende kurve beschreiben in der form
y = -m*x^2 + q. wenn du zwei werte ermittelt hast kann die kurve
beschrieben werden.
die ableitung = 0 wäre dann der zu erwartende extremwert.
nun die weiteren messungen mit dem vorausgerechneten vergleichen und
falls gleich hast du das minmum.
wobei ich natürlich denke das das nicht allzu sehr effizient ist.

tobias

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.