旧乡故客
发表于: 前天 11:46 | 显示全部楼层

ICM-45686是TDK InvenSense最新推出的一款超高性能六轴MEMS运动传感器,采用独特的BalancedGyro技术,可实现极佳的抗震和温度稳定性性能,并提供超低功耗。在本篇帖子中,我们将主要介绍如何基于Arduino UNO开发板通过SPI方式使用ICM-45686模块,实现读取加速度计和陀螺仪的原始数据。


所需的组件

●  Arduino UNO开发板

●  YBX-ICM45686六轴惯性测量单元模块(淘宝链接

●  连接跳线

●  USB线缆


YBX-ICM45686六轴惯性测量单元模块

YBX-ICM45686模块是博根工作室推出的模块扩展板,采用TDK InvenSense 6轴MEMS运动传感器ICM-45686。该运动传感器是一款高性能双接口 (UI + AUX) 六轴MEMS运动跟踪器件。ICM-45686支持此IMU类中最低的陀螺仪和加速度传感器噪声,并且具有最高的温度、冲击或弯曲引起的偏移稳定性,以及对带外振动引起的噪声的免疫力。其他业界领先的功能包括用于手势识别、活动分类和计步器的片上APEX运动处理引擎,以及可编程数字滤波器和嵌入式温度传感器。


该模块加速度传感器同时支持SPI和I2C接口方式,板载电源LDO,支持3.3V和5V电源输入。

YBX-ICM45686六轴惯性测量单元模块.jpg


硬件连接

Arduino开发板通过SPI连接到YBX-ICM45686模块,以下是硬件连接原理图:

YBX-ICM45686六轴惯性测量单元模块硬件连接方式.jpg


首先连接SPI接口,将YBX-ICM45686模块的SCK、MOSI和MISO分别连接到Arduino UNO开发板的引脚13(SCK)、11(MOSI)和12(MISO),片选引脚CSB连接到10。

YBX-ICM45686模块的VCC连接到+5V引脚,GND引脚连接到Arduino的任意GND引脚。

硬件连接完成后如下图所示:


安装库文件

在进行编程之前,我们需要安装TDK InvenSense公司官方提供的ICM45686的库文件,可以在Github上面下载,下载链接:motion.arduino.ICM45686。也可以在库管理器中搜索ICM45686,找到该库文件,然后进行安装。

ICM45686库文件.jpg


该库文件支持使用SPI或I2C接口轻松配置和记录ICM45686设备的加速度计、陀螺仪和温度数据。它还提供嵌入式算法,例如点击、倾斜、计步器、运动唤醒的相关示例代码。


代码

本文使用的是库文件中提供的Polling_SPI示例。

首先将代码中的CS引脚修改成10:

  1. // Instantiate an ICM456XX with SPI interface and CS on pin 10
  2. ICM456xx IMU(SPI,10);
复制代码

完整的代码如下所示:

  1. #include "ICM45686.h"

  2. // Instantiate an ICM456XX with SPI interface and CS on pin 8
  3. ICM456xx IMU(SPI,8);

  4. void setup() {
  5.   int ret;
  6.   Serial.begin(115200);
  7.   while(!Serial) {}

  8.   // Initializing the ICM456XX
  9.   ret = IMU.begin();
  10.   if (ret != 0) {
  11.     Serial.print("ICM456xx initialization failed: ");
  12.     Serial.println(ret);
  13.     while(1);
  14.   }
  15.   // Accel ODR = 100 Hz and Full Scale Range = 16G
  16.   IMU.startAccel(100,16);
  17.   // Gyro ODR = 100 Hz and Full Scale Range = 2000 dps
  18.   IMU.startGyro(100,2000);
  19.   // Wait IMU to start
  20.   delay(100);
  21. }

  22. void loop() {

  23.   inv_imu_sensor_data_t imu_data;

  24.   // Read registers
  25.   IMU.getDataFromRegisters(imu_data);

  26.   // Format data for Serial Plotter
  27.   Serial.print("AccelX:");
  28.   Serial.println(imu_data.accel_data[0]);
  29.   Serial.print("AccelY:");
  30.   Serial.println(imu_data.accel_data[1]);
  31.   Serial.print("AccelZ:");
  32.   Serial.println(imu_data.accel_data[2]);
  33.   Serial.print("GyroX:");
  34.   Serial.println(imu_data.gyro_data[0]);
  35.   Serial.print("GyroY:");
  36.   Serial.println(imu_data.gyro_data[1]);
  37.   Serial.print("GyroZ:");
  38.   Serial.println(imu_data.gyro_data[2]);
  39.   Serial.print("Temperature:");
  40.   Serial.println(imu_data.temp_data);

  41.   // Run @ ODR 100Hz
  42.   delay(1000);
  43. }
复制代码

编译并将代码上传到Arudino开发板。连接开发板至计算机。


运行测试结果

打开串口监视器,查看Arduino开发板的输出结果。旋转模块,并观察输出数值的变化。

ICM45686模块的输出结果.jpg


以上就是使用Arduino开发板连接ICM-45686模块的全部内容,如果有任何疑问,请随时在本帖下面回复。


跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 18 | 回复: 19



手机版|

GMT+8, 2025-3-6 02:41 , Processed in 0.052559 second(s), 7 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表