Forum: Mikrocontroller und Digitale Elektronik Beschleunigungssensor Daten in g "umrechnen"


von Finn S. (cargo)


Lesenswert?

Hallo.

Ich bin ganz neu hier und habe ein großes Problem.

Ich muss im Physik Lk eine Facharbeit schreiben. Das Thema wurde vom 
Lehrer gegeben, und ist in meinem Fall der Beschleunigungssensor.
Es ist das Modell von Elv, und auch das I2C Interface von denen.

http://www.elv.de/3-achsen-beschleunigungssensor-3d-bs-komplettbausatz.html
und 
http://www.elv.de/usb-i2c-interface-komplettbausatz-inkl-gehaeuse-bearbeitet-und-bedruckt-usb-kabel-3-anschlusskabel.html

Allerdings habe ich kaum, bzw. gar kein Vorwissen im Bereich 
Mikroelektronik.

Es wird nicht viel erwartet, ein paar Seiten Text über die grobe 
Funktionsweise des Sensors, und die ebenfalls verwendete I2C 
Schnittstelle, und ein paar Versuche.

Bei mir scheitert es aber schon beim auslesen der Messdaten.

Mit h-Term bekomme ich dann 10-Bit Messwerte ausgegeben.
Die kann ich ja in einer Datei speichern.
Wie schaffe ich es jetzt diese werte in g (m/s^-2) umzuwandeln?


Mein Ziel ist es eigentlich am Ende eine Tabelle mit den Werten einer 
Zeit zugeordnet zu haben. Es müssen gar nicht all zu viele sein, eine 
manuelle Umrechnung mit Excel würde auch reichen.

Die Aufgabe besteht eigentlich nicht darin, die Werte zu bekommen, ich 
glaube mein Lehrer hatte sich das alles ein wenig einfacher vorgestellt.


Kann mir da einer helfen?
Ich wäre euch wirklich sehr sehr dankbar, da ich von meinem Lehrer auch 
nicht mehr viel Hilfe erwarten kann.

LG
cargo

von Schnurpsel (Gast)


Lesenswert?

Finn S. schrieb:
> Wie schaffe ich es jetzt diese werte in g (m/s^-2) umzuwandeln?

Das steht im Datenblatt auf Seite 21.

von Finn S. (cargo)


Lesenswert?

Vielen Dank schon mal für die schnelle Antwort.

Allerdings hilft mir das nicht wirklich weiter.
Wie gesagt, habe kaum Vorwissen.

Wenn ich in hTerm den Befehl "s7002s7106p" an den BMA020 sende bekomme 
ich z.B "81 03 81 FC 81 C1" zurück.
Im Binärsystem:

00111000 00110001 00100000 00110000 00110011 00100000 00111000 00110001 
00100000 01000110 01000011 00100000 00111000 00110001 00100000 01000011 
00110001 00100000 00001101 00001010


Ich kann weder aus der Anleitung, noch aus dem Datenbatt jetzt erkennen 
welche Bits jetzt die Messwerte enthalten.

http://www.elv-downloads.de/Assets/Produkte/9/915/91521/Downloads/91521_bma020_data.pdf

Auf Seite 9 des Datenblatts findet sich das Messwert- und Konfigurations 
-Register des BMA020.
Für mich leider völlig unverständlich.

Nochmal vielen Dank im Voraus.

LG

von Cyblord -. (cyblord)


Lesenswert?

Es ist die grundlegende Arbeit mit einem Sensor sich erstmal damit 
auseinanderzusetzen wie die Messwerte codiert und dargestellt werden. 
Dazu besitzt ein Sensor meist Speicherbereiche, also Register, welche 
sich lesen und oft auch schreiben lassen. Dazu spezielle Befehle die 
dazu veranlassen etwas zu tun.
Das steht alles im Datenblatt. Ja man muss ein Datenblatt lesen können 
um mit so einem Sensor zu arbeiten. Lies es und versuche es zu 
verstehen. Wenn dazu konkrete Fragen auftauchen, stelle zitieren und 
hier die Frage stellen.

