Englisch | 简体中文 | 繁體中文 | 日本語 | Deutsch | 한국어
MPU9250 ist ein Multi-Chip-Modul (MCM), das aus zwei in ein einzelnes QFN-Paket integrierten Stiefen besteht. Ein Würfel beherbergt das 3-Achsen-Gyroskop und das 3-Achsen-Beschleunigungsmesser. Der andere Würfel beherbergt das AK8963 3-Achse-Magnetometer der Asahi Kasei Microdevices Corporation. Daher ist der MPU9250 ein 9-Achsen-MotionTracking-Gerät, das ein 3-Achsen-Gyroskop, einen 3-Achsen-Beschleunigungsmesser, ein 3-Achsen-Magnetometer und ein digitales Bewegungsprozessor (DMP) kombiniert, das alle in einem kleinen 3x3x1mm-Paket als Pin-Compatible-Aufstieg erhältlich sind. 9-Achsen-Bewegung ™ Ausgang. Das MPU9250 MotionTracking-Gerät mit seiner 9-Achsen-Integration, On-Chip-Motionfusion ™ und Laufzeitkalibrierungsfirmware ermöglicht es den Herstellern, die kostspielige und komplexe Selektion, Qualifikation und Systemebene zu eliminieren, und die Integration des Systemebens von diskreten Geräten garantiert optimale Bewegungsleistung. MPU9250. port.mpu9250 verfügt über drei 16-Bit-Analog-Digital-Wandler (ADCs) zur Digitalisierung der Gyroskopausgänge, drei 16-Bit-ADCs zur Digitalisierung der Beschleunigungsmesserausgänge und drei 16-Bit-ADCs zur Digitalisierung der Magnetometerausgänge. Für die Präzisionsverfolgung sowohl schneller als auch langsamer Bewegungen verfügen die Teile über einen benutzerprogrammierbaren Gyroskop-Bereich von ± 250, ± 500, ± 1000 und ± 2000 °/s (DPS), ein benutzerprogrammierbarer Beschleunigungsmesser-Reichweite von ± 2G, ± 4G und ± ± 8G und ± ± ± 16g und ± ± ± 16g.
LiBDriver MPU9250 ist der vollständige Treiber von MPU9250, der von LiBDriver eingeführt wurde. Es bietet Beschleunigungslesung, Winkelgeschwindigkeitslesen, Magnetometer -Lesen, Einstellungswinkel -Lesen, DMP -Lesen, Tap -Erkennung und andere Funktionen. Libriver ist Misra konform.
/SRC enthält Libriiver MPU9250 -Quelldateien.
/Schnittstelle enthält Libriiver MPU9250 IIC, SPI -Plattform -unabhängige Vorlage.
/Der Test beinhaltet den Treibertestcode von Libriver MPU9250 und dieser Code kann die erforderliche Funktion der Chip einfach testen.
/Beispiel enthält den Beispielcode für Libertrver MPU9250.
/DOC enthält das OFFLINE -Dokument von libriiver MPU9250.
/Datenblatt enthält MPU9250 -Datenblatt.
/Projekt umfasst den Probencode für Linux- und MCU Development Board. Alle Projekte verwenden das Shell -Skript, um den Treiber zu debuggen, und die Detailanweisung finden Sie in Readme.MD jedes Projekts.
/Misra enthält die Libriver Misra Code Scanning -Ergebnisse.
Referenz /Schnittstelle IIC, SPI -Plattform unabhängige Vorlage und beenden Sie Ihre Plattform IIC, SPI -Treiber.
Fügen Sie das Verzeichnis /SRC, den Schnittstellentreiber für Ihre Plattform und Ihre eigenen Treiber in Ihr Projekt hinzu, wenn Sie die Standard -Beispieltreiber verwenden möchten, fügen Sie Ihr Projekt das /Beispiel -Verzeichnis hinzu.
Sie können auf die Beispiele im Verzeichnis /Beispiel verweisen, um Ihren eigenen Treiber zu vervollständigen. Wenn Sie die Standard -Programmierbeispiele verwenden möchten, verwenden Sie sie.
#include "driver_mpu9250_basic.h"
uint8_t res ;
uint32_t i ;
uint32_t times ;
float g [ 3 ];
float dps [ 3 ];
float ut [ 3 ];
float degrees ;
mpu9250_address_t addr ;
/* init */
addr = MPU9250_ADDRESS_AD0_LOW ;
res = mpu9250_basic_init ( MPU9250_INTERFACE_IIC , addr );
if ( res != 0 )
{
return 1 ;
}
...
/* read all */
times = 3 ;
for ( i = 0 ; i < times ; i ++ )
{
/* read */
if ( mpu9250_basic_read ( g , dps , ut ) != 0 )
{
( void ) mpu9250_basic_deinit ();
return 1 ;
}
...
if ( mpu9250_basic_read_temperature ( & degrees ) != 0 )
{
( void ) mpu9250_basic_deinit ();
return 1 ;
}
...
/* output */
mpu9250_interface_debug_print ( "mpu9250: %d/%d.n" , i + 1 , times );
mpu9250_interface_debug_print ( "mpu9250: acc x is %0.2fg.n" , g [ 0 ]);
mpu9250_interface_debug_print ( "mpu9250: acc y is %0.2fg.n" , g [ 1 ]);
mpu9250_interface_debug_print ( "mpu9250: acc z is %0.2fg.n" , g [ 2 ]);
mpu9250_interface_debug_print ( "mpu9250: gyro x is %0.2fdps.n" , dps [ 0 ]);
mpu9250_interface_debug_print ( "mpu9250: gyro y is %0.2fdps.n" , dps [ 1 ]);
mpu9250_interface_debug_print ( "mpu9250: gyro z is %0.2fdps.n" , dps [ 2 ]);
mpu9250_interface_debug_print ( "mpu9250: mag x is %0.2fuT.n" , ut [ 0 ]);
mpu9250_interface_debug_print ( "mpu9250: mag y is %0.2fuT.n" , ut [ 1 ]);
mpu9250_interface_debug_print ( "mpu9250: mag z is %0.2fuT.n" , ut [ 2 ]);
mpu9250_interface_debug_print ( "mpu9250: temperature %0.2fC.n" , degrees );
...
/* delay 1000 ms */
mpu9250_interface_delay_ms ( 1000 );
...
}
...
/* deinit */
( void ) mpu9250_basic_deinit ();
return 0 ; #include "driver_mpu9250_fifo.h"
uint32_t i ;
uint32_t times ;
uint16_t len ;
uint8_t ( * g_gpio_irq )( void ) = NULL ;
static int16_t gs_accel_raw [ 128 ][ 3 ];
static float gs_accel_g [ 128 ][ 3 ];
static int16_t gs_gyro_raw [ 128 ][ 3 ];
static float gs_gyro_dps [ 128 ][ 3 ];
atic int16_t gs_mag_raw [ 128 ][ 3 ];
static float gs_mag_ut [ 128 ][ 3 ];
mpu9250_address_t addr ;
/* gpio init */
if ( gpio_interrupt_init () != 0 )
{
return 1 ;
}
g_gpio_irq = mpu9250_fifo_irq_handler ;
/* init */
addr = MPU9250_ADDRESS_AD0_LOW ;
if ( mpu9250_fifo_init ( MPU9250_INTERFACE_IIC , addr ) != 0 )
{
g_gpio_irq = NULL ;
( void ) gpio_interrupt_deinit ();
return 1 ;
}
/* delay 100 ms */
mpu9250_interface_delay_ms ( 100 );
...
times = 3 ;
for ( i = 0 ; i < times ; i ++ )
{
len = 128 ;
/* read */
if ( mpu9250_fifo_read ( gs_accel_raw , gs_accel_g ,
gs_gyro_raw , gs_gyro_dps , gs_mag_raw , gs_mag_ut , & len ) != 0 )
{
( void ) mpu9250_fifo_deinit ();
g_gpio_irq = NULL ;
( void ) gpio_interrupt_deinit ();
return 1 ;
}
...
/* output */
mpu9250_interface_debug_print ( "mpu9250: %d/%d.n" , i + 1 , times );
mpu9250_interface_debug_print ( "mpu9250: fifo %d.n" , len );
mpu9250_interface_debug_print ( "mpu9250: acc x[0] is %0.2fg.n" , gs_accel_g [ 0 ][ 0 ]);
mpu9250_interface_debug_print ( "mpu9250: acc y[0] is %0.2fg.n" , gs_accel_g [ 0 ][ 1 ]);
mpu9250_interface_debug_print ( "mpu9250: acc z[0] is %0.2fg.n" , gs_accel_g [ 0 ][ 2 ]);
mpu9250_interface_debug_print ( "mpu9250: gyro x[0] is %0.2fdps.n" , gs_gyro_dps [ 0 ][ 0 ]);
mpu9250_interface_debug_print ( "mpu9250: gyro y[0] is %0.2fdps.n" , gs_gyro_dps [ 0 ][ 1 ]);
mpu9250_interface_debug_print ( "mpu9250: gyro z[0] is %0.2fdps.n" , gs_gyro_dps [ 0 ][ 2 ]);
mpu9250_interface_debug_print ( "mpu9250: mag x[0] is %0.2fuT.n" , gs_mag_ut [ 0 ][ 0 ]);
mpu9250_interface_debug_print ( "mpu9250: mag y[0] is %0.2fuT.n" , gs_mag_ut [ 0 ][ 1 ]);
mpu9250_interface_debug_print ( "mpu9250: mag z[0] is %0.2fuT.n" , gs_mag_ut [ 0 ][ 2 ]);
...
/* delay 100 ms */
mpu9250_interface_delay_ms ( 100 );
...
}
...
/* deinit */
( void ) mpu9250_fifo_deinit ();
g_gpio_irq = NULL ;
( void ) gpio_interrupt_deinit ();
return 0 ; #include "driver_mpu9250_dmp.h"
uint32_t i ;
uint32_t times ;
uint32_t cnt ;
uint16_t len ;
uint8_t ( * g_gpio_irq )( void ) = NULL ;
static int16_t gs_accel_raw [ 128 ][ 3 ];
static float gs_accel_g [ 128 ][ 3 ];
static int16_t gs_gyro_raw [ 128 ][ 3 ];
static float gs_gyro_dps [ 128 ][ 3 ];
static int32_t gs_quat [ 128 ][ 4 ];
static float gs_pitch [ 128 ];
static float gs_roll [ 128 ];
static float gs_yaw [ 128 ];
mpu9250_address_t addr ;
static void a_receive_callback ( uint8_t type )
{
switch ( type )
{
case MPU9250_INTERRUPT_MOTION :
{
mpu9250_interface_debug_print ( "mpu9250: irq motion.n" );
break ;
}
case MPU9250_INTERRUPT_FIFO_OVERFLOW :
{
mpu9250_interface_debug_print ( "mpu9250: irq fifo overflow.n" );
break ;
}
case MPU9250_INTERRUPT_FSYNC_INT :
{
mpu9250_interface_debug_print ( "mpu9250: irq fsync int.n" );
break ;
}
case MPU9250_INTERRUPT_DMP :
{
mpu9250_interface_debug_print ( "mpu9250: irq dmpn" );
break ;
}
case MPU9250_INTERRUPT_DATA_READY :
{
mpu9250_interface_debug_print ( "mpu9250: irq data readyn" );
break ;
}
default :
{
mpu9250_interface_debug_print ( "mpu9250: irq unknown code.n" );
break ;
}
}
}
static void a_dmp_tap_callback ( uint8_t count , uint8_t direction )
{
switch ( direction )
{
case MPU9250_DMP_TAP_X_UP :
{
mpu9250_interface_debug_print ( "mpu9250: tap irq x up with %d.n" , count );
break ;
}
case MPU9250_DMP_TAP_X_DOWN :
{
mpu9250_interface_debug_print ( "mpu9250: tap irq x down with %d.n" , count );
break ;
}
case MPU9250_DMP_TAP_Y_UP :
{
mpu9250_interface_debug_print ( "mpu9250: tap irq y up with %d.n" , count );
break ;
}
case MPU9250_DMP_TAP_Y_DOWN :
{
mpu9250_interface_debug_print ( "mpu9250: tap irq y down with %d.n" , count );
break ;
}
case MPU9250_DMP_TAP_Z_UP :
{
mpu9250_interface_debug_print ( "mpu9250: tap irq z up with %d.n" , count );
break ;
}
case MPU9250_DMP_TAP_Z_DOWN :
{
mpu9250_interface_debug_print ( "mpu9250: tap irq z down with %d.n" , count );
break ;
}
default :
{
mpu9250_interface_debug_print ( "mpu9250: tap irq unknown code.n" );
break ;
}
}
}
static void a_dmp_orient_callback ( uint8_t orientation )
{
switch ( orientation )
{
case MPU9250_DMP_ORIENT_PORTRAIT :
{
mpu9250_interface_debug_print ( "mpu9250: orient irq portrait.n" );
break ;
}
case MPU9250_DMP_ORIENT_LANDSCAPE :
{
mpu9250_interface_debug_print ( "mpu9250: orient irq landscape.n" );
break ;
}
case MPU9250_DMP_ORIENT_REVERSE_PORTRAIT :
{
mpu9250_interface_debug_print ( "mpu9250: orient irq reverse portrait.n" );
break ;
}
case MPU9250_DMP_ORIENT_REVERSE_LANDSCAPE :
{
mpu9250_interface_debug_print ( "mpu9250: orient irq reverse landscape.n" );
break ;
}
default :
{
mpu9250_interface_debug_print ( "mpu9250: orient irq unknown code.n" );
break ;
}
}
}
/* init */
if ( gpio_interrupt_init () != 0 )
{
return 1 ;
}
g_gpio_irq = mpu9250_dmp_irq_handler ;
/* init */
addr = MPU9250_ADDRESS_AD0_LOW ;
if ( mpu9250_dmp_init ( MPU9250_INTERFACE_IIC , addr , a_receive_callback ,
a_dmp_tap_callback , a_dmp_orient_callback ) != 0 )
{
g_gpio_irq = NULL ;
( void ) gpio_interrupt_deinit ();
return 1 ;
}
/* delay 500 ms */
mpu9250_interface_delay_ms ( 500 );
...
times = 3 ;
for ( i = 0 ; i < times ; i ++ )
{
len = 128 ;
/* read */
if ( mpu9250_dmp_read_all ( gs_accel_raw , gs_accel_g ,
gs_gyro_raw , gs_gyro_dps ,
gs_quat ,
gs_pitch , gs_roll , gs_yaw ,
& len ) != 0 )
{
( void ) mpu9250_dmp_deinit ();
g_gpio_irq = NULL ;
( void ) gpio_interrupt_deinit ();
return 1 ;
}
/* output */
mpu9250_interface_debug_print ( "mpu9250: %d/%d.n" , i + 1 , times );
mpu9250_interface_debug_print ( "mpu9250: fifo %d.n" , len );
mpu9250_interface_debug_print ( "mpu9250: pitch[0] is %0.2fdeg.n" , gs_pitch [ 0 ]);
mpu9250_interface_debug_print ( "mpu9250: roll[0] is %0.2fdeg.n" , gs_roll [ 0 ]);
mpu9250_interface_debug_print ( "mpu9250: yaw[0] is %0.2fdeg.n" , gs_yaw [ 0 ]);
mpu9250_interface_debug_print ( "mpu9250: acc x[0] is %0.2fg.n" , gs_accel_g [ 0 ][ 0 ]);
mpu9250_interface_debug_print ( "mpu9250: acc y[0] is %0.2fg.n" , gs_accel_g [ 0 ][ 1 ]);
mpu9250_interface_debug_print ( "mpu9250: acc z[0] is %0.2fg.n" , gs_accel_g [ 0 ][ 2 ]);
mpu9250_interface_debug_print ( "mpu9250: gyro x[0] is %0.2fdps.n" , gs_gyro_dps [ 0 ][ 0 ]);
mpu9250_interface_debug_print ( "mpu9250: gyro y[0] is %0.2fdps.n" , gs_gyro_dps [ 0 ][ 1 ]);
mpu9250_interface_debug_print ( "mpu9250: gyro z[0] is %0.2fdps.n" , gs_gyro_dps [ 0 ][ 2 ]);
/* delay 500 ms */
mpu9250_interface_delay_ms ( 500 );
....
/* get the pedometer step count */
res = mpu9250_dmp_get_pedometer_counter ( & cnt );
if ( res != 0 )
{
( void ) mpu9250_dmp_deinit ();
g_gpio_irq = NULL ;
( void ) gpio_interrupt_deinit ();
return 1 ;
}
...
}
...
/* deinit */
( void ) mpu9250_dmp_deinit ();
g_gpio_irq = NULL ;
( void ) gpio_interrupt_deinit ();
return 0 ;Online -Dokumente: https://www.libdriver.com/docs/mpu9250/index.html.
Offline -Dokumente: /doc/html/index.html.
Bitte beziehen Sie sich auf den Beitrag.md.
Copyright (C) 2015 - Präsentieren Sie alle Rechte vorbehalten.
Die MIT -Lizenz (MIT)
Die Erlaubnis wird hiermit kostenlos an jede Person erteilt, die eine Kopie erhält
dieser Software und zugehörigen Dokumentationsdateien ("Software"), um zu handeln
In der Software ohne Einschränkung, auch ohne Einschränkung der Rechte
zu verwenden, zu kopieren, zu ändern, zusammenzufassen, zu veröffentlichen, zu vertreiben, zu unterlizenzieren und/oder verkaufen
Kopien der Software und Personen, denen die Software ist
Zu den folgenden Bedingungen geliefert:
Die oben genannte Urheberrechtsbekanntmachung und diese Berechtigungsbekanntmachung ist in alle enthalten
Kopien oder wesentliche Teile der Software.
Die Software wird "wie es ist" bereitgestellt, ohne dass eine Garantie jeglicher Art ausdrückt oder
Impliziert, einschließlich, aber nicht beschränkt auf die Garantien der Marktgängigkeit,
Fitness für einen bestimmten Zweck und Nichtverlust. In keinem Fall die
Autoren oder Urheberrechtsinhaber haften für Ansprüche, Schäden oder andere
Haftung, sei es bei Vertragsklagen, unerlaubter Handlung oder anderweitig, entsteht aus,
Aus oder im Zusammenhang mit der Software oder der Verwendung oder anderen Geschäften in der
SOFTWARE.
Bitte senden Sie eine E-Mail an [email protected].