Schöner Tipp für alle, die noch wissen wollen, was sie tun, aber sich dann doch nicht mit oolynomialer Interpolation befassen wollen. Für mein aktuelles Projekt bliebe die Frage: wie bekomme ich Excel in einen ATmega64![]()
Hallo Robotergemeinde!
Sensoren liefern oft keine lineare Ausgangsgröße, die direkt propertional zur gemessenen Größe ist, wie beispielsweise die Distanzsensoren von Sharp.
Daher ist es in den meisten Fällen notwendig, eine Messwerttabelle zu verwenden, um beispielsweise eine Ausgangsspannung in eine Distanz umzurechnen.
D.h. es werden einige Messwerte experimentell erhoben:
Bild hier
Entweder definiert man diese Werte als Array, oder noch schöner: man entwickelt eine Formel, am Besten mit Hilfe von Excel (Trendlinienfunktion).
Dazu erzeugt man zuerst eine Graphik:
Bild hier
Dann fügt man über das Menü "Diagramm\Trendlinien hinzufügen" eine geeignete Trendlinien hinzu. Bin kein Mathematiker, also das einfachste ist einfach ein paar Trendlinien ausprobieren, die am Besten in die Kurve reinpassen:
Bild hier
Um die Formel zu ermitteln, muss man im Reiter die Option "Gleichung in Diagram anzeigen" auswählen:
Bild hier
Volia:
Bild hier
Damit kann ich die Fomel einfach im Programm verwenden.
In meinen Fall ist das zb:
Wenn die Werte nicht hinkommen, kann man mit den Konstanten spielen oder nur für Teilbereiche eigene Formeln entwicklen, je nach dem wie genau man die Werte braucht.Code:Wenn Spannung zwischen 3,1 und 1,05 V dann y = 0,0119x2 - 0,0166x + 1,1007
Aber hier ging es ja fürs erste nur ums Prinzip!
LG
Georg!
Schöner Tipp für alle, die noch wissen wollen, was sie tun, aber sich dann doch nicht mit oolynomialer Interpolation befassen wollen. Für mein aktuelles Projekt bliebe die Frage: wie bekomme ich Excel in einen ATmega64![]()
Es geht bei der EXCEL Operation wohl nur um die Bestimmung der Koeffizienten der Näherungsformel die dann lokal ausgerechnet werden soll.
Es wird dann auch nicht jede Näherungsformel einfacher auszuwerten sein sein als die Interpolation einer Tabelle.
Manfred
Gibts da auch sowas schönes für Matlab?
Hallo shaun,
ich nehme an, du meintest das als Scherz:
In dem du die Formel, die Excel generiert per Drag and Drop in die Entwicklungsumgebung deines ATmega64 kopierst.Zitat von shaun
Aber ein Excel-Addin für nen ATmega64 wäre doch was als Projekt![]()
@Manf: Hast du eine Formelsammlung für die Interpolation, oder legst du einfach eine Gerade zwischen zwei Messpunkte durch?
Ob Interpolation oder Näherungsformel hängt natürlich vom Einzelfall. Es gibt immer mehrere Wege zum Ziel...
Sonst könnte man diese Methode plus Interpolation ins RN-Wissen aufnehmen, wenn es das noch nicht gibt...
Der Smiley sollte sowas in der Art wie einen Scherz suggerieren, ja.
Nur hilft mir Dein Vorschlag auch nicht: es geht um 4-5 Strecken (passive wie aktive Bauteile dazwischen), die im f-Bereich von 10kHz bis 100MHz in Betrag und Phase linearisiert werden müssen, und zwar nicht unter Zuhilfenahme externer Rechner, sondern durch gezielte Messungen mit geeichtem Equipment und Übergabe der gemessenen Werte an die Firmware. Das Interpolationspolynom muss der ATmega daraus selbst berechnen.
Gute Anregung, sowas solltet ihr ruhig mal näher aufgreifen und in einem RN-Wissen Artikel verarbeiten. Denkbar wäre auch ein Tool das aus Messwerten nicht nur Formel sondern auch gleich Bascom Code oder/und C-Code erzeugt. Vielleicht hat ja mal jemand etwas Lust und Zeit sowas anzugehen, erspart sicherlich später so einiges an Arbeitszeit.Zitat von Sheridan
Gruß Frank
Wenn Du die Punkte zeichnen läßt, gibt es im Figure-Window unter Tools den Menüpunkt "Basic Fitting".Zitat von Jaecko
Braucht man wirklich ein Programm, um ausZitat von Sheridan
y = 0,0119x² - 0,0166x + 1,1007
die Programmzeile
y = 0.0119*x*x - 0.0166*x + 1.1007;
zu machen? (Bzw. aufgesplittet für Bascom)
Markus
@Markus4004
@Sheridan
Wenn Du von einem Wasserstand ausgehend versuchst, die zugehörige Spannung auszurechnen wohl kaum. Das bringt Dir aber leider nicht viel... Du brauchst nämlich die Umkehrfunktion!!! Und dazu musst Du dann wohl doch Papier und Bleistift bewegen, bzw. Matlab fragen. Zumindest, wenn Du diese Funktion benutzen willst.Braucht man wirklich ein Programm, um aus
y = 0,0119x² - 0,0166x + 1,1007
die Programmzeile
y = 0.0119*x*x - 0.0166*x + 1.1007;
Die UF ist übrigens nicht mehr so spaßig, wenn man halbwegs genaue Werte haben will und der µC auch noch was anderes machen soll, als Wurzelziehen...
Das ist übrigens der Grund, warum man sich dann meistens doch für einen LookUpTable entscheidet, jedenfalls auf 8Bit Ebene.
Gruß Gock
Lesezeichen