> Ich kann weder aus der Anleitung, noch aus dem Datenbatt jetzt erkennen
> welche Bits jetzt die Messwerte enthalten.
Dazu gibts doch die MemoryMap dort stehen alle Daten und wie sie im 
Speicher organisiert sind. Du liest einen Speicherbereich aus und hast 
diese Daten.

Was Bits, Bytes und Words sind ist dir klar? Binärdarstellung von 
Zahlen? Kannst du Englisch? Weißt du was ein "Register" ist? Ich seh das 
Problem nicht.

gruß cyblord

von PittyJ (Gast)


Lesenswert?

Die Umrechnung nahc binär ist schon mal falsch.
Man darf die Umrechnung ja nicht von den ASCII-Werte nehmen, sondern von 
der Hex-Repräsentation

81 03 81 FC 81 C1

ist (mal schnell im Kopf)
10000001 00000011 10000001 11111100 10000001 11000001

Dann wohl jeweils 2 Bytes zusammen und * 0.004g multiplizieren.

von Udo S. (urschmitt)


Lesenswert?

Finn S. schrieb:
> Ich muss im Physik Lk eine Facharbeit schreiben. Das Thema wurde vom
> Lehrer gegeben, und ist in meinem Fall der Beschleunigungssensor.
> Es ist das Modell von Elv, und auch das I2C Interface von denen.

Wie kommst du an die Facharbeit wenn du keine Ahnung von 
Softwareentwicklung hast?
Der Lehrer kann das wohl kaum voraussetzen. Vieleicht erwartet er ja nur 
daß du Messreihen aufzeichnest und die dann auf dem Papier oder in einem 
Excel Sheet umrechnest, oder ist/war er der Meinung daß du ein Crack in 
Bezug auf Programmierung bist?

von Finn S. (cargo)


Lesenswert?

Udo Schmitt schrieb:
> Finn S. schrieb:
>> Ich muss im Physik Lk eine Facharbeit schreiben. Das Thema wurde vom
>> Lehrer gegeben, und ist in meinem Fall der Beschleunigungssensor.
>> Es ist das Modell von Elv, und auch das I2C Interface von denen.
>
> Wie kommst du an die Facharbeit wenn du keine Ahnung von
> Softwareentwicklung hast?
> Der Lehrer kann das wohl kaum voraussetzen. Vieleicht erwartet er ja nur
> daß du Messreihen aufzeichnest und die dann auf dem Papier oder in einem
> Excel Sheet umrechnest, oder ist/war er der Meinung daß du ein Crack in
> Bezug auf Programmierung bist?


Nein, genau wie du sagst, in Excel umrechnen reicht total.

PittyJ schrieb:
> Die Umrechnung nahc binär ist schon mal falsch.
> Man darf die Umrechnung ja nicht von den ASCII-Werte nehmen, sondern von
> der Hex-Repräsentation
>
> 81 03 81 FC 81 C1
>
> ist (mal schnell im Kopf)
> 10000001 00000011 10000001 11111100 10000001 11000001
>
> Dann wohl jeweils 2 Bytes zusammen und * 0.004g multiplizieren.


Okay. Das hilft mir schon mal sehr weiter.
Die Binär Zahlen hatte ich direkt aus hTerm, jetzt weiß ich wie man das 
richtig in Binär umrechnet.
2 bytes zusammen nehmen? Addieren? Weclhe jeweils?
Die ganzen Bytes?, denn im Datenblatt (Seite 9) sind in der Tabelle ja 
jeweils Bit 6 und 7 bei 02h, 04h, und 06h den acceleration Daten 
zugeordnet.

Kann mir einer ganz simpel sagen was 02h, 04h und 06h bedeutet?
Sind das die Bytes, von vorne durchnummeriert?


Habe jetzt einige Testwerte erhalten, während ich den Sensor nicht 
bewegt habe.
Byte 2,4,6 ändern sich nicht. Byte 1,3,5 wechseln zwischen "81", "41" 
und "C1".
Hilft das? In Byte 1,3,5 müssten ja eigentlich nur Bit 6,7 von Bedeutung 
für die Messdaten sein.

