Forum: Mikrocontroller und Digitale Elektronik Beschleunigungssensor BMA020 (komische Werte auslesen)


von Kai (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Forum,

ich bin Kai, kann mir bitte jemand hilfen? Ich kaufe einen 
Beschleunigungssensor BMA020 von ELV und die Kommunikation mit USB-I2C 
Interface funktioniert. Ich glaubte, die Umwandlung des 
Zweierkomplements habe ich auch richtig gebaut.

Aber nachdem Makro erhalte ich einige sehr komische Werte, trotzdem habe 
ich schon versuchte, den Sensor und USB-I2C wieder „reset“ zu machen.

Schau mal, ich lasse Sensor ganze ruhig sein ohne die geringste 
Bewegung. Durch die Hilfe des Hterm lese ich 6 Bytes 
Beschleunigungswerte ab Adresse 0x02h (0x02h - 0x07h) aus.

1. Frage: Was bedeutet Acc_x (02h,7-6;03h,7-0)?
Zum Beispiel, hier lesen wir eine Date aus: 81 3F 81 08 01 0F.
Dann ist Acc_x: 01-0011 1111 oder 00 1111 11-01?
Ich bin der Meinung, 01 0011 1111 ist richtig.
xD,,, nicht wahl?

2.Frage: Wenn ich richtig bin, dann glaubte ich, die eingelesene Werte 
(Abbildung 1) schwankt ziemlich komisch.

Die MSB Bits sind gut, schwankt echt stabil. Aber die LSB(02h,04h und 
06h) schwankt immer zwischen 01,41,81 und C1 in einer kurzen Zeit (ca. 
pro 1,12ms wird eine Date von 6 Bytes ausgelesen).

Auf der Seite 21 vom Datenblatt rechne ich die Werte entsprechend +-2g. 
Von 01 und 41 nach 81 oder C1, oder von 81 nach C1 bedeuten die 
eingelesene Werte ziemlich unterschied.

Abbildung 2 zeiget das Signal von der X-Achse mit LSB und MSB in 10 
Sekunde.(0-7,5 ohne Bewegung, 7,5-10 mit Schwingung)
Abbildung 3 zeiget das nur mit MSB.

Meine Meinung ist, ob ich noch einige Interput vom Sensor nicht richtig 
gebe oder meiner Sensor eigentlich schon kaputt ist.

oder wie ein Kolleger saget, die beiden LSB absolut sinnlos und es daher 
genügt, die Werte als 8bit auszulesen.

Ich freue mich darauf, jemand mir für diese Situlation zu erklären. 
Vielen vielen Dank.

von Jens G. (jensig)


Lesenswert?

Diese Sensoren haben oft ziemlich starkes Rauschen in den LSB's. Diese 
Werte kann man daher meistens nicht pur nehmen, sondern muß die noch 
tiefpaßfiltern, bzw. Mittelwerte bilden.

Das Ding hat ein Rauschen von 0.5mg/√Hz, Sensitivity von 256LSB/g  (beim 
2g-Typ), und bis zu 1.5kHz Bandbreite.

Macht 20mg@1500Hz, macht rund 5LSB@1500Hz (RMS), oder rund 15LSB@1500Hz 
(Peak-Peak). Das das aber Rauschen ist, dürfte es noch deutlich größere 
Ausreiser geben.
Dann kommen noch natürliche Beschleunigungen dazu, wie die Schwingungen 
der Baßbox, oder der gegen die Decke klopfende Untermieter ;-)
Man hat also einen deutlichen Rauschteppisch in seinen Meßwerten, wenn 
man nicht filtert/bandbreitenbegrenzt.

Ansonsten denke ich aber, daß Du die Werte wohl generell falsch 
ausliest, oder falsch verarbeitest, denn die Reihe 01,41,81,C1 zeigen 
eine ziemlich eindeutige Korrelation, nämlich eine Diff von 40.

von Jens G. (jensig)


Lesenswert?

Bei den Bytes 02/04/06 werden ja nur die beiden obersten Bits als LSB 
des Wertes benutzt. Du scheinst die also wohl pur verwerten zu wollen.. 
Du mußt diese Bytes um 6 Digits nach rechts verschieben, dann kommen 
sinnvolle Werte (00,01,10,11)für die beiden LSB-Bits raus.
Bit 0 der Bytes 02/04/06 stellt dagegen nur ein Statusbit dar, und 
stellt keinen Teil des eigentlichen Wertes dar.
 Einfach mal die MemoryMap auf Seite 9 anschauen, was Du wohl nicht 
getan hast.

von Kai (Gast)


Lesenswert?

Hallo, :)

Ich bedanke mich für Ihre Erklärung. Eigentlich habe ich verstanden und 
nehme auch nur die beiden obersten Bits von LSB.

Ich glaube,wenn ich nicht falsch verarbeitet,dann zeigen die Reihe 
01,41,81,C1 von LSB auch nicht sinnlos. Denn 0001 bedeutet new_data_x. 
0, 4, 8, C sind 0000, 0100, 1000, 1100. Die sind die sinnvolle 
Werte(00,01,10,11) für die beiden obersten LSB-Bits.

