资料介绍
描述
MPU-9250 是目前市场上最先进的加速度计、陀螺仪和指南针组合小尺寸传感器之一。它取代了流行的 MPU-9150,降低了功耗,改善了陀螺噪声和罗盘满量程性能。它具有许多高级功能,包括低通滤波、运动检测甚至可编程专用处理器。
它内部包括 MPU-6500,其中包含一个 3 轴陀螺仪和一个 3 轴加速度计,以及AK8963 ,市场领先的 3 轴数字罗盘。MPU-9250 使用 16 位模数转换器 (ADC) 对所有 9 个轴进行数字化。
陀螺仪
陀螺仪是一种用于测量或保持方向和角速度的设备。以每秒度数(或弧度)为单位测量的角速度是单位时间内物体旋转角度的变化。
根据方向的不同,角速率测量分为三种类型:
- 偏航:从上方看物体时在平面上的水平旋转。
- 俯仰:从正面看物体时的垂直旋转。
- 滚动:从前面看物体时水平旋转。
加速度计
加速度计传感器是测量加速度的集成电路 (IC),加速度是每单位时间的速度变化。测量加速度可以获取物体倾斜度和振动等信息。
通常,g用作加速度的单位,相对于标准重力 (1g = 9.80665m/s2)。
磁力计
磁力计提供有关设备传感器检测到的磁场的信息,理论上可以暴露用户的位置。磁力计传感器测量所有三个物理轴(x、y、z)的磁场,单位为 μT(微特斯拉)。
绝对方向传感器是磁力计的常见用例之一,它代表地球平面的固定方向(固定到磁场矢量和重力矢量)。
接线图

解释数据
我们的官方存储库中有官方 MPU9250 数据表和寄存器图。它描述了 MPU-9250 中每个寄存器的功能和内容,包括磁力计。我们建议您阅读十进制、二进制和十六进制表示的帖子,以轻松识别寄存器并理解其中内容的含义。

寄存器映射的前两列表示十六进制和十进制格式的地址,后跟寄存器名称。一些寄存器是只读的(用 R 标记),而另一些则允许我们写(用 R/W 标记)。寄存器的内容用 8 位表示。在各种情况下,寄存器的值可能代表不止一个东西,换句话说,每个位或位组可能具有不同的含义,例如GYRO_CONFIG(寄存器27)。
MPU-9250 的每个传感器都具有 16 位精度。这意味着使用两个 8 位寄存器来表示输出。我们将从每个寄存器中分别读取 8 位数据,然后将它们连接起来形成 16 位。
为 I2C 安装 Arduino 库
我们将使用 I2C 协议与寄存器交互并读/写数据。I2C 库为此目的提供了一个非常简单的接口,并且可以在使用 I2C 协议的其他项目中重用。它可以从我们的官方存储库中下载。
要导入库,请打开 Arduino IDE,转到 Sketch > Include Library > Add.ZIP Library,然后选择从我们的 GitHub 存储库下载的库文件。

