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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von SpaceToon (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Sorry, hatte vergessen, meinen Output zu zeigen:

0000002438555667500
00000022842354974400
0000002152422464345380
000000212026218620

von A. S. (achs)


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

von asaa (Gast)


Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.