PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Abstand mit GP2D12 in cm ausgeben



Zeroeightfifteen
18.05.2006, 20:06
Hallo

ich wollte für mein Atmegareferat ein kleines Board mit Sensoren aufbauen. doch wie kann ich den Analogwert des GP2D12 so umrechnen, dass ich eine Angabe in cm bekomme?

uwegw
18.05.2006, 20:43
Du machts ne Messreihe oder liest die Werte aus dem Datenblatt ab. Dann hast du zwei Möglichkeiten:
a) Du bastelst dir (zb mit Excel) eine Potenz-) Funktionsgleichung, die die Messkurve möglichst gut wiedergibt, und verwendest diese Gleichung zur Umrechnung.
b) Du legst dir eine Tabelle an, die in 1cm-Schritten die dazugehörigen Messwerte enthält, und vergleichst den gemessenen Wert mit der Tabelle. Die Tabelle könnte man mit der Funktion aus a) erzeugen. Alternativ kann man auch weniger Messpunkte abspeichern und linear interpolieren.

Lösung a) ist umkomlizierter umzusetzen (mit zehn Messungen bekommt nman schon ne sehr gute Näherung), der AVR braucht allerdings viel länger zum Umrechnen. Wenn sonst nichts zeitkritisches zu tun ist, sollte es aber kein Problem sein (sofern du in ner Hochsprache schreibst, in ASM wird ziemlich haarig..)

Lösung b) lässt sich auch in ASM gut umsetzen, in Hochsprache ist es aber etwas mehr Arbeit. Dafür ist diese Lösung vergleichsweise schnell.

Zeroeightfifteen
18.05.2006, 21:13
ich wollte es in bascom programmieren. das mit der potenz hört sich gut an. muss nur noch herausfinden wie das funktioniert.

uwegw
18.05.2006, 21:33
Du schafft dir ne Möglichkeit, die Rohdaten vom ADC anzuzeigen (LCD, RS232 etc.). Dann misst du einige Entfernung aus und trägst die Werte in ne Tabelle ein. Davon lässt du dann ein xy-Diagramm erstellen und eine angenäherte Funktionsgleichung (in Excel "Trendlinie" vom Typ "Potenziell") errechnen und deren Gleichung ausgeben.

Mit dieser Gleichung kann dann Bascom die Messwerte umrechnen....

raoul4
19.05.2006, 16:19
hallo uwegw.
ich habe "leider" nur openoffice, kann aber die excel datei öffnen. nur sehe ich da keine gleichung (unter gleichung verstehe ich z.b. y=2x^2 oder sowas). wird bei mir die gleichung einfach nur nicht angezeigt oder was ist da los?

mfg

shaun
20.05.2006, 08:32
Klingt ja so als würdest Du erwarten, dass Dich die exakte Funktion zu jedem Plot gleich anspringt. Im Gegensatz zu Excel scheint Calc in der Tat keinen eingebauten Fitting-Algorithmus für nichtlineare Probleme zu haben. Die Methode der kleinsten Quadrate (verwendet Excel IMHO auch) kannst Du zu Fuss machen,Anleitung unter http://sourceforge.net/project/showfiles.php?group_id=87718&package_id=104423
Oder Du installierst Dir ein entsprechendes Plugin von http://oooconv.free.fr/fitoo/fitoo_en.html
Ausprobiert habe ich es allerdings nicht, da ich für sowas immer Matlab benutzt habe - polyfit() und gut.

BlackDevil
20.05.2006, 15:49
Wie erstellt man eigentlich eine solche Gleichung?

Wie gehe ich da vor. Ich weis das ich einen Sensor habe der die und die Werte liefert, ic hweis was für Variablen ich habe und ich weis was ich möchte

Wie erstelle ich da nun die Funktion(en)?

Würde mich mal interessieren

