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.
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.
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°°°
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°°°
>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?
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. :)
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