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.mzph.cn/news/783367.shtml

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

相关文章

[Linux_IMX6ULL驱动开发]-基础驱动

驱动的含义 如何理解嵌入式的驱动呢,我个人认为,驱动就是嵌入式上层应用操控底层硬件的桥梁。因为上层应用是在用户态,是无法直接操控底层的硬件的。我们需要利用系统调用(open、read、write等),进入内核态…

synchronized的使用方式

1、修饰实例方法 public synchronized void A(){} 这个时候锁的是当前的实例对象。多线程操作同一个实例的实例方法时,才会阻塞。 2、修饰静态方法 public synchronized static void A(){}这个时候锁的是整个类下所有的实例对象,静态方法是存在于方法…

自然语言处理:大模型LLM论文整理

LLMs 九层妖塔 地址:https://github.com/km1994/LLMsNineStoryDemonTower LLMs 千面郎君 地址:https://github.com/km1994/LLMs_interview_notes LLMs 论文学习笔记:https://gitee.com/km601/llms_paper NLP 百面百搭 地址:htt…

os模块篇(三)

文章目录 os.putenv(key, value, /)os.setegid(egid, /)os.seteuid(euid, /)os.setgid(gid, /)os.setgroups(groups, /)os.setns(fd, nstype0)os.setpgrp()os.setpgid(pid, pgrp, /)os.setpriority(which, who, priority) os.putenv(key, value, /) os.putenv(key, value) 是 …

看懂Spring和Spring Boot的区别与联系

一、概述 Spring和Spring Boot是Java应用程序开发中最受欢迎的框架之一。Spring提供了一个全功能的、开放式源代码的Java应用程序框架,可以帮助开发人员在基于Java的代码中快速编写而不必关心底层技术实现。而Spring Boot则是基于Spring框架之上的快速开发框架&…

Java编程实战:疫情物资分配系统的设计与实现

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

小程序运营秘籍,5步打造爆款!

在数字化的浪潮中,小程序以其轻便、快捷的特性迅速走红,成为连接用户与服务的重要桥梁。然而,一个成功的小程序离不开精细化的运营策略。如何做运营,才能让小程序在激烈的市场竞争中脱颖而出?以下是几个关键步骤的解析…

RocketMQ笔记(三)SpringBoot整合RocketMQ发送单向消息

目录 一、简介1.1、特点1.2、场景 二、Maven依赖三、application配置四、生产者4.1、测试类4.2、运行结果 一、简介 RocketMQ 提供了一种单向发送消息的方法,在这种模式下,生产者只负责尽快地发送消息,而不需要关心消息是否被Broker接收&…

Opencv相机的读取、拍摄、保存

Opencv相机的读取、拍摄、保存 以下是OpenCV相机的读取、拍摄和保存的基本步骤: 1、读取相机数据 要从相机中读取数据,可以使用cv2.VideoCapture()函数。该函数接受两个参数,即相机的索引和视频捕获模式。例如,要从名为“camera…

Qt 富文本处理 (字体颜色大小加粗等)

Qt中支持HTML的控件有textEdit 、label 、textBrowser 。 接口:setHtml("Qt"); toHtml(). 文本样式设置 : 可分字设置 ,主要使用QTextCharFormat类进行文本样式设置。 示例: QTextCharFormat fmt; //粗体 fmt.setFontWeight…

在 IntelliJ IDEA 中部署 Java 项目的详细步骤

在进行 Java 项目的部署前,确保你已经完成了以下准备工作: 项目开发完成:确保 Java 项目已经经过完整的开发,并且通过了相关的测试。依赖管理:确认项目中所有的依赖项都已经正确配置,并且可以被正常引入。…

蓝桥杯备考随手记: 求最大公约数

1. 最大公约数的定义 最大公约数指的是两个或多个整数中能同时整除它们的最大正整数。最大公约数也可以被称为最大公因数、最大公因子或者简称为GCD(Greatest Common Divisor)。例如,对于整数12和18来说,它们的最大公约数是6。 …

查找算法及查找常用数据结构总结

1.顺序表查找 基本方法: 设查找表以一维数组来存储,要求在此表中查找出关键字的值为x的元素的位置,若查找成功,则返回其位置(即下标),否则,返回一个表示元素不存在的下标&#xff0…

VMware虚拟机共享主机v2rayN

目录 🌼前言 🌼解释 🚩操作 1)VMware -- 虚拟网络编辑器 2)VMware -- 网络适配器 3)主机 IP 地址 4)v2rayN 代理端口 5)VMware -- 网络代理(Network proxy) 🎂结…

红黑树介绍及插入操作的实现

🎉个人名片: 🐼作者简介:一名乐于分享在学习道路上收获的大二在校生 🙈个人主页🎉:GOTXX 🐼个人WeChat:ILXOXVJE 🐼本文由GOTXX原创,首发CSDN&…

轻松集成所有大模型——一站式大模型应用开发框架Promptulate

💖 作者简介:大家好,我是Zeeland,大模型创业、LangChain Top Contributor、算法工程师、Promptulate founder、Python开发者。📝 CSDN主页:Zeeland🔥📣 我的博客:Zeeland…

windows平台虚拟机安装

windows平台虚拟机安装 1. 安装VMwareWorkstationPro 1.1 软件下载 官网下载 官网 百度网盘下载 版本 VMwareWorkstationPro16 链接:https://pan.baidu.com/s/1LidMxoM9e4a4CANixyRoyg?pwd1157 提取码:1157 1.2 软件安装 软件安装注意事项 软件…

代码学习第32天---动态规划

随想录日记part32 t i m e : time: time: 2024.03.30 主要内容:今天开始要学习动态规划的相关知识了,今天的内容主要涉及两个方面: 不同路径 ; 不同路径 II。 62.不同路径 63. 不同路径 II 动态…

接口和抽象类的区别【大白话Java面试题】

接口和抽象类的区别 大白话回答 1、接口是行为的抽象,是一种行为的规范,接口是like a 的关系;抽象是对类的抽象,是一种模板设计,抽象类是is a 的关系。 2、接口没有构造方法,而抽象类有构造方法&#xff0…

爬虫框架Scrapy从创建到使用

scrapy框架安装命令 1.需要安装python 链接: link 2.scrapy安装命令 python -m pip install Scrapy3. 创建爬虫项目 scrapy startproject 项目名称4.创建爬虫文件 scrapy genspider 爬虫名 域名5.爬虫运行 scrapy crawl 爬虫名scrapy 项目目录介绍 PaC #项目文件名称P…