IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32——MPU6050六轴传感器 -> 正文阅读

[嵌入式]STM32——MPU6050六轴传感器

一,什么是MPU6050

MPU6050是InvenSense公司推出的全球首款整合性6轴运动处理组件,内带3轴陀螺仪和3轴加速度传感器,并且含有一个第二IIC接口,可用于连接外部磁力传感器,利用自带数字运动处理器(DMP:Digital Motion Processor)硬件加速引擎,通过主IIC接口可以向应用端输出完整的9轴姿态融合演算数据。DMP的存在降低了运动处理运算对操作系统的负荷,同时大大降低了开发难度。

MPU6050的特点:

1、自带数字运动处理(DMP:Digital Motion Processor),可以输出6轴或9轴(需要外接磁传感器)姿态解算数据。

2、集成可程序控制,测量范围为±250、±500、±1000与±2000°/sec的3轴角速度感测器(陀螺仪)。

3、集成可程序控制,范围为±2g、±4g、±8g和16g的3轴加速度传感器。

4、自带数字温度传感器。

5、可输出中断(interrupt),支持姿态识别、摇摄、画面放大缩小、滚动、快速下降中断、hight-G中断、零动作感应、触击感应、摇动感应功能。

6、自带1024字节FIFO,有助于降低系统功耗。

7、高达400Khz的IIC通信接口。

8、超小封装尺寸:4x4x09mm(QFN)

MPU6050框图:

473d7babc14549a1b9638039cb87f8e4.jpeg

INT是中断输出脚,CS是片选脚,AD0设置地址,SCL和SDA是主IIC接口,AUX_CL和AUX_DA是丛IIC接口。AD0=0-->地址=0X68? ?AD0=1-->地址=0X69

二、MPU6050初始化

1、初始化IIC接口

2、复位MPU6050。由电源管理寄存器1(0X6B)控制

3、设置角速度传感器和加速度传感器的满量程范围。由陀螺仪配置寄存器(0X1B)和加速度传感器配置寄存器(0X1C)设置。

4、设置其它参数。配置中断,由中断使能寄存器(0X38)控制;设置AUX IIC接口,由户控制寄存器(0X6A)控制;设置FIFO,由FIFO使能寄存器(0X23控制);陀螺仪采样率,由采样率分频寄存器(0X19)控制;设置数字低通滤波器,由配置寄存器(0X1A)控制。

5、设置系统时钟。由电源管理寄存器1(0X6B)控制。一般选择x轴陀螺PLL作为时钟源,以获得更高精度的时钟。

6、使能角速度传感器(陀螺仪)和加速度传感器。由电源管理寄存器2(0X6C)控制。

三、寄存器介绍

1、电源管理寄存器1(0X68)

984002b65d0f49f2947421f9ee37bb1e.jpeg?

(第八位)DEVICE_RESE=1,复位MPU6050,复位完成后,自动清零。

(第七位)SLEEP=1,进入睡眠模式;SLEEP=0,正常工作模式。

(第四位)TEMP_DIS,用于设置是否使能温度传感器,设置为0,则使能。

(第一位~第三位)CLKSEL[2:0],用于选择系统时钟源,如图:

cbe1a69d704a4875a14695e42baaa200.jpeg

一般是设置X轴作为参考,所以CLKSEL[2:0]设置为001。

2、陀螺仪配置寄存器(0X1B)

1cd6d3c6ace04b1d8a6960e576dad0be.jpeg?

主要是FS_SEL[1:0]位,用于设置陀螺仪的满量程范围:0,±250°? /S;1,±500°? /S1;3,±2000°? /S;一般设置为3(±2000°? /S),因为陀螺仪的ADC为16位分辨率,灵敏度为:65546/4000=16.4LSB/(°? /S)。

3、加速度传感器配置寄存器(0X1C)

7c4519503155401f9e8e368f0dd0b6d5.jpeg?

主要是AFS_SEL[1:0]位,用于设置加速度传感器的满量程范围:0,±2g;1,±4g;2,±8g;3,±16g;一般设置为0(±2g),因为加速度传感器的ADC也是16位,所以灵敏度为:65536/4=16384LSB/g。

4、FIFO使能寄存器(0X23)

cb0ef208b44e41bb8b6266726d5030ac.jpeg?

该寄存器用于控制FIFO使能,在简单读取传感器数据的时候,可以不用FIFO,设置对应位为:0,即可禁止FIFO;设置为1,则使能FIFO。

(注:加速度传感器的3个轴,全由1个位(ACCEL_FIFO_EN)控制,只要该位置1,则加速度传感器的三个通道都开启了FIFO。)

5、陀螺仪采样率分频寄存器(0X19)

7e6a8640a3224aad876d8d56456e721c.jpeg?

该寄存器用于设置MPU6050的陀螺仪采样频率,计算公式为:

采样频率=陀螺仪输出频率/(1+SMPLRT_DIV)

这里陀螺仪的输出频率是1Khz或者8Khz,与数字低通滤波器(DLPF)的设置有关,当DLPF_CFG=0/7的时候,频率为8Khz,其它情况是1Khz。而且DLPF滤波频率一般设置为采样率的一半。采样率假定为50Hz,那么:SMPLRT_DIV=1000/50-1=19。这里1000是陀螺仪输出频率,50是采样频率。

6、配置寄存器(0X1A)

e921be497c534936b81cd5ef72224008.jpeg?

主要看数字低通滤波器(DLPF_CFG)的设置位,即:DLPF_CFG[2:0],加速度计和陀螺仪都是根据这三位的配置进行过滤的,如下表:

4d762a4da9504bd29216b157ba4c252b.jpeg?

(注:一般设置带宽=1/2的采样率。)

7、电源管理寄存器2(0X6C)

