10 DOF IMU Sensor (D)

来自Waveshare Wiki
跳转至: 导航搜索
10 DOF IMU Sensor (D)
{{{name2}}}
{{{name3}}}
功能简介
特性 10轴惯性导航模块
主要器件 ICM20948
' 无特性,不解释
' 无特性,不解释
' 无特性,不解释
接口 I2C

说明

产品概述

这是一款10轴传感器,板载低功耗ICM20948(3轴加速度、3轴陀螺仪和3轴磁力计),内置数字运动处理引擎,可减少复杂的融合演算数据,减轻处理器的负荷,相比MPU9250,精度更高,拥有更低的功耗,更适用于可穿戴设备。板载BMP280(气压高度计),内置温度传感器,可进行温度补偿,相比BMP180,拥有更强的性能和更低的功耗。通过I2C通信就能获取10轴数据。

产品特性

  • 供电范围:3.3V~5V(内部低压差稳压)
  • 加速度计特性:
    • 分辨率:16位
    • 量程(可选):±2、±4、±8、±16g
    • 工作电流:68.9uA
  • 陀螺仪特性:
    • 分辨率:16位
    • 量程(可选):±250、±500、 ±1000、±2000°/sec
    • 工作电流:1.23mA
  • 磁力计特性:
    • 分辨率:16位
    • 量程:±4900µT
    • 工作电流:90uA
  • 气压高度计特性:
    • 气压分辨率:0.0016hPa
    • 温度分辨率:0.01°C
    • 量程:300~1100hPa(海拔高度:+9000m ~ -500m)
    • 气压相对精度(700hPa~900hPa,25°C~40°C):±0.12hPa(±1m)
    • 工作电流(1Hz更新速率,超低功耗模式):2.8uA

接口说明

引脚号 标识 描述
1 VCC 3.3V~5.5v电源
2 GND 电源地
3 SDA I2C 数据线
4 SCL I2C 时钟线
5 INT ICM20948数字中断输出
6 FSYNC ICM20948帧同步信号

传感器介绍

简介

板载ICM20948芯片包含3轴加速度、3轴角速度、3轴磁力计传感器,下图为传感器的坐标轴定义:
10 DOF IMU Sensor coordinate axis.png

基本设置

加速度传感器

  • 加速度传感器输出的数据为运动加速度与重力加速度的合成值。
  • 当传感器静止放置时,运动加速度为0,此时传感器输出的3轴数值为重力加速度在各坐标轴上的分量。
  • 如果是水平放置,此时理论输出值为 X轴0g、Y轴0g、Z轴-1g。Z轴输出为负值是因为重力加速度方向是向下,而传感器Z轴方向是向上,所以为负值。这里正负仅表示加速度方向与坐标轴方向的关系。
  • 这里需要注意的是,即便传感器绝对水平放置,加速度传感器输出的值也不会等于理论值(0g,0g,-1g),这是因为每颗传感器都有自己独特的零偏存在。在实际使用过程中可以视情况适当去除零偏误差,一般可采集数据后做数据拟合等方法进行去除。

ICM20948加速度量程设置

  • ICM20948支持多种量程,包括±2g、±4g、±8g、±16g,在示例程序中采用的是±2g,如果需要更改量程,可以通过修改<ACCEL_CONFIG>寄存器,下图为datasheet中<ACCEL_CONFIG>寄存器取值与量程的对应关系:

10 DOF IMU Sensor Range.png

  • 以STM32示例代码为例,±2g在代码中设置方法如下:
I2C_WriteOneByte( I2C_ADD_ICM20948, REG_ADD_ACCEL_CONFIG,
                  REG_VAL_BIT_ACCEL_DLPCFG_6 | REG_VAL_BIT_ACCEL_FS_2g | REG_VAL_BIT_ACCEL_DLPF);
  • 如果需要修改为±8g,做如下修改即可:
 I2C_WriteOneByte( I2C_ADD_ICM20948, REG_ADD_ACCEL_CONFIG,
                  REG_VAL_BIT_ACCEL_DLPCFG_6 | REG_VAL_BIT_ACCEL_FS_8g | REG_VAL_BIT_ACCEL_DLPF);

