(六)STM32F407 cubemx MPU6050通讯硬件寄存器配置部分(2)

news2024/10/24 16:38:21
这篇文章主要是个人的学习经验,想分享出来供大家提供思路,如果其中有不足之处请批评指正哈。

在这里插入图片描述
  废话不多说直接开始主题,本人是基于STM32F407VET6芯片,但是意在你看懂这篇文章后,不管是F1,F4,H7等一系列MPU6050通讯硬件寄存器配置部分都能明白如何通过参考手册去学习配置。而不是Ctrl c,Ctrl v。这篇文章大致的简述一下MPU6050硬件基础知识基于STM32F407VET6,以及MPU6050寄存器相关配置。
  摘要:对硬件大致介绍,本人这篇文章是在正点原子的资料的基础上继续分析的,是对正点原子资料与官方寄存器手册的总结与分享,对寄存器的配置进行讲解,供开发者们借鉴学习。

硬件介绍

**以下内容是引用于正点原子,并对其进行总结概述。**

    MPU6050 内部整合了 3 轴陀螺仪和 3 轴加速度传感器,并且含有一个第二 IIC 接口,可用于连接外部磁力传感器,并利用自带的数字运动处理器(DMP: Digital Motion Processor)硬件加速引擎,通过主 IIC 接口,向应用端输出完整的 9 轴融合演算数据。

①欧拉角格式(Euler Angle forma)的融合演算数据(需DMP 支持)
② 具有 131 LSBs/°/sec 敏感度与全格感测范围为±250、±500、±1000 与±2000°/sec 的 3 轴角速度感测器(陀螺仪)
③ 集成可程序控制,范围为±2g、±4g、±8g 和±16g 的 3 轴加速度传感器
④ 移除加速器与陀螺仪轴间敏感度,降低设定给予的影响与感测器的飘移
⑤ 自带数字运动处理(DMP: Digital Motion Processing)引擎可减少MCU复杂的融合演算数据、感测器同步化、姿势感应等的负荷
⑥ VDD供电电压为 2.5V±5%、3.0V±5%、3.3V±5%;VLOGIC 可低至 1.8V± 5%

在这里插入图片描述
在这里插入图片描述    其中,SCL和 SDA是连接MCU的 IIC 接口,MCU通过这个 IIC 接口来控制MPU6050,另外还有一个 IIC 接口AUX_CL 和 AUX_DA,这个接口可用来连接外部从设备,比如磁传感器,这样就可以组成一个九轴传感器。VLOGIC 是 IO 口电压,该引脚最低可以到 1.8V,我们一般直接接 VDD (3.3V)即可。AD0 是从 IIC 接口(接 MCU)的地址控制引脚,该引脚控制IIC 地址的最低位。如果接 GND,则 MPU6050 的 IIC 地址是:0X68,如果接 VDD,则是0X69

初始化寄存器步骤

1)初始化 IIC接口
    所以我们需要先初始化与MPU6050 连接的 SDA和 SCL数据线简称接线

2)复位MPU6050
    第一步让MPU6050 内部所有寄存器恢复默认值。通过对电源管理寄存器 1(0X6B)的bit7 写 1 实现。
在这里插入图片描述在这里插入图片描述    寄存器手册P42写到,当DEVICE_RESET设置为1时,该位将所有内部寄存器复位为其默认值。复位完成后,该位自动清0。

在这里插入图片描述

    但是Section3中寄存器手册P8写到,除以下寄存器外,所有寄存器的复位值均为0x00。 所以复位后,电源管理寄存器 107 恢复默认值(0X40),而0x40对应的是0100,0000 SLEEP为1,MPU-60X0会进入低功耗睡眠模式。并不需要其进入这个模式,所以必须设置该寄存器为0X00,也就是CLKSEL[2:0]=0;也就是使用外部8M晶振模式。
在这里插入图片描述
以唤醒MPU6050,进入正常工作状态。

//电源寄存器配置代码,严格按照寄存器要求编写代码
	//1.初始化电源,AD0悬空、GND IIC地址0x68 
	#define MPU_ADDR				0X68
	#define MPU_PWR_MGMT1_REG		0X6B	//电源管理寄存器1
	MPU_Write_Byte(MPU_ADDR, MPU_PWR_MGMT1_REG, 0X80); //复位MPU6050  0x6B第bit7写1=1000,0000=0x80
	HAL_Delay(100);									   //延时100ms
	//2.复位后电源管理寄存器自动恢复默认值0x40
	//3.设置该寄存器为0x00唤醒MPU6050,正常工作状态
	MPU_Write_Byte(MPU_ADDR, MPU_PWR_MGMT1_REG, 0X00); //唤醒MPU6050


