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. :)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.