• 大小: 45KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-05-21
  • 语言: 其他
  • 标签: mpu6050  dmp  eMD  

资源简介

MPU6050的官方DMP移植到stm32f407zgt6上,本文件为已移植完成直接在.h文件里找到函数即可使用

资源截图

代码片段和文件信息

#include“mpu6050.h“
#include“myiic.h“
#include“delay.h“

void MPU_Init(void)
{
//u8 res; //用来返回程序是否执行成功
IIC_Init(); //初始化IIC
MPU_WriteOne_Byte(MPU_PWR_MGMT1_REG0x80); //复位MPU6050
  delay_ms(100);
MPU_WriteOne_Byte(MPU_PWR_MGMT1_REG0x00); //唤醒MPU6050 
MPU_WriteOne_Byte(MPU_GYRO_CFG_REG0x18); //陀螺仪量程配置±2000dps
MPU_WriteOne_Byte(MPU_ACCEL_CFG_REG0x00); //加速度传感器±2g

MPU_WriteOne_Byte(MPU_INT_ENABLE_REG0X00); //中断使能寄存器关闭所有中断
MPU_WriteOne_Byte(MPU_USER_CTRL_REG0x00); //I2C主模式关闭
MPU_WriteOne_Byte(MPU_FIFO_EN_REG0x00); //FIFO关闭
MPU_Set_SRD(100); //设置陀螺仪采样率分频寄存器100Hz自动设置DLPF

MPU_WriteOne_Byte(MPU_PWR_MGMT1_REG0x01); //设置CLKSELPLL X轴为参考
MPU_WriteOne_Byte(MPU_PWR_MGMT2_REG0x00); //使能加速度与陀螺仪,关闭唤醒


}

//得到陀螺仪的原始数据(带符号)
//返回值:0设置成功
u8 MPU_Get_Gyroscope(short *gxshort *gyshort *gz)
{
u8 buf[6]; //储存XHXLYHYLZHZL的6个8位原始数据
u8 res; //用来返回程序是否执行成功
res=MPU_ConRead_Len(MPU_ADDRMPU_GYRO_XOUTH_REG6buf);
if(res==0)
{
*gx=( (u16)buf[0]<<8 )|( (u16)buf[1] );
*gy=( (u16)buf[2]<<8 )|( (u16)buf[3] );
*gz=( (u16)buf[4]<<8 )|( (u16)buf[5] );
}
return res;
}



//得到加速度的原始数据(带符号)
//返回值:0设置成功
u8 MPU_Get_Accelerometer(short *axshort *ayshort *az)
{
u8 buf[6]; //储存XHXLYHYLZHZL的6个8位原始数据
u8 res; //用来返回程序是否执行成功
res=MPU_ConRead_Len(MPU_ADDRMPU_ACCEL_XOUTH_REG6buf);
if(res==0)
{
*ax=( (u16)buf[0]<<8 )|( (u16)buf[1] );
*ay=( (u16)buf[2]<<8 )|( (u16)buf[3] );
*az=( (u16)buf[4]<<8 )|( (u16)buf[5] );
}
return res;
}





//设置陀螺仪采样率分频寄存器
//DLPF被禁用时(DLPF_CFG=0或7)陀螺仪输出速率=8kHz;使能时1kHz
//因为使能了DLPF所以Fs=1000Hz又1000/2^8=4
//采样频率rate=4~1000Hz
//返回值:0设置成功
u8 MPU_Set_SRD(u16 rate)
{
u8 data;
if(rate>1000) rate=1000;
if(rate<4) rate=4;
data=1000/rate-1;
MPU_WriteOne_Byte(MPU_SMPRT_DIV_REGdata); //设置采样频率分频器
return MPU_Set_DLPF(rate/2); //自动设置DLPF为采样率的一半

}



//设置数字低通滤波器
//dlpf:数字低通滤波频率(Hz)
//返回值:0设置成功
u8 MPU_Set_DLPF(u16 dlpf) //必须要用u16因为rate/2的最大值为500
{
u8 data=0; //用来设置DLPF_CFG
if(dlpf>188) data=1;
else if(dlpf>98) data=2;
else if(dlpf>42) data=3;
else if(dlpf>20) data=4;
else if(dlpf>10) data=5;
else data=6;
return MPU_WriteOne_Byte(MPU_CONFIG_REGdata); //设置数字低通滤波器
}


//得到温度值
//返回值:温度值(扩大了100倍)
short MPU_Get_Temperature(void)
{
u8 buf[2]; 
short raw;
float temp;
MPU_ConRead_Len(MPU_ADDRMPU_TEMP_OUTH_REG2buf); 
raw=((u16)buf[0]<<8)|buf[1];  
temp=36.53+((double)raw)/340;  
return temp*100;;
}


//IIC连续写
//add:器件地址 
//reg_add:寄存器地址
//len:写入长度
//buf:数据区
//返回值:0正常
u8 MPU_ConWrite_Len(u8 addu8 reg_addu8 lenu8 *buf) //连续写
{
u8 i;
IIC_Start();
IIC_Send_Byte( (add<<1)|0 ); ////发送器件地址+0写命令
if(IIC_Wait_Ack()) //等待ACK
{
IIC_Stop();
return 1;
}

IIC_Send_Byte(reg_add);//写寄存器地址

if(IIC_Wait_Ack()) //等待ACK
{
IIC_Stop();
return 1;
}

for(i=0;i {
IIC_Send_Byte(buf[i]); //发送数据
if(IIC_Wait_Ack()) //等待ACK
{
IIC_S

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-04-26 22:01  MPU6050\
     目录           0  2018-04-26 22:01  MPU6050\eMPL\
     文件       19342  2012-12-14 11:16  MPU6050\eMPL\dmpKey.h
     文件        6765  2012-12-14 11:16  MPU6050\eMPL\dmpmap.h
     文件       84352  2018-04-26 12:28  MPU6050\eMPL\inv_mpu.c
     文件        4662  2018-04-15 20:00  MPU6050\eMPL\inv_mpu.h
     文件       58396  2018-04-15 20:17  MPU6050\eMPL\inv_mpu_dmp_motion_driver.c
     文件        3538  2012-12-14 11:16  MPU6050\eMPL\inv_mpu_dmp_motion_driver.h
     文件        5553  2018-04-21 18:51  MPU6050\mpu6050.c
     文件        2321  2018-04-21 18:43  MPU6050\mpu6050.h
     文件        8672  2018-04-18 12:27  MPU6050\mpu_dmp_use.c
     文件         156  2018-04-17 18:50  MPU6050\mpu_dmp_use.h

评论

共有 条评论