52|0

29

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【Follow me第二季第4期】 任务二 IMU [复制链接]

 
        imu在电子设备上属于比较常见的传感器了吧,手机已经是必备,像现在带空间音频的耳机,如果要把效果做好的话,其实也需要加imu。arduino nano rp2040 connect板卡上搭载的是st的六轴imu(加速度三轴,角速度三轴),能够满足最低限度的朝向计算(相对高精度的还得加上地磁的三轴)。
硬件资源
        ST的六轴IMU LSM6DSOXTR通过I2C接到RP2040的GPIO12和GPIO13脚上,意味着如果我们要从0开始写驱动的话,需要使用I2C去读写寄存器的方法,读出当前的IMU信息。另外,中断脚也接到了RP2040的GPIO24上,此脚用于通知2040新的数据已准备好,一般是一个脉冲波形,主控在接收到这个脉冲后,需要立即从imu中读出数据并取消中断状态,以便进行下一次imu状态检测。
软件编码
        由于arduino已经封装了此imu模块,因此我们并不需要实现底层接口,仅仅需要引用对应的头文件并按照头文件提供的接口将数据读出并打印即可,具体代码如下:
#include <WiFiNINA.h>
#include <Arduino_LSM6DSOX.h>

float Ax, Ay, Az;
float Gx, Gy, Gz;

void setup() {
  Serial.begin(9600);
  while (!Serial);
  // IMU
  if (!IMU.begin()) {
    Serial.println("Failed to initialize IMU!");
    while (1);
  }
  Serial.print("Accelerometer sample rate = ");
  Serial.print(IMU.accelerationSampleRate());
  Serial.println("Hz");
  Serial.println();
  Serial.print("Gyroscope sample rate = ");  
  Serial.print(IMU.gyroscopeSampleRate());
  Serial.println("Hz");
  Serial.println();
}

void imuHandle() {
    bool needUpdate = 0;
    if (IMU.accelerationAvailable()) {
    IMU.readAcceleration(Ax, Ay, Az);
    needUpdate = 1;
  }
  if (IMU.gyroscopeAvailable()) {
    IMU.readGyroscope(Gx, Gy, Gz);
    needUpdate = 1;
  }
  if(needUpdate) {
    Serial.print("Ax: ");
    Serial.print(Ax);
    Serial.print(", Ay: ");
    Serial.print(Ay);
    Serial.print(", Az: ");
    Serial.print(Az);
    Serial.print(", Gx: ");
    Serial.print(Gx);
    Serial.print(", Gy: ");
    Serial.print(Gy);
    Serial.print(", Gz: ");
    Serial.print(Gz);
    Serial.println();
  }
}

void loop() {
    imuHandle();
}

总结

        由于不清楚arduino封装的数据单位,因此也不太敢把这数据转化成四元素信号并最终转化成直先角,这部分需要后续做进一步的编码才清楚。

点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表