STM32学习笔记(10_2)- I2C通信协议MPU6050简介

无人问津也好,技不如人也罢,都应静下心来,去做该做的事。

最近在学STM32,所以也开贴记录一下主要内容,省的过目即忘。视频教程为江科大(改名江协科技),网站jiangxiekeji.com

本期开始学习 I2C通信,会分两大块来介绍,第一块, 就是介绍协议规则,然后用软件模拟的形式来实现协议;第二块, 就是介绍STM32的 I2C外设, 然后用硬件来实现协议。

I2C:高位先行,只有在SCL高电平时才会读取SDA的电平

MPU6050的读地址是0xD1,写地址是0xD0

上一期我们介绍通过I2C实现指定地址写和指定地址读的逻辑,即使这个外挂芯片的各种寄存器不在STM32内部,仍能通过通信协议实现读写外挂芯片寄存器的功能。

本期的内容其实就是对MPU6050芯片内部的寄存器进行读写,写入到配置寄存器,就可以对外挂的这个模块进行配置;读出数据寄存器,就可以获取外挂模块的数据。最终,我们读出的数据会显示在这个OLED上。而STM32对MPU6050的读写是通过I2C来进行的。

MPU6050简介

D:\software\STM32入门教程资料\模块资料(1)\模块资料\13-MPU6050 陀螺仪加速度计

里有一个是PS-MPU-6000A,是产品说明书;另一个是RM,寄存器映像。

MPU6050加速度的三轴和加速度的三轴加起来总共就是6个轴,所以这个芯片是6轴姿态传感器。当然如果芯片里再集成一个3轴的磁场传感器,测量XYZ轴的磁场强度,那就叫作9轴姿态传感器。如果再集成一个气压传感器,测量气压大小,从而判断海拔高度,便是10轴姿态传感器。

姿态角也叫欧拉角。以下图的飞机为例,欧拉角就是飞机机身相对于初始3个轴的夹角,飞机机头下倾或者上仰,这个轴的夹角叫作俯仰,Pitch。飞机机身左翻滚或者右翻滚,这个轴的夹角叫作滚转,Roll。飞机机身保持水平,机头向左转向或者向右转向,这个轴的夹角叫作偏航,Yaw。简单来说,欧拉角就表达了飞机此时的姿态,飞机是上仰了还是下倾了,飞机向左倾斜还是向右倾斜了,通过欧拉角都能清晰地表示出来。常见的数据融合算法,一般有互补滤波、卡尔曼滤波等。

可以把MPU6050看成六个测力的秤,组成一个正方体,中心有个单位质量的小球。 小球压在哪一个面上,就会有对应的数据输出。比如你把芯片静置水平放在地球上,那就只有底面测力计受到小球的压力,所以此时数据输出就是XY轴输出为0,Z轴输出1个g的加速度值。加速度计具有静态稳定性,不具有动态稳定性,因为物体运动时这个角度会受运动加速度的影响而变得不准确。

可以把陀螺仪看成是游乐园的旋转飞椅模型,中间的轴转的越快,这个椅子飞的就越远,最终我们测量一下对向两个椅子飞起来的距离或飞起来的夹角,就能得到中间轴的角速度了。对角速度积分便能得到角度,但是角速度积分得到的角度经不起时间的考验,会有一个随时间变化的漂移,但不受物体运动的影响。总结下来就是,陀螺仪具有动态稳定性,不具有静态稳定性。

把加速度和角速度进行互补滤波,就能通过数据融合得到静态和动态都稳定的姿态角了。

 MPU6050重要参数

数据是16位的,会分为2个字节存储。

单位是g,也就是重力加速度,1个g=9.8m/s2。

单位是°/sec,就是角速度的单位,每秒旋转了多少度。

如果物体运动比较剧烈,满量程可以选大一点。运动比较平缓的话,可以选择量程小一点,这样分辨率更大。

如果输出数据抖动太厉害,可以配置寄存器来选择对输出数据进行低通滤波。

两种MPU6050从机地址表示方式:一是把110 1000这7位二进制数转换为十六进制(即0x68),I2C通信时,在发第一个字节时,要先把0x68左移1位,再按位或上读写位(读置1写置0)。二是把0x68左移1位后的数据,当做从机地址,0x68左移1位之后,是0xD0。那这样MPU6050的从机地址就是0xD0,在发送第一个字节时,如果你要写,就直接把0xD0当作第一个字节。如果你要读,就把0xD0或上0x01,即0xD1当作第一个字节。这是融入了读写位的从机地址。总结就是MPU6050的读地址是0xD1,写地址是0xD0,本期采用这种方法表示MPU6050的从机地址。

MPU6050硬件电路

这里MPU6050模块内部的SCL、SDA已经内置了上拉电阻,所以接线时,直接把SCL和SDA接在GPIO口就行了。

