Forum: Mikrocontroller und Digitale Elektronik Beschleunigungssensor (ADXL345) Messwert in m/s^2 umrechnen


von christian S. (Firma: Gast) (vivien)


Lesenswert?

Hallo,

ich habe folgendes problem. Ich habe schon mal gegoogle und bin ich auf 
dieses formel gestoßen

g[m/s^2] = messwert * (messbereich /2^10)

10 wäre dann die Aulösung damit will ich auch arbeiten

und was ist der Messbereich?

Danke

Vivien

von Karl H. (kbuchegg)


Lesenswert?

christian Schmidt schrieb:
> Hallo,
>
> ich habe folgendes problem. Ich habe schon mal gegoogle und bin ich auf
> dieses formel gestoßen
>
> g[m/s^2] = messwert * (messbereich /2^10)
>
> 10 wäre dann die Aulösung damit will ich auch arbeiten
>
> und was ist der Messbereich?

mal logisch überlegen.

Wenn in deinem Datenblatt steht, dass der Sensor bei Vollausschlag 3g 
misst und dir das als die Zahl 1023 mitteilt, was wird dann wohl der 
Messbereich sein?

von christian S. (Firma: Gast) (vivien)


Lesenswert?

Hallo,
Laut Datenblatt wird gesagt dass die Messbereich des ADXL345 so sind:

±2g => 10 Bits => 1024
±4g => 11 Bits => 2048
±8g => 12 Bits => 4096
±16g=> 13 Bits => 65536

bedeutet, bei dieser Formel,dass mein Messbereich 2 ist?

von STK500-Besitzer (Gast)


Lesenswert?

christian Schmidt schrieb:
> und was ist der Messbereich?

Der maximale Wert, den dein Sensor ausgeben kann.

von Karl H. (kbuchegg)


Lesenswert?

christian Schmidt schrieb:
> Hallo,
> Laut Datenblatt wird gesagt dass die Messbereich des ADXL345 so sind:
>
> ±2g => 10 Bits => 1024
> ±4g => 11 Bits => 2048
> ±8g => 12 Bits => 4096
> ±16g=> 13 Bits => 65536
>
> bedeutet, bei dieser Formel,dass mein Messbereich 2 ist?

Nein.
+- 2g,   das ist ein Bereich von 4g


Das ganze ist doch nur eine Umrechnung! Der Sensor liefert dir im Grunde 
Prozent! Nur eben nicht von 0 bis 100, sondern von 0 bis 1023. Aber vom 
Prizip her funktioniert das wie Prozent. Und wie immer bei Prozent 
erhebt sich die Frage: Was ist denn meine Bezugsgröße - was sind 100%? 
Bei dir dann eben 1023
1
   -2g                       0                      +2g
2
   |-------------------------|-----------------------|
3
4
  -19.62                     0                     +19.62
5
   |-------------------------|-----------------------|
6
 
7
   0                        512                     1023
8
   |-------------------------|-----------------------|
9
10
   0%                       50%                     100%
11
   |-------------------------|-----------------------|

du musst nur von einer Skala in die andere Umrechnen, je nachdem welche 
Zahlenwerte dich interessieren. Vom Sensor kriegst du die 0..1023 Skala. 
Und alle anderen sind einfach nur diese Werte anders, in anderen 
Einheiten  ausgedrückt.

: Wiederhergestellt durch User
von christian S. (Firma: Gast) (vivien)


Lesenswert?

Karl Heinz Buchegger schrieb:
> -2g                       0                      +2g
>    |-------------------------|-----------------------|
>
>   -19.62                     0                     +19.62
>    |-------------------------|-----------------------|
>
>    0                        512                     1023
>    |-------------------------|-----------------------|
>
>    0%                       50%                     100%
>    |-------------------------|-----------------------|

ok wenn ich gut vestanden habe, bei einer auflösung von -+16g liegt den 
Bereich
bei
-16g                       0                      +16g
>    |-------------------------|-----------------------|
>
>    0                                              65535
>    |-------------------------|-----------------------|
>
>    0%                       50%                     100%
>    |-------------------------|-----------------------|

von spess53 (Gast)


Lesenswert?

Hi

>und was ist der Messbereich?

Datenblatt gelesen? Dort steht, das der Sensor +-2/4/8 oder 16g messen 
kann.