cyblord ---- schrieb:
> Es ist die grundlegende Arbeit mit einem Sensor sich erstmal damit
> auseinanderzusetzen wie die Messwerte codiert und dargestellt werden.
> Dazu besitzt ein Sensor meist Speicherbereiche, also Register, welche
> sich lesen und oft auch schreiben lassen. Dazu spezielle Befehle die
> dazu veranlassen etwas zu tun.
> Das steht alles im Datenblatt. Ja man muss ein Datenblatt lesen können
> um mit so einem Sensor zu arbeiten. Lies es und versuche es zu
> verstehen. Wenn dazu konkrete Fragen auftauchen, stelle zitieren und
> hier die Frage stellen.
>
>> Ich kann weder aus der Anleitung, noch aus dem Datenbatt jetzt erkennen
>> welche Bits jetzt die Messwerte enthalten.
> Dazu gibts doch die MemoryMap dort stehen alle Daten und wie sie im
> Speicher organisiert sind. Du liest einen Speicherbereich aus und hast
> diese Daten.
>
> Was Bits, Bytes und Words sind ist dir klar? Binärdarstellung von
> Zahlen? Kannst du Englisch? Weißt du was ein "Register" ist? Ich seh das
> Problem nicht.
>
> gruß cyblord

Okay, konkrete Fragen zu stellen habe ich jetzt versucht.
Was Bits und Bytes sind weiß ich. Nur nicht welche konkreten Bits oder 
Bytes jetzt meine Daten enthalten. Das kann ich leider auch nicht aus 
dem Datenblatt schließen.

von void (Gast)


Lesenswert?

Finn S. schrieb:
> Kann mir einer ganz simpel sagen was 02h, 04h und 06h bedeutet?
> Sind das die Bytes, von vorne durchnummeriert?

Ja, das sind die Register Adressen in hexadezimaler Schreibweise. Anhand 
dieser Register Adressen kannst du die Bedeutung der Bytes in Figure 1 
auf Seite 9 erfahren.

> 2 bytes zusammen nehmen? Addieren? Weclhe jeweils?
> Die ganzen Bytes?, denn im Datenblatt (Seite 9) sind in der Tabelle ja
> jeweils Bit 6 und 7 bei 02h, 04h, und 06h den acceleration Daten
> zugeordnet.

Byte 03h enthält die 8 höherwertigen Bits des Beschleunigung in x 
Richtung (acc_x<9:2>).
Byte 02h enthält die 2 niederwertigen Bits der Beschleunigung in x 
Richtung (acc_x<1:0)
an den Bit-Positionen 6 und 7.

Ein Beispiel mit deinen Messwerten:

  81       03
10000001 00000011
 Byte 2   Byte 3

Weil Byte 3 die höherwertigen Bits (MSB) enthält wird Byte 3 vor Byte 2 
getauscht.

  03       81
00000011 10000001
 Byte 3   Byte 2

Jetzt werden die Bits 0 bis 5 in Byte 2 entfernt, weil nur Bit 6 und 7 
eine Information über die Beschleunigung enthält.

00000011 10
 Byte 3   Byte 2

Der Wert von acc_x ist also "00000011 10". Das ist die Darstellung des 
Wertes "14" im Zweiterkomplement.

acc_x = 14

Jetzt nurnoch acc_x mit 0.004g multiplizieren wie PittyJ schrieb und 
fertig.
Dein Sensor liegt vermutlich gerade unbewegt auf dem Tisch, denn der 
Beschleunigungs-Wert in X Richtung ist ziemlich klein...

> Byte 1,3,5 wechseln zwischen "81", "41" und "C1".
> Hilft das? In Byte 1,3,5 müssten ja eigentlich nur Bit 6,7 von Bedeutung
> für die Messdaten sein.

Das hilft. Wie du siehst ändern sich nur die obersten beiden Bits, also 
Bit 6 und 7. Und nur die sind von Bedeutung für deine Messdaten.
Der Wert "01" hätte also auch vorkommen können, wenn Bits 6 und 7 beide 
"0" sind.

Das unterste Bit (Bit 0) ist übrigens auf "1" um dir anzuzeigen, dass 
gerade jetzt ein neuer Messwert zur Verfügung steht. Du musst ihn nur 
noch umrechnen. Versuch das doch gleich mal selber mit deinen neuen 
Testwerten! ;-)

