Arduino-Bibliothek für die Kommunikation mit den sechsachsigen Inertial Measurement Units (IMU) ICM42688.
Der InvenSense ICM42688 unterstützt I2C mit bis zu 400 kHz und SPI-Kommunikation mit bis zu 1 MHz für die Registereinrichtung und 24 MHz für das Datenlesen. Die folgenden auswählbaren Vollausschlagssensorbereiche sind verfügbar:
Gyroskop-Vollausschlagsbereich | Voller Skalenbereich des Beschleunigungsmessers |
---|---|
+/- 15,6 (Grad/s) | - |
+/- 31,2 (Grad/s) | - |
+/- 62,5 (Grad/s) | - |
+/- 125 (Grad/s) | - |
+/- 250 (Grad/s) | +/- 2 (g) |
+/- 500 (Grad/s) | +/- 4 (g) |
+/- 1000 (Grad/s) | +/- 8 (g) |
+/- 2000 (Grad/s) | +/- 16 (g) |
Der ICM42688 tastet die Gyroskope und Beschleunigungsmesser mit 16-Bit-Analog-Digital-Wandlern ab. Es verfügt außerdem über programmierbare digitale Filter, eine Präzisionsuhr, einen eingebetteten Temperatursensor, programmierbare Interrupts (einschließlich Wake-on-Motion) und einen 512-Byte-FIFO-Puffer.
Diese Bibliothek unterstützt sowohl die I2C- als auch die SPI-Kommunikation mit dem ICM42688.
Klonen Sie diese Bibliothek einfach oder laden Sie sie in Ihren Arduino/libraries-Ordner herunter.
Diese Bibliothek unterstützt sowohl die I2C- als auch die SPI-Kommunikation mit dem ICM42688. Die ICM42688- Objektdeklaration ist mit verschiedenen Deklarationen für die I2C- und SPI-Kommunikation überladen. Alle anderen Funktionen bleiben gleich. Darüber hinaus ist eine abgeleitete Klasse, ICM42688FIFO , enthalten, die zusätzlich zu allen in der Basisklasse ICM42688 enthaltenen Funktionen FIFO-Einrichtungs- und Datenerfassungsfunktionen bereitstellt.
ICM42688(TwoWire &bus, uint8_t-Adresse) Es sollte ein ICM42688-Objekt deklariert werden, das den I2C-Bus und die ICM42688-I2C-Adresse angibt. Die I2C-Adresse des ICM42688 ist 0x68, wenn der AD0-Pin geerdet ist, oder 0x69, wenn der AD0-Pin hochgezogen ist. Der folgende Code deklariert beispielsweise ein ICM42688-Objekt namens IMU mit einem ICM42688-Sensor am I2C-Bus 0 mit der Sensoradresse 0x68 (AD0 geerdet).
ICM42688 IMU (Wire, 0x68 );
ICM42688(TwoWire &bus, uint8_t-Adresse) Es sollte ein ICM42688-Objekt deklariert werden, das den I2C-Bus und die ICM42688-I2C-Adresse angibt. Die I2C-Adresse des ICM42688 ist 0x68, wenn der AD0-Pin geerdet ist, oder 0x69, wenn der AD0-Pin hochgezogen ist. Der folgende Code deklariert beispielsweise ein ICM42688-Objekt namens IMU mit einem ICM42688-Sensor am I2C-Bus 0 mit der Sensoradresse 0x68 (AD0 geerdet). Sie sollten die SDA- und SCL-Pins für Ihre I2C-Verbindung angeben (Standard für Arduino ist SDA=18, SCL=19, ESP32 ist SDA=21, SCL=22).
ICM42688 IMU (Wire, 0x68 , _sda_pin, _scl_pin);
ICM42688FIFO(SPIClass &bus, uint8_t csPin, uint32_t SPI_HS_CLK=8000000) Es sollte ein ICM42688-Objekt deklariert werden, das den verwendeten SPI-Bus und Chipauswahl-Pin angibt. Mehrere ICM42688- oder andere SPI-Objekte könnten auf demselben SPI-Bus verwendet werden, jedes mit seinem eigenen Chipauswahl-Pin. Der Chipauswahl-Pin kann jeder verfügbare digitale Pin sein. Der folgende Code deklariert beispielsweise ein ICM42688-Objekt namens IMU mit einem ICM42688-Sensor, der sich am SPI-Bus 0 mit Chipauswahl-Pin 10 befindet.
ICM42688 IMU (SPI, 10 );
Beachten Sie, dass der Standard-Hochgeschwindigkeits-SPI-Bustakt auf 8 MHz eingestellt ist, der ICM 42688-p jedoch einen SPI-Takt von bis zu 24 MHz unterstützt. Verwenden Sie beim Lesen von Daten einen schnelleren Takt für schnellere SPI-Datenübertragungen.
Die folgenden Funktionen werden zum Einrichten des ICM42688-Sensors verwendet. Diese sollten vor der Datenerfassung einmal aufgerufen werden, normalerweise erfolgt dies in der Arduino-Funktion setup()
. Die Funktion begin()
sollte immer verwendet werden. Optional können die Funktionen setAccelFS
und setGyroFS
, setAccelODR
und setGyroODR
verwendet werden, um die Vollskalenbereiche des Beschleunigungsmessers und des Gyroskops sowie die Ausgabedatenrate auf andere Werte als die Standardwerte festzulegen. Die enableDataReadyInterrupt
und disableDataReadyInterrupt
steuern, ob der ICM42688 einen Interrupt generiert, wenn die Daten bereit sind. Das enableFifo
richtet den FIFO-Puffer ein und aktiviert ihn. Diese Funktionen werden im Folgenden ausführlich beschrieben.
int begin() Dies sollte in Ihrer Setup-Funktion aufgerufen werden. Es initialisiert die Kommunikation mit dem ICM42688, richtet den Sensor zum Lesen von Daten ein und schätzt den Gyro-Bias, der aus den Sensordaten entfernt wird. Diese Funktion gibt bei einer erfolgreichen Initialisierung einen positiven Wert und bei einer erfolglosen Initialisierung einen negativen Wert zurück. Wenn dies nicht gelingt, überprüfen Sie bitte Ihre Verkabelung oder versuchen Sie, die Stromversorgung des Sensors zurückzusetzen. Im Folgenden finden Sie ein Beispiel für die Einrichtung des ICM42688.
int status = IMU.begin();
(optional) int setAccelRange(AccelRange range) Diese Funktion setzt den vollen Skalenbereich des Beschleunigungsmessers auf den angegebenen Wert. Wenn diese Funktion nicht aufgerufen wird, wird standardmäßig ein voller Skalenbereich von +/- 16 g verwendet. Die aufgezählten Vollskalenbereiche des Beschleunigungsmessers sind:
Name des Beschleunigungsmessers | Voller Skalenbereich des Beschleunigungsmessers |
---|---|
gpm2 | +/- 2 (g) |
gpm4 | +/- 4 (g) |
gpm8 | +/- 8 (g) |
gpm16 | +/- 16 (g) |
Diese Funktion gibt bei Erfolg einen positiven Wert und bei Misserfolg einen negativen Wert zurück. Bitte sehen Sie sich das Advanced_I2C-Beispiel an. Das Folgende ist ein Beispiel für die Auswahl eines Beschleunigungsmesser-Vollbereichs von +/- 8 g.
status = IMU.setAccelFS(ICM42688::gpm2);
(optional) int setGyroRange(GyroRange range) Diese Funktion setzt den vollen Skalenbereich des Gyroskops auf den angegebenen Wert. Wenn diese Funktion nicht aufgerufen wird, wird standardmäßig ein voller Skalenbereich von +/- 2000 Grad/s verwendet. Die aufgezählten Vollausschlagsbereiche des Gyroskops sind:
Gyroskopname | Gyroskop-Vollausschlagsbereich |
---|---|
dps15_625 | +/- 15,625 (Grad/s) |
dps31_25 | +/- 31,25 (Grad/s) |
dps62_5 | +/- 62,5 (Grad/s) |
dps125 | +/- 125 (Grad/s) |
dps250 | +/- 250 (Grad/s) |
dps500 | +/- 500 (Grad/s) |
dps1000 | +/- 1000 (Grad/s) |
dps2000 | +/- 2000 (Grad/s) |
Diese Funktion gibt bei Erfolg einen positiven Wert und bei Misserfolg einen negativen Wert zurück. Bitte sehen Sie sich das Advanced_I2C-Beispiel an. Das Folgende ist ein Beispiel für die Auswahl eines Gyroskop-Vollbereichs von +/- 250 Grad/s.
status = IMU.setGyroFS(ICM42688::dps250);
(optional) int setFilters(bool gyroFilters, bool accFilters) Dies ist eine optionale Funktion zum Festlegen der programmierbaren Filter (Notch-Filter, Anti-Alias-Filter, UI-Filterblock). Standardmäßig sind alle Filter aktiviert. Die folgende Abbildung zeigt ein Blockdiagramm des Signalpfads für ICM42688:
Diese Funktion gibt bei Erfolg einen positiven Wert und bei Misserfolg einen negativen Wert zurück. Im Folgenden finden Sie ein Beispiel für das Einschalten der Filter.
status = IMU.setFilters( true , true );
(optional) int enableDataReadyInterrupt() Ein Interrupt ist an die Datenausgaberate gebunden. Der INT- Pin des ICM42688 gibt einen 50us-Impuls aus, wenn die Daten bereit sind. Dies ist äußerst nützlich, wenn Interrupts zum Takten der Datenerfassung verwendet werden sollen, die in regelmäßigen Abständen erfolgen sollte. Bitte sehen Sie sich das Interrupt_SPI-Beispiel an. Diese Funktion aktiviert diesen Interrupt, der mit einer vom SRD vorgegebenen Frequenz auftritt. Diese Funktion gibt bei Erfolg einen positiven Wert und bei Misserfolg einen negativen Wert zurück. Im Folgenden finden Sie ein Beispiel für die Aktivierung des Datenbereit-Interrupts.
status = IMU.enableDataReadyInterrupt();
(optional) int unlockDataReadyInterrupt() Diese Funktion deaktiviert den oben beschriebenen Datenbereit-Interrupt. Diese Funktion gibt bei Erfolg einen positiven Wert und bei Misserfolg einen negativen Wert zurück. Im Folgenden finden Sie ein Beispiel für die Deaktivierung des Datenbereitschafts-Interrupts.
status = IMU.disableDataReadyInterrupt();
(optional) uin8_t isInterrupted() Diese Funktion liest das Data-Ready-Interrupt-Register. Diese Funktion gibt true zurück, wenn sie unterbrochen wird. Das Folgende ist ein Beispiel für das Lesen des Data-Ready-Interrupt-Registers.
status = IMU.isInterrupted();
(optional) int kalibrierenGyro() Der Gyro-Bias wird während der Funktion begin() automatisch geschätzt und aus den Sensormessungen entfernt. Diese Funktion schätzt den Gyro-Bias neu und entfernt den neuen Bias aus zukünftigen Sensormessungen. Der Sensor sollte während dieses Vorgangs stillstehen. Diese Funktion gibt bei Erfolg einen positiven Wert und bei Misserfolg einen negativen Wert zurück. Das Folgende ist ein Beispiel für die Schätzung neuer Kreiselverzerrungen.
status = IMU.calibrateGyro();
(optional) float getGyroBiasX() Diese Funktion gibt die aktuelle Gyro-Vorspannung in X-Richtung in Einheiten von Grad/s zurück.
float gxb;
gxb = IMU.getGyroBiasX();
(optional) float getGyroBiasY() Diese Funktion gibt die aktuelle Gyro-Vorspannung in Y-Richtung in Einheiten von Grad/s zurück.
float gyb;
gyb = IMU.getGyroBiasY();
(optional) float getGyroBiasZ() Diese Funktion gibt die aktuelle Gyro-Vorspannung in Z-Richtung in Einheiten von Grad/s zurück.
float gzb;
gzb = IMU.getGyroBiasZ();
(optional) void setGyroBiasX(float Bias) Diese Funktion setzt die Gyro-Vorspannung, die in X-Richtung verwendet wird, auf den Eingabewert in Einheiten von Grad/s.
float gxb = 0.001 ; // gyro bias of 0.001 deg/s
IMU.setGyroBiasX(gxb);
(optional) void setGyroBiasY(float Bias) Diese Funktion setzt die Gyro-Vorspannung, die in Y-Richtung verwendet wird, auf den Eingabewert in Einheiten von Grad/s.
float gyb = 0.001 ; // gyro bias of 0.001 deg/s
IMU.setGyroBiasY(gyb);
(optional) void setGyroBiasZ(float Bias) Diese Funktion setzt die Gyro-Vorspannung, die in Z-Richtung verwendet wird, auf den Eingabewert in Einheiten von Grad/s.
float gzb = 0.001 ; // gyro bias of 0.001 deg/s
IMU.setGyroBiasZ(gzb);
(optional) int kalibrierenAccel() Diese Funktion schätzt den Bias und den Skalierungsfaktor, die zum Kalibrieren der Beschleunigungsmesser erforderlich sind. Diese Funktion funktioniert jeweils achsenweise und muss für alle 6 Sensorausrichtungen ausgeführt werden. Nachdem genügend Sensordaten gesammelt wurden, schätzt es den Bias und den Skalierungsfaktor für alle drei Beschleunigungsmesserkanäle und wendet diese Korrekturen auf die gemessenen Daten an. Die Kalibrierung des Beschleunigungsmessers muss nur einmal an der IMU durchgeführt werden. Die unten beschriebenen Get- und Set-Funktionen können verwendet werden, um die geschätzten Bias- und Skalierungsfaktoren abzurufen und sie bei zukünftigen Stromzyklen oder Operationen mit der IMU zu verwenden. Diese Funktion gibt bei Erfolg einen positiven Wert und bei Misserfolg einen negativen Wert zurück.
status = IMU.calibrateAccel();
(optional) float getAccelBiasX_mss() Diese Funktion gibt die aktuelle Beschleunigungsmesservorspannung in X-Richtung in Einheiten von m/s/s zurück.
float axb;
axb = IMU.getAccelBiasX_mss();
(optional) float getAccelScaleFactorX() Diese Funktion gibt den aktuellen Skalierungsfaktor des Beschleunigungsmessers in X-Richtung zurück.
float axs;
axs = IMU.getAccelScaleFactorX();
(optional) float getAccelBiasY_mss() Diese Funktion gibt die aktuelle Beschleunigungsmesser-Vorspannung in Y-Richtung in Einheiten von m/s/s zurück.
float ayb;
ayb = IMU.getAccelBiasY_mss();
(optional) float getAccelScaleFactorY() Diese Funktion gibt den aktuellen Skalierungsfaktor des Beschleunigungsmessers in Y-Richtung zurück.
float ays;
ays = IMU.getAccelScaleFactorY();
(optional) float getAccelBiasZ_mss() Diese Funktion gibt die aktuelle Beschleunigungsmesservorspannung in Z-Richtung in Einheiten von m/s/s zurück.
float azb;
azb = IMU.getAccelBiasZ_mss();
(optional) float getAccelScaleFactorZ() Diese Funktion gibt den aktuellen Skalierungsfaktor des Beschleunigungsmessers in Z-Richtung zurück.
float azs;
azs = IMU.getAccelScaleFactorZ();
(optional) void setAccelCalX(float Bias, Float ScaleFactor) Diese Funktion setzt die Beschleunigungsmesser-Vorspannung (m/s/s) und den Skalierungsfaktor, die in der X-Richtung verwendet werden, auf die Eingabewerte.
float axb = 0.01 ; // accel bias of 0.01 m/s/s
float axs = 0.97 ; // accel scale factor of 0.97
IMU.setAccelCalX(axb,axs);
(optional) void setAccelCalY(float Bias, Float ScaleFactor) Diese Funktion setzt die Beschleunigungsmesser-Vorspannung (m/s/s) und den Skalierungsfaktor, die in der Y-Richtung verwendet werden, auf die Eingabewerte.
float ayb = 0.01 ; // accel bias of 0.01 m/s/s
float ays = 0.97 ; // accel scale factor of 0.97
IMU.setAccelCalY(ayb,ays);
(optional) void setAccelCalZ(float Bias, Float ScaleFactor) Diese Funktion setzt die Beschleunigungsmesser-Vorspannung (m/s/s) und den Skalierungsfaktor, die in Z-Richtung verwendet werden, auf die Eingabewerte.
float azb = 0.01 ; // accel bias of 0.01 m/s/s
float azs = 0.97 ; // accel scale factor of 0.97
IMU.setAccelCalZ(azb,azs);
Die folgenden Funktionen werden zum Sammeln von Daten vom ICM42688-Sensor verwendet. Die Ausrichtung der sensiblen Achsen entnehmen Sie bitte dem Datenblatt Abschnitt 10.1.
int getAGT() liest den Sensor und speichert die neuesten Daten in einem Puffer. Es sollte jedes Mal aufgerufen werden, wenn Sie Daten vom Sensor abrufen möchten. Diese Funktion gibt bei Erfolg einen positiven Wert und bei Misserfolg einen negativen Wert zurück.
IMU.getAGT();
float accX() ruft den Beschleunigungsmesserwert aus dem Datenpuffer in X-Richtung ab und gibt ihn in Einheiten von g zurück.
float ax = IMU.accX();
float accY() ruft den Beschleunigungsmesserwert aus dem Datenpuffer in Y-Richtung ab und gibt ihn in Einheiten von g zurück.
float ay = IMU.accY();
float accZ() ruft den Beschleunigungsmesserwert aus dem Datenpuffer in Z-Richtung ab und gibt ihn in Einheiten von g zurück.
float az = IMU.accZ();
float gyrX() ruft den Gyroskopwert aus dem Datenpuffer in X-Richtung ab und gibt ihn in Einheiten von Grad/s zurück.
float gx = IMU.gyrX();
float gyrY() ruft den Gyroskopwert aus dem Datenpuffer in Y-Richtung ab und gibt ihn in Einheiten von Grad/s zurück.
float gy = IMU.gyrY();
float gyrZ() ruft den Gyroskopwert aus dem Datenpuffer in Z-Richtung ab und gibt ihn in Einheiten von Grad/s zurück.
float gz = IMU.gyrZ();
float temp() ruft den Temperaturwert aus dem Datenpuffer ab und gibt ihn in Einheiten von °C zurück.
float temperature = IMU.temp();
Die abgeleitete Klasse ICM42688FIFO erweitert die von der Basisklasse ICM42688 bereitgestellte Funktionalität, indem sie Unterstützung für das Einrichten und Lesen des ICM42688FIFO-Puffers bietet. Alle oben beschriebenen Funktionen als Teil der ICM42688 -Klasse stehen auch der ICM42688FIFO -Klasse zur Verfügung.
ICM42688FIFO(TwoWire &bus, uint8_t-Adresse) Es sollte ein ICM42688FIFO-Objekt deklariert werden, das den I2C-Bus und die ICM42688-I2C-Adresse angibt. Die I2C-Adresse des ICM42688 ist 0x68, wenn der AD0-Pin geerdet ist, oder 0x69, wenn der AD0-Pin hochgezogen ist. Der folgende Code deklariert beispielsweise ein ICM42688FIFO-Objekt namens IMU mit einem ICM42688-Sensor am I2C-Bus 0 mit der Sensoradresse 0x68 (AD0 geerdet).
ICM42688FIFO IMU (Wire, 0x68 );
ICM42688FIFO(SPIClass &bus, uint8_t csPin, uint32_t SPI_HS_CLK=8000000) Es sollte ein ICM42688FIFO-Objekt deklariert werden, das den verwendeten SPI-Bus und Chipauswahl-Pin angibt. Auf demselben SPI-Bus könnten mehrere ICM42688- oder andere SPI-Objekte verwendet werden, jedes mit seinem eigenen Chipauswahl-Pin. Der Chipauswahl-Pin kann jeder verfügbare digitale Pin sein. Der folgende Code deklariert beispielsweise ein ICM42688FIFO-Objekt namens IMU mit einem ICM42688-Sensor, der sich am SPI-Bus 0 mit Chipauswahl-Pin 10 befindet.
ICM42688FIFO IMU (SPI, 10 );
Beachten Sie, dass der Standard-Hochgeschwindigkeits-SPI-Bustakt auf 8 MHz eingestellt ist, der ICM 42688-p jedoch einen SPI-Takt von bis zu 24 MHz unterstützt. Verwenden Sie beim Lesen von Daten einen schnelleren Takt für schnellere SPI-Datenübertragungen.
(optional) int enableFifo(bool accel,bool gyro,bool temp) Diese Funktion konfiguriert und aktiviert den ICM42688 FIFO-Puffer. Dieser 512-Byte-Puffer tastet Daten mit der vom SRD festgelegten Datenausgaberate ab und ermöglicht es dem Mikrocontroller, die Daten in großen Mengen zu lesen, wodurch die Arbeitsbelastung des Mikrocontrollers für bestimmte Anwendungen reduziert wird. Es ist mit einer Reihe boolescher Werte konfiguriert, die beschreiben, welche Daten im FIFO gepuffert werden sollen: Beschleunigungsmesser, Gyroskop oder Temperatur. Die Daten des Beschleunigungsmessers und des Gyroskops belegen jeweils 6 Bytes Platz pro Abtastung und die Temperatur 2 Bytes. Es ist wichtig, nur die gewünschten Datenquellen auszuwählen, um sicherzustellen, dass der FIFO zwischen den Lesevorgängen nicht überläuft. Die Aktivierung aller Datenquellen würde beispielsweise 21 Bytes pro Abtastung erfordern, sodass der FIFO nur 24 Abtastungen speichern kann, bevor er überläuft. Wenn nur die Daten des Beschleunigungsmessers benötigt werden, erhöht sich dieser Wert auf 85 Proben, bevor es zum Überlauf kommt. Diese Funktion gibt bei Erfolg einen positiven Wert und bei Misserfolg einen negativen Wert zurück. Bitte sehen Sie sich das FIFO_SPI-Beispiel an. Das Folgende ist ein Beispiel für die Aktivierung des FIFO zum Puffern von Beschleunigungsmesser- und Gyroskopdaten.
status = IMU.enableFifo( true , true , false , false );
int readFifo() liest den FIFO-Puffer vom ICM42688, analysiert ihn und speichert die Daten in Puffern auf dem Mikrocontroller. Es sollte jedes Mal aufgerufen werden, wenn Sie Daten aus dem FIFO-Puffer abrufen möchten. Diese Funktion gibt bei Erfolg einen positiven Wert und bei Misserfolg einen negativen Wert zurück.
IMU.readFifo();
void getFifoAccelX_mss(size_t size,float data) ruft den Beschleunigungsmesserwert aus dem Datenpuffer in X-Richtung ab und gibt ihn in Einheiten von m/s/s zurück. Die Daten werden als Array zusammen mit der Anzahl der Elemente innerhalb dieses Arrays zurückgegeben. Stellen Sie sicher, dass der Puffer, in den Sie übertragen, über genügend Kapazität zum Speichern der Daten verfügt.
float ax[ 100 ];
size_t samples;
IMU.getFifoAccelX_mss(&samples,ax);
void getFifoAccelY_mss(size_t size,float data) ruft den Beschleunigungsmesserwert aus dem Datenpuffer in Y-Richtung ab und gibt ihn in Einheiten von m/s/s zurück. Die Daten werden als Array zusammen mit der Anzahl der Elemente innerhalb dieses Arrays zurückgegeben. Stellen Sie sicher, dass der Puffer, in den Sie übertragen, über genügend Kapazität zum Speichern der Daten verfügt.
float ay[ 100 ];
size_t samples;
IMU.getFifoAccelY_mss(&samples,ay);
void getFifoAccelZ_mss(size_t size,float data) ruft den Beschleunigungsmesserwert aus dem Datenpuffer in Z-Richtung ab und gibt ihn in Einheiten von m/s/s zurück. Die Daten werden als Array zusammen mit der Anzahl der Elemente innerhalb dieses Arrays zurückgegeben. Stellen Sie sicher, dass der Puffer, in den Sie übertragen, über genügend Kapazität zum Speichern der Daten verfügt.
float az[ 100 ];
size_t samples;
IMU.getFifoAccelZ_mss(&samples,az);
void getFifoGyroX(size_t size,float data) ruft den Gyroskopwert aus dem Datenpuffer in X-Richtung ab und gibt ihn in Einheiten von Grad/s zurück. Die Daten werden als Array zusammen mit der Anzahl der Elemente innerhalb dieses Arrays zurückgegeben. Stellen Sie sicher, dass der Puffer, in den Sie übertragen, über genügend Kapazität zum Speichern der Daten verfügt.
float gx[ 100 ];
size_t samples;
IMU.getFifoGyroX(&samples,gx);
void getFifoGyroY(size_t size,float data) ruft den Gyroskopwert aus dem Datenpuffer in Y-Richtung ab und gibt ihn in Einheiten von Grad/s zurück. Die Daten werden als Array zusammen mit der Anzahl der Elemente innerhalb dieses Arrays zurückgegeben. Stellen Sie sicher, dass der Puffer, in den Sie übertragen, über genügend Kapazität zum Speichern der Daten verfügt.
float gy[ 100 ];
size_t samples;
IMU.getFifoGyroY(&samples,gy);
void getFifoGyroZ(size_t size,float data) ruft den Gyroskopwert aus dem Datenpuffer in Z-Richtung ab und gibt ihn in Einheiten von Grad/s zurück. Die Daten werden als Array zusammen mit der Anzahl der Elemente innerhalb dieses Arrays zurückgegeben. Stellen Sie sicher, dass der Puffer, in den Sie übertragen, über genügend Kapazität zum Speichern der Daten verfügt.
float gz[ 100 ];
size_t samples;
IMU.getFifoGyroZ(&samples,gx);
void getFifoTemperature_C(size_t size,float data) ruft den Temperaturwert des Chips aus dem Datenpuffer ab und gibt ihn in Einheiten von C zurück. Die Daten werden als Array zusammen mit der Anzahl der Elemente innerhalb dieses Arrays zurückgegeben. Stellen Sie sicher, dass der Puffer, in den Sie übertragen, über genügend Kapazität zum Speichern der Daten verfügt.
float temp[ 100 ];
size_t samples;
IMU.getFifoTemperature_C(&samples,temp);
Bitte beachten Sie das ICM42688-Datenblatt. Diese Bibliothek sollte gut für andere Breakout-Boards oder eingebettete Sensoren funktionieren. Bitte beachten Sie das Pinbelegungsdiagramm Ihres Anbieters.
Die ICM42688-Pins sollten wie folgt verbunden werden:
Als Pullup-Widerstände für SDA und SCL sollten 4,7-kOhm-Widerstände verwendet werden. Diese Widerstände sollten mit einer 3,3-V-Quelle hochgezogen werden.
Die ICM42688-Pins sollten wie folgt verbunden werden:
Einige Breakout-Boards, einschließlich des Embedded Masters-Breakout-Boards, erfordern geringfügige Modifikationen, um SPI zu ermöglichen. Bitte beachten Sie die Dokumentation Ihres Anbieters.