mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Gleichung aufstellen?


Autor: Mink (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

für eine Mikrocontrollerbasierte Anwendung versuche ich gerade eine 
Gleichnung aufzustellen. Dabei habe ich im Prinzip zwei Variablen:

Batteriespanung = batt
Position = po

Die beiden Positionen sind wiederum von der Batteriespannung abhängig. 
Hier mal meine Meßergebnisse:

batt | po_min - po_max
232  |   71   -   149
229  |   71   -   147
227  |   70   -   145
:         :        :
:         :        :
:         :        :
193  |   60   -   125

Nun möchte ich eine Formel aufstellen, die Anhand der Batteriespannung 
einer Variablen den Wert 190 bei po_max und den Wert 90 bei po_min 
zuweist. Die Zwischenwerte sind natürlich auch noch von Interesse.

Leider komme ich auf keinen Lösungsansatz mit den unterschiedlichen 
Batteriespannungen.

Bei einer konstanten Batteriespannung kann ich das ganze folgendermaßen 
berechnen:

149x + b = 190
71x  + b = 90

Gleichsetzungsverfahren:

x = 1,28
b = -1


Hat vielleicht jemand ne Idee wie ich die verschiedenen Werte bei 
unterschiedlichen Batteriespannungen in ein Formel einbringen kann? Ist 
das überhaupt möglich?


Vielen Dank und Gruß,
Mink

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schon gut der Ansatz:

>149x + b = 190
>71x  + b = 90

71 ist ja gerade po_min(batt=232) und 149 po_max(batt=232)


Also:

>po_min(batt)*x + b = 190
>po_max(batt)*x  + b = 90


Dann brauchst du nur noch eine Formel fuer po_min(batt) und po_max(batt) 
(auch wieder was lineares nehme ich an), setzt es ein und loest wieder 
auf. Dann hast du eine Funktion die von batt und po abhaengt.

Autor: Mink (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle Antwort.

Versteh ich noch nicht ganz, aber ich werd mich mal dransetzen.

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die 149 und 71 sind ja Abhaengig von batt. Finde also zuerst eine 
Funktion, die dir die jeweiligen min/max-Werte ausspuckt wenn du batt 
hineinsteckst.



PS: Koennte es dir eventuell die Rechnerei sparen, wenn du die 
Batteriespannung (oder eine davon abgeleitete Spannung) als ADC_ref 
nimmst und nicht die interne Referenz?

Autor: Yob (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, wieviele Probemesswerte hast du denn?

Poste diese bitte mal damit man besser abschätzen kann um welche 
Fiunktion es sich hierbei handelt.

Grüße Yob.

Autor: analog (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zieh 100 ab und multipliziere mit 1.1

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Nun möchte ich eine Formel aufstellen, die Anhand der Batteriespannung
>einer Variablen den Wert 190 bei po_max und den Wert 90 bei po_min
>zuweist.

Dieser Satz ist unverständlich.

Autor: Wolfgang Schmidt (wsm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
po_min = batt*11/39 + 5,56

po_max = batt*24/39 + 6,23

Gruß

Wolfgang

Autor: Michael H* (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was du suchst ist eine sogenannte interpolation zu gegebenen 
stützstellen.
da gibt es nun mehrere verschiedene. z.b. polynominterpolation, die dann 
um deine gegebenen stützstellen "schwingt". wenn du hier iterativ 
vorgehst, also deine vorhandenen stützstellen interpolierst, dann deine 
erhaltene funktion zu wertepaare diskretisierst, zwischen deinen 
stützstellen mittelst und erneut interpolierst, und damit wieder von 
vorn beginnst, bekommst du nach ein paar durchläufen je nach 
quantisierung eine recht genaue funktion. je nach anzahl der messpunkte 
kannst du da evtl auch einfach einmalig ein hochgradiges polynom 
ansetzen.
dabei sagt keiner, dass die funktion schön ist, aber dafür musst du z.b. 
zur verarbeitung nur die polynomkoeffizienten speichern.

nachtrag: ich bin immer wieder von der qualität der wikipedia-artikel 
begeistert: http://de.wikipedia.org/wiki/Interpolation

grüße,
holli

Autor: Mink (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

erst einmal vielen Dank für die ganzen Antworten!

Das mit der Interpolation hab ich mir auch mal angeschaut, komm da aber 
auf keinen grünen Zweig.

Den Ansatz von wolfgang hab ich nun auch hinbekommen:

Steht also:

po_min = batt*11/39 + 5,56

po_max = batt*24/39 + 6,23


Nun weiß ich aber nicht wie ich weiter vorgehen muss, um auf ne Funktion 
zu kommen die von batt und po abhaengt.

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist wirklich gar nicht so einfach. Interpolation ist eigentlich auch 
nicht das richtige Stichwort. Es geht vielmehr darum, eine Funktion mit 
der Methode des genauen hinschauens zu finden und die Parameter dann 
nach der Methode der kleinsten Fehlerquadrate anzupassen. D.h. du 
brauchst auf alle Fälle erstmal viel mehr Messwerte als freie Parameter 
bei deiner (noch zu ermittelnden) Funktion. Dann solltest du die in 
einem Diagramm (mit z.B. Excel) darstellen. Wenn du dir den Zusammenhang 
der Größen nicht physikalisch herleiten kannst, dann musst du dir die 
Kurve genau anschauen. Ist es ein linearer Zusammenhang, quadratisch, 
eine e-Funktion?
Wenn ich dich richtig verstanden habe, dann willst du erstmal zwei 
Funktionen haben, po_min(batt) und po_max(batt), um dann zwischen diesen 
beiden Werten zu interpolieren. Also mach ein Diagramm, wo du po_max und 
po_min auf der y-Achse hast und batt auf der x-Achse und zeig uns das 
hier mal. Wenn der Zusammenhang linear ist, dann bestimme einfach die 
Regressionsgerade. Wenn der Zusammenhang nichtlinear ist, aber durch ein 
Polynom dargestellt werden kann, dann wird die Bestimmung der Parameter 
auch nicht zu kompliziert. (Stichwort Polynomfitting) Wichtig ist, das 
der Grad des Polynoms nicht zu hoch wird. Wenn du z.B. eine 
Newton-Interpolation nehmen würdest, dann würde das Polynom zwar durch 
alle Punkte exakt durch gehen, die Zwischenwerte wären aber absolut 
nutzlos, weil sie sonstwo liegen, nur nicht dort wo du sie erwartest. 
Also ein Polynom 2. oder 3. Grades sollte hoffentlich reichen.

Autor: Mink (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Im Anhang das Diagramm!


Gruß,Mink

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, das sieht ziemlich linear aus. Also kannst du jetzt entweder mit 
Excel oder per Hand eine Regressionsgerade für po_min(batt) und 
po_max(batt) berechnen. (Guck mal in einem Mathebuch deiner Wahl oder 
bei google/Wikipedia für die Formeln. Ist im Prinzip ganz einfach, nur 
ein paar Summen bilden und dividieren.)
Mit diesen beiden Funktionen kannst du ja für ein batt die 
enstprechenden po_min und po_max Werte ausrechnen und dann dazwischen 
linear interpolieren, wie du es oben bei der konstanten Batteriespannung 
gemacht hast.

Autor: Mink (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber ist es dann nicht das selbe was wir schon haben? Siehe Oben!

>>po_min = batt*11/39 + 5,56

>>po_max = batt*24/39 + 6,23


Die beiden Formeln passen für die min und max Werte schon optimal. Im 
Prinzip müsste ich doch jetzt folgendes machen:

po(po_min(batt))*x +b = 90
po(po_max(batt))*x +b = 190

=>

f(x)= (po(batt))*x +b


Nur ich weiß nicht wie...;-) Mist, hätte ich der Schule mal besser 
aufgepasst!

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast doch gar nicht alle Messwerte gepostet? Oder hab ich was 
übersehen? Deshalb kann Wolfgang die Koeefizienten doch nur für die paar 
Werte berechnet haben, die du oben mitgeschickt hattest. Du solltest die 
Geraden nochmal für alle deine Werte berechnen und da Wolfgang sich 
ziemlich kurz gefasst hat, wollte ich das nochmal so beschreiben, das du 
es slebst machen kannst.
Wenn du die beiden Geraden hast, dann ist es doch ganz einfach eine 
"große" Formel draus zu machen, wobei das nicht unbedingt sinnvoll ist.

Du hast doch po_min(batt) und po_max(batt). Nimm das erstmal als 
konstant an und rechne das mit Variablen durch, also so hier:

f(po) = a * po + b

Gleichungen:

190 = a * po_max + b
90 = a * po_min + b

Lösung:

a = 100 / (po_max - po_min)
b = -100 * po_min / (po_max - po_min) + 90

Hier setzt du nun einfach für po_min und po_max die Funktionen, also die 
Regressionsgeraden ein. Mal angenommen po_min(batt) und po_max(batt) ist 
so gegeben:

po_min = a1 * batt + b1
po_max = a2 * batt + b2

(a1, a2, b1, b2 werden durch die lineare Regression bestimmt)

und du setzt das ein, dann bekommst du folgendes:

Var(batt, po) = 100*(a2*batt+b2-po)/(a1*batt-a2*batt+b1-b2)+190

Autor: Mink (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, wunderbar!

Hab jetzt alle Konstanten berechnet, Formel gekürzt und ein sauberes 
Ergebnis, was dazu auch noch gut im Controller verarbeitet werden kann.

Var(batt,po) = (299*(po-5)/batt+2) + 6


Vielen vielen Dank für die Hilfe!!!


Gruß, Mink

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.