mpu9250输出的数据是啥(r语言读取excel数据)

MPU9250对初始数据的读取1.mpu9250介绍MPU9250是一款9轴运动跟踪装置,他在小小的3X3X1mm的封装中融合了3轴加速度、3轴陀螺仪、3轴磁力计以及数字运动处理器(DMP)并且兼容MPU6515。其完美的I2C方案,可直接输出9轴的全部数据。因此它也是四轴姿态解算的基础,所以正确获取MPU9250的原始数据显得尤为重要。注意:1.但…

大家好,又见面了,我是你们的朋友全栈君。

									 MPU9250对初始数据的读取

1.mpu9250介绍
MPU 9250是一款9轴运动跟踪装置, 他在小小的3X3X 1mm的封装中融合了 3轴加速度、3轴陀螺仪、3轴磁力计以及数字运动处理器(DMP) 并且兼容MPU 6515。其完美的I2C方案,可直接输出9轴的全部数据。因此它也是四轴姿态解算的基础, 所以正确获取MPU 9250 的原始数据显得尤为重要。
注意:
1.但是磁力计在小四轴中不用也行,在小四轴中由于四轴较小,电机的转动产生的磁场会干扰,数据融合后效果反而不好,需要教好的算法,
2.数字运动处理器(DMP),可以通过加速度和陀螺仪直接计算出四轴的姿态,但是一般不用,学习四轴还是重在学习,之后我们通过加速度和陀螺仪自己计算出四轴的姿态
2.单片机与mpu9250的通讯
1.我们用IO口模拟IIC和MPU9250进行通讯(模拟IIC通信可以看代码文件夹里有)

在这里插入图片描述
2.I2C 是一个双线通信方案,它有 SDA 和 SCL 两根线分别传输数据和时钟信号。通常这 2 个 接口是双向的开漏极接口。在连接设备的时候可以做主机或者从机。从机在通讯时,通过 地址即可匹配。 MPU-9250 通常和控制芯片连接时作为从机,SDA 和 SCL 通常需要上拉电阻到 VDD,最快 通信速度达到 400KHz。 MPU-9250 作为从机时的地址为 7 位 110100X(B)。这个地址的 LSB 位由 AD0 引脚的电平 确定,这样就使得一个系统中可以同时连接 2 个 MPU-9250 了。(AD0 为低电平时 X 为 0, 高电平 X 则为 1)。
在这里插入图片描述
此时mpu9250的地址为1101001D即为0x69H,这一点在代码(分块代码MPU9250)中可以看到
为什么这么连可以参考mpu9250的应用手册,里面有解释还有例子
就是ncn接高电平是为什么,ncn与iic中通信无关,和spi通信有关CS线为片选,为低时选中,为高时不选。因为代码中没用用到spi通信所以就置高了
3.通信的函数

/***************************************************************************** *函 数:uint8_t MPU9250_WriteByte(uint8_t addr,uint8_t reg,uint8_t data) *功 能:写一个字节数据到 MPU9250 寄存器 *参 数:reg: 寄存器地址 data: 要写入的数据 *返回值:0成功 1失败 *备 注:MPU9250代码移植只需把I2C驱动修改成自己的即可 *****************************************************************************/
uint8_t MPU9250_WriteByte(uint8_t reg,uint8_t data)
{ 
   
	if(IIC_WriteByteToSlave(MPU9250Addr,reg,data))
	   return 1;
	else
	   return 0;
}

