Hallo Formengemeinde, ich habe ein Problem mit meinem ADXL345. Im Moment betreibe ich den ADXL345 im 2g Modus also bekomme ich Werte zwischen Plus und Minus 512. Nun zu dem was ich nicht verstehe: Wenn ich den Sensor beispielsweise auf der X-Achse in die eine Richtung kippe bekomme ich bei 90° exakt -256 was ja -1g entspricht. Soweit so gut. Wenn ich den Sensor allerdings in die andere Richtung um 90 kippe (ebenfalls auf der X-Achse) bekomme ich Werte um die 310 und nicht wie erwartet 256. Kann mir jemand sagen wie das zustande kommt? Mit freundlichen Grüßen Bastelanfänger
Offset. Einfach ermitteln und dann abziehen. Macht er auch automatisch wenn du den Offset in die entsprechenden Register einträgst: "OFSX,OFSY,OFSZ" Steht auch im Datenblatt:
1 | min typ max |
2 | 0 g Output for XOUT, YOUT −150 0 +150 mg |
3 | 0 g Output for ZOUT −250 0 +250 mg |
4 | 0 g Output Deviation from Ideal, XOUT, YOUT ±35 mg |
5 | 0 g Output Deviation from Ideal, ZOUT ±40 mg |
6 | 0 g Offset vs. Temperature for X-, Y-Axes ±0.4 mg/°C |
7 | 0 g Offset vs. Temperature for Z-Axis ±1.2 mg/°C |
:
Bearbeitet durch User
An Offset dachte ich auch zuerst, habe diesen Gedanken aber aus folgendem Grund verworfen: Wenn 90° dem Wert 310 entspricht müsste ich ja 54 abziehen um auf die gewünschten 256 zu kommen. Dadurch verfälsche ich mir aber jetzt die Werte die zuvor gestimmt haben. Oder muss ich den Offset praktisch getrennt für den negativen und den positiven Bereich betrachten? Mit freundlichen Grüßen Bastelanfänger
Nein der Offset ist praktisch die Nullpunkt-Verschiebung. Vorher: X_min = -256, X_max = 310 Nachher X_min = -283, X_max = +283 Dass du nun etwas mehr als +-1g hast ist dann die Abweichung:
1 | min typ max |
2 | Sensitivity at XOUT, YOUT, ZOUT All g-ranges, full resolution 230 256 282 LSB/g |
Das musst du dann einfach entsprechend skalieren dass du wieder auf 1g kommst.
:
Bearbeitet durch User
Okey vielen dank. Nur um nochmal zusammen zu fassen das ich alles richtig verstanden habe: Die prinzipielle Vorgehensweise erst die Werte so zu verschieben das der Betrag beider Wertebereiche gleich ist und diesen (angepassten) Wert dann noch mit einem Offset verrechnen so das ich bei 90° Neigung exakt 256 sprich 1g habe? Mit freundlichen Grüßen Bastelanfänger
Lesen: http://www.analog.com/static/imported-files/application_notes/AN-1057.pdf Insb. "CALIBRATION FOR OFFSET AND SENSITIVITY MISMATCH ERROR"
Also irgendwie scheine ich auf dem Schlauch zu stehen. Die einfachste Möglichkeit den Offset raus zu bekommen ist ja den Sensor in einen definierten Zustand zu bringen (X, Y = 0g und Z = 1g) und die Werte die der Sensor dann ausgibt (bei der X und Y Achse) entsprechen direkt dem Offset. Diesen ziehe ich also im weiteren Verlauf von den Messwerten ab und habe somit eine Verschiebung des Nullpunktes. Soweit waren wir ja schon einmal ;-) Die neue Skalierung müsste doch dann folgendermaßen aussehen oder ?
1 | -1g 0 +1g |
2 | |-------------------------|-----------------------| |
3 | |
4 | -283 0 +283 |
5 | |-------------------------|-----------------------| |
6 | |
7 | 90° 0° 90° |
8 | |-------------------------|-----------------------| |
Mit freundlichen Grüßen Bastelanfänger
:
Bearbeitet durch User
Im Prinzip schon, nur dass der Winkel natürlich nicht linear mit dem Sensorwert zusammenhängt.
Okey, dann zu meiner (hoffentlich :-) ) letzten Frage. Zurzeit rechne ich den Wert des Sensors mittels Folgender Formel um: g[m/s^2] = (Messwert) * (4/2^10) Sehe ich das richtig dass diese jetzt hinfällig ist da ich ja bei z.B. 283 nicht 1g sondern ungefähr 1,1g rausbekomme? Kann man jetzt einfach die Formel so anpassen das ich meinen Messwert anstatt mit 1/256 mit 1/283 multipliziere? Mit freundlichen Grüßen Bastelanfänger
Doch gelesen schon allerdings dachte ich mir ich versuche erst mal simple Kalibrierung. Allerdings habe ich auch ein Verständnisproblem und zwar benötige ich ja A+1g und A-1g um dann mit den nachfolgenden Formeln zuerst Offset und Gain und dann den wirklichen Beschleunigungswert zu errechnen. Für A+1g und A-1g benötige ich allerdings schon einen Offset und Gain obwohl das doch eigentlich die gesuchten Größen sind ? Mit freundlichen Grüßen Bastelanfänger
A_+1g und A_-1g sind aber DEINE gemessenen "1g" Werte. Mit der ersten "Formel" A_+1g[g] sagen die einfach nur, dass DEIN A_+1g ein Wert ist der aus [irgendeinem Offset] + (1g * [irgendeinem Gain]). Also A_-1g = -256*0.0039g = -0.9984g; A_+1g = 310*0.0039 = 1.209g Demnach ist dein "A_off" = 0.5*(1.209g+(-0.9984g)) = 0.1053g Danach ist dein Gain also: Gain = 0.5*(1.209g-(-0.9984g))/1g = 1.1032 (kein "g"... kürzt sich weg) Also ist dein A_actual = (A_out -A_off)/gain. Also im Falle von -256 => A_actual = (-0.9984g - 0.1053g)/ 1.1032 = -1g und im Falle von 310 => A_actual = (1.209g - 0.1053g)/ 1.1032 = +1g passt also
:
Bearbeitet durch User
Okey das leuchtet ein, damit sollte das Problem gelöst ein. Vielen vielen dank an dich masterfix. Mit freundlichen Grüßen Bastelanfänger
Ich habe mal mit dem Bosch BMA020 Sensor gearbeitet, der zeigte das gleiche Verhaltern, alllerdings erheblich weniger stark ausgeprägt. Für meine Roboter Bastelei waren sowohl Offset als auch nicht-linearität so gering (unter 1%), dass ich sie vernachlässigen konnte.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.