{;} 2be
28.05.2006, 13:13
man könnte doch auch eine Näherung der Funktion implementieren
wäre glaub ich das einfachste:
mit der Formel:
D = A/(X-B)
wobei:
D ist die Entfernung
X ist der Ausgabewert des Sensors
A ist die Steigung der Kurve A/X
B ist der Offset der Kurve

dann musst du nur noch 2 werte messen um A und B zu erhalten
siehe:
https://www.roboternetz.de/wissen/index.php/Sensorarten#Welche_Sensorarten_gibt_es

unter sharp GP2d150

shaun
28.05.2006, 18:18
@blackdevil:
1. Möglichkeit: Du weisst aufgrund der physikalischen Eigenschaften Deines Sensors, wie sich die Grössen zueinander verhalten, kannst zB über die Materialzusammensetzung usw eines NTC sagen, dass es sich um ein Polynom zweiten Grades handelt und bestimmst dann die Koeffizienten; beim Sharp weiss man halt irgendwoher - einfachster Weise durch angucken der Kurve - dass es etwas logarithmisches sein muss.
2. Möglichkeit: Approximation. Du weisst nicht so recht, was für eine Funktion es ist und es ist Dir auch irgendwie egal, oder die Funktion ist so kompliziert, dass Dein Controller mit der Berechnung überfordert wäre. Dann kannst Du mit verschiedenen mathematischen Methoden ein Polynom suchen, das Deine Funktion im interessierenden Bereich möglichst genau wiedergibt. Bei der logarithmischen Entfernungsfunktion des Sharp funktioniert das sch*e, bei einem PT-Temperatursensor sehr gut (<<0,1% Fehler von -50 bis 200 Grad C mit einem Polynom 2. Grades soweit ich weiss, hatte ich neulich gerade mal durchgekaspert, weil ich meinem uC die Fallunterscheidung und Berechnung mit bis zu 4 Graden nicht zumuten wollte und ausserdem gleich eine Abbildung meines ADC-Zahlenraumes auf Temperatur wollte, gut konditioniert sollte die Gleichung noch dazu sein)

Phönix
29.05.2006, 20:30
Es ist viel einfacher als das ganze in Excel einzugeben oder sowas. Nimm diese Funktion:

x in cm
y ist der digitale Wert

x = e^(ln(y/3908)/-0,866)

Die Funktion hab ich anhand der Potenzfunktion der Sharp in einigen Nächten abgeleitet. War kein Spass, dafür funktioniert sie perfekt. (Natürlich nur ab 8cm, ist ja die Minimalreichweite)

VG Phönix

Phönix
29.05.2006, 20:40
Sorry hab ich vergessen:

Die Sharpfunktion ist weder ein Polynom 2.Grades noch eine Logarithmusfunktion, sondern eine ganz einfache Potenzfunktion (sieht man mal vom Spannungsanstieg bis auf 8cm und 2,6V ab) der Form:

y=ax^b

Dann schaut man im Diagramm nach was x und y ist, also die zum Abstand gehörige Spannung. Dann stellt man die Gleichung auf. Und weil es 2 Unbekannte gibt macht man dass ganze noch mal aber mit anderen werten, sonst kommt am Schluss 0=0 oder sowas raus. Nach einer riesen Rechnerein kommt man dann auf so eine "verwegene" Gleichung und man ist glücklich dass sie funktionierrt :-)

Die herleitung wollt ihr aber nicht, oder?

@2be

man kann auch eine Näherung erlauben, indem man die Entfernung invertiert und den ganzen Graphen ableitet. dann erhält man annhärend eine Gerade, die einfacher zu beschrieben ist aber auch sehr viel ungenauer sein wird. Für kleiner Controller aber wohl das best. Doch die obige Gleichung ist für einen atmel oder c-control überhaupt kein problem. schafft sogar mehrmals (50mal oder so)in der sekunde 10 sharp nacheinander auszurechnen.

VG Phönix

Zeroeightfifteen
29.05.2006, 21:16
Danke für die Antwort. Ich werde dies Morgen mal ausprobieren.