Magnetkraft wird falsch gemessen

Hallo,

das Messen der Magnetkraft scheint nicht korrekt zu funktionieren.
Wenn man den Sensor abfragt (z. B. die Stärke im “freien” Raum), so müsste er für Deutschland zwischen 40 und 50 µT zeigen. Der Microbit macht das auch korrekt, der Calliope zeigt stur eine Null. Wirkt man mit einem Magneten ein, so sind die gemessenen Werte auf dem Microbit viel größer als auf dem Calliope mini. Ich verwende Calliope mini Version < 1.3. Das Programm ist:

input.onButtonPressed(Button.A, () => {
basic.showNumber(input.magneticForce(Dimension.Strength))

})

HG Toni

Hallo,

hier weitere Analysen:
Über mbed konnte ich, danke der Vorarbeiten von user882050 bei Hackster zum Auslesen der Register des Sensors Bosch BMX055 via mbed einen Blick auf die innerern Werte werfen.
Es ergibt sich folgendes Bild:
mf
Für eine Achsen müssen zwei Register (low, high) ausgelesen und dann korrekt zusammengesetzt werden. Die gemessenen Werte sind (irgendwie) von der Temperatur des Chips abhängig. Diese wird über einen Widerstand intern gemessen und ebenfalls in zwei Registern (low, high) gespeichert. Dieser Widerstand geht beim Calliope mini in die Berechnung ein, die leider nicht trivial zu sein scheint, wie man im Quelltext ab Zeile 433 sehen kann: https://github.com/calliope-mini/microbit-dal/blob/master/source/drivers/MicroBitCompass-bmx.cpp.

Das mbed-Programm berücksichtigt diese Temperatur nicht, kommt aber in der Zeile data are auf Werte, die deutlich von Null abweichen.

HG Toni

Hm, hast du die Werte mal unter Nepo ausgelesen? Vielleicht kann makecode auch intern nur mit ganzen Zahlen rechnen und es ist eine Summe von Rundungsfehlern?

Hallo, NEPO hat den Magnetsensor gar nicht in der Liste.

Sorry, danke für den Hinweis! :roll_eyes:

So langsam wurschtle ich mich durch den Quellcode. Die vom Calliope-Team verwendete Berechnung ab Zeile 433 wird mehrfach auf Github im anderen Kontext auch verwendet. Interessant daran sind zwei Dinge

  1. Es werden Register (digixyz1 = BMM050_DIG_XYZ1_LSB = 0x6C) abgefragt, die lt. Datenblatt vom Bosch als registriert gekennzeichnet sind. Dazu gab es auch mal eine Anfrage: https://github.com/kriswiner/BMX-055/issues/2.

  2. Es wird auf MS5637_ADDRESS 0x76 Address of altimeter verwiesen. Das Bauelement finde ich auf dem Calliope mini nicht. Ist wohl ein Barometer.

Das alles findet in der dal statt. Nun wäre es interessant herauszubekommen, wie der Datenfluss bis zum Blockbaustein weiter geht. Aber das schaffe ich nicht.

Daher @Jörn: könnt ihr euch des Problems mal annehmen? Man sieht die fehlerhafte Messung sehr schön, wenn man ein Smartphone mit Magnetsensor und den Calli parallel betreibt.

HG Toni

Ich liebe es wenn Du Deine Fragen selbst beantwortest :smiling_face_with_three_hearts:

Tja, wenn sich kein anderer findet: :brain:

So bekommt Joern eine Message: @joern.alraun

1 „Gefällt mir“

an Alle
BOSCH hat meine Anfrage beantwortet.
Auf dem BMX055 sind drei verschiedene Chips verbaut. Der Kompasssensor ist um 90° zu den anderen gedreht.
Für JEDE der Chips gibt es eine eigene
API. Ich hab die Links.
For the accelerometer: https://github.com/BoschSensortec/BMA2x2_driver
For the gyroscope: https://github.com/BoschSensortec/BMG160_driver
For the magnetometer: https://github.com/BoschSensortec/BMM150-Sensor-API
Das was in MakeCode als “STÄRKE” bezeichnet wird - gibt es nicht.
Ich vergleiche gerade die Blöcke in MakeCode zu NEPO für den micro:bit zum Calliope mini zu den wahren physikalischen Werten vom BMX055 - verwirrend
Gruß
BotU
Achtung: ich muss meine Aussage zum Begriff “STÄRKE” im Block Magnetkraft/micro:bit/MakeCode korrigieren !!
Der Wert dafür wird nicht aus dem Sensor gelesen, er wird errechnet. Es ist der Betrag des magnetischen Feldvektors, also ohne Vorzeichen.

Vorsicht, der microbit hat doch den Mag3110 von NXP verbaut. Vielleicht rühren einige Besonderheiten daher.

Ne Michael, hab ihn mir durchgelesen - dachte ich zuerst nämlich auch.

1 „Gefällt mir“