>g[m/s^2] = messwert * (messbereich /2^10)

Trifft nur für die 10-Bit-Auflösung zu. Lt. DB kann der aber je nach 
Messbereich auch 11, 12 und 13 Bit.

MfG Spess

von christian S. (Firma: Gast) (vivien)


Lesenswert?

spess53 schrieb:
> Trifft nur für die 10-Bit-Auflösung zu. Lt. DB kann der aber je nach
> Messbereich auch 11, 12 und 13 Bit.

ja ich weiße das heißt wenn man die anderen betachten soll, zum beispiel 
eine Auflösung von 13 Bit statt 2^10 hat man 2^13

von Karl H. (kbuchegg)


Lesenswert?

christian Schmidt schrieb:
> Karl Heinz Buchegger schrieb:

>>
1
>> -2g                       0                      +2g
2
>>    |-------------------------|-----------------------|
3
>>
4
>>   -19.62                     0                     +19.62
5
>>    |-------------------------|-----------------------|
6
>>
7
>>    0                        512                     1023
8
>>    |-------------------------|-----------------------|
9
>>
10
>>    0%                       50%                     100%
11
>>    |-------------------------|-----------------------|
12
>>
>
> ok wenn ich gut vestanden habe, bei einer auflösung von -+16g liegt den
> Bereich
> bei
> -16g                       0                      +16g
>>    |-------------------------|-----------------------|
>>
>>    0                                              65535
>>    |-------------------------|-----------------------|
>>
>>    0%                       50%                     100%
>>    |-------------------------|-----------------------|


Die Spannende Frage ist jetzt: wie liefert der Sensor seinen 
eigentlichen Messwert: Als unsigned Zahl zwischen 0 und 65535. Oder als 
vorzeichenbehaftete Zahl zwischen -32768 und +32767.

Auch dazu wieder: Details im Datenblatt.

Aber das Prinzip hast du. Der Rest lässt sich mit Datenblatt bzw. 
einfach mal den Sensor auslesen klären. Wenn der Sensor in Ruhe auf dem 
Tisch liegt, dann misst er 1g nach unten. D.h. du siehst dir an welchen 
Wert der Sensor liefert und schaust einfach mal, wie du daraus die 1g 
kriegst. Es gibt nur 2 Möglichkeiten für die Umrechnung je nach 
Vorzeichen/kein Vorzeichen, aber ich geh jetzt nicht her und such mir 
für dich aus dem Datenblatt raus, ob der Sensor vorzeichenbehaftet oder 
vorzeichzenlos liefert. Die oben angegebene Formel würde auf 
vorzeichenbehaftet hindeuten.

Leg den Sensor auch mal verkehrt rum hin und lass dir den Messwert vom 
Sensor ausgeben. In g-Werten ist das dann das genaue Negative vom ersten 
Versuch.

von spess53 (Gast)


Lesenswert?

Hi

>Die Spannende Frage ist jetzt: wie liefert der Sensor seinen
>eigentlichen Messwert: Als unsigned Zahl zwischen 0 und 65535. Oder als
>vorzeichenbehaftete Zahl zwischen -32768 und +32767.

The output data is twos complement, ....

MfG Spess

von christian S. (Firma: Gast) (vivien)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Die Spannende Frage ist jetzt: wie liefert der Sensor seinen
> eigentlichen Messwert: Als unsigned Zahl zwischen 0 und 65535. Oder als
> vorzeichenbehaftete Zahl zwischen -32768 und +32767.

Ich messe gerade den Sensor und liefert mir folgende werte wenn der 
Sensor in ruhe auf dem Tisch liegt
X = 13
Y = 28
Z = 65521 das heißt der liefert mir werte zwuischen 0 und 65535 also als 
unsigned zahl

danke

von Karl H. (kbuchegg)


Lesenswert?

christian Schmidt schrieb:
> Karl Heinz Buchegger schrieb:
>> Die Spannende Frage ist jetzt: wie liefert der Sensor seinen
>> eigentlichen Messwert: Als unsigned Zahl zwischen 0 und 65535. Oder als
>> vorzeichenbehaftete Zahl zwischen -32768 und +32767.
>
> Ich messe gerade den Sensor und liefert mir folgende werte wenn der
> Sensor in ruhe auf dem Tisch lieget
> X = 13
> Y = 28
> Z = 65521 das heißt de liefert mir wer zwuischen 0 und 65535 also als
> unsigned zahl

