Gast
#732488
Hey, ich habe es jetzt geschafft den ADXL213 Neigungssensor (ähnliche Funktionsweise wie ADXL202) mit meinem uC, einem C167CR auszuwerten. Der Sensor liefert ein seinem Neigungswinkel proportionales Tastverhältniss eines Rechtecksignals. Dieses Tastverhältniss schwankt zwischen minimal 20% (Winkel=-90°) und maximal 80% (Winkel=+90°). Ich verwende für jede Achse einen Timer in Gated Timer Mode zum auswerten. Der Timer zählt also solange das Ausgangssignal des Sensors HIGH ist. Somit erhalte ich einen dem Tastverhältniss proportionalen Timerwert. Mit absteigender Flanke wird der Timer in einem Interrupt ausgelesen und wieder 0 gesetzt. Mein C167CR liefert mir nun Werte zwischen 480(20%) und 2000(80%). Diese Verteilung ist zwar nicht ganz linear, aber man kann damit rechnen. Ich habe nähmlich eine Bandbreite von 1520 Werten. Im Dateianhang befindet sich ein Datenblatt des Sensors, wo auf Seite 8 der Verlauf des Tastverhältnis dargestellt ist. Für die errechnung des Winkels wird nur die X-Achse betrachtet, die Y-Achse könnt ihr euch also wegdenken. Ich habe 30%Tastverhältnis pro g und einen Offset von 50%. Ich ziehe nun von dem erhaltenen Timerwert die 50% Offset ab und dividiere diesen Wert durch 30%. Meine Formel zur Winkelberechnung: winkel= (aktueller_timerwert-wert50%)/(wert50%-wert20%); Damit erhalte ich Werte zwischen +1 und -1, die ich mithilfe von ArcusSinus in einen Winkel umwandeln kann. Das funktioniert und der Winkel passt auch. Mein Problem ist nun folgendes: Der errechnete Winkel erstreckt sich nicht stufenlos von +90° bis -90°. Bei einem Wert von 2000 erhalte ich folgenden Winkel: winkel = (2000-1240)/(1240-480)=1 =>asin(1)=90° das passt. Der nächstkleinere Wert ist allerdings 1999. Wenn ich nun 1999 in die Formel einsetze erhalte ich winkel=759/760=099868 =>asin(0.99868)=87° Ich brauche allerdings einen Winkel von zumindest 89°. Habt ihr eine Idee, wie ich meine Formel ändern könnte, oder was ich falsch gemacht habe. MfG. Peter
