10 DOF IMU Sensor (D)
| ||||||||||||||||||||||||
|
说明
产品概述
这是一款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轴磁力计传感器,下图为传感器的坐标轴定义:
基本设置
加速度传感器
- 加速度传感器输出的数据为运动加速度与重力加速度的合成值。
- 当传感器静止放置时,运动加速度为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>寄存器取值与量程的对应关系:
- 以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的加速度,下表各量程对应的系数值:
- 当量程为±2g, 传感器原始值/16384即可得到单位为g的加速度值。
角速度传感器
- 角速度传感器得到的数值为绕各坐标轴旋转的角速度,当旋转方向与坐标轴标注方向相同时为正,旋转方向与坐标轴标注方向相反时为负。角速度同样存在零偏误差,一般可采用静止放置取均值的方法进行去除。
ICM20948角速度量程设置
- ICM20948支持多种量程,包括±250、±500、 ±1000、±2000°/sec,在示例程序中采用的是±1000°/sec,如果需要更改量程,可以通过修改<GYRO_CONFIG_1>寄存器,下图为datasheet中<GYRO_CONFIG_1>寄存器取值与量程的对应关系:
- 以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的角速度,下表为各量程对应的系数值:
当量程为±1000°/sec, 传感器原始值/32.8即可得到单位为°/sec的角速度。
磁力计传感器
- 磁力计传感器测量的是传感器周边磁场大小,当附近没有较强磁场(电机等)时,磁力计传感器输出的数值为地磁场在三个坐标轴的分量。
ICM20948磁力计
- 从传感器寄存器读出的原始值,需要乘以转换系数,即可转换为单位为μT($10^-6$特斯拉)的磁场强度,下表为ICM20948中磁力计的转换系数:
RPI使用教程
开启I2C接口
- 打开树莓派终端,输入以下指令进入配置界面
sudo raspi-config 选择 Interfacing Options -> I2C ->yes 启动 i2C 内核驱动
sudo reboot
安装库
如果使用bookworm系统,只能使用lgpio库,bcm2835跟wiringPi无法安装与使用,python库可以不安装,直接运行程序即可
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时钟信号 |
运行测试程序
以下命令请在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。
现象
串口输出数据含义
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,请按实际引脚连接
硬件连接
PCF8591 | STM32 | 功能 |
VCC | 3.3V | 电源输入 |
GND | GND | 电源地 |
SDA | SDA/PB9 | I2C数据输入 |
SCL | SCL/PB8 | I2C时钟信号 |
软件说明
例程是基于HAL库进行开发的。
请在资料里面下载程序,找到STM32程序文件目录,打开10 DOF IMU Sensor (D)\10_DOF_IMU_Sensor_D_Code\STM32\STM32F103RB\MDK-ARM
目录下的10 DOF IMU Sensor (D).uvprojx,即可看到程序。
串口输出数据含义
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即可
硬件连接
您可以对照以下表格连线。
10 DOF | Arduino | 功能 |
VCC | 5V | 电源输入 |
GND | GND | 电源地 |
SDA | SDA | I2C数据输入 |
SCL | SCL | I2C时钟信号 |
安装编译软件(Windows教程)
运行程序
- 在我们提供的资料里面下载程序,并解压,再进入10_DOF_IMU_Sensor_D_Code/Arduino/10Dof-D_Demo目录下
- 把该程序复制到Arduino安装目录下的Libraries文件夹中,然后打开Arduino文件编译下载即可使用
- 双击打开10Dof-D_Demo.ino文件。
- 选择你的开发板,跟对应的端口。
进行编译下载,如下图:
下载成功后,运行SSCOM,就可以实时查看传感器的状态啦。
串口输出数据含义
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。