Beschleunigungssensor auslesen

Gast #3486462
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
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
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
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
Gast #3486927
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.