Nö. Das heißt es nicht.
Das heißt nur, dass du die Bits in einen unsigned int reingepfercht 
hast. Du hättest die 16 Bit genausogut auch in einen int reinschaufeln 
können, dann würde bei einer Ausgabe, die Vorzeichen berücksichtigt eben 
nicht 65521 stehen, sondern -14

Aber da X und Y praktisch 0 sind und nicht 512 (bei 10 Bit Auflösung), 
wird wohl ein Messwert von 0 auch tatsächlich 0 sein. Und wie spess 
mittlerweile verifiziert hat, liefert der Sensor vorzeichenbehaftete 
Werte.

von spess53 (Gast)


Lesenswert?

Hi

>Z = 65521 das heißt de liefert mir wer zwuischen 0 und 65535

Nein, du interpretierst das als 65535

0xFFFF =  65535  vorzeichenlos
0xFFFF = -32768  vorzeichenbehaftet

MfG Spess

von Karl H. (kbuchegg)


Lesenswert?

spess53 schrieb:
> Hi
>
>>Z = 65521 das heißt de liefert mir wer zwuischen 0 und 65535
>
> Nein, du interpretierst das als 65535
>
> 0xFFFF =  65535  vorzeichenlos
> 0xFFFF = -32768  vorzeichenbehaftet
>

twos complement
1
0xFFFF    -1
2
0xFFFE    -2
3
0xFFFD    -3
4
...

von spess53 (Gast)


Lesenswert?

Hi

>twos complement

>0xFFFF    -1
>0xFFFE    -2
>0xFFFD    -3
>...

Ups. Hast natürlich Recht.

MfG Spess

von christian S. (Firma: Gast) (vivien)


Lesenswert?

wenn der sensor mir in der ruhelage den Wert bei Z = 65521 liefert
heißt das 1g = 65521 in dem Fall, weil ich unsigned angewendet habe?

von MirkoB (Gast)


Lesenswert?

christian Schmidt schrieb:

> Ich messe gerade den Sensor und liefert mir folgende werte wenn der
> Sensor in ruhe auf dem Tisch lieget
> X = 13
> Y = 28
> Z = 65521 das heißt de liefert mir wer zwuischen 0 und 65535 also als
> unsigned zahl

Auf welchem Planeten bist Du zur Zeit?

Wenn ich richtig gerechnet habe, sollte da was zwischen 28672 (-1g) oder 
34816 (+1g) rauskommen. (2048 = 1g)

Mirko

von Karl H. (kbuchegg)


Lesenswert?

christian Schmidt schrieb:
> wenn der sensor mir in der ruhelage den Wert bei Z = 65521 liefert
> heißt das 1g = 65521 in dem Fall, weil ich unsigned angewendet habe?

Bei welcher Messbereichseinstellung?

Kann natürlich auch ein Programmfehler sein.
Dreh den Sensor mal auf den Kopf, welche Werte kriegst du dann? Dreh ihn 
um 90° auf die Kante, dann müsste sich das Messergebnis in die X-Achse 
verlagern.

Verlgichen mit den Werten in der X-Achse sind mir diese -15 einfach zu 
klein. Das ist ca. in der selben Größenordnung. D.h. dein Sensor würde 
jetzt in allen AChsen eine 0 liefern. Das ist aber eigentlich nicht 
möglich, denn auf ihn wirken ja jetzt tatsächlich 1 g nach unten, die er 
eigentlich anzeigen müsste.

(automatisch korrigieren kann man das nicht. Denn der Sensor weiß ja 
nicht, wo wirklich unten ist, wenn er jetzt 0 anzeigt und du drehst ihn 
auf den Kopf dann müsste er dann eigentlich 2g anzeigen und wenn du ihn 
um 90° drehst dann wirds noch wilder mit seinen Werten. D.h. dein Sensor 
muss jetzt, egal wie er liegt 1g anzeigen. Also schmink dir das ab, dass 
ein Beschleuigungssensor in Ruhe 0 anzeigt. Denn das wird er nicht. Die 
Komponente der Erdbeschleuigung wirst du nur im freien Fall los - dann 
zeigt so ein Sensor wirklich 0 an.
Ergo: da passen die Werte nicht so recht. Aber spiel mal rum - dreh ihn 
und sieh dir an was er anzeigt. Denn: der Sensor hat recht - nicht ich. 
Ich tippe allerdings trotzdem auf einen Bedien-/Programmfehler)

von christian S. (Firma: Gast) (vivien)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Kann natürlich auch ein Programmfehler sein.
> Dreh den Sensor mal auf den Kopf, welche Werte kriegst du dann? Dreh ihn
> um 90° auf die Kante, dann müsste sich das Messergebnis in die X-Achse
> verlagern.

nach 90°
X=16
Y=65284
Z=65510
nach Links
X=65449
Y=13
Z=65503
nach Recht
X=65503
Y=13
Z=65421
das sind die were die ich im moment bei einer Auflösung von 10 Bit +-2g 
bekomme.

Viele Gruß

Vivien

von Karl H. (kbuchegg)


Lesenswert?

christian Schmidt schrieb:
> Karl Heinz Buchegger schrieb:
>> Kann natürlich auch ein Programmfehler sein.
ok

korriger erst mal das signed Problem.
Das nervt, wenn man dauernd das 2-er Komplement händisch auf korrekte 
negative Zahlen umrechnen muss.

von spess53 (Gast)


Lesenswert?

Hi

>das sind die were die ich im moment bei einer Auflösung von 10 Bit +-2g

Passt irgendwie nicht. Die senkrechte Achse sollte einen Wert um +-256 
anzeigen. Die anderen beiden um Null.

MfG Spess

von Karl H. (kbuchegg)


Lesenswert?

Deine Werte sind nicht plausibel

65irgendwas, das sind Werte so rund um -33
Umgerechnet auf g wären das so rund -0.03g

Haut nicht hin. Da hast du noch Fehler im Programm.

von christian S. (Firma: Gast) (vivien)


Lesenswert?

spess53 schrieb:
> Passt irgendwie nicht. Die senkrechte Achse sollte einen Wert um +-256
> anzeigen. Die anderen beiden um Null.

ja hast recht war eben nicht richtig auf 90° gelegt. hahe noch mal 
ausprobiert und bin ich bei
X=16
Y=65286
Z=19

von christian S. (Firma: Gast) (vivien)


Lesenswert?

Karl Heinz Buchegger schrieb:
> 65irgendwas, das sind Werte so rund um -33
> Umgerechnet auf g wären das so rund -0.03g

kannst du mir bite sagen, wie du auf diese Ergebnisse rauskommt? ich 
meine bitte die Rechnevogänge

danke

Vivien.

von Karl H. (kbuchegg)


Lesenswert?

christian Schmidt schrieb:
> spess53 schrieb:
>> Passt irgendwie nicht. Die senkrechte Achse sollte einen Wert um +-256
>> anzeigen. Die anderen beiden um Null.
>
> ja hast recht war eben nicht richtig auf 90° gelegt. hahe noch mal
> ausprobiert und bin ich bei
> X=16
> Y=65286
> Z=19

65286 sind im 2-er Komplement -250

jetzt siehts schon besser aus.

von Karl H. (kbuchegg)


Lesenswert?

christian Schmidt schrieb:
> Karl Heinz Buchegger schrieb:
>> 65irgendwas, das sind Werte so rund um -33
>> Umgerechnet auf g wären das so rund -0.03g
>
> kannst du mir bite sagen, wie du auf diese Ergebnisse rauskommt? ich
> meine bitte die Rechnevogänge


Na aus deiner Formel.

65286 sind als 2-er Komplement ausgedrückt -250

In g sind das dann    -250 * 4 / 1024 = -0.9865 g