3)设置角速度传感器(陀螺仪)和加速度传感器的满量程范围
    设置两个传感器的满量程范围(FSR),分别通过陀螺仪配置寄存器(0X1B)和加速度传感器配置寄存器(0X1C)设置。我们一般设置陀螺仪的满量程范围为±2000dps,加速度传感器的满量程范围为±2g。
在这里插入图片描述    寄存器手册P14写到通过控制此寄存器的XG_ST、YG_ST和ZG_ST位,可以激活陀螺仪各轴的自检。由于暂时不需要自检不用配置。FS_SEL根据下表选择陀螺仪输出的满量程范围,配置成模式3也就是往寄存器中写入00011000。
在这里插入图片描述

  //陀螺仪寄存器配置代码,严格按照寄存器要求编写代码
  #define MPU_GYRO_CFG_REG		0X1B	//陀螺仪配置寄存器
	MPU_Set_Gyro_Fsr(3);							   //陀螺仪传感器,±2000dps 0X1B写入0001,1000=3左移3位=0110左移三位
	u8 MPU_Set_Gyro_Fsr(u8 fsr)            //将3左移三位也就是0001,1000
{
	return MPU_Write_Byte(MPU_ADDR, MPU_GYRO_CFG_REG, fsr << 3); //设置陀螺仪满量程范围3,±2000dps
}

同理加速度传感器配置寄存器(0X1C)配置在这里插入图片描述    AFS_SEL根据下表选择加速度计输出的满量程范围,加速度传感器的满量程范围为±2g,寄存器配置也就是0000,0000。
在这里插入图片描述

  //加速度计寄存器配置代码,严格按照寄存器要求编写代码
  #define MPU_ACCEL_CFG_REG		0X1C	//加速度计配置寄存器
  MPU_Set_Accel_Fsr(0);							   //加速度传感器,±2g     0x1C写入0000,0000  左移3位=0000,0000
  u8 MPU_Set_Accel_Fsr(u8 fsr)                                    //不用左移3位也没事
{
	return MPU_Write_Byte(MPU_ADDR, MPU_ACCEL_CFG_REG, fsr << 3); //设置加速度传感器满量程范围
} 



4)设置其他参数
    我们还需要配置的参数有:1.关闭中断、2.关闭AUX IIC 接口、3.禁止 FIFO、4.设置陀螺仪采样率和设置数字低通滤波器(DLPF)等,一步一步来。
1.关闭中断
    我们不用中断方式读取数据,所以关闭中断,关闭中断相关配置的寄存器是0X38
在这里插入图片描述在这里插入图片描述根据寄存器手册知不需要中断的话以上4个标志位需要为0,也就是寄存器配置成X0X0,0XX0即可,电源寄存器配置时56已经至0x00但是还是重新配置一下较好,配置成0x00,不要配置成X0X0,0XX0给自己整活。

//关闭中断寄存器配置代码,严格按照寄存器要求编写代码
#define MPU_INT_EN_REG			0X38	//中断使能寄存器
MPU_Write_Byte(MPU_ADDR, MPU_INT_EN_REG, 0X00);	   //关闭所有中断

2.关闭AUX IIC 接口
    没用到 AUX IIC 接口外接其他传感器,所以也关闭这个接口。关闭AUX IIC相关配置的寄存器是0X6A。
在这里插入图片描述根据寄存器手册P39,写到如果是MPU6050,I2C_IF_DIS必须为0.
在这里插入图片描述FIFO_EN:该位设为1时,使能FIFO操作。当此位清0时,FIFO缓冲器禁用。禁用时,无法写入或读取FIFO缓冲区。FIFO缓冲器的状态不会改变,除非MPU-60 X 0重新上电。

I2C_MST_EN:该位设为1时,使能I2C主机模式。当该位清0时,辅助I2C总线(AUX_DA和AUX_CL)由主I2C总线(SDA和SCL)逻辑驱动。

I2C_IF_DIS:MPU-6050 Always write this bit as zero

I2C_MST_RESET:当I2C_MST_EN置1时,此位使I2C主机复位。触发重置后,该位自动清0。

SIG_COND_RESET:设置为1时,该位复位所有传感器(陀螺仪、加速度计和温度传感器)的信号路径。此操作还将清除传感器寄存器。触发复位后,该位自动清0。

