Diese Bibliothek kommuniziert mit InvensenseMPU-6500 und InvenSense MPU-9250 und MPU-9255 Inertial Measurement Units (IMUs). Diese Bibliothek ist mit Arduino- und CMake-Build-Systemen kompatibel.
Der Invense MPU-6500 ist ein dreiachsiges Gyroskop und ein dreiachsiger Beschleunigungsmesser. Der InvenSense MPU-9250 ist ein System in Package (SiP), das zwei Chips kombiniert: das dreiachsige Gyroskop MPU-6500 und den dreiachsigen Beschleunigungsmesser; und das dreiachsige Magnetometer AK8963. Die MPU-6500 und MPU-9250 unterstützen I2C mit bis zu 400 kHz und SPI-Kommunikation mit bis zu 1 MHz für die Registereinrichtung und 20 MHz für das Datenlesen. Die folgenden auswählbaren Vollausschlagssensorbereiche sind verfügbar:
Gyroskop-Vollbereich | Voller Skalenbereich des Beschleunigungsmessers | Voller Skalenbereich des Magnetometers (nur MPU-9250) |
---|---|---|
+/- 250 Grad/s | +/- 2g | +/- 4800 uT |
+/- 500 Grad/s | +/- 4g | |
+/- 1000 Grad/s | +/- 8g | |
+/- 2000 Grad/s | +/- 16g |
Die IMUs tasten die Gyroskope, Beschleunigungsmesser und Magnetometer mit 16-Bit-Analog-Digital-Wandlern ab. Es verfügt außerdem über programmierbare digitale Filter, eine Präzisionsuhr und einen integrierten Temperatursensor.
Verwenden Sie den Arduino Library Manager, um diese Bibliothek zu installieren oder in Ihren Arduino/libraries-Ordner zu klonen.
Für die MPU-6500 wird diese Bibliothek hinzugefügt als:
# include " mpu6500.h "
Für die MPU-9250 wird diese Bibliothek hinzugefügt als:
# include " mpu9250.h "
Beispielhafte ausführbare Arduino-Dateien befinden sich unter: examples/arduino/ . Teensy 3.x-, 4.x- und LC-Geräte werden zum Testen unter Arduino verwendet und diese Bibliothek sollte mit anderen Arduino-Geräten kompatibel sein.
CMake wird zum Erstellen dieser Bibliothek verwendet, die als Bibliotheksziel mit dem Namen invensense_imu exportiert wird.
Für die MPU-6500 wird diese Bibliothek hinzugefügt als:
# include " mpu6500.h "
Für die MPU-9250 wird diese Bibliothek hinzugefügt als:
# include " mpu9250.h "
Die Bibliothek kann auch eigenständig kompiliert werden, indem die CMake-Methode verwendet wird, bei der ein Build -Verzeichnis erstellt und dann aus diesem Verzeichnis Folgendes ausgegeben wird:
cmake .. -DMCU=MK66FX1M0
make
Dadurch werden die Bibliothek und die ausführbaren Beispieldateien mit den Namen i2c_example , spi_example , drdy_spi_example und wom_example (nur MPU-9250) erstellt. Die ausführbaren Beispielquelldateien befinden sich unter examples/cmake . Beachten Sie, dass der Befehl cmake eine Definition enthält, die den Mikrocontroller angibt, für den der Code kompiliert wird. Dies ist erforderlich, um den Code, die CPU-Frequenz und die Kompilierungs-/Linker-Optionen korrekt zu konfigurieren. Die verfügbaren MCUs sind:
Es ist bekannt, dass diese mit denselben Paketen funktionieren, die auch in Teensy-Produkten verwendet werden. Auch das Wechseln von Paketen funktioniert bekanntermaßen gut, solange es sich nur um einen Paketwechsel handelt.
Die Beispielziele erstellen ausführbare Dateien für die Kommunikation mit dem Sensor über I2C- oder SPI-Kommunikation, unter Verwendung des Data-Ready-Interrupts bzw. unter Verwendung des Wake-on-Motion-Interrupts. Jedes Ziel verfügt außerdem über ein _hex zum Erstellen der Hex-Datei zum Hochladen auf den Mikrocontroller und ein _upload für die Verwendung des Teensy CLI Uploader zum Flashen des Teensy. Bitte beachten Sie, dass Anweisungen zum Einrichten Ihrer Build-Umgebung in unserem Build-Tools-Repo zu finden sind.
Diese Bibliothek befindet sich im Namensraum bfs .
Diese Klasse stellt Methoden zum Lesen und Schreiben in Register dieser Sensoren bereit. Es wird erwartet, dass dies mindestens mit der MPU-6000, MPU-6050, MPU-6500, MPU-9150 und MPU-9250 funktionieren sollte; Allerdings funktioniert es möglicherweise auch für andere Sensoren. Die meisten Benutzer werden wahrscheinlich die folgenden sensorspezifischen Klassen bevorzugen; Dieser Kurs ermöglicht es den Benutzern jedoch möglicherweise, größere Funktionen freizuschalten und sie als Ausgangspunkt für ihre eigenen Sensortreiber zu verwenden.
InvensenseImu() Standardkonstruktor, erfordert den Aufruf der Config -Methode, um den I2C- oder SPI-Bus und die I2C-Adresse oder den SPI-Chip-Auswahlpin einzurichten.
InvensenseImu(TwoWire *i2c, const uint8_t addr) Erstellt ein InvensenseImu-Objekt. Dieser Konstruktor wird für die I2C-Kommunikationsschnittstelle verwendet. Zusammen mit der I2C-Adresse des Sensors wird ein Zeiger auf das I2C-Busobjekt übergeben.
InvensenseImu(SPIClass *bus, uint8_t cs) Erstellt ein InvensenseImu-Objekt. Dieser Konstruktor wird für die SPI-Kommunikationsschnittstelle verwendet. Ein Zeiger auf das SPI-Busobjekt wird zusammen mit dem Chipauswahl-Pin des Sensors übergeben. Jeder Pin, der digitale I/Os unterstützt, kann als Chipauswahl-Pin verwendet werden.
void Config(TwoWire *bus, const uint8_t addr) Dies ist erforderlich, wenn der Standardkonstruktor verwendet wird, und richtet den I2C-Bus und die I2C-Adresse ein.
void Config(SPIClass *spi, const uint8_t cs) Dies ist erforderlich, wenn der Standardkonstruktor verwendet wird, und richtet den SPI-Bus und den Chipauswahl-Pin ein.
void Begin() Initialisiert die Kommunikation mit dem Sensor. Der Kommunikationsbus wird nicht innerhalb dieser Bibliothek initialisiert und muss separat initialisiert werden; Dies verbessert die Kompatibilität mit anderen Sensoren, die sich möglicherweise am selben Bus befinden.
bool WriteRegister(const uint8_t reg, const uint8_t data, const int32_t spi_clock) Schreibt Registerdaten in den Sensor unter Berücksichtigung der Registeradresse und der Daten. Bei Nutzung der SPI-Kommunikation muss die SPI-Taktrate angegeben werden.
bool WriteRegister(const uint8_t reg, const uint8_t data) Überlastung der oben genannten Punkte, wenn I2C-Kommunikation verwendet wird.
bool ReadRegisters(const uint8_t reg, const uint8_t count, const int32_t spi_clock, uint8_t * const data) Liest Registerdaten vom Sensor unter Berücksichtigung der Registeradresse, der Anzahl der zu lesenden Register, des SPI-Takts und eines Zeigers zum Speichern der Daten.
bool ReadRegisters(const uint8_t reg, const uint8_t count, uint8_t * const data) Überlastung der oben genannten Punkte, wenn I2C-Kommunikation verwendet wird.
Dieser Kurs funktioniert mit den IMUs MPU-9250 und MPU-9255.
Mpu9250() Standardkonstruktor, erfordert den Aufruf der Config -Methode, um den I2C- oder SPI-Bus und die I2C-Adresse oder den SPI-Chip-Auswahlpin einzurichten.
Mpu9250(i2c_t3 *bus, I2cAddr addr) Erstellt ein Mpu9250-Objekt. Dieser Konstruktor wird für die I2C-Kommunikationsschnittstelle verwendet. Zusammen mit der I2C-Adresse des Sensors wird ein Zeiger auf das I2C-Busobjekt übergeben. Die Adresse lautet I2C_ADDR_PRIM (0x68), wenn der AD0-Pin geerdet ist, und I2C_ADDR_SEC (0x69), wenn der AD0-Pin hochgezogen ist.
Mpu9250 mpu9250 (&Wire, bfs::Mpu9250::I2C_ADDR_PRIM);
Mpu9250(SPIClass *bus, uint8_t cs) Erstellt ein Mpu9250-Objekt. Dieser Konstruktor wird für die SPI-Kommunikationsschnittstelle verwendet. Ein Zeiger auf das SPI-Busobjekt wird zusammen mit dem Chipauswahl-Pin des Sensors übergeben. Jeder Pin, der digitale I/Os unterstützt, kann als Chipauswahl-Pin verwendet werden.
Mpu9250 mpu9250 (&SPI, 2 );
void Config(TwoWire *bus, const I2cAddr addr) Dies ist erforderlich, wenn der Standardkonstruktor verwendet wird, und richtet den I2C-Bus und die I2C-Adresse ein. Die Adresse lautet I2C_ADDR_PRIM (0x68), wenn der AD0-Pin geerdet ist, und I2C_ADDR_SEC (0x69), wenn der AD0-Pin hochgezogen ist.
void Config(SPIClass *spi, const uint8_t cs) Dies ist erforderlich, wenn der Standardkonstruktor verwendet wird, und richtet den SPI-Bus und den Chipauswahl-Pin ein.
bool Begin() Initialisiert die Kommunikation mit dem Sensor und konfiguriert die Standardsensorbereiche, Abtastraten und Tiefpassfiltereinstellungen. Der Standardbereich des Beschleunigungsmessers beträgt +/- 16 g und der Standardbereich des Kreisels beträgt +/- 2.000 Grad/s. Die Standardabtastrate beträgt 1000 Hz und der Tiefpassfilter ist auf eine Grenzfrequenz von 184 Hz eingestellt. „True“ wird zurückgegeben, wenn die Kommunikation mit dem Sensor hergestellt werden kann und die Konfiguration erfolgreich abgeschlossen wurde, andernfalls wird „False“ zurückgegeben. Der Kommunikationsbus wird nicht innerhalb dieser Bibliothek initialisiert und muss separat initialisiert werden; Dies verbessert die Kompatibilität mit anderen Sensoren, die sich möglicherweise am selben Bus befinden.
Wire.begin();
Wire.setClock( 400000 );
bool status = mpu9250.Begin();
if (!status) {
// ERROR
}
bool EnableDrdyInt() Aktiviert den Datenbereit-Interrupt. Ein 50-us-Interrupt wird am MPU-9250-INT-Pin ausgelöst, wenn die IMU-Daten bereit sind. Dieser Interrupt ist aktiv hoch. Diese Methode gibt true zurück, wenn der Interrupt erfolgreich aktiviert wurde, andernfalls wird false zurückgegeben.
bool status = mpu9250.EnableDrdyInt();
if (!status) {
// ERROR
}
bool DisableDrdyInt() Deaktiviert den Datenbereit-Interrupt. Diese Methode gibt true zurück, wenn der Interrupt erfolgreich deaktiviert wurde, andernfalls wird false zurückgegeben.
bool status = mpu9250.DisableDrdyInt();
if (!status) {
// ERROR
}
bool ConfigAccelRange(const AccelRange range) Legt den vollen Skalenbereich des Beschleunigungsmessers fest. Optionen sind:
Reichweite | Enum-Wert |
---|---|
+/- 2g | ACCEL_RANGE_2G |
+/- 4g | ACCEL_RANGE_4G |
+/- 8g | ACCEL_RANGE_8G |
+/- 16g | ACCEL_RANGE_16G |
Bei erfolgreicher Einstellung des Beschleunigungsmesserbereichs wird „True“ zurückgegeben, andernfalls wird „False“ zurückgegeben. Der Standardbereich beträgt +/-16g.
bool status = mpu9250.ConfigAccelRange(bfs::Mpu9250::ACCEL_RANGE_4G);
if (!status) {
// ERROR
}
AccelRange accel_range() Gibt den aktuellen Beschleunigungsmesserbereich zurück.
AccelRange range = mpu9250.accel_range();
bool ConfigGyroRange(const GyroRange range) Legt den vollen Skalenbereich des Kreisels fest. Optionen sind:
Reichweite | Enum-Wert |
---|---|
+/- 250 Grad/s | GYRO_RANGE_250DPS |
+/- 500 Grad/s | GYRO_RANGE_500DPS |
+/- 1000 Grad/s | GYRO_RANGE_1000DPS |
+/- 2000 Grad/s | GYRO_RANGE_2000DPS |
Bei erfolgreicher Einstellung des Kreiselbereichs wird „True“ zurückgegeben, andernfalls wird „False“ zurückgegeben. Der Standardbereich beträgt +/-2000 Grad/s.
bool status = mpu9250.ConfigGyroRange(bfs::Mpu9250::GYRO_RANGE_1000DPS);
if (!status) {
// ERROR
}
GyroRange gyro_range() Gibt den aktuellen Kreiselbereich zurück.
GyroRange range = mpu9250.gyro_range();
bool ConfigSrd(const uint8_t srd) Legt den Abtastratenteiler des Sensors fest. Der MPU-9250 tastet den Beschleunigungsmesser und den Kreisel mit einer Rate in Hz ab, die durch Folgendes definiert ist:
Eine SRD- Einstellung von 0 bedeutet, dass die MPU-9250 den Beschleunigungsmesser und den Kreisel mit 1000 Hz abtastet. Eine SRD- Einstellung von 4 würde die Abtastrate auf 200 Hz einstellen. Der IMU-Datenbereit-Interrupt ist an die durch den Abtastratenteiler definierte Rate gebunden. Das Magnetometer wird mit 100 Hz abgetastet, um Werte des Abtastratenteilers zu erhalten, die 100 Hz oder mehr entsprechen. Ansonsten wird das Magnetometer mit 8 Hz abgetastet.
Bei erfolgreicher Einstellung des Abtastratenteilers wird „True“ zurückgegeben, andernfalls wird „False“ zurückgegeben. Der Standardwert des Abtastratenteilers ist 0, was zu einer Abtastrate von 1000 Hz führt.
/* Set sample rate divider for 50 Hz */
bool status = mpu9250.sample_rate_divider( 19 );
if (!status) {
// ERROR
}
uint8_t srd() Gibt den aktuellen Wert des Abtastratenteilers zurück.
uint8_t srd = mpu9250.srd();
bool ConfigDlpfBandwidth(const DlpfBandwidth dlpf) Legt die Grenzfrequenz des digitalen Tiefpassfilters für den Beschleunigungsmesser, den Kreisel und den Temperatursensor fest. Verfügbare Bandbreiten sind:
DLPF-Bandbreite | Enum-Wert |
---|---|
184 Hz | DLPF_BANDWIDTH_184HZ |
92 Hz | DLPF_BANDWIDTH_92HZ |
41 Hz | DLPF_BANDWIDTH_41HZ |
20 Hz | DLPF_BANDWIDTH_20HZ |
10 Hz | DLPF_BANDWIDTH_10HZ |
5 Hz | DLPF_BANDWIDTH_5HZ |
Bei erfolgreicher Einstellung der digitalen Tiefpassfilter wird „True“ zurückgegeben, andernfalls wird „False“ zurückgegeben. Die Standardbandbreite beträgt 184 Hz.
bool status = mpu9250.ConfigDlpfBandwidth(bfs::Mpu9250::DLPF_BANDWIDTH_20HZ);
if (!status) {
// ERROR
}
DlpfBandwidth dlpf_bandwidth() Gibt die aktuelle Bandbreiteneinstellung des digitalen Tiefpassfilters zurück.
DlpfBandwidth dlpf = mpu9250.dlpf_bandwidth();
bool EnableWom(int16_t Schwellenwert_mg, const WomRate wom_rate) Aktiviert den Wake-On-Motion-Interrupt. Dadurch wird die MPU-9250 in einen Energiesparmodus versetzt und in einem durch WomRate festgelegten Intervall aktiviert. Wenn der Beschleunigungsmesser eine Bewegung erkennt, die den Schwellenwert „ threshold_mg“ überschreitet, generiert er einen 50us-Impuls vom MPU-9250-Interrupt-Pin. Die folgenden aufgelisteten WOM-Raten werden unterstützt:
WOM-Abtastrate | Enum-Wert |
---|---|
0,24 Hz | WOM_RATE_0_24HZ |
0,49 Hz | WOM_RATE_0_49HZ |
0,98 Hz | WOM_RATE_0_98HZ |
1,95 Hz | WOM_RATE_1_95HZ |
3,91 Hz | WOM_RATE_3_91HZ |
7,81 Hz | WOM_RATE_7_81HZ |
15,63 Hz | WOM_RATE_15_63HZ |
31,25 Hz | WOM_RATE_31_25HZ |
62,50 Hz | WOM_RATE_62_50HZ |
125 Hz | WOM_RATE_125HZ |
250 Hz | WOM_RATE_250HZ |
500 Hz | WOM_RATE_500HZ |
Der Bewegungsschwellenwert wird als Wert zwischen 4 und 1020 mg angegeben, der intern einem einzelnen Byte-Wert von 1-255 zugeordnet wird. Diese Funktion gibt „true“ zurück, wenn „Wake On Motion“ erfolgreich aktiviert wurde, andernfalls wird „false“ zurückgegeben. Bitte sehen Sie sich das wom_i2c -Beispiel an. Das Folgende ist ein Beispiel für die Aktivierung des Wake-on-Motion mit einem Schwellenwert von 40 mg und einem ODR von 31,25 Hz.
imu.EnableWom( 40 , bfs::Mpu9250::WOM_RATE_31_25HZ);
void Reset() Setzt die MPU-9250 zurück.
bool Read() Liest Daten vom MPU-9250 und speichert die Daten im Mpu9250-Objekt. Gibt „true“ zurück, wenn die Daten erfolgreich gelesen wurden, andernfalls wird „false“ zurückgegeben.
/* Read the IMU data */
if (mpu9250.Read()) {
}
bool new_imu_data() Gibt „true“ zurück, wenn neue Daten vom Beschleunigungsmesser und Gyro zurückgegeben wurden.
if (mpu9250.Read()) {
bool new_data = mpu9250. new_imu_data ();
}
bool new_mag_data() Gibt true zurück, wenn neue Daten vom Magnetometer zurückgegeben wurden. Bei MPU-9250-Abtastraten von 100 Hz und höher wird das Magnetometer mit 100 Hz abgetastet. Bei MPU-9250-Abtastraten von weniger als 100 Hz wird das Magnetometer mit 8 Hz abgetastet, daher ist es nicht ungewöhnlich, dass neue IMU-Daten, aber keine neuen Magnetometerdaten empfangen werden.
if (mpu9250.Read()) {
bool new_mag = mpu9250. new_mag_data ();
}
float accel_x_mps2() Gibt die x Beschleunigungsmesserdaten vom Mpu9250-Objekt in Einheiten von m/s/s zurück. Ähnliche Methoden gibt es für die Y- und Z-Achsendaten.
/* Read the IMU data */
if (mpu9250.Read()) {
float ax = mpu9250. accel_x_mps2 ();
float ay = mpu9250. accel_y_mps2 ();
float az = mpu9250. accel_z_mps2 ();
}
float gyro_x_radps() Gibt die x-Gyro-Daten vom Mpu9250-Objekt in Einheiten von rad/s zurück. Ähnliche Methoden gibt es für die Y- und Z-Achsendaten.
/* Read the IMU data */
if (mpu9250.Read()) {
float gx = mpu9250. gyro_x_radps ();
float gy = mpu9250. gyro_y_radps ();
float gz = mpu9250. gyro_z_radps ();
}
float mag_x_ut() Gibt die x-Magnetometerdaten vom Mpu9250-Objekt in Einheiten von uT zurück. Ähnliche Methoden gibt es für die Y- und Z-Achsendaten.
/* Read the IMU data */
if (mpu9250.Read()) {
float hx = mpu9250. mag_x_ut ();
float hy = mpu9250. mag_y_ut ();
float hz = mpu9250. mag_z_ut ();
}
float die_temp_c() Gibt die Chiptemperatur des Sensors in Einheiten von °C zurück.
/* Read the IMU data */
if (mpu9250.Read()) {
float temp = mpu9250. die_temp_c ();
}
Diese Klasse funktioniert mit dem MPU-6500-Sensor.
Mpu6500() Standardkonstruktor, erfordert den Aufruf der Config -Methode, um den I2C- oder SPI-Bus und die I2C-Adresse oder den SPI-Chip-Auswahlpin einzurichten.
Mpu6500(i2c_t3 *bus, I2cAddr addr) Erstellt ein Mpu6500-Objekt. Dieser Konstruktor wird für die I2C-Kommunikationsschnittstelle verwendet. Zusammen mit der I2C-Adresse des Sensors wird ein Zeiger auf das I2C-Busobjekt übergeben. Die Adresse lautet I2C_ADDR_PRIM (0x68), wenn der AD0-Pin geerdet ist, und I2C_ADDR_SEC (0x69), wenn der AD0-Pin hochgezogen ist.
Mpu6500 mpu6500 (&Wire, bfs::Mpu6500::I2C_ADDR_PRIM);
Mpu6500(SPIClass *bus, uint8_t cs) Erstellt ein Mpu6500-Objekt. Dieser Konstruktor wird für die SPI-Kommunikationsschnittstelle verwendet. Ein Zeiger auf das SPI-Busobjekt wird zusammen mit dem Chipauswahl-Pin des Sensors übergeben. Jeder Pin, der digitale I/Os unterstützt, kann als Chipauswahl-Pin verwendet werden.
Mpu6500 mpu6500 (&SPI, 2 );
void Config(TwoWire *bus, const I2cAddr addr) Dies ist erforderlich, wenn der Standardkonstruktor verwendet wird, und richtet den I2C-Bus und die I2C-Adresse ein. Die Adresse lautet I2C_ADDR_PRIM (0x68), wenn der AD0-Pin geerdet ist, und I2C_ADDR_SEC (0x69), wenn der AD0-Pin hochgezogen ist.
void Config(SPIClass *spi, const uint8_t cs) Dies ist erforderlich, wenn der Standardkonstruktor verwendet wird, und richtet den SPI-Bus und den Chipauswahl-Pin ein.
bool Begin() Initialisiert die Kommunikation mit dem Sensor und konfiguriert die Standardsensorbereiche, Abtastraten und Tiefpassfiltereinstellungen. Der Standardbereich des Beschleunigungsmessers beträgt +/- 16 g und der Standardbereich des Kreisels beträgt +/- 2.000 Grad/s. Die Standardabtastrate beträgt 1000 Hz und der Tiefpassfilter ist auf eine Grenzfrequenz von 184 Hz eingestellt. „True“ wird zurückgegeben, wenn die Kommunikation mit dem Sensor hergestellt werden kann und die Konfiguration erfolgreich abgeschlossen wurde, andernfalls wird „False“ zurückgegeben. Der Kommunikationsbus wird nicht innerhalb dieser Bibliothek initialisiert und muss separat initialisiert werden; Dies verbessert die Kompatibilität mit anderen Sensoren, die sich möglicherweise am selben Bus befinden.
Wire.begin();
Wire.setClock( 400000 );
bool status = mpu6500.Begin();
if (!status) {
// ERROR
}
bool EnableDrdyInt() Aktiviert den Datenbereit-Interrupt. Ein 50-us-Interrupt wird am MPU-9250-INT-Pin ausgelöst, wenn die IMU-Daten bereit sind. Dieser Interrupt ist aktiv hoch. Diese Methode gibt true zurück, wenn der Interrupt erfolgreich aktiviert wurde, andernfalls wird false zurückgegeben.
bool status = mpu6500.EnableDrdyInt();
if (!status) {
// ERROR
}
bool DisableDrdyInt() Deaktiviert den Datenbereit-Interrupt. Diese Methode gibt true zurück, wenn der Interrupt erfolgreich deaktiviert wurde, andernfalls wird false zurückgegeben.
bool status = mpu6500.DisableDrdyInt();
if (!status) {
// ERROR
}
bool ConfigAccelRange(const AccelRange range) Legt den vollen Skalenbereich des Beschleunigungsmessers fest. Optionen sind:
Reichweite | Enum-Wert |
---|---|
+/- 2g | ACCEL_RANGE_2G |
+/- 4g | ACCEL_RANGE_4G |
+/- 8g | ACCEL_RANGE_8G |
+/- 16g | ACCEL_RANGE_16G |
Bei erfolgreicher Einstellung des Beschleunigungsmesserbereichs wird „True“ zurückgegeben, andernfalls wird „False“ zurückgegeben. Der Standardbereich beträgt +/-16g.
bool status = mpu6500.ConfigAccelRange(bfs::Mpu6500::ACCEL_RANGE_4G);
if (!status) {
// ERROR
}
AccelRange accel_range() Gibt den aktuellen Beschleunigungsmesserbereich zurück.
AccelRange range = mpu6500.accel_range();
bool ConfigGyroRange(const GyroRange range) Legt den vollen Skalenbereich des Kreisels fest. Optionen sind:
Reichweite | Enum-Wert |
---|---|
+/- 250 Grad/s | GYRO_RANGE_250DPS |
+/- 500 Grad/s | GYRO_RANGE_500DPS |
+/- 1000 Grad/s | GYRO_RANGE_1000DPS |
+/- 2000 Grad/s | GYRO_RANGE_2000DPS |
Bei erfolgreicher Einstellung des Kreiselbereichs wird „True“ zurückgegeben, andernfalls wird „False“ zurückgegeben. Der Standardbereich beträgt +/-2000 Grad/s.
bool status = mpu6500.ConfigGyroRange(bfs::Mpu6500::GYRO_RANGE_1000DPS);
if (!status) {
// ERROR
}
GyroRange gyro_range() Gibt den aktuellen Kreiselbereich zurück.
GyroRange range = mpu6500.gyro_range();
bool ConfigSrd(const uint8_t srd) Legt den Abtastratenteiler des Sensors fest. Der MPU-9250 tastet den Beschleunigungsmesser und den Kreisel mit einer Rate in Hz ab, die durch Folgendes definiert ist:
Eine SRD- Einstellung von 0 bedeutet, dass die MPU-9250 den Beschleunigungsmesser und den Kreisel mit 1000 Hz abtastet. Eine SRD- Einstellung von 4 würde die Abtastrate auf 200 Hz einstellen. Der IMU-Datenbereit-Interrupt ist an die durch den Abtastratenteiler definierte Rate gebunden. Das Magnetometer wird mit 100 Hz abgetastet, um Werte des Abtastratenteilers zu erhalten, die 100 Hz oder mehr entsprechen. Ansonsten wird das Magnetometer mit 8 Hz abgetastet.
Bei erfolgreicher Einstellung des Abtastratenteilers wird „True“ zurückgegeben, andernfalls wird „False“ zurückgegeben. Der Standardwert des Abtastratenteilers ist 0, was zu einer Abtastrate von 1000 Hz führt.
/* Set sample rate divider for 50 Hz */
bool status = mpu6500.sample_rate_divider( 19 );
if (!status) {
// ERROR
}
uint8_t srd() Gibt den aktuellen Wert des Abtastratenteilers zurück.
uint8_t srd = mpu6500.srd();
bool ConfigDlpfBandwidth(const DlpfBandwidth dlpf) Legt die Grenzfrequenz des digitalen Tiefpassfilters für den Beschleunigungsmesser, den Kreisel und den Temperatursensor fest. Verfügbare Bandbreiten sind:
DLPF-Bandbreite | Enum-Wert |
---|---|
184 Hz | DLPF_BANDWIDTH_184HZ |
92 Hz | DLPF_BANDWIDTH_92HZ |
41 Hz | DLPF_BANDWIDTH_41HZ |
20 Hz | DLPF_BANDWIDTH_20HZ |
10 Hz | DLPF_BANDWIDTH_10HZ |
5 Hz | DLPF_BANDWIDTH_5HZ |
Bei erfolgreicher Einstellung der digitalen Tiefpassfilter wird „True“ zurückgegeben, andernfalls wird „False“ zurückgegeben. Die Standardbandbreite beträgt 184 Hz.
bool status = mpu6500.ConfigDlpfBandwidth(bfs::Mpu6500::DLPF_BANDWIDTH_20HZ);
if (!status) {
// ERROR
}
DlpfBandwidth dlpf_bandwidth() Gibt die aktuelle Bandbreiteneinstellung des digitalen Tiefpassfilters zurück.
DlpfBandwidth dlpf = mpu6500.dlpf_bandwidth();
bool Read() Liest Daten vom MPU-6500 und speichert die Daten im Mpu6500-Objekt. Gibt „true“ zurück, wenn die Daten erfolgreich gelesen wurden, andernfalls wird „false“ zurückgegeben.
/* Read the IMU data */
if (mpu6500.Read()) {
}
bool new_imu_data() Gibt „true“ zurück, wenn neue Daten vom Beschleunigungsmesser und Gyro zurückgegeben wurden.
if (mpu6500.Read()) {
bool new_data = mpu6500. new_imu_data ();
}
float accel_x_mps2() Gibt die x Beschleunigungsmesserdaten vom Mpu6500-Objekt in Einheiten von m/s/s zurück. Ähnliche Methoden gibt es für die Y- und Z-Achsendaten.
/* Read the IMU data */
if (mpu6500.Read()) {
float ax = mpu6500. accel_x_mps2 ();
float ay = mpu6500. accel_y_mps2 ();
float az = mpu6500. accel_z_mps2 ();
}
float gyro_x_radps() Gibt die x-Gyro-Daten vom Mpu6500-Objekt in Einheiten von rad/s zurück. Ähnliche Methoden gibt es für die Y- und Z-Achsendaten.
/* Read the IMU data */
if (mpu6500.Read()) {
float gx = mpu6500. gyro_x_radps ();
float gy = mpu6500. gyro_y_radps ();
float gz = mpu6500. gyro_z_radps ();
}
float die_temp_c() Gibt die Chiptemperatur des Sensors in Einheiten von °C zurück.
/* Read the IMU data */
if (mpu6500.Read()) {
float temp = mpu6500. die_temp_c ();
}
Diese Bibliothek transformiert alle Daten vor der Rückgabe in ein gemeinsames Achsensystem. Dieses Achsensystem ist unten dargestellt. Es handelt sich um ein rechtshändiges Koordinatensystem mit einer nach unten gerichteten Z-Achse, wie es in der Flugzeugdynamik üblich ist.
Vorsicht! Dieses Achsensystem wird relativ zum Sensor MPU-6500 und MPU-9250 dargestellt. Der Sensor kann relativ zum Breakout-Board gedreht werden.