Archiv verlassen und diese Seite im Standarddesign anzeigen : Scharp GP2D120 IR-Sensor ?Funktion?
ReiniXXL
23.07.2005, 13:32
Hat jemand schon für den Scharp eine Funktion aus den Schaubildern des Datenblattes gemacht?
Habe mal zwei ausgerechnet:
1. über Polynominal Regression 6. Grades:
Strom = 0.084708+(11.135)/Strecke
Leider nicht so genau :(
2. über Gauss:
Strom= 0.31767*exp(-((Strecke-42.217)^2)/(-686.16))
Genauer aber unmöglich wo einzuprogrammieren?! =;
Hat jemand noch bessere Lösungsvorschläge? Link zum Datenblatt (http://www.robotikhardware.de/download/gp2d120.pdf)
Konnte leider noch nicht nach Strecke umstellen (hab mein TI-Voyage grad nich da)[/url]
Ich habe es mir gerade einmal mit EXCEL angesehen, mit dem Diagrammausschnitt als Hintergrundbild. Die erste Funktion mit Spannung = 0.084708+(11.135)/Strecke sieht da ganz gut aus. (Bild unten)
Bei der Umkehrfunktion sieht Strecke = 13,296 Spannung ^-0,9192 ganz gut aus.
Man sollte bei der Trendlinie, die man bei EXCEL als Gleichung ausgibt natürlich mit solchen Funktionen operieren, die man nachher auch implementieren will.
Vielleicht paßt ja eine quadratische Gleichung auch noch ganz gut wenn man die Stützstellendichte im relevanten Bereich erhöht.
Manfred
man sollte auch erstmal überlegen ob man den aufwand mit den piotenzfunktionen usw. überhaupt treiben muss... wenn man nur ab einer bestimmten grenze ne warnugn ausgeben/ etwas schalten/ den bot wenden lassen will, reicht es ja schon meist, einen schwellenwert für die spannugn festzulegen. wen man wirklich die genaue entfernung braucht, wäre es auch möglich, die kurve in mehrere gerade teilstücke zu zerlegen oder auch eine vorher berechnete/gemessene tabelle abzuspeichern und daraus die werte zu bestimmen... sonst zieht das ganze enorm rechenleistung...
Minifriese
23.07.2005, 18:23
Moin!
Also um mit dem Sensor was zu messen, ist es eigentlich voellig ueberfluessig, das in so komplizierte Formeln zu uebersetzen. Eine Interpolation zwischen den vorgegebenen Stuetzpunkten reicht doch voellig aus. Und die ist sehr einfach zu programmieren und kommt mit den Grundrechenarten aus, was wesentlich weniger Rechenzeit braucht als irgendwelche Exponentialfunktionen. Das Beispiel unten ist fuer nen ADXL202, aber fuer den Sharp waeren bloss die Werte in den Tabellen anders:
int adxl_reading[21]={451,469,473,478,483,488,493,498,504,510,516,522, 528,533,539,544,549,554,559,563,583};
int adxl_angle[21] ={-90,-45,-40,-35,-30,-25,-20,-15,-10,-5, 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 90};
double lookup(int x,int inp[],int outp[]) {
int i=0;
if(inp[0]>=x) return outp[0];
if(inp[21-1]<=x) return outp[21-1];
while(inp[i]<x) i++;
return (outp[i-1] + ( (x-inp[i-1])/(inp[i]-inp[i-1]) *(outp[i]-outp[i-1]) ) );
}
istwert=lookup(rohistwert,adxl_reading,adxl_angle) ;
Nils
weiterer vorteil einer tabelle: man kann die sensoren damit kalibirieren, also für jeden einzelnen sensor eine eigene messkurve aufzeichnen, die dann genau für ihn passt, nicht nur die durchschnittswerte aus dem datenblatt... ich denke, dann ist die genauigkeit höher als wenn man mit drei nachkommastellen die formel aus dem datenblatt berechnet...
ReiniXXL
24.07.2005, 01:59
Ist das so enorm mit der Rechenleistung???
Kann man da ein Verhältniss sagen? (z.B. ein ^2 braucht 3 mal so lang wie eine Tabelle mit 20 Werten)
Minifriese
24.07.2005, 02:16
Musst dir halt mal irgendwo nen Assemblercode fuer so ne Funktion besorgen. Vielleicht einfach deinen generierten Code anschauen. Der wird relativ viele Anweisungen benoetigen, deutlich mehr als zum Beispiel ne einfache Multiplikation, obwohl auch die bei Gleitpunktzahlen schon recht umfangreich ist. Und beim AVR braucht jede Anweisung einen Taktzyklus, damit kannst du dann den Zeitnachteil abschaetzen...
Nils
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.