```c
/***************************************************************************** *函 数:uint8_t MPU9250_ReadByte(uint8_t reg,uint8_t *buf) *功 能:从指定MPU9250寄存器读取一个字节数据 *参 数:reg: 寄存器地址 buf: 读取数据存放的地址 *返回值:1失败 0成功 *备 注:MPU9250代码移植只需把I2C驱动修改成自己的即可 *****************************************************************************/
uint8_t MPU9250_ReadByte(uint8_t reg,uint8_t *buf)
{ 
   
	if(IIC_ReadByteFromSlave(MPU9250Addr,reg,buf))
	   return 1;
	else
	   return 0;
}
/***************************************************************************** *函 数:uint8_t MPU9250_WriteMultBytes(uint8_t reg,uint8_t len,uint8_t *buf) *功 能:从指定寄存器写入指定长度数据 *参 数:reg:寄存器地址 len:写入数据长度 buf: 写入数据存放的地址 *返回值:0成功 1失败 *备 注:MPU9250代码移植只需把I2C驱动修改成自己的即可 *****************************************************************************/
uint8_t MPU9250_WriteMultBytes(uint8_t reg,uint8_t len,uint8_t *buf)
{ 
   
	if(IIC_WriteMultByteToSlave(MPU9250Addr,reg,len,buf))
	   return 1;
	else
	   return 0;
}
/***************************************************************************** *函 数:uint8_t MPU9250_ReadMultBytes(uint8_t reg,uint8_t len,uint8_t *buf) *功 能:从指定寄存器读取指定长度数据 *参 数:reg:寄存器地址 len:读取数据长度 buf: 读取数据存放的地址 *返回值:0成功 0失败 *备 注:MPU9250代码移植只需把I2C驱动修改成自己的即可 *****************************************************************************/
uint8_t MPU9250_ReadMultBytes(uint8_t reg,uint8_t len,uint8_t *buf)
{ 
   
	if(IIC_ReadMultByteFromSlave(MPU9250Addr,reg,len,buf))
	   return 1;
	else
	   return 0;
}

对于通信函数的几点声明:
在mpu9250中有这样一段话,ACK 响应后,数据可以继续输入,除非没有产生停止位。芯片内部自带的递增 寄存器可以自动将数据写入相应寄存。所以如果要连读或者连写mpu9250中的数据在一次读取之后就不用寄存器地址+1.这个过程是自动的,这点和AT24C02是不一样的
3.mpu9250的初始配置

void MPU9250_Init(void)
{ 
   
    MPU9250_Check(); //检查MPU9250是否连接
	
	  MPU9250_WriteByte(MPU9250_RA_PWR_MGMT_1, 0x80); //复位MPU9250
    delay_ms(100);
    MPU9250_WriteByte(MPU9250_RA_PWR_MGMT_1, 0x01); //唤醒MPU9250,并选择陀螺仪x轴PLL为时钟源
	  MPU9250_WriteByte(MPU9250_RA_INT_ENABLE, 0x00); //禁止中断
	  MPU9250_WriteByte(MPU9250_RA_ACCEL_CONFIG_2,0x03); //
	  MPU9250_WriteByte(MPU9250_RA_SMPLRT_DIV, 0x00); //采样分频 (采样频率 = 陀螺仪输出频率 / (1+DIV),采样频率1000hz)
    MPU9250_WriteByte(MPU9250_RA_INT_PIN_CFG, 0x02);//MPU 可直接访问MPU9250辅助I2C
    MPU9250_WriteByte(MPU9250_RA_CONFIG, MPU9250_DLPF_BW_20);//设置陀螺的输出为1kHZ,DLPF=20Hz 
    MPU9250_WriteByte(MPU9250_RA_GYRO_CONFIG, 0x18); //陀螺仪满量程+-2000度/秒 (最低分辨率 = 2^15/2000 = 16.4LSB/度/秒 
	  MPU9250_WriteByte(MPU9250_RA_ACCEL_CONFIG, 0x08); //加速度满量程+-4g (最低分辨率 = 2^15/4g = 8196LSB/g )
}

对配置的说明:
1.首先这段配置来源于小马哥的四轴
2.总的来说配置的步骤就是
MPU 9250的初始化流程:
1检查MCU与MPU 9250是否通信成功。
2设置MPU 9250为复位状态+100ms复位延时
3唤醒MPU 9250, 选择PLL为时钟源
4配置六轴数据(3轴加速度+3轴陀螺仪)全输出
(复位后默认全输出就不用配置了)
5禁止所有中断
6设置MPU 9250内部采样频率
7设置陀螺仪和加速度的满量程范围
8设置陀螺仪和加速度输出低通滤波

3.配置的具体方法就是查阅Mpu9250d的寄存器手册,文件里有中文版的,通过IIC通信修改对应的寄存器,在mpu9250.h中已经用宏定义的方法将mpu9250每个地址都表示出来了
4具体的配置原理看我在文件里的获取mpu9250 Pdf ,里面都有讲到我就讲一下不好懂得地方和需要注意的
5.采样频率的设置最好为姿态结算的两倍

4.mpu9250加速度,角速度,温度的读取
/******************************************************************************

*函  数:void MPU9250_AccRead(int16_t *accData)
*功  能:读取加速度的原始数据
*参  数:*accData 原始数据的指针
*返回值:无
*备  注:无
*******************************************************************************/
void MPU9250_AccRead(int16_t *accData)
{ 
   
    uint8_t buf[6];
   	MPU9250_ReadMultBytes(MPU9250_RA_ACCEL_XOUT_H,6,buf);
    accData[0] = (int16_t)((buf[0] << 8) | buf[1]);
    accData[1] = (int16_t)((buf[2] << 8) | buf[3]);
    accData[2] = (int16_t)((buf[4] << 8) | buf[5]);
}
/****************************************************************************** *函 数:void MPU9250_GyroRead(int16_t *gyroData) *功 能:读取陀螺仪的原始数据 *参 数:*gyroData 原始数据的指针 *返回值:无 *备 注:无 *******************************************************************************/
void MPU9250_GyroRead(int16_t *gyroData)
{ 
   
    uint8_t buf[6];
	
	  MPU9250_ReadMultBytes(MPU9250_RA_GYRO_XOUT_H, 6, buf);
    gyroData[0] = (int16_t)((buf[0] << 8) | buf[1]) ;
    gyroData[1] = (int16_t)((buf[2] << 8) | buf[3]) ;
    gyroData[2] = (int16_t)((buf[4] << 8) | buf[5]) ;
}
/****************************************************************************** *函 数:void MPU9250_TempRead(float *tempdata) *功 能:温度值读取 *参 数:*tempdata 温度数据的指针 *返回值:无 *备 注:无 *******************************************************************************/
void MPU9250_TempRead(float *tempdata)
{ 
   
	uint8_t buf[2];
	short data;
	MPU9250_ReadMultBytes(MPU9250_RA_TEMP_OUT_H, 2, buf);
	data = (int16_t)((buf[0] << 8) | buf[1]) ;
	*tempdata =21.00f + ((float)data/333.87f);
}

*******************************************************************************/
说明:前三个是分别读加速度温度角速度的寄存器,然后存到数组里,注意Mpu9250都是8位的,所以用两个8位寄存器表示16位的加速度温度角速度

*******************************************************************************/

void MPU9250_Read(void)
{ 
   
	MPU9250_ReadMultBytes(MPU9250_RA_ACCEL_XOUT_H, 14, MPU9250_buff);// 查询法读取MPU9250的原始数据
}
*******************************************************************************/

说明:这个函数是直接把加速度,温度,角速度都放在MPU9250_buff中,一开始定义了
static uint8_t MPU9250_buff[14]; //加速度 陀螺仪 温度 原始数据

具体代码看Mpu9250(1)
作用就是读出MOPU9250的原始AD值

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/128789.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • go语言后端框架2021_go语言编译器

    go语言后端框架2021_go语言编译器点击上方蓝色“飞雪无情”关注我,设个星标,第一时间看文章最近写了很多Go语言的原创文章,其中Go语言实战系列就有30篇,近15W字,还有最近更新的Go经典库系列、Gin实战系列,不过通过大…

    2022年10月12日
  • 向下取整和向上取整的符号_python向上取整函数

    向下取整和向上取整的符号_python向上取整函数向上取整,运算称为Ceiling,用数学符号⌈⌉(上有起止,开口向下)表示,。向下取整,运算称为Floor,用数学符号⌊⌋(下有起止,开口向上)表示。注意,向上取整和向下取整是针对有浮点数而言的;若整数向上取整和向下取整,都是整数本身。四舍五入:更接近自己的整数;把小数点后面的数字四舍五入 即:如被舍去部分的头一位数字小于五,则舍去;如大于等于五,则被保留…

    2022年10月22日
  • android onresume方法,非静态方法’onResume’Android Studio

    android onresume方法,非静态方法’onResume’Android Studio我想使用WebView作为Youtube。当我尝试编译它时,出现此错误“非静态方法onResume&无法从静态上下文”引用。非静态方法’onResume’AndroidStudio我曾尝试使用rootView,但它没有工作='(publicclassvodextendsFragment{publicstaticfinalStringTAG=”vod”;@Null…

  • pycharm把py文件改为exe文件_怎么把python程序打包成可执行文件

    pycharm把py文件改为exe文件_怎么把python程序打包成可执行文件1.安装pyinstraller工具2.在PyCharm最下方找到终端,在终端输入pyinstaller-F–onefilexxx.py

  • mysql如何使用前缀索引_MySQL的前缀索引你是如何使用的[通俗易懂]

    mysql如何使用前缀索引_MySQL的前缀索引你是如何使用的[通俗易懂]灵魂3连问:什么是前缀索引?前缀索引也叫局部索引,比如给身份证的前10位添加索引,类似这种给某列部分信息添加索引的方式叫做前缀索引。为什么要用前缀索引?前缀索引能有效减小索引文件的大小,让每个索引页可以保存更多的索引值,从而提高了索引查询的速度。但前缀索引也有它的缺点,不能在orderby或者groupby中触发前缀索引,也不能把它们用于覆盖索引。什么情况下适合使用前缀索引?当字符…

  • lib文件和dll文件的区别_dll2lib

    lib文件和dll文件的区别_dll2lib一.简介1.1C++两种库文件lib包含了函数所在的dll文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的dll提供,称为动态链接库dynamiclinklibrary。

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号