旧乡故客
发表于: 2024-4-30 11:11:39 | 显示全部楼层

惯性测量单元在无人机和机器人中是不可忽却的一部分,它帮助设备识别方向,变得更加智能。本文将使用Arduino UNO开发板通过SPI方式连接BMI088惯性测量单元模块,实现获取加速度值和角速度值。


在之前的帖子中,我们对BMI088模块进行了简单的介绍,可以参考以下内容:

●    Arduino UNO开发板通过I2C接口使用BMI088的方法:https://www.yiboard.com/thread-1787-1-1.html

●    NUCLEO-G070RB开发板通过I2C方式连接BMI088传感器的方法:https://www.yiboard.com/thread-1865-1-1.html

●    NULCEO-G070RB开发板通过SPI方式使用BMI088加速度传感器的方法:https://www.yiboard.com/thread-1479-1-1.html

●    BMI088加速度传感器Arduino库使用方法简介:https://www.yiboard.com/thread-1172-1-1.html


所需的组件

●  NUCLEO-G070RB开发板

●  YBX-BMI088(SPI)加速度传感器模块(淘宝链接

●  连接跳线

●  USB线缆


YBX-BMI088模块

YBX-BMI088(SPI)模块是博根工作室推出的模块扩展板,基于博世传感器的BMI088芯片。该传感器是一款六轴传感器模块,内部带有一个16位的加速度传感器模块和一个16位的陀螺仪模块。


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


硬件连接

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

bmi088.jpg


首先连接SPI接口,将BMI088模块的SCK、MOSI和MISO分别连接到Arduino UNO开发板的引脚13(SCK)、11(MOSI)和12(MISO),加速度计的片选引脚CS1连接到10,陀螺仪的片选引脚CS2连接到9。

BMI088模块的VCC连接到+5V引脚,GND引脚连接到NUCLEO-G070RB的任意GND引脚。

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


安装库文件

在进行编程之前,我们需要安装Bolder Flight Systems的BMI088库,可以在Github上面下载,下载链接:https://github.com/bolderflight/BMI088。也可以在库管理器中搜索BMI088,找到该库文件,然后进行安装。


代码

本文使用的是库文件中是Basic_SPI示例,代码如下:

  1. #include "BMI088.h"

  2. /* accel object */
  3. Bmi088Accel accel(SPI,10);
  4. /* gyro object */
  5. Bmi088Gyro gyro(SPI,9);

  6. void setup()
  7. {
  8.   int status;
  9.   
  10.   /* USB Serial to print data */
  11.   Serial.begin(115200);
  12.   while(!Serial) {}

  13.   /* start the sensors */
  14.   while (1) {
  15.     status = accel.begin();
  16.     if (status < 0) {
  17.       Serial.println("Accel Initialization Error");
  18.       Serial.println(status);
  19.       delay(1000);
  20.       }
  21.       else
  22.       break;
  23.   }
  24.   
  25.   status = gyro.begin();
  26.   if (status < 0) {
  27.     Serial.println("Gyro Initialization Error");
  28.     Serial.println(status);
  29.     while (1) {}
  30.   }
  31. }

  32. void loop()
  33. {
  34.   /* read the accel */
  35.   accel.readSensor();
  36.   /* read the gyro */
  37.   gyro.readSensor();
  38.   /* print the data */
  39.   Serial.print(accel.getAccelX_mss());
  40.   Serial.print("\t");
  41.   Serial.print(accel.getAccelY_mss());
  42.   Serial.print("\t");
  43.   Serial.print(accel.getAccelZ_mss());
  44.   Serial.print("\t");
  45.   Serial.print(gyro.getGyroX_rads());
  46.   Serial.print("\t");
  47.   Serial.print(gyro.getGyroY_rads());
  48.   Serial.print("\t");
  49.   Serial.print(gyro.getGyroZ_rads());
  50.   Serial.print("\t");
  51.   Serial.print(accel.getTemperature_C());
  52.   Serial.print("\n");
  53.   /* delay to help with printing */
  54.   delay(20);
  55. }
复制代码

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


运行测试结果

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

串口输出.jpg

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

本版积分规则

主题 14 | 回复: 14



手机版|

GMT+8, 2024-12-21 22:10 , Processed in 0.064510 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

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

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