von Finn S. (cargo)


Lesenswert?

Wow, vielen vielen Dank! Das hilft mir sehr weiter.


Wie du richtig erkannt hast liegt der Sensor auf dem Tisch. ;)
Also müsste für den y-Wert ein ähnlich kleiner Wert rauskommen.

Will auch mal probieren.


  81       FC
10000001 11111100
 Byte 4   Byte 5

Vertauschen:

   FC          81
 11111100   10000001
  Byte 5     Byte 4

Bits 0-5 in Byte 4 entfernen:

11111100     10
 Byte 5    Byte 4

Ergibt :
1111110010

Also:
acc_y = 1010
Umgerechnet also 4.04g.

Irgendetwas stimmt nicht, nur ich sehe den Fehler nicht.

Für z bekomme ich 774, also 3,096g, obwohl es doch eigentlich ca. 1g 
sein müssten. Der gleiche Fehler?

Danke für eure Hilfe, ihr rettet mich.

von Daniel H. (Firma: keine) (commander)


Lesenswert?

Du vergisst, dass der Beschleunigungssensor auch negative Werte messen 
kann. Sobald dein Beschleunigungswert mit einem 1-Bit beginnt ist das 
ein Hinweis, dass ein negative Beschleunigung gemessen wurde und im 
Zweierkomplement dargestellt wird.

Also erstmal die negative Zahl für y in eine positive Umwandeln:
1111110010 = -(0000001101 + 1) = -0000001110

Das entspricht dem Wert -14.

Diesen Wert musst du jetzt mit 0,004 multiplizieren. Deine 
Beschleunigung ist somit -0,056g.

Das gleiche für z.

774 = 1100000110.

1100000110= -(0011111001 + 1) = -0011111010

Das entspricht dem Wert 250.

Diesen Wert wiederum mit 0,004 multiplizieren. Deine Beschleunigung in 
z-Richtung ist 1g. Und oh Wunder, das entspricht genau der 
Erdbeschleunigung, dein Beschleunigungsmesser steht als in x- und 
y-Richtung unbewegt still auf dem Tisch mit der Unterseite zum Boden.

Gruß
Daniel

von void (Gast)


Lesenswert?

Finn S. schrieb:
> Ergibt :
> 1111110010
> Also:
> acc_y = 1010

Ganz knapp daneben. Du hast einen Fehler bei der Umrechnung von 
negativen Zahlen im Zweierkomplement gemacht. Die Umrechnung negativer 
Zahĺen im Zweierkomplement von Hand ist übrigens hier gut beschrieben.
http://de.wikipedia.org/wiki/Zweierkomplement

1111110010 ist eine negative Zahl (weil das Bit ganz links "1" ist)
Nach der Umrechnung des Zweierkomplements ergibt sich
acc_y = -13      falls ich mich nicht verrechnet habe.
Das sind dann also
acc_y = -0.052g

Schau mal auf Seite 21 im Datenblatt. Da ist eine Tabelle mit ein paar 
umgerechneten Beispielwerten. Wenn du irgendwo mehr als +/- 2g 
rausbekommst ist definitiv etwas falsch.

> Für z bekomme ich 774, also 3,096g, obwohl es doch
> eigentlich ca. 1g sein müssten. Der gleiche Fehler?

Der gleiche Fehler;
acc_z = -0.992g
Auf deinem Schreibtisch herscht Gravitation nach unten!

von gaspS (Gast)


Lesenswert?

Finn S. schrieb:
> Ich muss im Physik Lk eine Facharbeit schreiben.

Finn S. schrieb:
>Bei mir scheitert es aber schon beim auslesen der Messdaten.

Finn S. schrieb:
> Nein, genau wie du sagst, in Excel umrechnen reicht total.

Bei der ganzen Hilfe aus dem Internet hört sich das ziemlich bitter an.
10K wären meiner Meinung nach schon zu viel.

von global (Gast)


Lesenswert?

