STM32—MPU6050

news2024/9/22 13:29:42

1.MPU6050简介

  • MPU6050是一个6轴姿态传感器可以测量芯片自身X、Y、Z轴的加速度、角速度参数,通过数据融合,可进一步得到姿态角,常应用于平衡车、飞行器等需要检测自身姿态的场景
  • 3轴加速度计(Accelerometer:测量X、Y、Z轴的加速度
  • 3轴陀螺仪传感器(Gyroscope):测量X、Y、Z轴的角速度

在XZ轴,这个芯片内部都分别布置了一个加速度计,中间图为加速度计的结构图,其中水平的这个虚线是感应轴线,中间是一个具有一定质量、可以左右滑动的小滑块,然后左右各有一个弹簧顶着它,中间这个小滑块就会左右移动,去压缩或拉伸两边的弹簧,当滑块移动时,就会带动上面的电位器滑动,当滑块移动时,就会带动上面的电位器滑动,这个电位器其实就是一个分压电阻,然后我们测量电位器输出的电压,就能得到小滑块所受的加速度值了

这个加速度计,实际上就是一个弹簧测力计,根据牛顿第二定律,F=ma,我们想测量这个加速度a,就可以找一个单位质量的物体,测量它所受的力F,就行了

加速度计具有静态稳定性,不具有动态稳定性

这就是陀螺仪的机械模型,中间是一个有一定质量的旋转轮,外面是3个轴的平环,当中间这个旋转轮高速旋转时,根据角动量守恒的原理,这个旋转轮具有保持它原有角动量的趋势,这个趋势可以保持旋转轴方向不变,当你外部物体的方向转动时,内部的旋转轴方向并不会转动,这就会在平衡环连接处产生角度偏差,如果我们在连接处放一个旋转的电位器,测量电位器的电压,就能得到旋转的角度了,陀螺仪具有动态稳定性,不具有静态稳定性

2.MPU6050参数

  • 16位ADC采集传感器的模拟信号,量化范围:-32768~32767
  • 加速度计满量程选择:+2、±4、±8、±16(g)
  • 陀螺仪满量程选择:±250、+500、±1000、+2000(°/sec)
  • 可配置的数字低通滤波器
  • 可配置的时钟源
  • 可配置的采样分频

  • 12C从机地址:1101000   (AD0=0)      0x68<<1 或 0xD0  写
    •                  1101001    (AD0=1)

所以你之后看到有地方说0xD0是MPU6050的从机地址,那它就是融入了读写位的从机地址

如果你看到有地方说0x68是MPU6050的从机地址,这种方式就是直接把7位地址转换十六进制得到的,在实际发送第一个字节时,不要忘了先左移1位,再或上读写位

3.硬件电路

右边这个MPU6050的芯片,芯片本身引脚非常多,包括时钟、12C通信引脚、供电、帧同步等等,不过这里有很多引脚我们都用不到,还有一些引脚,是这个芯片最小系统里的固定连接

然后看左下角,引出来的引脚,有VCC和GND,这两个引脚是电源供电,然后SCL和SDA,这两个引脚是12C通信的引脚,右图可以看到SCL和SDA,模块已经内置了两个4.7K的上拉电阻了,所以我们在接线的时候,直接把SCL和SDA接在GPIO口就行了,不需要再在外面另外接上拉电阻了,接着下面,还有XCL和XDA,这两个是芯片里面的主机12C通信引脚,设计这两个引脚是为了扩展芯片功能,

之前我们说过,MPU6050是一个6轴姿态传感器,但是只有加速度计和陀螺仪的6个轴,融合出来的姿态角是有缺陷的,这个缺陷就是绕Z轴的角度,也就是偏航角,它的漂移无法通过加速度计进行纠正,这就像是让你坐在车里,不看任何窗户,然后让你辨别当前车子的行驶方向,短时间内,你可以通过陀螺仪得知方向的变化,从而确定变化后的行驶方向,但是时间一长,车子到处转弯,你没有稳定的参考了,就肯定会迷失方向,所以这时候,你就要带个指南针在身边,提供长时间的稳定偏航角进行参考,来对陀螺仪感知的方向进行纠正,这就是9轴姿态传感器多出的磁力计的作用,

XCL和XDA,通常就是用于外接磁力计或者气压计,当接上磁力计或气压计之后,MPU6050的主机接口可以直接访问这些扩展芯片的数据,把这些扩展芯片的数据读取到MPU6050里面,在MPU6050里面会有DMP单元,进行数据融合和姿态解算,当然,如果你不需要MPU6050的解算功能的话,也可以把这个磁力计或者气压计直接挂载在SCL和SDA这条总线上,因为12C本来就可以挂载多设备,这就是XCL和XDA的用途

AD0引脚,它是从机地址的最低位,接低电平的话,7位从机地址就是1101000,接高电平的话,7位从机地址就是1101001,这里电路中,有一个电阻,默认弱下拉到候电平了所以引脚悬空的话,就是低电平,如果想接高电平,可以把AD0直接引到VCC,强上拉至高电平

INT中断信号输出,可以配置芯片内部的一些事件,来触发中断引脚的输出,比如数据准备好了、12C主机错误等,另外芯片内部还内置了一些实用的小功能,比如自由落体检测、运动检测、零运动检测等,这些信号都可以触发INT引脚产生电平跳变,需要的话可以进行中断信号的配置

然后看一下左上角的这个LDO,这部分是供电的逻辑,这个MPU6050芯片的VDD供电是2.375-3.46V,属于是3.3V供电的设备,不能直接接5V,所以为了扩大供电范围,这个模块的设计者就加了个3.3V的稳压器,输入端电压VCC 5V可以在3.3V型5V之间,然后经过3.3V的稳压器,输出稳定的3.3V电压,给芯片端供电,后面是电源指示灯,只要3.3V端有电,电源指示灯就会亮,所以这一块需不需要,可以根据你的项目要求来

4.MPU6050框图

左上角的是时钟系统,有时钟输入脚和输出脚,不过我们般使用内部时钟,

然后,下面这些灰色的部分,就是芯片内部的传感器,其中包括XZ轴的加速度计,X轴的陀螺仪,另外这个芯片还内置了一个温度传感器,你要是想用它来测量温度,也是没问题的,那这么多传感器,本质上也都相当于可变电阻,通过分压后,输出模拟电压,然后通过ADC,进行模数转换,转换完成之后,这些传感器的数据统 都放到数据寄存器中,我们读取数据寄存器就能得到传感器测量的值了

这个芯片内部的转换,都是全自动进行的,就类似我们之前学的AD连续转换+DMA转运,每个ADC输出,对应16位的数据寄存器,不存在数据覆盖的问题,我们配置好转换频率之后,每个数据就自动以我们设置的频率刷新到数据寄存器,我们需要数据的时候,直接来读就行了,其他的都不用管

接着,这每个传感器都有个自测单元(左侧部分),这部分是用来验证芯片好坏的,当启动自测后,芯片内部会模拟一个外力施加在传感器上,这个外力导致传感器数据会比平时大一些,那如何进行自测呢,我们可以先使能自测,读取数据,再失能自测,读取数据,两个数据一相滅,得到的数据叫自测响应,这个自测响应,芯片手册里给出了一个范围,如果自测响应在这个范围内,就说明芯片没问题,如果不在,就说明芯片可能坏了,使用的话就要小心点,这个是自测的功能

然后下面这个东西,是电荷泵,或者叫充电泵,CPOUT引脚需要外接一个电容,什么样的电容,这个在手册里有说明,电荷泵是一种升压电路,在其他电路也有出现过,比如我们用的这个OLED屏幕里面就有电荷泵进行升压

升压原理:比如我有个电池,电压是5V,然后我再来个电容,首先电池和电容并联,电池给电容充电,充满之后,电容是不是也相当于一个5V的电池了 ,然后我再修改电路的接法,把电池和电容串联起来,电池5V,电容也是5V,这样输出就是10V的电压了,是不是凭空就把电池电压升高至两倍了啊,不过由于这个电容电荷比较少,用一下就不行了,所以这个并联、串联的切换速度要快,趁电容还没放电完,就要及时并联充电,这样 直持续,并联充电,串联放电,并联充电,联放电,然后后续再加个电源滤波,就能进行平稳的升压了,这就是电荷泵的升压原理

由于陀螺仪内部是需要一个高电压支持的,所以这里设计了一个电荷泵进行升压,当然这个升压过程是自动的,不需要我们管

右边一大块,就是寄存器和通信接口部分了,

  • 中断状态寄存器,可以控制内部的哪些事件到中断引脚的输出,
  • FIFO,是先入先出寄存器,可以对数据流进行缓存,
  • 配置寄存器,可以对内部的各个电路进行配置,
  • 传感器寄存器,也就是数据寄存器,存储了各个传感器的数据,
  • 工厂校准,这个意思就是内部的传感器都进行了校准

然后右边这个数字运动处理器,简称DMP,是芯片内部自带的一个姿态解算的硬件算法,配合官方的DMP库,可以进行姿态解算,因为姿态解算还是比较难的,而且算法也很复杂,所以如果使用了内部的DMP进行姿态解算,姿态解算就会方便一些

这个FSYNC,是帧同步,我们用不到

最后上面这块,就是通信接口部分了,上面一部分就是从机的12C和SPI通信接口,用于和STM32通信,下面这一部分是主机的12C通信接口,用于和MPU6050扩展的设备进行通信,这里有个接口旁路选择器,就是一个开关,如果拨到上面,辅助的12C引脚就和I常的12C引脚接到一起,这样两路总线就合在一起了,STM32可以控制所有设备,如果拨到下面,辅助的I2C引脚就由MPU6050控制,两条12C总线独立分开,这时STM32是MPU6050的大哥,MPU6050又是扩展设备的大哥

然后最后,下面这里是供电的部分

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

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

相关文章

构建未来企业的理论基石:业务能力建模指南的深度解析与战略实施框架

数字化转型已经成为全球企业的战略焦点&#xff0c;在这个过程中&#xff0c;如何有效地将复杂的业务需求、技术架构和市场变化结合&#xff0c;形成具备长期竞争力的企业能力框架&#xff0c;是企业成败的关键。《业务能力指南》提供了一套经过验证的理论体系&#xff0c;帮助…

数字图像面积计算一般方法及MATLAB实现

一、引言 在数字图像处理中&#xff0c;经常需要获取感兴趣区域的面积属性&#xff0c;下面给出图像处理的一般步骤。 1.读入的彩色图像 2.将彩色图像转化为灰度图像 3.灰度图像转化为二值图像 4.区域标记 5.对每个区域的面积进行计算和显示 二、程序代码 %面积计算 cle…

《COMMA: Co-articulated Multi-Modal Learning》中文校对版

系列论文研读目录 文章目录 系列论文研读目录摘要导言相关工作视觉语言模型提示学习视觉语言模型中的提示学习 方法准备工作提议方法 实验基准设定基础到新的概括跨数据集传输消融实验 结论 摘要 经过预训练的大规模视觉语言模型&#xff08;如CLIP&#xff09;已经在一系列下…

PyQt5 导入ui文件报错 AttributeError: type object ‘Qt‘ has no attribute

问题描述&#xff1a; 利用 PyQt5 编写可视化界面是较为普遍的做法&#xff0c;但是使用全新UI版本的 Pycharm 修改之前正常的UI文件时&#xff0c;在没有动其他代码的情况下发现出现以下报错 AttributeError: type object Qt has no attribute Qt::ContextMenuPolicy::Defaul…

BFS 解决多源最短路问题

文章目录 多源BFS542. 01 矩阵题目解析算法原理代码实现 1020. 飞地的数量题目解析算法原理 1765. 地图中的最高点题目解析算法原理代码实现 1162. 地图分析题目解析算法原理代码实现 多源BFS 单源最短路&#xff1a; 一个起点、一个终点 多源最短路&#xff1a; 可以多个起点…

Apache ZooKeeper 及 Curator 使用总结

1. 下载 官网地址&#xff1a;Apache ZooKeeper 点击下载按钮 选择对应的版本进行下载 2. 使用 1、解压 tar -zxf apache-zookeeper-3.9.2-bin.tar.gz2、复制配置文件&#xff0c;有一个示例配置文件 conf/zoo_sample.cfg&#xff0c;此文件不能生效&#xff0c;需要名称为…

LeetCode_sql_day31(1384.按年度列出销售总额)

目录 描述 1384.按年度列出销售总额 数据准备 分析 法一 法二 代码 总结 描述 1384.按年度列出销售总额 Product 表&#xff1a; ------------------------ | Column Name | Type | ------------------------ | product_id | int | | product_name | var…

将sqlite3移植到arm开发板上:

一、下载源代码 sqlite3网址&#xff1a;https://www.sqlite.org/download.html 下载&#xff1a;sqlite-autoconf-3460100.tar.gz 二、解压 在Linux家目录下创建一个sqlite3文件夹&#xff0c;将压缩包复制到该文件夹下&#xff0c;再在该目录下打开一个终端&#xff0c;执行…

【机器学习】--- 决策树与随机森林

文章目录 决策树与随机森林的改进&#xff1a;全面解析与深度优化目录1. 决策树的基本原理2. 决策树的缺陷及改进方法2.1 剪枝技术2.2 树的深度控制2.3 特征选择的优化 3. 随机森林的基本原理4. 随机森林的缺陷及改进方法4.1 特征重要性改进4.2 树的集成方法优化4.3 随机森林的…

7-50 畅通工程之局部最小花费问题 (kruskal)

输入样例: 4 1 2 1 1 1 3 4 0 1 4 1 1 2 3 3 0 2 4 2 1 3 4 5 0输出样例: 3 代码&#xff1a; #include<iostream> #include<queue> using namespace std; const int N110; struct node{int x,y,w;bool operator <(const node &n1)const{if(wn1.w) retur…

4 html5 web components原生组件详细教程

web components 前面我们已经介绍过&#xff0c;这一期我们就来讲一讲具体用法和这其中的关键只是点&#xff1a; 1 基本使用 如果我们想实现一个封装的原生组件&#xff0c;那就离不开使用js去封装&#xff0c;这里主要就是基于HTMLElement这个类&#xff0c;去创建创建一个…

【HarmonyOS】深入理解@Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化

【HarmonyOS】深入理解Observed装饰器和ObjectLink装饰器&#xff1a;嵌套类对象属性变化 前言 之前就Observed和ObjectLink写过一篇讲解博客【HarmonyOS】 多层嵌套对象通过ObjectLink和Observed实现渲染更新处理&#xff01; 其中就Observe监听类的使用&#xff0c;Object…

prometheus监控linux虚拟机

前提条件已安装好prometheus和grafana&#xff0c;如果未安装请移步到docker部署prometheus 安装部署Prometheus,docker安装grafana安装部署Grafana。 1.二进制部署node-exporter采集器 2.1 采集器node-exporter下载 链接&#xff1a;https://pan.baidu.com/s/1hDmckSSl5X36…

【算法】BFS系列之 拓扑排序

【ps】本篇有 3 道 leetcode OJ。 目录 一、算法简介 二、相关例题 1&#xff09;课程表 .1- 题目解析 .2- 代码编写 2&#xff09;课程表 II .1- 题目解析 .2- 代码编写 3&#xff09;火星词典 .1- 题目解析 .2- 代码编写 一、算法简介 【补】图的基本概念 &#…

本地提权【笔记总结】

文章目录 服务命令at命令提权介绍适用版本复现 sc命令提权介绍适用版本复现 ps应用程序提权复现 进程注入进程迁移注入介绍条件复现 MSF自动化注入介绍getsystem原理 复现 MSF令牌窃取介绍复现 烂土豆提权介绍适用版本复现 UAC绕过介绍复现使用ask模块绕过使用bypassuac_sluihi…

谷歌的AI反击战:创始人谢尔盖·布林的回归与大模型组合的未来

近年来&#xff0c;随着AI技术的迅猛发展&#xff0c;尤其是ChatGPT等大语言模型的出现&#xff0c;全球科技格局正发生剧烈变化。作为曾经引领AI潮流的谷歌&#xff0c;在这场竞争中逐渐失去了领头羊的地位。然而&#xff0c;谷歌的创始人之一谢尔盖布林&#xff08;Sergey Br…

计算组合数

1.递推 #include<bits/stdc.h> #include<unordered_map> #include<unordered_set> using namespace std; #define int long long //可能会超时 #define PII pair<int,int> const int INF 0x3f3f3f3f, mod 1e9 7; const int N 2005; int a, b,n; …

手机自动化测试环境之夜神模拟器inspector部署验证

1、自动化测试环境部署_总览图检查表流程图 Python需要安装Appium-Python-Clicent去定位元素&#xff1b;Appium是一个中间的服务器&#xff0c;它需要依赖node.js&#xff0c;python的脚本通过appium和手机进行交互&#xff1b;手机app的环境都是java环境&#xff0c;先安装jd…

9、等保测评介绍

数据来源&#xff1a;9.等保测评介绍_哔哩哔哩_bilibili 信息系统等级测评 信息系统等级测评是测评机构依据国家信息安全等级保护制度的规定&#xff0c;按照相关管理规范和技术标准&#xff0c;对未涉及国家秘密的信息系统的安全等级保护状况进行检测评估的活动。 等级测评…

gitlab 的CI/CD (一)

前言 GitLab CI/CD 是一个内置在GitLab中的工具&#xff0c;用于通过持续方法进行软件开发&#xff1a; Continuous Integration (CI) 持续集成Continuous Delivery (CD) 持续交付Continuous Deployment (CD) 持续部署 持续集成的工作原理是将小的代码块推送到Git仓库…