综上不需要使用时,0X6A配置成0x00即可。

//关闭AUX IIC 接口寄存器配置代码,严格按照寄存器要求编写代码
#define MPU_USER_CTRL_REG		0X6A	//用户控制寄存器
MPU_Write_Byte(MPU_ADDR, MPU_USER_CTRL_REG, 0X00); //I2C主模式关闭

3.禁止 FIFO
    MPU6050 可以使用 FIFO 存储传感器数据,不过本章我们没有用到,所以关闭所有 FIFO 通道,这个通过 FIFO 使能寄存器(0X23)控制,默认都是 0(即禁止 FIFO),所以用默认值就可以了0X00。
在这里插入图片描述如果配置FIFO的话需要进一步对FIFO相关的寄存器进行配置,从65至96
在这里插入图片描述

//禁止FIFO寄存器配置代码,严格按照寄存器要求编写代码
#define MPU_FIFO_EN_REG			0X23	//FIFO使能寄存器
MPU_Write_Byte(MPU_ADDR, MPU_FIFO_EN_REG, 0X00);   //关闭FIFO

4.设置陀螺仪采样率和设置数字低通滤波器(DLPF)
    陀螺仪采样率通过采样率分频寄存器(0X19)控制,采样率我们一般设置为 50 即可。
在这里插入图片描述SMPLRT_DIV生成采样速率:Sample Rate = Gyroscope Output Rate / (1 + SMPLRT_DIV)。当DLPF禁用(DLPF_CFG = 0或7)时,陀螺仪输出速率= 8 kHz;当DLPF使能(参见寄存器26)时,陀螺仪输出速率= 1 kHz。
所以还要参考26寄存器。
在这里插入图片描述    此寄存器配置陀螺仪和加速度计的外部帧同步(FSYNC)引脚采样和数字低通滤波器(DLPF)设置。
DLPF由DLPF_CFG配置。加速度计和陀螺仪根据DLPF_CFG的值进行滤波,如下表所示。
在这里插入图片描述决定你寄存器的取值取决于你的工作频率,数字低通滤波器(DLPF)则通过配置寄存器(0X1A)设置,一般设置DLPF 为带宽的 1/2 即可。即50HZ/2=25HZ,带宽21<25<44,选择4即可。带入公式Sample Rate = Gyroscope Output Rate / (1 + SMPLRT_DIV)。最终得算采样速率=1000HZ/(1+4)=200HZ

//设置陀螺仪采样率和设置数字低通滤波器寄存器配置代码,严格按照寄存器要求编写代码
#define MPU_CFG_REG				0X1A	//配置寄存器
#define MPU_SAMPLE_RATE_REG		0X19	//采样频率分频器
MPU_Set_Rate(50);								   //设置采样率50Hz
//设置MPU6050的采样率(假定Fs=1KHz)
//rate:4~1000(Hz)
//返回值:0,设置成功
//    其他,设置失败
u8 MPU_Set_Rate(u16 rate)
{
	u8 data;
	if (rate > 1000) rate = 1000;
	if (rate < 4) 	  rate = 4;
	data = 1000 / rate - 1;
	data = MPU_Write_Byte(MPU_ADDR, MPU_SAMPLE_RATE_REG, data); //设置数字低通滤波器
	return MPU_Set_LPF(rate / 2);								//自动设置LPF为采样率的一半
}
//设置MPU6050的数字低通滤波器
//lpf:数字低通滤波频率(Hz)
//返回值:0,设置成功
//    其他,设置失败
u8 MPU_Set_LPF(u16 lpf)
{
	u8 data = 0;
	if (lpf >= 188) data = 1;
	else if (lpf >= 98) data = 2;
	else if (lpf >= 42) data = 3;
	else if (lpf >= 20) data = 4;
	else if (lpf >= 10) data = 5;
	else data = 6;
	return MPU_Write_Byte(MPU_ADDR, MPU_CFG_REG, data); //设置数字低通滤波器
}

5)配置系统时钟源并使能角速度传感器和加速度传感器
    在此之前读取一下MPU6050的IIC地址,AD0引脚改变地址状态。读取地址0x75。