Ja, aber natürlich gibt mein Sensor immer nur 01,41,81,C1 von LSB aus. 
Wenn Sie oder andere Kollegen verschiedene Werte erhalten können, dann 
verarbeitet ich unbedingt falsch.

Also, wie Ihre Erklärung habe ich vergessen, Rauschen zu überlegen. Dann 
werde ich weiter eine entsrechende Filtern bilden.

Kann jemand mir noch mal zeigen, wie ist Ihre Werte von LSB. sind die 
Werte auch nur 01,41,81,C1 oder gibt es verschiedene Werte? Vielen Dank.

Also jensig, das ist sehr nett von Ihnen, so deutlich für mich zu 
erklären. Haha, dank sehr°°°

von Kai (Gast)


Lesenswert?

Jens G. schrieb:
> Bei den Bytes 02/04/06 werden ja nur die beiden obersten Bits als
> LSB
> des Wertes benutzt. Du scheinst die also wohl pur verwerten zu wollen..
> Du mußt diese Bytes um 6 Digits nach rechts verschieben, dann kommen
> sinnvolle Werte (00,01,10,11)für die beiden LSB-Bits raus.
> Bit 0 der Bytes 02/04/06 stellt dagegen nur ein Statusbit dar, und
> stellt keinen Teil des eigentlichen Wertes dar.
>  Einfach mal die MemoryMap auf Seite 9 anschauen, was Du wohl nicht
> getan hast.

Hallo, :)

Ich bedanke mich für Ihre Erklärung. Eigentlich habe ich verstanden und
nehme auch nur die beiden obersten Bits von LSB.

Ich glaube,wenn ich nicht falsch verarbeitet,dann zeigen die Reihe
01,41,81,C1 von LSB auch nicht sinnlos. Denn 0001 bedeutet new_data_x.
0, 4, 8, C sind 0000, 0100, 1000, 1100. Die sind die sinnvolle
Werte(00,01,10,11) für die beiden obersten LSB-Bits.

Ja, aber natürlich gibt mein Sensor immer nur 01,41,81,C1 von LSB aus.
Wenn Sie oder andere Kollegen verschiedene Werte erhalten können, dann
verarbeitet ich unbedingt falsch.

Also, wie Ihre Erklärung habe ich vergessen, Rauschen zu überlegen. Dann
werde ich weiter eine entsrechende Filtern bilden.

Kann jemand mir noch mal zeigen, wie ist Ihre Werte von LSB. sind die
Werte auch nur 01,41,81,C1 oder gibt es verschiedene Werte? Vielen Dank.

Also jensig, das ist sehr nett von Ihnen, so deutlich für mich zu
erklären. Haha, dank sehr°°°

von Jens G. (jensig)


Lesenswert?

>0, 4, 8, C sind 0000, 0100, 1000, 1100. Die sind die sinnvolle
>Werte(00,01,10,11) für die beiden obersten LSB-Bits.

Ja. 0, 4, 8, C sind 0000, 0100, 1000, 1100. Das sind zwar die obersten 
Bits in Byte 02h (Beispiel), aber es sind die untersten LSB des 
Meßwertes. Schließlich steht in der MemoryMap bei Byte02h<7:6> der 
Inhalt acc_x<1:0>.
Wenn in den Bytes 03h:02h die Werte 0x3FC1 stehen (0011 1111 1100 0001), 
dann schneidet man einfach die letzten 6bits weg, und man hat acc_x = 00 
1111 1111 = 0xFF - also ein komplett volles Byte, was bei dem 2g-Sensor 
fast exact 1g enspricht (256LSB/g). Was will man mehr?

von Kai (Gast)


Lesenswert?

Jens G. schrieb:
>>0, 4, 8, C sind 0000, 0100, 1000, 1100. Die sind die sinnvolle
>>Werte(00,01,10,11) für die beiden obersten LSB-Bits.
>
> Ja. 0, 4, 8, C sind 0000, 0100, 1000, 1100. Das sind zwar die obersten
> Bits in Byte 02h (Beispiel), aber es sind die untersten LSB des
> Meßwertes. Schließlich steht in der MemoryMap bei Byte02h<7:6> der
> Inhalt acc_x<1:0>.
> Wenn in den Bytes 03h:02h die Werte 0x3FC1 stehen (0011 1111 1100 0001),
> dann schneidet man einfach die letzten 6bits weg, und man hat acc_x = 00
> 1111 1111 = 0xFF - also ein komplett volles Byte, was bei dem 2g-Sensor
> fast exact 1g enspricht (256LSB/g). Was will man mehr?

also!!!!! Ich habe echt falsch verstanden!!! Sie sind ziemlich richtig.

Vorher glaubte ich, 02h ist C1, 03h ist 3F (Beispiel), es bedeutet die 
Werte von acc_x = 0xC13F. C1 ist 11 (weg die letzten 6bits). Danach 
erhalten wir 11 0011 1111.

Deshalb glaubte ich sehr stark Schwingung, wenn die 02h-Werte zwischen 
01,41,81,C1 miteinander verändern.

Gerade habe ich nochmal überprüfung. Ihre Meinung sind echt richtig!!! 
Haha, ich will nicht mehr, es ist genug. vielen Dank für Ihre Hilfe. 
Dann kann ich meine Arbeit weiter machen. :)

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.