Eine weitere Frage an die Experten: Atmega16, Capturefunktion des Timer1: Um eine Geschwindigkeit aus der Periodenlänge zweier Impulse (Wegstrecke zwischen den Impulsen ist konstant) wäre es notwendig, eine Funktion aus KonstanteA/(KonstanteB*t) zu berechnen. Da diese Funktion ja eine Hyperbel ist: Sollte man die Geschwindigkeit tatsächlich durch den Controller berechnen lassen, oder sollte ich approximieren? Entweder mehrere lineare Funktionen in entsprechenden Intervallen? Oder über Taylor-Polynom? Oder über eine Tabelle? Wobei ich mich bei der letzten Variante sträube - zu viele Werte... Wie löst man solch ein Problem elegant? Vielen Dank schon mal, Kay
Kay H. schrieb: > Sollte man die Geschwindigkeit tatsächlich durch den Controller > berechnen lassen, eine Multiplikation und eine Division? > oder sollte ich approximieren? Und du denkst das geht schneller als eine Mutliplikation und eine Divisoin? > Entweder mehrere > lineare Funktionen in entsprechenden Intervallen? Oder über > Taylor-Polynom? Oder über eine Tabelle? Wobei ich mich bei der letzten > Variante sträube - zu viele Werte... > Wie löst man solch ein Problem elegant? Man implementiert erst mal die naheliegenste Version. Und die ist: wenn eine Multiplikation und eine Division gefordert sind, dann macht man auch genau das. Dann denkt man mal ganz kurz darüber nach, wieviel Zeit man eigentlich zwischen 2 Capture Intervallen hat (hängt von der Geschwindigkeit und der Wegstrecke ab), setzt das in Relation zu dem Zeoitverbrauch einer Multiplikation und einer Division und lächelt vor sich hin, weil man davor Angst hatte. Hinweis: den Löwenanteil deines Zeoitverbauchs wird die Anzeige verbraten. Dagegen ist die Berechnung sozusagen Peanuts.
OK, danke. Ich muss zugeben- ich weiß es nicht. Ich hatte nur die Vermutung, dass eine Division für den Atmega schwieriger, d.h. zeitaufwändiger, sei, als eine Multiplikation (bei Taylor z.B.)
Ein Taylor braucht ausschlieslich multiplikationen und Additionen. Das geheimniss dabei ist mit Festkomma zu arbeiten.
... und genau das war meine Überlegung. Die Frage wäre für diesen Fall, wie weit man das treiben müsste (Wievielte Ordnung des Polynoms), um vernünftige Ergebnisse zu erhalten, also mit geringer Abweichung zu rechnen. Ich hatte es mal von Hand bis zur zweiten Ordnung durchgespielt. Aber dafür müsste ich auch mehrere Intervalle mit mehreren Gleichungen definieren. Ich muss es mal ausprobieren, wenn ich wieder mal Zeit habe.
Mach doch mal eine Simulation... Ich probier das jeweils durch, wieviele Stellen habe ich, wieviele Stellen will ich, wieviele Rechenleistung hab ich dafuer. vielleicht kann man's auch mit einer Tabelle machen, und dann dazwischen linear Interpolieren.
Keine Ahnung mit der Simulation. Womit machst du das? Mit Tabellen wollte ich eigentlich nicht arbeiten. Zum einen stehe ich auf dem Schlauch, wie ich die handle, zum zweiten wollte ich eigentlich nur einfach einen Parameter ändern müssen, um z.B. die Impulszahl meines Gebers anpassen zu können.
Eben ich mache eine Approximation im Intervall. Fuer ein Polynom mit 1.,2.,3.,4.ten Ordnung. Eine least Square Mehode gewichtet den ganzen Bereich gleich. Vieleicht ist das auch nicht so wichtig. Vielleicht muesste man Zentrum mehr Genauigkeit haben. Das rechnet man erst mal als Float, dann rechnet man nochmals mit Ganzzahl, und schaut ob das immer noch gut ist. Fuer einen NTC Sensor, der hat eine Exponential funktion, habe ich mal bis zur 6.Ordnung durchgespielt um dann schweren Herzens doch die Exponential funktion mit float zu rechnen. Ich mach's jeweils interaktiv mit Delphi, um das zu Visualisieren. Es geht aber auch irgend einer anderen Umgebung. Die Koeffizienten auf Schiebereglern, die Fehlerkurve und das Integral drueber.
Kay H. schrieb: > eine Funktion aus > KonstanteA/(KonstanteB*t) zu berechnen. Da diese Funktion ja eine > Hyperbel ist: Was ist an der Funktion denn eine Hyperbel ? Das ist nichts anderes als eine Multiplikation mit einer Konstanten. Absolut Linear . Setze die Klammern mal anders und du wirst sehen was ich meine.
t ist die Unbekannte. Mal dir mal die Funktion 1/x auf und du wirst sehen, dass sie alles andere als linear ist.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.