当前位置: 首页 > news >正文

STM32学习笔记13-通信协议I2CMPU6050

I2C通信协议

I2C通信

  • I2C(Inter IC Bus)是由Philips公司开发的一种通用数据总线
  • 两根通信线:SCL(Serial Clock)、SDA(Serial Data)

SCL:串口时钟线:同步的时序,降低对硬件的依赖;

SDA:串口数据线:半双工,一根线兼具发送和接收;


  • 同步,半双工
  • 带数据应答
  • 支持总线挂载多设备(一主多从、多主多从)

一主多从:单片机作为主机,主导I2C总线的运行,挂载在I2C总线的所有外部模块都是从机,从机只有被主机点名之后才能控制I2C总线——常用模型

在多主多从的情况下,需要额外调用SCL来达成同步,且复杂的协议

硬件电路(一主多从)

  • 所有I2C设备的SCL连在一起,SDA连在一起
  • 设备的SCL和SDA均要配置成开漏上拉输出模式
  • SCL和SDA各添加一个上拉电阻,阻值一般为4.7KΩ左右

禁止所有设备输出强上拉的高电平,采用外置弱上拉电阻加开漏输出的电路结构

开漏输出:原本的推挽输出,是上下都接入高低电平,如果导通则强上拉导通高电平,反之;现在不需要上面电路,当电流导通,会进入浮空状态。

所以 这就是对应的开漏输出,当导通后属于浮空状态,这时就需要电阻 ,把此电路改成弱上拉;

好处:

一、完全杜绝了电源短路的现象,保证电路安全——无论电流高或低,都不会存在同时高电平和低电平的情况;

二、避免了引脚模式的频繁切换,开漏加弱上拉的模式,同时兼具了输入和输出的功能——想换高电平可直接导通即可,低电平就连GND即可;

三、存在“线与”的现象,指只要有任意一个或多个设备输出了低电平,总线就处于低电平,反之;因此可以利用这特性,实现执行多主机模式下的时钟同步和总线仲裁

I2C时序基本单元

  • 起始条件:SCL高电平期间,SDA从高电平切换到低电平
  • 终止条件:SCL高电平期间,SDA从低电平切换到高电平


  • 发送一个字节:SCL低电平期间,主机将数据位依次放到SDA线上(高位先行),然后释放SCL,从机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可发送一个字节

低电平主机放数据,高电平从机读数据


  • 接收一个字节:SCL低电平期间,从机将数据位依次放到SDA线上(高位先行),然后释放SCL,主机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机在接收之前,需要释放SDA)

释放SDA:就证明切换为了输入模式,主机一般默认是输入模式,当需要发送的时候,会将SDA拉低;在被动接收的时候,就必须先释放SDA,避免有数据重叠

低电平从机放数据,高电平主机读数据。

此时从机获得控制权,实现表示主机控制部分,虚线表从机控制的部分;


  • 发送应答:主机在接收完一个字节之后,在下一个时钟发送一位数据,数据0表示应答,数据1表示非应答
  • 接收应答:主机在发送完一个字节之后,在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答(主机在接收之前,需要释放SDA)
  • 发送一位或接收一位:这一位作为应答


地址:当主机发送指令,去访问对应设备,这些设备就要有一个独立的地址:

在I2C协议标准里分为7位和10位地址:7位为例,且7位使用范围最广:

厂商会为它分配一个7位的地址,以MPU6050芯片为例,通过芯片手册可以得知是:

1101 000,一般器件地址的最后几位是可以在电路中改变,这里是1101 000x;用来区分同器件的不同地址,当对应引脚接低电平,地址为1101 0000,反之

I2C时序:

        都是一个字节的操作

  • 指定地址写
  • 对于指定设备(Slave Address),在指定地址(Reg Address)下,写入指定数据(Data)

示波器:

  • 当前地址读
  • 对于指定设备(Slave Address),在当前地址指针指示的地址下,读取从机数据(Data)

  • 但是对应读地址,并不能确定当前的读入的地址,所以需要使用当前地址指针,去指向指定地址读
  • 对于指定设备(Slave Address),在指定地址(Reg Address)下,读取从机数据(Data)

若要多个字节的操作,就需要把读和写的操作重复执行,这样时许就变为,在指定的位置开始按顺序连续读写入多个字节

MPU6050简介

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

我们通常都是把芯片内部的器件,想象为机器设备,至于怎么放进芯片的,就是公司的秘籍。

MPU6050参数

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

                                   1101001(AD0=1)

在之前的时序中,读写的操作可以先拆分为7位:0x68,再<<1作为从机操作地址;也可以作4分的地址:0xD0的从机地址,直接修改即可;

硬件电路

MPU6050框图

http://www.dtcms.com/a/336741.html

相关文章:

  • Vue深入组件:Props 详解1
  • 文本邮箱提取工具
  • ARM汇编代码新手入门
  • 信号量机制中---生产者 - 消费者问题
  • LeetCode 1323: 6和9组成的最大数字
  • 计算机网络技术学习-day2《IP地址分类解析》
  • 中国星网发展情况全面分析
  • 每日Java面试系列(15):进阶篇(String不可变的原因、性能问题、String三剑客、自定义不可变设计、组合优于继承等相关问题)
  • 数据结构——线性表
  • 蓝桥杯C++
  • 下降路径最小和
  • 《Java高并发核心编程》笔记汇总
  • 【Java企业级开发】(八)Spring框架中Web项目构建
  • 【高等数学】第九章 多元函数微分法及其应用——第六节 多元函数微分学的几何应用
  • Transformer架构的数学本质:从注意力机制到大模型时代的技术内核
  • AI 编程在老项目中的困境与改进方向
  • 负载测试与压力测试详解
  • MySQL黑盒子研究工具 strace
  • 基于因果性的深层语义知识图谱对文本预处理的积极影响
  • Perf使用详解
  • AI系统性思维复盘概述
  • 【FreeRTOS】事件组
  • 电力设备状态监测与健康管理:从数据感知到智能决策的技术实践​
  • 通达信【牛股妖股埋伏】副图+选股指标
  • 报错注入原理与全方法总结
  • HAL-ADC配置
  • 快速了解均值滤波处理
  • 关于动态代理的个人记录
  • CF2121B Above the Clouds
  • 【Java】多线程Thread类