ICM20948加速度单位转换

  • 不同量程时,从传感器寄存器读出的原始值,需要除以相应的转换系数,即可转换为单位为g的加速度,下表各量程对应的系数值:

10 DOF IMU Unit conversion.png

  • 当量程为±2g, 传感器原始值/16384即可得到单位为g的加速度值。

角速度传感器

  • 角速度传感器得到的数值为绕各坐标轴旋转的角速度,当旋转方向与坐标轴标注方向相同时为正,旋转方向与坐标轴标注方向相反时为负。角速度同样存在零偏误差,一般可采用静止放置取均值的方法进行去除。

ICM20948角速度量程设置

  • ICM20948支持多种量程,包括±250、±500、 ±1000、±2000°/sec,在示例程序中采用的是±1000°/sec,如果需要更改量程,可以通过修改<GYRO_CONFIG_1>寄存器,下图为datasheet中<GYRO_CONFIG_1>寄存器取值与量程的对应关系:

10 DOF IMU Angular velocity range.png

  • 以STM32示例代码为例,±1000°/sec在代码中设置方法如下:
I2C_WriteOneByte( I2C_ADD_ICM20948, REG_ADD_GYRO_CONFIG_1,   
                  REG_VAL_BIT_GYRO_DLPCFG_6 | REG_VAL_BIT_GYRO_FS_1000DPS | REG_VAL_BIT_GYRO_DLPF);
  • 如果需要修改为±2000°/sec,做如下修改即可:
I2C_WriteOneByte( I2C_ADD_ICM20948, REG_ADD_GYRO_CONFIG_1,   
                  REG_VAL_BIT_GYRO_DLPCFG_6 | REG_VAL_BIT_GYRO_FS_2000DPS | REG_VAL_BIT_GYRO_DLPF);

ICM20948角速度单位转换

  • 不同量程时,从传感器寄存器读出的原始值,需要除以相应的转换系数,即可转换为单位为°/sec的角速度,下表为各量程对应的系数值:

10 DOF IMU Angular velocity unit conversion.png
当量程为±1000°/sec, 传感器原始值/32.8即可得到单位为°/sec的角速度。

磁力计传感器

  • 磁力计传感器测量的是传感器周边磁场大小,当附近没有较强磁场(电机等)时,磁力计传感器输出的数值为地磁场在三个坐标轴的分量。

ICM20948磁力计

  • 从传感器寄存器读出的原始值,需要乘以转换系数,即可转换为单位为μT($10^-6$特斯拉)的磁场强度,下表为ICM20948中磁力计的转换系数:

10 DOF IMU Magnetometer conversion coefficient.png
既传感器原始值*0.15即可得到单位为μT的磁场强度。

RPI使用教程

开启I2C接口

  • 打开树莓派终端,输入以下指令进入配置界面
sudo raspi-config 
选择 Interfacing Options -> I2C ->yes 启动 i2C 内核驱动

RPI open i2c.png
然后重启树莓派:

sudo reboot

安装库

如果使用bookworm系统,只能使用lgpio库,bcm2835跟wiringPi无法安装与使用

BCM2835

#打开树莓派终端,并运行以下指令
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.71.tar.gz
tar zxvf bcm2835-1.71.tar.gz 
cd bcm2835-1.71/
sudo ./configure && sudo make && sudo make check && sudo make install
# 更多的可以参考官网:http://www.airspayce.com/mikem/bcm2835/

wiringPi

#打开树莓派终端,并运行以下指令
cd
sudo apt-get install wiringpi
#对于树莓派2019年5月之后的系统(早于之前的可不用执行),可能需要进行升级:
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb
gpio -v
# 运行gpio -v会出现2.52版本,如果没有出现说明安装出错