void schrieb:
> 1111110010 ist eine negative Zahl (weil das Bit ganz links "1" ist)
> Nach der Umrechnung des Zweierkomplements ergibt sich
> acc_y = -13      falls ich mich nicht verrechnet habe.

Du hast dich verrechnet.
1111111111 ist -1 und nicht -0

von Finn S. (cargo)


Lesenswert?

Ach das Zweierkomplement habe ich ganz vergessen.
Jetzt ist es auch bei mir richtig. :)

Ich habe mittlerweile mir eine Excel Maske gemacht, in die ich die 
Messdaten nur noch rein kopieren muss, um die Beschleunigung in g und 
den zugehörigen Graphen zu bekommen.
Das klappt wunderbar, und ich kann endlich meine Versuche machen.

Ohne eure einfachen Erklärungen wäre ich echt aufgeschmissen gewesen.
Danke ein letztes mal!
Foren sind etwas tolles.



gaspS schrieb:
> Finn S. schrieb:
>> Ich muss im Physik Lk eine Facharbeit schreiben.
>
> Finn S. schrieb:
>>Bei mir scheitert es aber schon beim auslesen der Messdaten.
>
> Finn S. schrieb:
>> Nein, genau wie du sagst, in Excel umrechnen reicht total.
>
> Bei der ganzen Hilfe aus dem Internet hört sich das ziemlich bitter an.
> 10K wären meiner Meinung nach schon zu viel.


Bin mir nicht ganz sicher was du mir sagen willst.?

von Finn S. (cargo)


Angehängte Dateien:

Lesenswert?

Hallo.

Nachdem meine Versuche nun wunderbar funktioniert haben, habe ich noch 
eine Frage zur Interpretation.
Ich weiß, das hier ist kein Physik Forum, aber vielleicht gibt es ja 
doch jemanden der mir helfen kann.


Für den Versuch durchlief der Sensor eine harmonische Schwingung.
Das Sensor Modul auf dem Steckbrett wurde auf einer Schaukel befestigt, 
welche an zwei ca. 1,5 Meter langen Seilen aufgehängt ist.

Der Zeitabstand zwischen den Messwerten beträgt 0,1 Sekunden.


Die Beschleunigung in z-Richtung beschreibt eine Sinus Kurve um die y= 
-1g Achse.
Jetzt bin ich ein wenig verwirrt wie ich das interpretieren soll.
Verändert sich nur der Wert der Beschleunigung, nicht aber die Richtung?

Oder muss ich 1g dazu addieren wegen des Ortsfaktors?


Sehe ich das richtig, dass an den Amplituden der Sinus Kurve auch die 
Schaukel bei der maximalen Auslenkung war?

Ich habe mal ein Bild vom Graphen, und die Excel Datei angehangen.


Ich bin für jede Art von Hilfe dankbar!
Ich muss morgen abgeben, also wärs super wenn mir jemand kurz helfen 
könnte. :)

LG
Finn

von Gerald M. (gerald_m17)


Lesenswert?

Ich kann dir leider nicht ganz folgen was deine Frage ist. Mir ist auch 
dein Versuchsaufbau nicht ganz klar. Ist der Sensor immer senkrecht?
Du hast folgende Kräfte:
Erdbeschleunigung
Fliehkraft

Erdbeschleunigung zeigt immer nach unten ( ob +g oder -g kommt auf die 
Lage der z-achse an.)
Die Fliehkraft ist immer senkrecht zur Schaukel.

Ich weiß jetzt nicht wie schnell die Schaukel geschaukelt hat (Stichwort 
achsenbeschriftung), aber ich denke der Sensor lag hier nicht immer 
waagerecht, weshalb er einfach sinusförmig gekippt wurde. Eventuell in 
x-richtung, diese müsste dann auch sinusförmig um den Nullpunkt 
verlaufen. Das Quadrat beider Kurven zusammen sollte an jedem punkt 1 
ergeben.
Wenn du mit Amplitude das maximum der Kurve meinst, das würde ich am 
Tiefpunkt der Schaukel ansetzen, da dort g maximal is (also 9,81) und 
die fliehkraft ( höchste geschwindigkeit) ebenfalls. Wenn g negativ ist, 
sind es entsprechend die minima

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.