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
<PackageReference Include="nanoFramework.Iot.Device.Mpu9250" Version="1.2.613" />
paket add nanoFramework.Iot.Device.Mpu9250 --version 1.2.613
#r "nuget: nanoFramework.Iot.Device.Mpu9250, 1.2.613"
// 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。该传感器可以在各种实现中找到,如 Grove 或 Sparkfun。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 HzGyroscopeRange
用于调整陀螺仪的范围,从每秒 250、500、1000 和 2000 度GyroscopeScale
用于调整测量频率,从 5 Hz 到 8800 HzSampleRateDivider
允许您减少陀螺仪和加速度计的样本数。此功能仅适用于一些带宽模式。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
然后将这些数据转换成正确的数据取决于您。您可以乘以加速度 AccelerometionScale
和 GyroscopeScale
来正确转换它们。
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连接起来的一种方法。
-
- nanoFramework.CoreLibrary (>= 1.15.5)
- nanoFramework.System.Buffers.Binary.BinaryPrimitives (>= 1.2.586)
- nanoFramework.System.Device.I2c (>= 1.1.16)
- nanoFramework.System.Device.Model (>= 1.2.586)
- nanoFramework.System.Diagnostics.Stopwatch (>= 1.2.586)
- nanoFramework.System.Math (>= 1.5.43)
- nanoFramework.System.Numerics (>= 1.2.586)
- UnitsNet.nanoFramework.Temperature (>= 5.56.0)
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 |