#Bullseye分支系统使用如下命令:
git clone https://github.com/WiringPi/WiringPi
cd WiringPi
./build
gpio -v
# 运行gpio -v会出现2.70版本,如果没有出现说明安装出错

lgpio

#打开树莓派终端,并运行以下指令
wget https://github.com/joan2937/lg/archive/master.zip
unzip master.zip
cd lg-master
sudo make install

# 更多的可以参考官网:https://github.com/gpiozero/lg

下载测试程序

打开树莓派终端,执行:

sudo apt-get install p7zip-full -y
sudo wget  https://www.waveshare.net/w/upload/c/c1/10_DOF_IMU_Sensor_D_Code.7z
7z x 10_DOF_IMU_Sensor_D_Code.7z -O./10_DOF_IMU_Sensor_D_Code
cd 10_DOF_IMU_Sensor_D_Code/RaspberryPi/

硬件连接

树莓派连接引脚对应关系
10 DOF Raspberry Pi 功能
Board物理引脚序号
VCC 5V 电源输入
GND GND 电源地
SDA 3 I2C数据输入
SCL 5 I2C时钟信号

10 DOF IMU RPI C 2.jpg

运行测试程序

以下命令请在RaspberryPi下执行,否则不在索引不到目录;

C

  • 重新编译,编译过程可能需要几秒

BCM2835

cd BCM2853
sudo make clean
sudo make 
sudo ./10Dof-D_D

wiringPi

cd wiringPi
sudo make clean
sudo make 
sudo ./10Dof-D_Demo

注意:如果运行过BCM2835,请重启之后再运行wiringPi。

现象

在树莓派运行程序后,就会输出以下数据:
10 DOF IMU RPI C 1.jpg

串口输出数据含义

