nanoFramework.Iot.Device.Mpu9250 1.2.613

前缀已保留
dotnet add package nanoFramework.Iot.Device.Mpu9250 --version 1.2.613                
NuGet\Install-Package nanoFramework.Iot.Device.Mpu9250 -Version 1.2.613                
此命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用 NuGet 模块的 Install-Package 版本。
<PackageReference Include="nanoFramework.Iot.Device.Mpu9250" Version="1.2.613" />                
对于支持 PackageReference 的项目,将此 XML 节点复制到项目文件中,以引用该包。
paket add nanoFramework.Iot.Device.Mpu9250 --version 1.2.613                
#r "nuget: nanoFramework.Iot.Device.Mpu9250, 1.2.613"                
#r 指令可以用于 F# Interactive 和 Polyglot Notebooks。将此复制到交互工具或脚本的源代码中,以引用该包。
// Install nanoFramework.Iot.Device.Mpu9250 as a Cake Addin
#addin nuget:?package=nanoFramework.Iot.Device.Mpu9250&version=1.2.613

// Install nanoFramework.Iot.Device.Mpu9250 as a Cake Tool
#tool nuget:?package=nanoFramework.Iot.Device.Mpu9250&version=1.2.613                

MPU6050/MPU6500/MPU9250 - 陀螺仪、加速度计、温度计和磁力计(仅限于 MPU9250)

MPU6050/MPU6500 是 3 轴陀螺仪、3 轴加速度计和温度传感器,可以通过 I2C 或 SPI 存取。此实现仅为 I2C。该传感器可以在各种实现中找到,但其主要用途是在 MPU9250 中。

MPU9250 是一个 3 轴陀螺仪、3 轴加速度计、3 轴磁力计和温度传感器,可以通过 I2C 或 SPI 存取。此实现仅为 I2C。该传感器可以在各种实现中找到,如 GroveSparkfun。MPU9250 集成了 MPU6500 和 AK8963。

使用的磁力计是 AK8963。通常,它通过主 MPU9250 管理并设置为复制的 I2C。所有操作都通过 MPU9250 进行。在某些情况下,AK8963 是公开的,并且操作不通过 MPU9250,而是直接进行。

文档

用法

重要:在创建 I2cDevice 之前,请确保正确设置 ESP32 的 I2C 引脚,并确保安装了 nanoFramework.Hardware.ESP32 nuget

//////////////////////////////////////////////////////////////////////
// when connecting to an ESP32 device, need to configure the I2C GPIOs
// used for the bus
Configuration.SetPinFunction(21, DeviceFunction.I2C1_DATA);
Configuration.SetPinFunction(22, DeviceFunction.I2C1_CLOCK);

对于 STM32 等其他设备,请确保您正在使用您想要使用的 I2C 总线的预设引脚。

与 AK8963 相关的一般情况未公开(您在 I2C 总线上找不到地址为 0x0C 的 AK8963)。

var mpui2CConnectionSettingmpus = new I2cConnectionSettings(1, Mpu9250.DefaultI2cAddress);
Mpu9250 mpu9250 = new Mpu9250(I2cDevice.Create(mpui2CConnectionSettingmpus));

如果 AK8963 是公开的,您可以直接访问它,然后可以使用以下代码

var mpui2CConnectionSettingmpus = new I2cConnectionSettings(1, Mpu9250.DefaultI2cAddress);
using Mpu9250 mpu9250 = new Mpu9250(I2cDevice.Create(mpui2CConnectionSettingmpus), i2CDeviceAk8963: I2cDevice.Create(new I2cConnectionSettings(1, Ak8963.DefaultI2cAddress)));

sample 目录中可以找到示例。使用方法简单,包括对所有子传感器的校准选项。

var mpui2CConnectionSettingmpus = new I2cConnectionSettings(1, Mpu9250.DefaultI2cAddress);
Mpu9250 mpu9250 = new Mpu9250(I2cDevice.Create(mpui2CConnectionSettingmpus));
var gyro = mpu9250.GetGyroscope();
Debug.WriteLine($"Gyro X = {gyro.X, 15}");
Debug.WriteLine($"Gyro Y = {gyro.Y, 15}");
Debug.WriteLine($"Gyro Z = {gyro.Z, 15}");
var acc = mpu9250.GetAccelerometer();
Debug.WriteLine($"Acc X = {acc.X, 15}");
Debug.WriteLine($"Acc Y = {acc.Y, 15}");
Debug.WriteLine($"Acc Z = {acc.Z, 15}");
Debug.WriteLine($"Temp = {mpu9250.Temperature.Celsius.ToString("0.00")} °C");
var magne = mpu9250.ReadMagnetometer(true);
Debug.WriteLine($"Mag X = {magne.X, 15}");
Debug.WriteLine($"Mag Y = {magne.Y, 15}");
Debug.WriteLine($"Mag Z = {magne.Z, 15}");

自检

为陀螺仪和加速度计提供了自检功能。

var resSelfTest = mpu9250.RunGyroscopeAccelerometerSelfTest();
Debug.WriteLine($"Self test:");
Debug.WriteLine($"Gyro X = {resSelfTest.Item1.X} vs >0.005");
Debug.WriteLine($"Gyro Y = {resSelfTest.Item1.Y} vs >0.005");
Debug.WriteLine($"Gyro Z = {resSelfTest.Item1.Z} vs >0.005");
Debug.WriteLine($"Acc X = {resSelfTest.Item2.X} vs >0.005 & <0.015");
Debug.WriteLine($"Acc Y = {resSelfTest.Item2.Y} vs >0.005 & <0.015");
Debug.WriteLine($"Acc Z = {resSelfTest.Item2.Z} vs >0.005 & <0.015");

返回的数据是原始数据,并允许您估计测试的质量。元组的第一个元素是陀螺仪,第二个元素是加速度计。

磁力计没有提供自检功能。

校准和偏置

您可以同时校准陀螺仪和加速度计。此操作同样直接在校准 MPU9250 芯片中的寄存器。如果在断电时,这些数据将会丢失,但在软复位的情况下会保留。

Debug.WriteLine("Running Gyroscope and Accelerometer calibration");
mpu9250.CalibrateGyroscopeAccelerometer();
Debug.WriteLine("Calibration results:");
Debug.WriteLine($"Gyro X bias = {mpu9250.GyroscopeBias.X}");
Debug.WriteLine($"Gyro Y bias = {mpu9250.GyroscopeBias.Y}");
Debug.WriteLine($"Gyro Z bias = {mpu9250.GyroscopeBias.Z}");
Debug.WriteLine($"Acc X bias = {mpu9250.AccelerometerBias.X}");
Debug.WriteLine($"Acc Y bias = {mpu9250.AccelerometerBias.Y}");
Debug.WriteLine($"Acc Z bias = {mpu9250.AccelerometerBias.Z}");

校准也适用于磁力计(AK8963)。对于此传感器。

Debug.WriteLine("Magnetometer calibration is taking couple of seconds, please be patient!");
Debug.WriteLine("Please make sure you are not close to any magnetic field like magnet or phone. Move the sensor in all possible directions");
var mag = mpu9250.CalibrateMagnetometer();
Debug.WriteLine($"Correction factor bias:");
Debug.WriteLine($"Mag X = {mpu9250.MagnometerBias.X}");
Debug.WriteLine($"Mag Y = {mpu9250.MagnometerBias.Y}");
Debug.WriteLine($"Mag Z = {mpu9250.MagnometerBias.Z}");

有关磁力计校准的更多信息,请参阅 AK8963 校准。请注意,您有一个完整的代码示例来读取和保存数据到文件中,以便更深入地了解磁力计校准。

注意:必须先进行 AK8963 校准,然后再使用其他校准和传感器部分的任何其他部分。

单位

所有轴都以这种方式定向:+Z +Y \ | / \ | / |/ /|
/ |
/ |
+X

陀螺仪

用于陀螺仪的单位是每秒度数。

加速度计

用于加速度计的单位是 G。

磁力计

用于磁力计的单位是 µTesla。

温度

温度是一个规范化的 Unit.Temperature,可以提供摄氏度、开尔文或华氏度。

测量模式

MPU9250 提供了大量的测量模式。可以通过如下属性来更改和调整它们:

  • MagnetometerMeasurementMode 用于调整磁力计的测量类型
  • MagnetometerOutputBitMode 用于选择 14 位和 16 位精度之间的磁力计
  • AccelerometerRange 用于调整加速度计的范围,介于 2、4、8 或 16 G 之间
  • AccelerometionScale 用于调整测量频率,从 5 Hz 到 1130 Hz
  • GyroscopeRange 用于调整陀螺仪的范围,从每秒 250、500、1000 和 2000 度
  • GyroscopeScale 用于调整测量频率,从 5 Hz 到 8800 Hz
  • SampleRateDivider 允许您减少陀螺仪和加速度计的样本数。此功能仅适用于一些带宽模式。
  • DisableModes 允许您禁用陀螺仪和加速度计的任何轴

运动唤醒

有独特的 SetWakeOnMotion 模式可用。将 MPU9250 放入低功耗、低测量速率模式,并在 INT 引脚上触发中断。

mpu9250.SetWakeOnMotion(300, AccelerometerLowPowerFrequency.Frequency0Dot24Hz);
// You'll need to attach the INT pin to a GPIO and read the level. Once going up, you have
// some data and the sensor is awake
// In order to simulate this without a GPIO pin, you will see that the refresh rate is very low
// Setup here at 0.24Hz which means, about every 4 seconds

while (true)
{
    var acc = mpu9250.GetAccelerometer();
    Debug.WriteLine($"Acc X = {acc.X, 15}");
    Debug.WriteLine($"Acc Y = {acc.Y, 15}");
    Debug.WriteLine($"Acc Z = {acc.Z, 15}");
    Thread.Sleep(100);
}

FIFO 模式

FIFO 模式允许您批量获取数据。您可以通过 FifoModes 选择模式,然后通过读取 FifoCount 属性来读取数据。然后通过 ReadFifo 读取数据。务必使用 Span<byte> 的大小为 FifoCount 长度。

数据按照从 0x3B 到 0x60 的寄存器顺序排列,因此您会按此顺序获得数据

  • ACCEL_XOUT_H 和 ACCEL_XOUT_L
  • ACCEL_YOUT_H 和 ACCEL_YOUT_L
  • ACCEL_ZOUT_H 和 ACCEL_ZOUT_L
  • TEMP_OUT_H 和 TEMP_OUT_L
  • GYRO_XOUT_H 和 GYRO_XOUT_L
  • GYRO_YOUT_H 和 GYRO_YOUT_L
  • GYRO_ZOUT_H 和 GYRO_ZOUT_L
  • EXT_SENS_DATA_00 到 EXT_SENS_DATA_24

然后将这些数据转换成正确的数据取决于您。您可以乘以加速度 AccelerometionScaleGyroscopeScale 来正确转换它们。

I2C复制原语

2个原语函数允许读写字符设备中的任何寄存器。

  • I2cWrite(I2cChannel i2cChannel, byte address, byte register, byte data)
    • i2cChannel: 连接到I2C设备的中继通道
    • address: 中继I2C元素的I2C地址
    • register: 要写入中继I2C元素的寄存器
    • data: 要写入中继I2C元素的字节数据
  • I2cRead(I2cChannel i2cChannel, byte address, byte register, SpanByte readBytes)
    • i2cChannel: 连接到I2C设备的中继通道
    • address: 中继I2C元素的I2C地址
    • register: 要写入中继I2C元素的寄存器
    • readBytes: 读取的数据

电路

以下Fritzing图展示了如何使用I2C将MPU9250与ESP32等MCU连接起来的一种方法。

ESP32 Breadboard diagram

产品 兼容的以及额外的计算目标框架版本。
.NET框架 net是兼容的。
兼容的目标框架
包含的目标框架(在包中)
了解更多关于 目标框架.NET标准 的信息。

NuGet包

此包不使用任何NuGet包。

GitHub仓库

此包不使用任何流行的GitHub仓库。

版本 下载 最后更新
1.2.613 62 8/9/2024
1.2.601 58 7/26/2024
1.2.590 68 7/17/2024
1.2.573 88 6/19/2024
1.2.570 69 6/14/2024
1.2.536 103 4/15/2024
1.2.514 103 3/22/2024
1.2.494 109 2/28/2024
1.2.462 162 1/5/2024
1.2.458 123 12/20/2023
1.2.436 168 11/10/2023
1.2.416 113 11/8/2023
1.2.403 140 10/6/2023
1.2.396 131 9/27/2023
1.2.384 158 9/6/2023
1.2.378 170 8/16/2023
1.2.369 184 8/2/2023
1.2.363 141 7/28/2023
1.2.357 161 7/19/2023
1.2.354 156 7/14/2023
1.2.345 166 6/21/2023
1.2.341 159 6/14/2023
1.2.337 175 6/7/2023
1.2.335 165 6/2/2023
1.2.329 163 5/26/2023
1.2.313 168 5/12/2023
1.2.302 168 5/10/2023
1.2.297 153 5/3/2023
1.2.273 244 3/17/2023
1.2.267 270 3/10/2023
1.2.263 271 3/8/2023
1.2.259 284 2/27/2023
1.2.256 268 2/24/2023
1.2.253 284 2/22/2023
1.2.222 342 1/9/2023
1.2.217 324 1/6/2023
1.2.212 324 1/5/2023
1.2.208 330 1/3/2023
1.2.203 341 12/28/2022
1.2.159 417 11/14/2022
1.2.153 407 11/5/2022
1.2.141 418 10/25/2022
1.2.128 411 10/22/2022
1.2.110 409 10/7/2022
1.2.87 526 9/15/2022
1.2.63 441 9/3/2022
1.2.47 422 8/15/2022
1.2.40 459 8/6/2022
1.2.38 445 8/5/2022
1.2.28 460 8/1/2022
1.2.13 468 7/24/2022
1.2.10 440 7/23/2022
1.1.142.3202 471 7/7/2022
1.1.133.52556 471 6/30/2022
1.1.121.35854 503 6/26/2022
1.1.116.8772 474 6/24/2022
1.1.113.2032 476 6/23/2022
1.1.102.51394 457 6/15/2022
1.1.99.36719 452 6/14/2022
1.1.97.17326 440 6/13/2022
1.1.92.53000 453 6/8/2022
1.1.72.29765 487 5/31/2022
1.1.64.21380 469 5/26/2022
1.1.58.10097 479 5/23/2022
1.1.54.28879 497 5/23/2022
1.1.40 477 5/5/2022
1.1.3 486 4/15/2022
1.1.1 475 4/14/2022
1.0.300 474 3/31/2022
1.0.288-preview.114 123 3/25/2022
1.0.288-preview.113 111 3/25/2022
1.0.288-preview.106 114 3/23/2022
1.0.288-preview.104 98 3/22/2022
1.0.288-preview.103 102 3/21/2022
1.0.288-preview.100 111 3/19/2022
1.0.288-preview.98 105 3/18/2022
1.0.288-preview.95 120 3/15/2022
1.0.288-preview.93 112 3/15/2022
1.0.288-preview.87 114 3/10/2022
1.0.288-preview.86 115 3/8/2022
1.0.288-preview.77 118 2/27/2022
1.0.288-preview.75 105 2/26/2022
1.0.288-preview.65 112 2/18/2022
1.0.288-preview.63 110 2/16/2022
1.0.288-preview.61 114 2/12/2022
1.0.288-preview.58 111 2/10/2022
1.0.288-preview.53 113 2/9/2022
1.0.288-preview.48 128 2/4/2022
1.0.288-preview.41 123 1/31/2022
1.0.288-preview.29 126 1/28/2022
1.0.288-preview.20 130 1/27/2022
1.0.288-preview.18 129 1/27/2022
1.0.288-preview.5 130 1/24/2022
1.0.272 514 1/10/2022
1.0.259 352 12/9/2021
1.0.258 315 12/7/2021
1.0.155 360 8/31/2021
1.0.130 157 7/6/2021
1.0.129 154 7/6/2021
1.0.125 188 7/5/2021
1.0.121 195 6/29/2021
1.0.119 220 6/28/2021
1.0.56 204 5/25/2021