-
-
Erfahrener Benutzer
Roboter Genie
Was du mit Definieren meinst, machst du mit einer Kalibrierkurve. Einfach ein Objekt in bekannter Entfernung vor den Sensor halten und den Wert auslesen, das mit einer ganzen Reihe von Werten über den kompletten Messbereich machen.
Daraus kannst du dann entweder eine Funktion bauen, die halt mit mathematischen Formeln arbeitet, oder einer Tabelle, die die richtige Entfernung einem ADC Wert zuordnet.
Die erste Variante geht z.B. mit dem GCC Compiler einfach, da man auch komplexe Geschichten wie Multiplikation, Division und E-Funktionen über Bibliotheken machen kann. Nachteil ist, dass diese Routinen lange brauchen und auch etwas Speicherplatz benötigen. Variante 2 mit der Tabelle geht extrem schnell, verbraucht aber soviele Bytes Speicher, wie die Anzahl der Stufen x der Größe der Variable ist. Dh bei 10Bit und Float-Werten, die 4Byte belegen, müssen 4096 Byte also 4 KB nur für die Tabelle im RAM oder Flash frei sein. Das ist bei nem Mega8 ja schon fast nicht möglich, wenn da noch was anderes passieren soll. Externer Speicher wäre noch ne Lösung, aber verlangsamt die Geschichte etwas. Ich favourisiere die Variante mit der Formel, vor allem weil man auch die E-Funktion durch eine Potenzreihe höherer Ordnung gut annähern kann.
Wenn du deine Tabelle an Messwerten hast, Spannung über Weg im kompletten Messbereich mit genug Werten, z.B. 50-100, kannst du es in z.B. Excel als Grafik anzeigen lassen. Dann erstellst du ne Funktion mit der Form "a*x³ + b*x² + c*x + d" und variierst solange a,bc und d, bis eine schöne Näherung dieser Kurve an die aufgenommene Kurve entsteht.
Durch die Verwendung von einfachen Potenzen von X geht das mit integer Werten und der ALU vom Atmega8 sehr schnell.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen