Forum: Compiler & IDEs Von LSB/g auf m/s²?


von SpaceToon (Gast)


Lesenswert?

Guten Tag,

ich bin dabei, einen BMI160 Sensor von Bosch für zu verwenden und da ich 
ein ziemlicher Anfänger bin, habe ich da einige Fragen, hier ist das 
Datenblatt:
https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bmi160-ds000.pdf

Ich möchte gerne die Beschleunigung (x,y,z) und Orientierung (x,y,z) 
messen und dann dementsprechend umrechnen. In einem Arduino Skript wird 
der Skalierungsbeschreich +/- 2g für Beschleunigung und 250dps für 
Orientierung verwendet. Auf Se.8 des Datenblatts steht, dass die 
Empfindlichkeit bei 2g 16384 LSB/g beträgt. Das Skript an sich liest aus 
den 12 Registern die Werte aus und packt sie in ein byte Array, das am 
Ende zurückgegeben wird:


  for (int i = 0; i < 12; i++)
  {
    // Read 12 bytes of data
    // xGyr lsb, xGyr msb, yGyr lsb, yGyr msb, zGyr lsb, zGyr msb
    // xAccl lsb, xAccl msb, yAccl lsb, yAccl msb, zAccl lsb, zAccl msb
   data[i]=readBMI(12+i); //Read from Register 12+i
    ble.print(data[i]); //send value to bluefruit uart
    Serial.print(data[i], HEX);
    Serial.print(" ");
    Serial.print(i);
    Serial.print(" ");
    if(i==11){
      ble.print(byte(0x00));
      }
  }
  Serial.println();

Meine Frage ist jetzt, ich bekomme solche Werte, wie kann ich nun meine 
Messwerte in m/s² und °/s bekommen? Also speziell, wie erhalte ich aus 
der LSB/g Angabe meine tatsächliche Beschleunigung?  Ich habe irgendwo 
gelesen, dass ich Beispielsweise für die X-Beschleunigung den Wert des 
Registers durch die 16384 LSB/g teilen muss, um g zu bekommen. Ist das 
korrekt so? Auf einer anderen Seite hat jemand eine Rechnung mit 
(2^15)/2*g gemacht, und die Rohdaten durch diesen Wert geteilt...

Vielen Dank!

von SpaceToon (Gast)


Lesenswert?

Sorry, hatte vergessen, meinen Output zu zeigen:

0000002438555667500
00000022842354974400
0000002152422464345380
000000212026218620

von A. S. (Gast)


Lesenswert?

Den Wert in m/s² erhälst Du, wenn Du für g 9,81m/s² einsetzen.

von asaa (Gast)


Lesenswert?

Kleiner Tipp: Schau dir die Referenzimplementierung des BMI160 von Bosch 
auf GitHub.

Deren Treiber sind ein Beispiel von Schönheit im Code mit klar 
definierten Schnittstellen.

Im wesentliches ist es bei jeder MPU gleich: Es gibt vorgegebene 
Divisoren, je nach eingesetztem Range.

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.