424defb76dbc4376a6cf79a555311b89.jpeg

该寄存器的LP_WAKE_CTRL用于控制低功耗时的唤醒频率,剩下的6位,分别控制加速度和陀螺仪的x/y/z轴是否进入待机模式(若全不进入待机模式,则全设置为0)

8、加速度传感器数据输出寄存器(0X3B~0X40)

ead6e447b6fd4e4c89e71d556a00e0a3.jpeg?

加速度传感数据输出寄存器总共由6个寄存器组成,输出X/Y/Z三个轴的加速度传感器值,高字节在前,低字节在后。

9、陀螺仪数据输出寄存器(0X43~0X48)

fd01704110b24f0384580d4da6f1ad93.jpeg?

陀螺仪数据输出寄存器总共由6个寄存器组成,输出X/Y/Z三轴的陀螺仪传感器数据,高字节在前,低字节在后。

10、温度传感器数据输出寄存器(0X41~0X42)

b778c064e2954b5d8a4cb9c5a67f6a2e.jpeg?

通过读取0X41(高8位)和0X42(低8位)寄存器得到,温度换算公式为:

Temperature=36.53+regval/340

其中,Temperature为计算得到的温度值,单位为°C,regval为从0X41和0X42读到的温度传感器值。

四、原理图

ATK-MPU6050模块原理图:

e07d018e70ba4f3fb8c9105c98af1687.jpeg

STM32F407硬件连接原理图:

b50e0af7a93448a296f741b8b6a334c7.jpeg

注:AD0接GND-->地址=0X68

五、MPU6050驱动代码

1、MPU6050 IIC接口驱动部分代码

//IO方向设置
#define SDA_IN()  {GPIOB->MODER&=~(3<<(9*2));GPIOB->MODER|=0<<9*2;} //PB9输入模式
#define SDA_OUT() {GPIOB->MODER&=~(3<<(9*2));GPIOB->MODER|=0<<9*2;} //PB9输出模式
//IO操作函数
#define IIC_SCL  PBout(8) //SCL
#define IIC_SDA  PBout(9) //SDA
#define READ_SDA PBin(9) //输入SDA
//IIC所有操作函数
void IIC_Init(void);         //初始化IIC的IO口
void IIC_Start(void);        //发送IIC开始信号
void IIC_Stop(void);         //发送IIC停止信号
void IIC_Send_Byte(u8 txd);  //IIC发送一个字节
u8 IIC_Read_Byte(unsigned char ack);//IIC读取一个字节
u8 IIC_Wait_Ack(void);       //IIC等待ACK信号
void IIC_Ack(void);          //IIC发送ACK信号
void IIC_NAck(void);         //IIC不发送ACK信号

2、MPU6050初始化函数(MPU_Init函数)

//初始化MPU6050
//返回值0,成功,返回其它值,错误
u8 MPU_Init(void)
{ 
	u8 res;
	IIC_Init();//初始化IIC总线
	MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X80);	//复位MPU6050
    delay_ms(100);
	MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X00);	//唤醒MPU6050 
	MPU_Set_Gyro_Fsr(3);					//陀螺仪传感器±2000dps
	MPU_Set_Accel_Fsr(0);					//加速度传感器,±2g
	MPU_Set_Rate(50);						//设置采样率50Hz
	MPU_Write_Byte(MPU_INT_EN_REG,0X00);	//关闭所有中断
	MPU_Write_Byte(MPU_USER_CTRL_REG,0X00);	//IIC主模式关闭
	MPU_Write_Byte(MPU_FIFO_EN_REG,0X00);	//关闭FIFO
	MPU_Write_Byte(MPU_INTBP_CFG_REG,0X80);	//INT引脚低电平有效
	res=MPU_Read_Byte(MPU_DEVICE_ID_REG);
	if(res==MPU_ADDR)//器件ID正确
	{
		MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X01);	//设置CLKSEL,PLL x轴为参考
		MPU_Write_Byte(MPU_PWR_MGMT2_REG,0X00);	//加速度与陀螺仪都工作
		MPU_Set_Rate(50);						//设置采样率为50Hz
 	}else return 1;
	return 0;
}

?

3、MPU_Get_Gyroscope函数;MPU_Get_Accelerometet函数;MPU_Get_Temperature函数

(注:MPU_Write_Len MPU连续读? ?MPU_Read_Len MPU连续写)

u8 MPU_Get_Gyroscope(short *gx,short *gy,short *gz)
{
    u8 buf[6],res;  
	res=MPU_Read_Len(MPU_ADDR,MPU_GYRO_XOUTH_REG,6,buf);
	if(res==0)
	{
		*gx=((u16)buf[0]<<8)|buf[1];  
		*gy=((u16)buf[2]<<8)|buf[3];  
		*gz=((u16)buf[4]<<8)|buf[5];
	} 	
    return res;;
返回0表示成功
u8 MPU_Get_Accelerometer(short *ax,short *ay,short *az)
{
    u8 buf[6],res;  
	res=MPU_Read_Len(MPU_ADDR,MPU_ACCEL_XOUTH_REG,6,buf);
	if(res==0)
	{
		*ax=((u16)buf[0]<<8)|buf[1];  
		*ay=((u16)buf[2]<<8)|buf[3];  
		*az=((u16)buf[4]<<8)|buf[5];
	} 	
    return res;;
}
short MPU_Get_Temperature(void)
{
    u8 buf[2]; 
    short raw;
	float temp;
	MPU_Read_Len(MPU_ADDR,MPU_TEMP_OUTH_REG,2,buf); 
    raw=((u16)buf[0]<<8)|buf[1];  
    temp=36.53+((double)raw)/340;  
    return temp*100;;
}

?

?

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 00:44:29  更:2022-09-21 00:45:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:31:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码