然后你可以简单地使用include语句:
#include "I2C.h"
它将包含具有与寄存器交互的预定义函数的库。
Arduino代码
我们为每个原始传感器数据定义了一个单独的结构:gyroscope_raw 、accelerometer_raw 、magnetometer_raw和temperature_raw 。每个原始结构都有一个基于当前配置的数据规范化函数。人类可读的标准化值存储在另一个名为normalized的结构中。
确保遵循上一步并导入 I2C 库,以便将其与include语句一起使用:
#include "Wire.h"
#include "I2C.h"
#define MPU9250_IMU_ADDRESS 0x68
#define MPU9250_MAG_ADDRESS 0x0C
#define GYRO_FULL_SCALE_250_DPS 0x00
#define GYRO_FULL_SCALE_500_DPS 0x08
#define GYRO_FULL_SCALE_1000_DPS 0x10
#define GYRO_FULL_SCALE_2000_DPS 0x18
#define ACC_FULL_SCALE_2G 0x00
#define ACC_FULL_SCALE_4G 0x08
#define ACC_FULL_SCALE_8G 0x10
#define ACC_FULL_SCALE_16G 0x18
#define TEMPERATURE_OFFSET 21 // As defined in documentation
#define INTERVAL_MS_PRINT 1000
#define G 9.80665
struct gyroscope_raw {
int16_t x, y, z;
} gyroscope;
struct accelerometer_raw {
int16_t x, y, z;
} accelerometer;
struct magnetometer_raw {
int16_t x, y, z;
struct {
int8_t x, y, z;
} adjustment;
} magnetometer;
struct temperature_raw {
int16_t value;
} temperature;
struct {
struct {
float x, y, z;
} accelerometer, gyroscope, magnetometer;
float temperature;
} normalized;
unsigned long lastPrintMillis = 0;
void setup()
{
Wire.begin();
Serial.begin(115200);
I2CwriteByte(MPU9250_IMU_ADDRESS, 27, GYRO_FULL_SCALE_1000_DPS); // Configure gyroscope range
I2CwriteByte(MPU9250_IMU_ADDRESS, 28, ACC_FULL_SCALE_2G); // Configure accelerometer range
I2CwriteByte(MPU9250_IMU_ADDRESS, 55, 0x02); // Set by pass mode for the magnetometers
I2CwriteByte(MPU9250_IMU_ADDRESS, 56, 0x01); // Enable interrupt pin for raw data
setMagnetometerAdjustmentValues();
//Start magnetometer
I2CwriteByte(MPU9250_MAG_ADDRESS, 0x0A, 0x12); // Request continuous magnetometer measurements in 16 bits (mode 1)
}
void loop()
{
unsigned long currentMillis = millis();
if (isImuReady()) {
readRawImu();
normalize(gyroscope);
normalize(accelerometer);
normalize(temperature);
}
if (isMagnetometerReady()) {
readRawMagnetometer();
normalize(magnetometer);
}
if (currentMillis - lastPrintMillis > INTERVAL_MS_PRINT) {
Serial.print("TEMP:\t");
Serial.print(normalized.temperature, 2);
Serial.print("\xC2\xB0"); //Print degree symbol
Serial.print("C");
Serial.println();
Serial.print("GYR (");
Serial.print("\xC2\xB0"); //Print degree symbol
Serial.print("/s):\t");
Serial.print(normalized.gyroscope.x, 3);
Serial.print("\t\t");
Serial.print(normalized.gyroscope.y, 3);
Serial.print("\t\t");
Serial.print(normalized.gyroscope.z, 3);
Serial.println();
Serial.print("ACC (m/s^2):\t");
Serial.print(normalized.accelerometer.x, 3);
Serial.print("\t\t");
Serial.print(normalized.accelerometer.y, 3);
Serial.print("\t\t");
Serial.print(normalized.accelerometer.z, 3);
Serial.println();
Serial.print("MAG (");
Serial.print("\xce\xbc"); //Print micro symbol
Serial.print("T):\t");
Serial.print(normalized.magnetometer.x, 3);
Serial.print("\t\t");
Serial.print(normalized.magnetometer.y, 3);
Serial.print("\t\t");
Serial.print(normalized.magnetometer.z, 3);
Serial.println();
Serial.println();
lastPrintMillis = currentMillis;
}
}
注意:该片段是位于我们的 GitHub存储库中的 Arduino 项目的一部分,代码分隔在不同的逻辑文件中。
测试
串行监视器将每隔INTERVAL_MS_PRINT毫秒打印最后一次可用的传感器数据(在上面的示例中,每秒一次),它应该类似于:

通常方向是在物理模块上绘制的,因此您可以轻松检测 X、Y 和 Z 轴。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
- 使用Arduino和加速度计陀螺仪传感器MPU9250制作指南针
- 使用MPU9250获取实时位置
- QFN封装的复合芯片MPU9250数据手册 1次下载
- MPU9250资料包分享 47次下载
- stm32驱动mpu6050、mpu6500、mpu9250心得
- 用arduino uno的IIC读取JY901角度传感器的数据
- MPU9250九轴9轴姿态加速度陀螺仪传感器的资料合集免费下载 74次下载
- 使用STM32单片机实现MPU9250九轴传感器实验的详细资料说明 37次下载
- MPU9250的中文数据手册免费下载 212次下载
- 使用STM32单片机读取MPU6050传感器数据的程序免费下载 61次下载
- MPU9250芯片的相关资料合集免费下载 76次下载
- 九轴传感器MPU9250详细资料 160次下载
- MPU-9250-寄存器手册 0次下载
- MPU9250数据采集和解析 237次下载
- GY9250 MPU9250资料 182次下载
- MPU6050传感器解析实验 4279次阅读
- 采用数字微波传感器和Arduino控制板实现人体探测系统 2202次阅读
- 采用数字微波传感器、继电器和Arduino控制板的自动光控系统 969次阅读
- 如何使用Arduino和LDR传感器实现LCD液晶屏亮度的自动调节 7185次阅读
- 基于钻井深度显示器和带有Arduino支持的7段显示器设计 2670次阅读
- dfrobot模拟角度传感器简介 1965次阅读
- 如何检测车速传感器? 2w次阅读
- 数字传感器和模拟传感器的区别 2.5w次阅读
- ldc1000传感器是什么_ldc1000怎么用 9268次阅读
- 无线瓦斯传感器节点设计解说 1477次阅读
- 位移传感器是做什么用的_位移传感器怎么用 2.9w次阅读
- mpu6050和mpu3050有什么不同和相同(基础介绍和区别分析) 3.6w次阅读
- mpu6050六轴传感器模块驱动程序源代码分享 3.7w次阅读
- RF无线技术:工业用无线传感器网络 2065次阅读
- 温度传感器到数字MPU的连接电路 2186次阅读
下载排行
本周
- 1山景DSP芯片AP8248A2数据手册
- 1.06 MB | 532次下载 | 免费
- 2RK3399完整板原理图(支持平板,盒子VR)
- 3.28 MB | 339次下载 | 免费
- 3TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 4DFM软件使用教程
- 0.84 MB | 295次下载 | 免费
- 5元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 227次下载 | 免费
- 6迪文DGUS开发指南
- 31.67 MB | 194次下载 | 免费
- 7元宇宙底层硬件系列报告
- 13.42 MB | 182次下载 | 免费
- 8FP5207XR-G1中文应用手册
- 1.09 MB | 178次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33566次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6656次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537798次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420027次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191187次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论