I2C通信协议原理和MPU6050

news2024/11/29 13:51:10

一、串口通讯

      只能在两个设备之间进行
      若要三台设备两两通信,则每个设备得需要两组窗口,为3组相互独立的窗口通讯
      为解决这个问题:设计了总线通讯,有多种,I2C为其中一种

 二、I2C通信

(1)特点

1、同步、半双工

2、带数据应答

3、支持总线挂载多设备(一主多从、多主多从)

4、可以是软件IC和硬件IC

(2)时钟线和数据线 

1、主机:任何情况下,主机完全掌握SCL线,在空闲状态下,主机可以主动发起对SDA控制,只有在从机发送数据和从机应答时,主机才会转交SDA的控制权给从机

2、SCL时钟线在任何时刻都只能被动的读取,从机不允许控制SCL线,
3、SDA数据线,从机不允许主动发起对SDA的控制,只有在主机发送读取从机的命令后,从机应答的时候,从机才能短暂的获取SDA的控制权

4、主机拥有SCL的绝对控制权,所以主机的SCL可以配置成推挽输出,所有从机的SCL都配置成浮空输入或者上拉输入

5、为了实现输出输入半双工,避免总线没协调好导致电源短路,I2C规定禁止所有设备输出强上拉的高电平,采用外置若上拉电阻加开漏输出的电路

6、SCL和SDA各添加一个上拉电阻,阻值一般为4.7KΩ左右

(3)SCL和SDA的状态

当SCL和SDA都为高电平,为空闲状态时(起始和终止都是由主机产生的,故空闲时,从机始终放开)

当SCL为高电平,SDA为下降沿的的状态时,为开始发送数据,起始发送数据完成

当SCL为高电平,SDA为上升沿的的状态时,为数据发送完成

发送数据的过程为下图

 

当时钟线为高电平时,数据线上的数据必须保持稳定,比如时钟线为高时,数据线上的数据始终为高,完成逻辑1的传输,保持低电平则为0。(主机在接受之前,需要释放SDA,释放SDA相当于切换成输入模式,所有设备和主机都处于输入模式,当主机需要发送时,就可以主动去拉低SDA,而主机在接收的时候,必须主动释放SDA)

(4)例子:单片机向从设备写信息

 假设上述是主机给24C02发送数据:
 由上图可知:
24C02的设备地址位1010 000,主机在24C02的 0000 0000的存储位置写入0000 1111的数据

(1)读写数据位:读数据置1,写数据置0

(2)第一个应答信号:信号时由从机发送给主机,如果从机收到之前的信息,回复0,没有收到或者(主机)读取接收完成回复1

(3)第二个应答信号:单片机需要存储器返回一个应答信号

(4)第三个应答信号:发送完数据后,需要再给主机发送应答信号0,告诉主机写入成功

(5)最后写入停止位:SCL为高电平,SDA为上升沿

(5)读数据帧

 

        前半部分:指定地址写(但没来得及写),后半部分,指定地址读

        首先写入设备地址,然后写数据,

        接下来写寄存器的地址,在收到从机的应答信号之后,主机再发送一个起始号,       

        再发送一遍设备地址,然后才能发送读数据,接下来,存储器会把寄存器中的数据发送给单片机。

        最后一部分的数据可以多来几个,就可以写多个数据,地址指针在读后会自增,就可以连续读出一片区域的寄存器,效率也会变高。

        主机给应答:从机就会继续发,主机给非应答,从机不会再法发,交出SDA的控制权,从机控制SDA发送一个字节的权力,开始于读写标志位1,结束于主机给应答位为1

(6)开漏输出和推挽输出

 

任何设备在任何时刻都可以输入,但在输出部分,采用的是开漏输出
推挽输出:上面一个开关管接到正极,下面一个开关管接到负极,上面导通输出高电平,下面导通输出低电平,因为这是通过开关管直接接到正极和负极的,所以这个是强上拉和强下拉的模式
开漏输出:去掉强上拉的开关管,输出低电平时下面导通是强下拉,输出高电平时,下面断开但是没有上管了,引脚浮空,故所有设备只能输出低电平而不能输出高电平

 

为了避免高电平造成的引脚浮空,需要在总线外面SCL和SDA各置一个上拉电阻,弱上拉
开漏加弱上拉模式:同时兼具的输入和输出的功能
要输出时,就去拉杆子或者放手操作杆子变化就行了
要输入时,就直接放手然后观察杆子高低就行了
因为开路模式下,输出高电平就相当于断开硬件,所以在输入之前可以直接输出高电平,不需要再切换成输入模式
第三就是这个模式会有个“线与”的现象,只要有任意一个或多个设备,输出了低电平,,总线就处于低电平
只有所有的设备都输出高电平,总线才处于高电平

(7) 两个实验

1、介绍协议规则,用软件模拟的形式实现协议(AT24C02存储器模块)

通过数据线,实现单排年纪读写外挂模块寄存器的功能

在指定的位置写寄存器,对外挂模块进行配置

在指定的位置度寄存器,获取外挂模块的数据,读出的数据会显示显示屏上
本节课程主要有两个代码
1、软件I2C读写MPU6050
2、硬件I2C读写MPU6050
代码实现的效果是一样的
软件I2C读写MPU6050的程序现象
通过软件I2C协议对MPU6050(在本实验中ID号为0x68)芯片内部的寄存器进行读写
写入到配置寄存器,可以对外挂的模块及进行配置
读出数据寄存器,可以获取外挂的数据
最终显示在屏幕上
最上面:id号
左边:加速度传感器的输出数据(x轴y轴和z轴的加速度)
右边:陀螺仪传感器的输出数据(x轴y轴和z轴的角速度)
改变MPU6050传感器的姿态,6个数据就会对应变化

(8)异步时序和同步时序

a、异步时序

1、好处:省一根时钟线,节省资源

2、坏处:对时钟要求严格,发送方和接收方时钟不能由过大的偏差

传输过程中,单片机进中断,发送方时序暂停,接受方仍会按照约定的速率读取,传输出错

故异步时序的缺点:非常依赖硬件外设的支持,必须有USART电路才能方便的使用,否则很难用软件模拟。 

b、同步时序(时钟要求不严格,对电路依赖度低)

1、设计时钟线,则对传输的时间要求变低

2、在单方面暂停传输时,时钟线也暂停,传输双方都能定格在暂停的时刻,可过段时间再来继续,

3、极大的降低单片机对硬件电路的依赖,没有硬件电路的支持,也可以很方便的用软件手动翻转电平来实现通信

三、MPU6050

(1)MPU6050简介

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

 (2)MPU6050参数

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

例如从机地址为0x68,(0x68<<1)|1(或者(0x68<<1)|0)当作从机地址,因为传输的时候是8个字节,前七个是地址,最后一位是数据读写位

若物体运动剧烈,选择大量程,防止加速度或角速度超出了量程
若物体运动平缓,选择小量程,则测量的分辨率比较大
满量程越大测量范围就越广
满量程越小测量分辨率就越高
 满量程和加速度是线性关系
可配置数字低通滤波器:配置寄存器对输出数据进行低通滤波,消除数据抖动,使数据输出平缓
时钟源通过分频器的分频,可以为AD转换,给内部其他电路提供时钟
控制分频系数就可以控制AD转换的快慢

(3)MPU6050硬件电路

 

 

 a、左上角LDO

  • 为低压差线性稳压器,输入端可以是3.3V到5V,经过后输出稳定3.3V的电压

 b、右下角J1 CON1模块

左下角XCL和XDA通常就是用于外接磁力计或者气压计(在无人机需要定高飞行需要增加气压计的时候使用)
当接上磁力计或气压计之后,MPU6050的主机接口可以直接访问这些扩展芯片的数据
把这些扩展芯片的数据读取到MPO6050里面,在MPO6050里面会有DMP单元,进行数据融合和姿态解算
若不需要MPO6050的解算功能,可以把磁力计或气压计直接挂载在SCL和SDA总线上
AD0引脚:是从机地址的最低位,接低电平时候,7为从机地址为110 1000,接高电平时,7位从机地址是110 1001,AD0接了一个电阻,故悬空是低电平状态,若想要接高电平,可以把AD0直接引导VCC上,强上拉至高电平
INT:中断输出引脚,可以配置芯片内部的一些事件来触发中断引脚的输出
比如数据准备好了、I2C主机错误等

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

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

相关文章

(java)异常 (详解)

目录 1. 异常的概念 1. 算术异常 2.空指针异常 3.数组越界异常 4.在编译时就发现了异常 2.异常的体系结构 总结&#xff1a; 3.异常的分类 4.异常的处理 1 .防御式编程 2.异常的抛出 3 .异常的捕获 3.1 .异常声明throws throw和throws的区别&#xff1f; …

【笔试强训选择题】Day13.习题(错题)解析

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;笔试强训选择题 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01; 文章目录…

昨天的测试岗面试,仅仅4个问题,轻松让面试者破防了

目录 引言 你看&#xff0c;一不小心&#xff0c;就要被虐&#xff01;&#xff01; 自动化测试到底该如何学&#xff1f; 一、Python编程学习内容 二、WEB自动化测试学习内容 三、APP自动化测试学习内容 四、Postman接口测试工具学习内容 五、接口自动化测试学习内容 …

微服务框架【Nacos配置管理-Feign远程调用-Gateway服务网关】

一、Nacos配置管理 1.统一配置管理 在Nacos中添加配置信息 填写配置信息 点击发布 完成配置的统一管理 配置获取的步骤&#xff1a; 项目启动->读取本地配置文件application.yml->创建spring容器->加载bean 但是现在多了一个nacos中的配置文件&#xff0c;我们…

IntelliJ IDEA 统一设置编码为utf-8编码 及 SpringBoot 打 jar 包运行 在windows 平台控制台和日志 乱码解决

文章目录 一、背景二、知识准备三、程序运行源代码历经处理阶段四、问题描述五、解决方法1.修改项目编码格式统一为UTF-82.将项目中的.idea文件夹中的encodings.xml文件中的编码格式改为uft-83.File->Settings->Build,Execution,Deployment -> Compiler -> Java Co…

架构师日记-从数据库发展历程到数据结构设计探析 | 京东云技术团队

作者&#xff1a;京东零售 刘慧卿 一、数据库发展史 起初&#xff0c;数据的管理方式是文件系统&#xff0c;数据存储在文件中&#xff0c;数据管理和维护都由程序员完成。后来发展出树形结构和网状结构的数据库&#xff0c;但都存在着难以扩展和维护的问题。直到七十年代&am…

分布式补充知识 02.AOP的重要注解@annotation ,使用添加缓存和清空缓存

01.在项目中创建一个包annotation包&#xff1a; 在创建新的java.class文件时候&#xff0c;选择annotation 写一个自定义的注解&#xff0c;名字叫做RequiredCache package com.cy.annotation;package com.cy.annotation;import java.lang.annotation.ElementType; import j…

企业远程工作安全及简化

员工远程面临哪些挑战 大多数企业已将远程工作模式作为其新常态&#xff0c;这使得保护远程端点成为比以往更高的优先级。然而&#xff0c;在寻求远程工作支持的安全性时&#xff0c;企业有时会忽视用户体验。过于严格的远程工作解决方案没有考虑到经常在工作场所和家庭的安全…

执行SQL响应比较慢,你有哪些排查思路?

如果执行SQL响应比较慢&#xff0c;我觉得可能有以下4个原因&#xff1a; 第1个原因&#xff1a;没有索引或者 导致索引失效。第2个原因&#xff1a;单表数据量数据过多&#xff0c;导致查询瓶颈第3个原因&#xff1a;网络原因或者机器负载过高。第4个原因&#xff1a;热点数据…

基于Canal实现Mysql数据实时同步到Elasticsearch(Docker版)

1、Canal简介 Canal主要用途是对MySQL数据库增量日志进行解析&#xff0c;提供增量数据的订阅和消费&#xff0c;简单说就是可以对MySQL的增量数据进行实时同步&#xff0c;支持同步到MySQL、Elasticsearch、HBase等数据存储中去。 Canal会模拟MySQL主库和从库的交互协议&#…

SpringMVC常用注解用法

Spring MVC是基于Servlet API构建的原始Web框架。 MVC是Model View Controller的缩写即视图模型控制器&#xff0c;是一种思想&#xff0c;而Spring MVC是对该思想的具体实现。关于SpringMVC的学习我们需要掌握用户和程序的连接、获取参数以及返回数据三大部分。而这三大功能的…

2023-5-15-gRpc框架学习

&#x1f37f;*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* &#x1f37f; &#x1f4a5;&#x1f4a5;&#x1f4a5;欢迎来到&#x1f91e;汤姆&#x1f91e;的csdn博文&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f49f;&#x1f49f;喜欢的朋友可以关注一下&#xf…

前端魔力赏盲盒小程序 UI原生盲盒微信小程序源码下载

前端魔力赏盲盒小程序 UI原生盲盒微信小程序源码下载 亲测可用 前端是小程序原生源码。 很不错的一款盲盒小程序。 完全没有毛病&#xff0c;非常适合研究学习。

【Linux】匿名管道

目录 匿名管道管道特点父子进程通过匿名管道通信匿名管道通信案例 橙色 匿名管道 管道也叫无名&#xff08;匿名&#xff09;管道&#xff0c;是 UNIX 系统 IPC&#xff08;进程间通信&#xff09; 的最古老的形式。 统计一个目录中文件的数目命令 ls | wc -l &#xff0c;为…

会自动化就能拿20K?想多了,你这顶多算是会点皮毛···

现在招个会自动化测试的人是真难呀~ 前一段时间公司计划要招2个自动化测试到岗&#xff0c;同事面试了十几个来应聘的人&#xff0c;发现一个很奇怪的现象&#xff0c;在面试的时候&#xff0c;如果问的是框架API、脚本编写这些问题&#xff0c;基本上所有人都能对答如流&…

湖北省智能科教研究会走进璞华,调研璞公英教学平台个性化教学新模式

2023年5月9日&#xff0c;热烈祝贺湖北省智能科教研究会红5月智能科教走进璞华集团活动圆满成功。会议上&#xff0c;大家畅所欲言&#xff0c;对教育体制改革与教育信息化产品创新&#xff0c;科技成果转化、产教融合、资源互补、学生能力培养等方面展开充分沟通和探讨。 5月9…

解密 Android IPC 机制

在我们使用 Android 手机的时候&#xff0c;有时我们使用的软件会需要消耗比较大的内存&#xff0c;也经常会需要同时打开多个软件。这些时候&#xff0c;我们都会需要使用到多进程技术。作为 Android 开发者&#xff0c;相信我们都知道如何去开启应用的单个多进程&#xff0c;…

【Linux常见指令以及权限理解】权限理解(4)

写在前面 这篇文章&#xff0c;我们来聊一聊Linux下权限相关的知识&#xff0c;我打算从这几个方面展开&#xff1a; 1. 认识Linux下用户的分类 2. 什么叫做权限 3. 没有权限会是什么样子 4. 如何修改权限 5. 其它重要的问题 那么废话不多说&#xff0c;我们现在开始。 …

PDF怎么转换成Word?将PDF转换为Word的三种方法!

在我们需要将PDF文件转换为Word文件时&#xff0c;有几种方法可以选择。通常&#xff0c;我们在文件传输过程中使用的文件格式是PDF&#xff0c;但如果我们需要对文件进行编辑&#xff0c;就需要将其转换为可编辑的Word格式。下面是几种转换方法的介绍&#xff0c;让我们一起来…

【Python从入门到进阶】Python异常处理

接上篇《18、文件内容序列化和反序列化操作》 上一篇我们学习了文件读取及写入数据序列化和反序列化的操作。本篇我们来学习Python中有关异常&#xff08;捕获异常、处理异常等&#xff09;的知识。 一、异常的定义 在编写代码时&#xff0c;我们无法完全掌控程序运行过程中会…