Beschleunigungssensor auslesen

Gast #3486462
Lesenswert?

Hallo,

ich lese die Register eines Beschleunigungssensor aus.
Laut Datenblatt:
These registers contain the X-axis, Y-axis, and Z-axis 14-bit 
left-justified sample data expressed as 2's complement numbers.

folgende Variablen werden eingelesen:
1
typedef struct
2
{
3
  int16_t x;
4
  int16_t y;
5
  int16_t z;
6
} SRAWDATA;
7

8
SRAWDATA Accel;
9

10
ReadAccelMagnData(&Accel);
11

12
float x = Accel.x / 16383.0;
13
float y = Accel.y / 16383.0;
14
float z = Accel.z / 16383.0;
15

16
g = sqrt(x * x + y * y + z * z);
ist das richtig dass man den Wert durch 16383 teilt?
Die Anzeige stimmt soweit.
X 0
Y 0
Z 1
Sensor liegt wagerecht!

aber bei höheren g Kräften wird zu wenig angezeigt(laut g kraft 
simulator)
Ich weiß nicht wie man das überprüfen kann.
#3486491
Lesenswert?

Wenn Z=1 rauskommt ist doch alles gut. Dreh den Sensor mal um. Gibt das 
dann Z=-1?

Ich hätte allerdings bei "14-bit left-justified sample data expressed as 
2's complement numbers" was anderes erwartet ...

Um weiterhelfen zu können: Welcher Sensor genau? Auf welchen 
Wertebereich von g konfiguriert? Und zeig mal die Rohdaten in Accel.

LG, Sebastian
#3486525
Lesenswert?

Klaus schrieb:
> Sensor = Freescale FXOS8700CQ
> Rohdaten:
> Accel.x -164
> Accel.y 712
> Accel.z 16232

Sieht doch gut aus. Wertebereich ist ±2g, als 14-bit left-adjusted 
2-complement also von -32768 bis 32764 mit den zwei untersten Bits immer 
0. Division durch 16383.0 oder 16384.0 ist also korrekt.

Wie gesagt: Probier erst mal alle Sensorpositionen durch wo eine Achse 
genau 1g erhält, und zwar plus und minus.

Dann halt den Sensor mal auf 45 Grad schräg, und kontrolliere, ob beide 
betroffenen Achsen so bei 0.7g landen.

LG, Sebastian
#3486572
Lesenswert?

Klaus schrieb:
> Wertebereich ist auf ±8g eingestellt.

Das scheint nicht so zu sein. Bei 1g liefert z 16232, das ist schon die 
Hälfte des int16-Wertebereichs. Mir scheint der Wertebereich bei ±2g zu 
liegen. Kontrollier das noch einmal.

> Bei 45° zeigen 2 Achsen 0,7, das passt denke ich.
> Wie könnte man höhere Werte testen?

Tja. Um eine Achse mit konstanter Winkelgeschwindigkeit rotieren lassen? 
Oder auf einem Schlitten über ein Fallgewicht konstant beschleunigen?

LG, Sebastian

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren