mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Suchverfahren auf Mikrocontrollern


Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Eckhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

versuch dein glück mal hier :

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

Eckhard

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Henning (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: tobias hofer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas Jäger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: edi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
FUZZY LOGIC

Autor: OliverK (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: tobias hofer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.