Forum: Mikrocontroller und Digitale Elektronik Beschleunigungssensor auslesen


von Klaus (Gast)


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.

von Sebastian W. (wangnick)


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

: Bearbeitet durch User
von Klaus (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

Sensor = Freescale FXOS8700CQ

Rohdaten:

Accel.x -164
Accel.y 712
Accel.z 16232

von PittyJ (Gast)


Lesenswert?

Welcher Sensor/welches Datenblatt?
14 Bit ist 0 ..16383 oder eben -8192 .. 8191. Je nachdem es ein 
Vorzeichen gibt.

von Sebastian W. (wangnick)


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

von Klaus (Gast)


Lesenswert?

Hallo,

Wertebereich ist auf ±8g eingestellt.
Bei 45° zeigen 2 Achsen 0,7, das passt denke ich.
Wie könnte man höhere Werte testen?

von Sebastian W. (wangnick)


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

: Bearbeitet durch User
von Klaus (Gast)


Lesenswert?

Hallo Sebastian,

du hast Recht.
War auf 2g eingestellt.
Im Datenblatt steht man könne den Wertebereich auch ohne Standby setzen 
was aber nicht der Fall ist.

Viele Grüße

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
Noch kein Account? Hier anmelden.