这个融合了六轴的姿态角会有个缺陷,这缺陷就是绕Z轴的角度,也就是偏航角。这就好像让你坐在车里,不让看窗户,判断车子行驶的方向,短时间还行,时间一长,没有稳定的参考就会迷失方向。这时就要带个指南针,提供长时间的稳定偏航角进行参考,对陀螺仪感知的方向进行修正,这就是9轴姿态传感器多出的磁力计的作用。另外,如果是无人机,需要定高飞行,这时候就还需要增加气压计,扩展为10轴,提供一个高度信息的稳定参考。XCL和XDA,通常就是用于外接磁力计或者气压计。本期不用。

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

MPU6050框图

我们读取数据寄存器就能得到传感器测量的值了 。这个芯片内部的转换,都是全自动进行的,每个ADC输出,对应16位的数据寄存器,不存在数据覆盖的问题。我们配置好转换频率之后,每个数据就自动以我们设置的频率刷新到数据寄存器,我们需要数据的时悮,直接来读就行了。

框图左边,每个传感器都有个自测单元,这部分是用来验证芯片好坏的。当启动自测后,芯片内部会模拟一个外力施加在传感器上,这个外力导致传感器数据会比平时大些。如何自测?先使能自测,读取数据;再使能自测,读取数据。两个数据一相减,得到的数据叫自测响应。这个自测响应,芯片手册里给出了一个范围,在范围内,就说明芯片没问题。

右边的数字运动处理器,简称DMP。是芯片内部自带的一个姿态解算的硬件算法,配合宫方的DMP库,可以进行姿态解算。本期不涉及。

两个程序现象

一是软件 I2C读写MPU6050 

对MPU6050芯片内部的寄存器进行读写,写入到配置寄存器,就可以对外挂的这个模块进行配置;读出数据寄存器,就可以获取外挂模块的数据。最终,我们读出的数据会显示在这个OLED上。最上面的是ID号,图中这个MPU6050的ID号固定为0x68,可以读取这个ID号用来测试 I2C读取数据的功能是不是正常,不同批次的MPU6050,ID号会有所不同。然后下面,左边3个,是加速度传感器的输出数据,分别是X轴、Y轴和Z轴的加速度,右边3个,是陀螺仪传感器的输出数据,分别是X轴、Y轴和Z轴的角速度。

二是硬件 I2C读写MPU6050

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Base64编码的全面介绍

title: Base64编码的全面介绍 date: 2024/3/31 18:55:49 updated: 2024/3/31 18:55:49 tags: Base64编码网络传输文本转换数据膨胀非加密性质应用场景安全传输 1. Base64的定义和作用 Base64是一种用64个字符表示二进制数据的编码方式,通常用于在网络传输中将二进…

【Vue】动态样式

内联样式的动态样式 body(){ boxASelect:false, } v-bind:style"{borderColor:boxASelect ? red : #ccc}" <body><header><h1>Vue Dynamic Styling</h1></header><section id"styling"><div class"demo&quo…

flutter 修改app名字和图标

一、修改名字 在Android中修改应用程序名称&#xff1a; 在AndroidManifest.xml文件中修改应用程序名称&#xff1a; 打开Flutter项目中的android/app/src/main/AndroidManifest.xml文件。找到<application>标签&#xff0c;然后在android:label属性中修改应用程序的名称…

[幻灯片]软件需求设计方法学全程实例剖析-03-业务用例图和业务序列图

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 pdf已上传至本号的CSDN资源&#xff0c;或到以下地址下载&#xff1a; http://umlchina.com/training/umlchina_03_bm.pdf

算法学习——LeetCode力扣补充篇2(724. 寻找数组的中心下标、34. 在排序数组中查找元素的第一个和最后一个位置、922. 按奇偶排序数组 II、35. 搜索插入位置、24. 两两交换链表)

算法学习——LeetCode力扣补充篇2 724. 寻找数组的中心下标 724. 寻找数组的中心下标 - 力扣&#xff08;LeetCode&#xff09; 描述 给你一个整数数组 nums &#xff0c;请计算数组的 中心下标 。 数组 中心下标 是数组的一个下标&#xff0c;其左侧所有元素相加的和等于右…

FPGA亚稳态学习总结

首先是组合逻辑电路考虑的是竞争冒险&#xff0c;冒险会产生毛刺。重点研究如何去毛刺 时序逻辑电路考虑的是时序不满足会产生的亚稳态问题&#xff1a;如何考量时序满不满足呢&#xff1f;根据不同的场景又有不同的说法。 时序分析的两组基本概念 建立时间与保持时间 1.在…

Docker 轻量级可视化工具 Portainer

1. 是什么 它是一款轻量级的应用&#xff0c;它提供了图形化界面&#xff0c;用于方便管理Docker环境&#xff0c;也包括单机环境和集群环境。 2. 安装 官网&#xff1a;Kubernetes and Docker Container Management Software 安装路径&#xff1a;Install the Compose plug…

