Zum Hauptinhalt springen

Selbsttest

Was dieses Beispiel zeigt​

Prüfung der X- und Y-Kanäle des Sensors mit dem integrierten Selbsttest des BMM350. Der Sensor erzeugt auf jeweils einer Achse ein internes Feld von etwa 130 µT und misst die Differenz. Ein Kanal besteht den Test, wenn die Differenz mindestens 130 µT beträgt. Der Sketch führt den Test einmal in setup() aus.

Der Beispielcode​

Select Board
selfTest.ino
/**
**************************************************
*
* @file selfTest.ino
*
* @brief Example showing how to run the BMM350's built-in self-test.
* The self-test generates an internal ~130 uT magnetic field on
* the X and Y channels and reports the resulting field
* difference; per the datasheet (section 5.1.6), a channel is
* considered working if its reported value is >= 130 uT.
*
* @link solde.red/333359 : Soldered BMM350 Geomagnetic Sensor breakout
*
* @authors Soldered Electronics
***************************************************/
#include <BMM350-SOLDERED.h>

// Create an instance of the BMM350 sensor
Soldered_BMM350 magSensor;

// Minimum self-test field difference to consider a channel passing,
// per the datasheet's self-test section
const float SELF_TEST_THRESHOLD_UT = 130.0;

void setup()
{
// Initialize serial for output
Serial.begin(115200);
Serial.println("BMM350 Example - Self Test");

// Initialize I2C bus
Wire.begin();

// Check if sensor is connected and initialize it.
// Address is optional, defaults to 0x14 (ADSEL tied low on this breakout)
while (magSensor.begin() != BMM350_OK)
{
Serial.println("Error: BMM350 not connected, check wiring and I2C address!");
delay(1000);
}

Serial.println("BMM350 connected!");

// Run the self-test. The sensor automatically returns to normal mode
// afterwards since begin() already left it there.
struct bmm350_self_test result;
if (magSensor.performSelfTest(&result) == BMM350_OK)
{
Serial.print("X axis field: ");
Serial.print(result.out_ust_x, 2);
Serial.print(" uT -> ");
Serial.println(result.out_ust_x >= SELF_TEST_THRESHOLD_UT ? "PASS" : "FAIL");

Serial.print("Y axis field: ");
Serial.print(result.out_ust_y, 2);
Serial.print(" uT -> ");
Serial.println(result.out_ust_y >= SELF_TEST_THRESHOLD_UT ? "PASS" : "FAIL");
}
else
{
Serial.println("Self-test failed to run.");
}
}

void loop()
{
}

Dieses Beispiel verwendet außerdem Wire, Serial und delay(). Diese gehören zum Arduino-Core und nicht zur BMM350-Bibliothek. delay() hält den Sketch für die angegebene Anzahl Millisekunden an: delay(1000) wartet eine Sekunde zwischen Verbindungsversuchen.

Erwartetes Ergebnis bei 115200 Baud: die beiden Startzeilen, danach zwei Ergebniszeilen, X axis field: und Y axis field:, jeweils mit der Felddifferenz in uT und PASS oder FAIL.

Serial MonitorAutoscrollShow timestampNewline115200 baud
Message (Enter to send message to the board)
BMM350 Example - Self Test
BMM350 connected!
X axis field: 148.37 uT -> PASS
Y axis field: 151.92 uT -> PASS

Kann der Test nicht ausgeführt werden, gibt der Sketch stattdessen Self-test failed to run. aus.

Verwendete Funktionen​

Soldered_BMM350()returns Soldered_BMM350

Konstruktor. Erstellt das Sensorobjekt; bis zum Aufruf von begin() wird nichts an den Sensor gesendet.

ReturnsDas Sensorobjekt.

int8_t begin(uint8_t address = 0x14, TwoWire &wirePort = Wire)returns int8_t

Initialisiert den Sensor über I2C, stellt dann eine Ausgabedatenrate von 100 Hz mit 4-fach-Mittelung ein, aktiviert die X-, Y- und Z-Achse und startet den Normalmodus.

ReturnsBMM350_OK (0) bei Erfolg, andernfalls ein Fehlercode.

Parameter

TypNameBeschreibung
uint8_taddressI2C-Adresse. Standardmäßig 0x14; verwenden Sie 0x15, wenn JP5 umgesetzt wird.
TwoWire &wirePortZu verwendender I2C-Bus. Standardmäßig Wire.
int8_t performSelfTest(struct bmm350_self_test *result)returns int8_t

Führt den integrierten Selbsttest des Sensors auf der X- und Y-Achse aus und speichert das Ergebnis. Die Member out_ust_x und out_ust_y des Ergebnisses enthalten die Felddifferenz der jeweiligen Achse in µT.

ReturnsBMM350_OK (0) bei Erfolg, andernfalls ein Fehlercode.

Parameter

TypNameBeschreibung
struct bmm350_self_test *resultZiel, in dem das Selbsttest-Ergebnis gespeichert wird.

Zusammenfassung​

begin() versetzt den Sensor in den Normalmodus, daher kehrt er nach dem Selbsttest in den Normalmodus zurück, wie der Kommentar im Sketch sagt. Der Sketch vergleicht out_ust_x und out_ust_y mit SELF_TEST_THRESHOLD_UT (130.0) und gibt für jede Achse PASS oder FAIL aus. loop() ist leer: Setzen Sie das Board zurück, um den Test erneut auszuführen.