(oben hab ich noch falsch mit 2 als Messbereich gerechnet. Da kommen 
also tatsächlich 0.06 raus. Aber mit den -250 ist das recht eindeutig. 
Entweder man rechnet

   -250 * 2 / 1024  = -0.488g

oder man rechnet

  -250 * 4 / 1024  = -0.9865g


Da wir aber wissen, dass wir normalerweise 1g haben (nach unten dann 
eben -1g), kann -0.488 nicht das richtige Ergebnis sein, und bei 
'Messbereich' in der Formel muss 4 eingesetzt werden, wenn der Sensor 
auf +-2 eingestellt ist.

Aber wie gesagt: korrigier erst mal ein deinem Programm die 
entsprechenden unsigned int nach int bzw. die Ausgabe der Werte, damit 
du nicht dauernd im Kopf das 2-er Komplement umrehcnen musst. Das ist 
doch einfach nur lästig.

von spess53 (Gast)


Lesenswert?

Hi

>ja hast recht war eben nicht richtig auf 90° gelegt. hahe noch mal
>ausprobiert und bin ich bei
>X=16
>Y=65286
>Z=19

Passt schon besser mit Y=-250. Mach erst mal die Umrechnung in negative 
Zahlen und dann bestimme den Offset der einzelnen Achsen. Damit kannst 
du dann weiterrechnen.

MfG Spess

von christian S. (Firma: Gast) (vivien)


Lesenswert?

Karl Heinz Buchegger schrieb:
> In g sind das dann    -250 * 4 / 1024 = -0.9865 g

genau das war meine frage am Anfang ich habe eine Auflösung von 10 Bit 
mit -+2g. es tut mir wenn die frage blöd wäre, aber warum hast du dann 4 
benutzt?

danke Vivien

von Karl H. (kbuchegg)


Lesenswert?

christian Schmidt schrieb:
> Karl Heinz Buchegger schrieb:
>> In g sind das dann    -250 * 4 / 1024 = -0.9865 g
>
> genau das war meine frage am Anfang ich habe eine Auflösung von 10 Bit
> umit -+2g. es tut mir wenn die frage blöd wäre, aber warum hast du dann
> 4 benutzt?

Weil bei +-2g Einstellung der Messbereich dann 4g ist. Einfach die 
Differenz vom positivsten Wert (+2g) zum negativsten Wert (-2g). Und da 
sind nun mal 4g Differenz.

(Und ausserdem weil mit 2 das offensichtlich falsche raus kommt.)

von christian S. (Firma: Gast) (vivien)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Weil bei +-2g Einstellung der Messbereich dann 4g ist. Einfach die
> Differenz vom positivsten Wert (+2g) zum negativsten Wert (-2g). Und da
> sind nun mal 4g Differenz

ich bedanke mich für ihre Antworte , jetzt verstehe ich wie man das 
berechnet.

Danke
Vivien

von christian S. (Firma: Gast) (vivien)


Lesenswert?

Karl Heinz Buchegger schrieb:
> 65286 sind als 2-er Komplement ausgedrückt -250

ich habe schon in mein code ändert und erhalte ich negative werte jetzt. 
ich habe auch versuch die Zahlen selbe auf papier umzuwandeln mit dem 
zwei Komplemen aber komme ich nicht auf dein Ergenis. wie kommst du 
bitte drauf?

Gruß

Vivien

von christian S. (Firma: Gast) (vivien)


Lesenswert?

gut,

hab verstanden

danke noch mal

von christian S. (Firma: Gast) (vivien)


Lesenswert?

Hallo Leute,
schönen guten Morgen

ich weiße, dass der Offset bei einer Beschleunigungssenor eine Wichtige 
Parameter für die Paramerieung de Ausgangswerte ist und dass er die 
Abweichung des Ausgangssignales vom idealen Ausgangwert unter Null-g 
Beschleunigung.
Ich möchte gen wissen, wie man die Ausgang Signal in Abhängigkeit des 
gegebene Offset Bereich in Dateblatt ausrechnet. gib es dafür eine 
passen Formel?

Danke

wunsche euch eine schöne ANfangswoche.

von ddf (Gast)


Lesenswert?

> Ich möchte gen wissen, wie man die Ausgang Signal in Abhängigkeit des
> gegebene Offset Bereich in Dateblatt ausrechnet. gib es dafür eine
> passen Formel?

Den Offset musst du selbst durch eine Messung ermitteln. Der steht nicht 
im Datenblatt (da stehen nur die Grenzen innerhalb derer sich der Offset 
befinden kann).

Der Offset wird ermittelt, indem du deinen Sensor mit einer definierten 
Beschleunigung (idealerweise 0g) beaufschlägst. Dann siehst du den 
Offset und kannst ihn später rausrechnen.

Sowas nennt man auch Kalibration.

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.