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

news2024/11/26 6:20:20

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

最近在学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.coloradmin.cn/o/1558916.html

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

相关文章

揭秘DeviceNET转CCLinkIE的高效通讯秘籍

在现代工业自动化领域,上位机通常扮演着系统控制和监视的角色,而DeviceNET与CC-Link IE则是两种常见的现场总线协议。当需要实现对水泵变频器的精确控制时,通过配置一个集成了DeviceNET转CC-Link IE网关的设备,可以实现上位机与变…

python 进程、线程、协程基本使用

1、进程、线程以及协程【1】进程概念【2】线程的概念线程的生命周期进程与线程的区别 【3】协程(Coroutines) 2、多线程实现【1】threading模块【2】互斥锁【3】线程池【4】线程应用 3、多进程实现4、协程实现【1】yield与协程【2】asyncio模块【3】3.8版本【4】aiohttp 1. 并发…

Linux --- 多路转接

目录 前言 五种IO模型 非阻塞IO IO多路转接 --- select 一个简单的select服务器 HandlerEvent socket就绪条件 select的特点 select缺点 IO多路转接 --- poll poll的优点 poll的缺点 IO多路转接 --- epoll epoll工作原理 epoll的优点 基于epoll封装的服务器 e…

Lambda表达式(语法+函数式接口+使用+变量捕获)

文章目录 Lambda表达式一、语法1.(parameters)2. ->3.方法体4.函数式接口 二、Lambda的使用三、变量捕获四、Lambda在集合中的应用 Lambda表达式 允许通过Lambda表达式来代替功能接口提供了一个正常的参数列表和使用这些参数的主体也叫闭包 一、语法 (parameters) -> …

Django框架之DRF(武沛齐全)

一、FBV和CBV FBV,function base views,其实就是编写函数来处理业务请求。 from django.contrib import admin from django.urls import path from app01 import views urlpatterns [path(users/, views.users), ] from django.http import JsonResp…

模拟游戏《幸福工厂》好玩吗?《幸福工厂》怎么在mac电脑上打开?

关于《幸福工厂》这款游戏是否好玩,普遍的玩家反馈和评价表明,《幸福工厂》(Satisfactory)因其深度的工厂建造模拟、自由度极高的探索以及精美的图形表现而受到许多玩家的喜爱。它允许玩家在一个开放的世界中规划并建立复杂的生产…

unity 打包安卓错误汇集

Failed to find target with hash string "android-34’ in: D:Pr 他说找不到sdk34level的我用as打开后卸载又重装,最后解决了 我放到Plugins/Android/下面的Java代码没有被编译 这个不知道为什么。我故意把代码写的有问题,会报错那种&#xff…

项目安全性与权限管理实践与探讨

✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 🎈🎈作者主页: 喔的嘛呀🎈🎈 目录 引言 一. 身份验证和授权 二. 输入验证和过滤 2.1. 添加O…

Linux USB驱动(二)

1. Linux USB驱动软件框架 应用程序有两种访问硬件的途径:通过设备驱动程序来访问和跳过设备驱动程序(直接使用host驱动程序)来访问。 当直接使用Host驱动程序时,可以调用libusb库中已经封装好的函数接口。 2. USB电气信号 一个…

Salesforce技术移民主要国家薪资 - 汇总篇

各位Salesforce的宝们,汇总版的Salesforce技术移民主要国家薪资表格及图示给到大家。 主要针对以下四个岗位:Salesforce管理员、Salesforce项目经理、Salesforce业务分析师、Salesforce架构师; 为方便各位看官,分为了欧元区与美元…

Figma使用问题(更新自己遇到的问题)

文章目录 前言一、如何安装插件?方法1:Figma Community / Figma中文社区方法2:菜单栏 二、图片倾斜插件使用1.Angle Mockups前提:执行过程: 三.中文字体插件(宋体等)Chinese Font Picker前提&am…

基于深度学习的图书管理推荐系统(python版)

基于深度学习的图书管理推荐系统 1、效果图 1/1 [] - 0s 270ms/step [13 11 4 19 16 18 8 6 9 0] [0.1780757 0.17474999 0.17390694 0.17207369 0.17157653 0.168248440.1668652 0.16665359 0.16656876 0.16519257] keras_recommended_book_ids深度学习推荐列表 [9137…

Redis 事务 与 管道

redis事务 谈到事务大家可能就会想起mysql中的事务 注意这里的事务不是指的是事务的四大特性acid 持久性 原子性 隔离性 一致性 事务的概念就是 一组命令,串行化执行而不被打断 这里redis的事务和mysql的事务就不太一样 传统关系型数据库的事务主要强调的是一个没有执行完成就…

python3——基础概要

基础 数据结构 Python 3.x中有6种标准的对象类型: Number(数字)、String(字符串)、List(列表)、Tuple(元组)、Sets(集合)、Dictionary&#xff08…

B+Tree讲解

B-/B树看 MySQL索引结构 B-树 B-树,这里的 B 表示 balance( 平衡的意思),B-树是一种多路自平衡的搜索树.它类似普通的平衡二叉树,不同的一点是B-树允许每个节点有更多的子节点。下图是 B-树的简化图. B-树有如下特点: 所有键值分布在整颗树中; 任何一个…

【MySQL】内外连接——内连接、外连接、左外连接、右外连接、内外连接的区别、左外连接和右外连接的区别

文章目录 MySQLMySQL表的内连接和外连接1. 内连接2. 外连接2.1 左外连接2.2 右外连接 3. 内外连接的区别4. 左外连接和右外连接的区别 MySQL MySQL表的内连接和外连接 MySQL 中的内连接(INNER JOIN)和外连接(包括左外连接 LEFT JOIN 和右外连…

数据分析之Tebleau 简介、安装及数据导入

Tebleau简介 Tebleau基于斯坦福大学突破性交互式技术 可以将结构化数据快速生成图表、坐标图、仪表盘与报告 将维度拖放到画布等地方是他的主要操作方式 例:Tebleau是手机相机 (相对来说更简单) POWER BI是单反相机 Tebleau各类产品 Teblea…

GPT提示词分享 —— 智能域名生成器

提示词👇 我希望你能充当一个聪明的域名生成器。我将告诉你我的公司或想法是什么,你将根据我的提示回复我一份域名备选清单。你只需回复域名列表,而不是其他。域名应该是最多 7-8 个字母,应该简短但独特,可以是朗朗上口…

ubuntu16.04 不支持 gcc-11,g++11

总结 ubuntu16.04 不支持 gcc-11,需要升级 18.04 或更高的版本。 背景 最近需要在我的 ubuntu16.04 电脑上安装 gcc-11,g-11,使用更高的版本来编译代码。根据网上查到的方式是添加以下的源并进行安装 sudo add-apt-repository ppa:ubuntu…

第十三届蓝桥杯JavaA组省赛真题 - 求和

解题思路&#xff1a; 这&#xff0c;真的是&#xff0c;省赛真题吗... public class Main {public static void main(String[] args) {long res 0;for (int i 1; i < 20230408; i) {res i;}System.out.print(res);} }