在这里插入图片描述    此寄存器用于验证设备的身份。WHO_AM_I的内容是MPU-60X0的7位I2C地址的高6位。MPU-60X0的I2C地址的最低有效位由AD 0引脚的值决定。AD0引脚的值不反映在此寄存器中。说明:寄存器的默认值为0x68。系统时钟源同样是通过电源管理寄存器 1(0X6B)来设置,该寄存器的最低三位用于设置系统时钟源选择,默认值是 0(内部8M RC震荡),不过我们一般设置为 1,选择 x 轴陀螺 PLL作为时钟源,以获得更高精度的时钟。同时,使能角速度传感器和加速度传感器,这两个操作通过电源管理寄存器 2(0X6C)来设置,设置对应位为 0 即可开启。至此,MPU6050 的初始化就完成了,可以正常工作了(其他未设置的寄存器全部采用默认值即可),接下来,我们就可以读取相关寄存器,得到加速度传感器、角速度传感器和温度传感器的数据了。

  //配置系统时钟源并使能角速度传感器和加速度传感器寄存器配置代码,严格按照寄存器要求编写代码
	res = MPU_Read_Byte(MPU_ADDR, MPU_DEVICE_ID_REG);
	if (res == MPU_ADDR) //器件ID正确
	{
		MPU_Write_Byte(MPU_ADDR, MPU_PWR_MGMT1_REG, 0X01); //设置CLKSEL,PLL X轴为参考
		MPU_Write_Byte(MPU_ADDR, MPU_PWR_MGMT2_REG, 0X00); //加速度与陀螺仪都工作
	}
	else
		return 1;
	return 0;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2222539.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis学习笔记(六)--Redis底层数据结构之集合的实现原理

文章目录 一、两种实现的选择二、ziplist1、head2、entries3、end 三、listPack1、head2、entries3、end 四、skipList1、skipList原理2、存在的问题3、算法优化 五、quickList1、检索操作2、插入操作3、删除操作 六、key与value中元素的数量 本文参考&#xff1a; Redis学习汇…

从天边的北斗到身边的北斗 —— 探索北斗导航系统的非凡之旅

引言&#xff1a;穿越时空的导航奇迹 在浩瀚的夜空之中&#xff0c;北斗七星以其独特的排列&#xff0c;自古以来便是指引方向的天文坐标。而今&#xff0c;这份古老的智慧与现代科技完美融合&#xff0c;化作了覆盖全球的卫星导航系统——中国北斗。从遥远的星河到触手可及的…

不考虑光影、背景、装饰,你的可视化大屏摆脱不了平淡。

如果在可视化大屏的设计中不考虑光影、背景和装饰&#xff0c;确实难以摆脱平淡。光影效果可以为大屏增添立体感和层次感&#xff0c;吸引观众的注意力。 合适的背景能营造出特定的氛围&#xff0c;使数据展示更具情境感。而装饰元素则可以起到点缀和美化的作用&#xff0c;提…

【无标题】unity, 在编辑界面中隐藏公开变量和现实私有变量

1.unity, 在编辑界面中隐藏公开变量 [HideInInspector]public int Num; 2.[SerializeField]反序列化显示私有变量 SerializeField是Unity引擎中的一个特性&#xff0c;用于使私有变量在Inspector中可见并可编辑 [SerializeField] private int time; 实例效果如下图示&…

Xshell删除键不好使:删除显示退格^H

1、问题&#xff1a; Xshell不能删除&#xff0c;删除时出现 退格^H 2、解决方案&#xff1a; 点击上方&#xff1a;文件→属性→终端→键盘&#xff0c;把 delete 和 backspace 序列改为 ASCII 127即可。如下所示&#xff1a; 3、重启Xshell&#xff0c;即可以删除了。

UE5 射线折射

这个判断是否有标签是需要带有此标签的Actor来反射

基础知识 main函数形参 C语言

main函数完整的函数头&#xff1a;int main(int argc,char *argv[]) 或 int main(int argc,char **argv)arg-----argument参数c -----count个数v -----value值、内容 假设命令行上运行一个程序的命令如下&#xff1a;./test abc def 123 则test这个程序的main函数第一个…

论当前的云计算

随着技术的不断进步和数字化转型的加速&#xff0c;云计算已经成为当今信息技术领域的重要支柱。本文将探讨当前云计算的发展现状、市场趋势、技术革新以及面临的挑战与机遇。 云计算的发展现状 云计算&#xff0c;作为一种通过网络提供可伸缩的、按需分配的计算资源服务模式&a…

【AIGC】优化长提示词Prompt:提升ChatGPT输出内容的准确性与实用性

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;长提示词的挑战&#x1f4af;谷歌的优化长提示词技术关键因素分析 &#x1f4af;长提示词的设计原则&#x1f4af;优化长提示词的新框架方法&#x1f4af;实验结果分析不…

PostgreSQL的前世今生

PostgreSQL的起源可以追溯到1977年的加州大学伯克利分校&#xff08;UC Berkeley&#xff09;的Ingres项目。该项目由著名的数据库科学家Michael Stonebraker领导&#xff0c;他是2015年图灵奖的获得者。以下是PostgreSQL起源的详细概述&#xff1a; 一、早期发展 Ingres项目…

【正点原子K210连载】第四十七章 MNIST实验 摘自【正点原子】DNK210使用指南-CanMV版指南

第四十七章 MNIST实验 在上一章节中&#xff0c;介绍了利用maix.KPU模块实现了车牌的检测和识别&#xff0c;本章将继续介绍利用maix.KPU模块实现的MNIST识别。通过本章的学习&#xff0c;读者将学习到MNIST识别应用在CanMV上的实现。 本章分为如下几个小节&#xff1a; 47.1 …

058_基于python时尚女装抖音号评论数据分析系统

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍&#xff1a;CodeMentor毕业设计领航者、全网关注者30W群落&#xff0c;InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者&#xff0c;博客领航之星、开发者头条/腾讯云/AW…

国外白帽故事 | 攻破大学数据库系统,暴露数千学生记录

引言 在这篇文章中&#xff0c;我将分享我是如何攻破一个大型大学解决方案门户服务器的&#xff0c;这个服务器服务于许多大学客户&#xff0c;并且涉及数千名学生的数据。 目标 这是一个由印度许多大学和学院使用的门户网站&#xff0c;用于管理学生记录、成绩单、出勤记录…

【JavaEE】——四次挥手,TCP状态转换,滑动窗口,流量控制

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 一&#xff1a;断开连接的本质 二&#xff1a;四次挥手 1&#xff1a;FIN 2&#xff1a;过程梳理 …

MacOS RocketMQ安装

MacOS RocketMQ安装 文章目录 MacOS RocketMQ安装一、下载二、安装修改JVM参数启动关闭测试关闭测试测试收发消息运行自带的生产者测试类运行自带的消费者测试类参考博客&#xff1a;https://blog.csdn.net/zhiyikeji/article/details/140911649 一、下载 打开官网&#xff0c;…

华为云容器引擎(CCE):赋能企业云原生转型

在当今数字化时代&#xff0c;企业面临着日益复杂的应用部署和管理挑战。为了解决这些问题&#xff0c;容器技术应运而生&#xff0c;成为云原生架构的核心。华为云容器引擎&#xff08;CCE&#xff09;作为一款全面的容器管理解决方案&#xff0c;旨在帮助企业实现高效、灵活的…

Linux终端之旅: 打包和压缩

在 Linux 世界中&#xff0c;打包和压缩文件是管理系统资源、传输数据和备份的重要技能。通过命令行工具如 tar、gzip、zip 等&#xff0c;我们可以高效地将多个文件或目录打包为一个文件&#xff0c;并通过压缩减少其体积。接下来&#xff0c;我将记录学习如何利用这些工具&am…

SpringBoot3响应式编程全套-Spring Security Reactive

目录 传送门前言一、整合二、开发1、应用安全2、RBAC权限模型 三、认证1、静态资源放行2、其他请求需要登录 四、授权 传送门 SpringMVC的源码解析&#xff08;精品&#xff09; Spring6的源码解析&#xff08;精品&#xff09; SpringBoot3框架&#xff08;精品&#xff09; …

云+AI 时代的 OceanBase

2024 年 10 月 23 日&#xff0c;OceanBase 年度发布会在北京成功举办。会上&#xff0c;CEO 杨冰表示&#xff0c;OceanBase将继续践行一体化产品战略&#xff0c;不断演进产品能力&#xff0c;从支撑关键业务负载的OLTP能力&#xff0c;到实时分析的AP能力&#xff0c;再到应…

Unity Apple Vision Pro 保姆级开发教程 - Simulator 模拟器使用

教程视频 Apple VisionPro Simulator 模拟器使用教程 Unity Vision Pro 中文课堂教程地址&#xff1a; Unity3D Vision Pro 开发教程【保姆级】 | Unity 中文课堂 ​ VsionOS Simulator 简介 visionOS Simulator 是一个用于开发和测试 visionOS 应用程序的工具。它模拟 Appl…