Roll, Pitch, Yaw Roll 倾角(°), Pitch 倾角(°), Yaw 倾角(°)
Acceleration 加速度(LSB,可换算为 g
Gyroscope 陀螺仪角速度(LSB,可换算为°/秒
Magnetic 电子罗盘(LSB,可转换μT
Angle 方向角(°),理论上等于 Yaw 倾角。
Pressure 气压值(hPa)
Altitude 海拔高度(m)
Temperature 温度值(℃)

备注:
①:示例程序串口输出的加速度为寄存器原始值(既寄存器数值),该数值
除以16384后,即可转化为单位为g(重力加速度常数)的数值。
②:示例程序串口输出的角速度为寄存器原始值(既寄存器数值),该数值
除以32.8后,即可转化为单位为dps(角度/秒)的数值。
③:示例程序串口输出的磁传感器数值为寄存器原始值(既寄存器数值),该
数值乘以0.15,即可转化为单位为μT(10-6特斯拉)的数值。

STM32使用教程

我们提供的例程是基于STM32F103RBT6,提供的连接方式是对应的STM32F103RBT6的引脚为例,如果有需要使用其他STM32,请按实际引脚连接

硬件连接

STM32F103RB连接引脚对应关系
PCF8591 STM32 功能
VCC 3.3V 电源输入
GND GND 电源地
SDA SDA/PB9 I2C数据输入
SCL SCL/PB8 I2C时钟信号

10 DOF IMU STM32 2.jpg

软件说明

例程是基于HAL库进行开发的。 请在资料里面下载程序,找到STM32程序文件目录,打开10 DOF IMU Sensor (D)\10_DOF_IMU_Sensor_D_Code\STM32\STM32F103RB\MDK-ARM
目录下的10 DOF IMU Sensor (D).uvprojx,即可看到程序。
10 DOF IMU STM32 3.jpg

打开main.c,重新编译下载即可。
MQ5 STM32 2.jpg

下载成功后,运行SSCOM,就可以实时查看传感器的状态啦。
10 DOF IMU STM32 1.jpg

串口输出数据含义

Roll, Pitch, Yaw Roll 倾角(°), Pitch 倾角(°), Yaw 倾角(°)
Acceleration 加速度(LSB,可换算为 g
Gyroscope 陀螺仪角速度(LSB,可换算为°/秒
Magnetic 电子罗盘(LSB,可转换μT
Angle 方向角(°),理论上等于 Yaw 倾角。
Pressure 气压值(hPa)
Altitude 海拔高度(m)
Temperature 温度值(℃)

备注:
①:示例程序串口输出的加速度为寄存器原始值(既寄存器数值),该数值
除以16384后,即可转化为单位为g(重力加速度常数)的数值。
②:示例程序串口输出的角速度为寄存器原始值(既寄存器数值),该数值
除以32.8后,即可转化为单位为dps(角度/秒)的数值。
③:示例程序串口输出的磁传感器数值为寄存器原始值(既寄存器数值),该
数值乘以0.15,即可转化为单位为μT(10-6特斯拉)的数值。

Arduino使用教程

本例程已经在Arduino uno上测试通过,直接按下表连接Arduino uno即可

硬件连接

您可以对照以下表格连线。

Arduino连接引脚对应关系
10 DOF Arduino 功能
VCC 5V 电源输入
GND GND 电源地
SDA SDA I2C数据输入
SCL SCL I2C时钟信号

10 DOF IMU Arduino 2.jpg

安装编译软件(Windows教程)

arduino IDE 安装教程

运行程序

  1. 在我们提供的资料里面下载程序,并解压,再进入10_DOF_IMU_Sensor_D_Code/Arduino/10Dof-D_Demo目录下
  2. 把该程序复制到Arduino安装目录下的Libraries文件夹中,然后打开Arduino文件编译下载即可使用
  3. 双击打开10Dof-D_Demo.ino文件。
  4. 选择你的开发板,跟对应的端口。


MQ5 Arduino 1.jpg

进行编译下载,如下图:
MQ5 Arduino 2.jpg

下载成功后,运行SSCOM,就可以实时查看传感器的状态啦。
10 DOF IMU Arduino 1.jpg

串口输出数据含义

Roll, Pitch, Yaw Roll 倾角(°), Pitch 倾角(°), Yaw 倾角(°)
Acceleration 加速度(LSB,可换算为 g
Gyroscope 陀螺仪角速度(LSB,可换算为°/秒
Magnetic 电子罗盘(LSB,可转换μT
Angle 方向角(°),理论上等于 Yaw 倾角。
Pressure 气压值(hPa)
Altitude 海拔高度(m)
Temperature 温度值(℃)

备注:
①:示例程序串口输出的加速度为寄存器原始值(既寄存器数值),该数值
除以16384后,即可转化为单位为g(重力加速度常数)的数值。
②:示例程序串口输出的角速度为寄存器原始值(既寄存器数值),该数值
除以32.8后,即可转化为单位为dps(角度/秒)的数值。
③:示例程序串口输出的磁传感器数值为寄存器原始值(既寄存器数值),该
数值乘以0.15,即可转化为单位为μT(10-6特斯拉)的数值。

FAQ

加速度输出频率:4~4000Hz

角速度输出频率:4~8000Hz


加速度计一般不用校准。 是想做温漂吗?简单的可以放到温箱里,做各个温度的分段零飘采集。 如果使用环境温度变化不大,则不用校准。


气压计只能用于测量相对高度,且测量值不具备重复性(除非是特定实验室环境)。所以气压计一般用来测量短时的高度差。

测量绝对高度(海拔)一般是用GPS。

售后


联系人:黄工
QQ:2850151199
EMAIL:2850151199@qq.com
电话:0755-83040712
微信:扫下方二维码添加
Service20-Weichat.png

说明:进行售后服务前,请准备好客户信息(定货单位、定货人等),以供验证