MPU6050六轴传感器

一、MPU6050简介

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

二、寄存器介绍

1、电源管理寄存器1(0x6B)
在这里插入图片描述

  • DEVICE_RESE=1,复位MPU6050,复位完成后,自动清零。

  • SLEEP=1,进入睡眠模式;SLEEP=0,正常工作模式。

  • TEMP_DIS,用于设置是否使能温度传感器,设置为0,则使能。

  • CLKSEL[2:0],用于选择系统时钟源,如下图所示:
    在这里插入图片描述
    2、陀螺仪配置寄存器(0x1B)
    在这里插入图片描述

  • FS_SEL[1:0]:用于设置陀螺仪的满量程范围:00,±250°/S;01,±500°/S;10,±1000°/S;11,±2000°/S;一般设置为3,即±2000°/S,因为陀螺仪的ADC为16位分辨率,所以得到灵敏度为:65536/4000=16.4LSB/(°/S)。
    3、加速度传感器配置寄存器(0x1C)
    在这里插入图片描述

  • AFS_SEL[1:0]:用于设置加速度传感器的满量程范围。00,±2g;01,±4g;10,±8g;11,±16g;我们一般设置为00,即±2g,因为加速度传感器的ADC也是16位,所以得到灵敏度为:65536/4=16384LSB/g。
    4、FIFO使能寄存器(0x23)
    在这里插入图片描述

  • 该寄存器用于控制FIFO使能,在简单读取传感器数据的时候,可以不用FIFO,设置对应位为:0,即可禁止FIFO,设置为1,则使能FIFO。
    注意:加速度传感器的3个轴,全由1个位(ACCEL_FIFO_EN)控制,只要该位置1,则加速度传感器的三个通道都开启FIFO了
    5、陀螺仪采样率分频寄存器(0x19)
    在这里插入图片描述

  • 该寄存器用于设置MPU6050的陀螺仪采样频率。

  • 计算公式为: 采样频率 = 陀螺仪输出频率 / (1+SMPLRT_DIV)
    这里陀螺仪的输出频率,是1Khz或者8Khz,与数字低通滤波器(DLPF)的设置有关,当DLPF_CFG=0/7的时候,频率为8Khz,其他情况是1Khz。而且DLPF滤波频率一般设置为采样率的一半。采样率,我们假定设置为50Hz,那么:SMPLRT_DIV=1000/50-1=19。
    6、配置寄存器(0x1A)
    在这里插入图片描述

  • 重点看数字低通滤波器(DLPF)的设置位,即:DLPF_CFG[2:0],加速度计和陀螺仪,都是根据这三个位的配置进行过滤的,如下表:
    在这里插入图片描述
    7、电源管理寄存器2(0x6C)
    在这里插入图片描述

  • 该寄存器的LP_WAKE_CTRL用于控制低功耗时的唤醒频率。剩下的6位,分别控制加速度和陀螺仪的x/y/z轴是否进入待机模式。
    8、加速度传感器数据输出寄存器(0x3B~0x40)
    在这里插入图片描述

  • 加速度传感器数据输出寄存器总共由6个寄存器组成,输出X/Y/Z三个轴的加速度传感器值,高字节在前,低字节在后。
    9、陀螺仪数据输出寄存器(0x43~0x48)
    在这里插入图片描述

  • 陀螺仪数据输出寄存器总共由6个寄存器组成,输出X/Y/Z三个轴的陀螺仪传感器数据,高字节在前,低字节在后。
    10、温度传感器数据输出寄存器(0x41~0x42)
    在这里插入图片描述

  • 通过读取0X41(高8位)和0X42(低8位)寄存器得到。

  • 温度换算公式为: Temperature = 36.53 +regval/340
    其中,Temperature为计算得到的温度值,单位为℃,regval为从0X41和0X42读到的温度传感器值。

三、MPU6050初始化流程

  • ①初始化IIC接口。
  • ②复位MPU6050。由电源管理寄存器1(0X6B)控制。
  • ③设置角速度传感器和加速度传感器的满量程范围。由陀螺仪配置寄存器(0X1B)和加速度传感器配置寄存器(0X1C)设置 。
  • ④设置其他参数。配置中断,由中断使能寄存器(0X38)控制;设置AUX
    IIC接口,由户控制寄存器(0X6A)控制;设置FIFO,由FIFO使能寄存器(0X23)控制;陀螺仪采样率
    ,由采样率分频寄存器(0X19)控制;设置数字低通滤波器,由配置寄存器(0X1A)控制。
  • ⑤设置系统时钟。由电源管理寄存器1(0X6B)控制。一般选择x轴陀螺PLL作为时钟源,以获得更高精度的时钟。
  • ⑥使能角速度传感器(陀螺仪)和加速度传感器。由电源管理寄存器2(0X6C)控制
    代码:
//初始化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);	//I2C主模式关闭
	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;
}

感谢收看!!!

  • 7
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
MPU6050是一种六轴传感器,它包含三轴的加速度传感器和三轴的陀螺仪(角速度传感器)。它可以用于测量物体的加速度和角速度,常用于姿态测量、运动控制和导航等应用领域。 以下是使用MPU6050六轴传感器的示例代码: ```python import smbus import math # MPU6050的I2C地址 MPU6050_ADDR = 0x68 # 加速度计的灵敏度范围 ACCEL_RANGE_2G = 0x00 ACCEL_RANGE_4G = 0x08 ACCEL_RANGE_8G = 0x10 ACCEL_RANGE_16G = 0x18 # 陀螺仪的灵敏度范围 GYRO_RANGE_250DEG = 0x00 GYRO_RANGE_500DEG = 0x08 GYRO_RANGE_1000DEG = 0x10 GYRO_RANGE_2000DEG = 0x18 # 初始化I2C总线 bus = smbus.SMBus(1) # 设置加速度计和陀螺仪的灵敏度范围 bus.write_byte_data(MPU6050_ADDR, 0x1C, ACCEL_RANGE_2G) bus.write_byte_data(MPU6050_ADDR, 0x1B, GYRO_RANGE_250DEG) # 读取加速度计和陀螺仪的原始数据 accel_x = bus.read_word_data(MPU6050_ADDR, 0x3B) accel_y = bus.read_word_data(MPU6050_ADDR, 0x3D) accel_z = bus.read_word_data(MPU6050_ADDR, 0x3F) gyro_x = bus.read_word_data(MPU6050_ADDR, 0x43) gyro_y = bus.read_word_data(MPU6050_ADDR, 0x45) gyro_z = bus.read_word_data(MPU6050_ADDR, 0x47) # 将原始数据转换为加速度和角速度的物理值 accel_scale = 16384.0 # 加速度计的比例因子 gyro_scale = 131.0 # 陀螺仪的比例因子 accel_x = accel_x / accel_scale accel_y = accel_y / accel_scale accel_z = accel_z / accel_scale gyro_x = gyro_x / gyro_scale gyro_y = gyro_y / gyro_scale gyro_z = gyro_z / gyro_scale # 计算加速度的合成值 accel = math.sqrt(accel_x**2 + accel_y**2 + accel_z**2) # 计算陀螺仪的合成值 gyro = math.sqrt(gyro_x**2 + gyro_y**2 + gyro_z**2) # 打印结果 print("加速度:", accel) print("角速度:", gyro) ``` 这段代码使用Python的smbus库通过I2C总线与MPU6050进行通信,读取加速度计和陀螺仪的原始数据,并将其转换为物理值。最后打印出加速度和角速度的合成值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

留小乙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值