本地搭建多人协作ONLYOFFICE文档服务器并结合Cpolar内网穿透实现公网访问远程办公

文章目录 1. 安装Docker2. 本地安装部署ONLYOFFICE3. 安装cpolar内网穿透4. 固定OnlyOffice公网地址 本篇文章讲解如何使用Docker在本地服务器上安装ONLYOFFICE&#xff0c;并结合cpolar内网穿透实现公网访问。 Community Edition允许您在本地服务器上安装ONLYOFFICE文档&…

spring注解@EventListener实现监听原理

文章目录 EventListener使用方式EventListener实现原理1.引入时机2 初始化时机3 作用时机->将加了EventListener注解的方法识别出来&#xff0c;并封装为监听器&#xff0c;加载spring容器中 总结 EventListener使用方式 package com.cyl.listener;import org.springframew…

MFC(二)集成基础控件

目录 OnCreateCStatic【标签&#xff0c;图片】CEdit【文本框&#xff0c;密码框&#xff0c;数值框&#xff0c;文本区】CButton【按钮&#xff0c;单选按钮&#xff0c;多选按钮】CComboBox【下拉列表&#xff0c;列表】CSliderCtrl【滑动条】CListCtrl【表格】CAnimateCtrl【…

时序预测 | Matlab实现CPO-BP冠豪猪算法优化BP神经网络时间序列预测

时序预测 | Matlab实现CPO-BP冠豪猪算法优化BP神经网络时间序列预测 目录 时序预测 | Matlab实现CPO-BP冠豪猪算法优化BP神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现CPO-BP冠豪猪算法优化BP神经网络时间序列预测&#xff08;完整源码…

Mysql数据库:MHA高可用架构

目录 前言 一、MHA概述 1、什么是MHA 2、MHA的特点 3、MHA的组成 4、MHA的工作原理 5、故障切换备选主库的算法 二、部署MHA高可用架构 1、环境部署 2、部署主从同步 2.1 修改主配置文件并创建软链接 2.1.1 master 修改主配置文件并创建软连接 2.1.2 slave1 修改主…

【JavaSE】类和对象详解(下)

前言 面向对象程序的三大特性&#xff1a;封装、继承、多态~ 书接上回 类和对象&#xff08;上&#xff09;~ 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 前言 封装 private public 快速生成可访问封装的方法 包…

rocketmq管理工具rocketmq-console安装

rocketmq-console是一个图形化管理控制台&#xff0c;提供Broker集群状态查看&#xff0c;Topic管理&#xff0c;Producer、Consumer状态展示&#xff0c;消息查询等常用功能&#xff0c;这个功能在安装好RocketMQ后需要额外单独安装、运行。 中文文档地址&#xff1a;https:/…

蓝桥杯习题

https://www.lanqiao.cn/problems/1265/learning/ 第一题---排序 给定一个长度为N的数组A&#xff0c;请你先从小到大输出它的每个元素&#xff0c;再从大到小输出他的每个元素。 输入描述&#xff1a; 第一行包含一个整数N 第二行包含N个整数a1,a2,a3,...an&#xff0c;表…

生成 SSH 公钥

Windows 用户建议使用 Windows PowerShell 或者 Git Bash&#xff0c;在 命令提示符 下无 cat 和 ls 命令。 1、通过命令 ssh-keygen 生成 SSH Key&#xff1a; ssh-keygen -t ed25519 -C "Gitee SSH Key"-t key 类型 -C 注释 输出&#xff0c;如&#xff1a; 中间…

蓝桥杯嵌入式学习笔记(6):IIC程序设计

目录 前言 1. IIC基本原理 2. 电路原理 3. 代码编程 3.1 预备工作 3.2 AT24C02写读功能编写 3.2.1 AT24C02写操作实现 3.2.2 AT24C02读操作实现 3.3 MCP4017写读功能编写 3.3.1 MCP4017写操作实现 3.3.2 MCP4017读操作实现 3.4 main.c编写 3.4.1 头文件引用 3.4.…

Spring实战:采用Spring配置文件管理Bean

文章目录 一、Spring框架概述二、实战&#xff1a;采用Spring配置文件管理Bean&#xff08;一&#xff09;创建Jakarta EE项目&#xff08;二&#xff09;添加Spring依赖&#xff08;三&#xff09;创建杀龙任务类&#xff08;四&#xff09;创建勇敢骑士类&#xff08;五&…

Chrome浏览器隐藏的截图功能配置及使用

来自实用又方便&#xff0c;轻松打开Chrome浏览器隐藏的截图功能&#xff01;​​​​​​​ 一、通过谷歌Chrome浏览器 现在直接通过谷歌Chrome浏览器内置功能&#xff0c;免安装扩充插件也可以实现Chrome的截图和长截图功能了&#xff01; 也不需要额外安装任何截图工具 &a…

数据链路层之信道:数字通信的桥梁与守护者

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…