-
        

Ergebnis 1 bis 7 von 7

Thema: Scharp GP2D120 IR-Sensor ?Funktion?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    03.12.2004
    Alter
    29
    Beiträge
    33

    Scharp GP2D120 IR-Sensor ?Funktion?

    Anzeige

    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
    Konnte leider noch nicht nach Strecke umstellen (hab mein TI-Voyage grad nich da)[/url]

  2. #2
    Super-Moderator Lebende Robotik Legende Avatar von Manf
    Registriert seit
    30.01.2004
    Ort
    München
    Alter
    64
    Beiträge
    12.367
    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
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken gp_120.jpg  

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    31
    Beiträge
    4.255
    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...

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    03.01.2004
    Ort
    Pottenstein
    Alter
    38
    Beiträge
    265
    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:

    Code:
    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

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    31
    Beiträge
    4.255
    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...

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    03.12.2004
    Alter
    29
    Beiträge
    33
    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)

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    03.01.2004
    Ort
    Pottenstein
    Alter
    38
    Beiträge
    265
    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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •