1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 搭建机器人电控系统——通信协议——IIC通信原理及其实例(库函数+模拟IO口)

搭建机器人电控系统——通信协议——IIC通信原理及其实例(库函数+模拟IO口)

时间:2021-07-01 12:58:10

相关推荐

搭建机器人电控系统——通信协议——IIC通信原理及其实例(库函数+模拟IO口)

通信协议

串口通信详解

IIC通信详解

SPI通信详解

CAN通信详解

文章目录

通信协议IIC通信IIC的寻址方式IIC的传输协议IIC的应答机制IIC传输协议函数(根据IIC传输协议,模拟IO口IIC)IIC正常通信过程(很重要!!)写操作读操作IIC通信实例——MPU6050陀螺仪模块(模拟IO口模式)IIC通信实例——EEPROM模块(库函数模式)

计算机与外界的信息交互称为通信

基本的通信方式分为两种:

串行通信:所传送的数据各位按顺序一位一位地发送或接受,占用资源少,速度相对较慢。

并行通信:所传送的数据的各个位是同时发送或接受。速度快,占用引脚资源多。

通信的速率

比特率(bit rate):每秒能传输的二进制位数。

波特率(Baud rate):每秒能传输的码元数(不一定是二进制)。

对于数字信号而言,波特率=比特率。

串行通信的种类

同步通信:带时钟同步信号传输,通讯双方是受同一个时钟源控制,如I2C、SPI、USART。

异步通信:不带时钟信号同步,不是同一个时钟源,按照一定规则传输,如USART、UART、单总线、CAN。

串行通信的方式

单工:只允许单方向传输,只需一条信号线

半双工:允许非同时进行的双方向传输,只需一条信号线。

全双工:允许同时进行双方向传输,需要两条信号线。

通信协议是主控MCU与各类驱动器、传感器之间实现信息交互的基本逻辑,搞懂通信协议在机器人的电控系统中占有很重要的地位。在接下来的内容中,我将分别讲解串口IICSPICAN通信协议的区别原理以及结合实际一些模块的代码部分。

IIC通信

由于传统串口传输只能局限于两个固定设备之间,不能满足大量设备之间的通信要求,所以有了IIC,它是一种两线式串行同步半双工传输总线(分别是数据线SDA和时钟线SCL)。尤其适用于短距离的板内通信

IIC的寻址方式

I2C总线上的每一个持有I2C通信协议的设备都有一个唯一的地址,主从设备之间的数据传输是建立在地址的基础上,主设备在传输前需要先指定从设备的地址。

寻址格式

固定地址(4位) + 可编程地址(3位) + 读写控制位(1位)

1010(硬件出产地址) A2A1A0(硬件拉高或拉低) R/W

*根据硬件不同,一般来说一个设备前7位都是固定的。

①如EEPROM芯片AT24C02地址为10100000(写)/10100001(读),它是利用IIC与MCU进行板内通信的。

②又如MPU6050利用IIC通信的陀螺仪芯片,它的地址为01101000(0x68)。

IIC的传输协议

空闲状态:SCL和SDA都保持高电平

传输状态

①起始状态:SCL保持高电平时,SDA由高到低下降沿跳变触发,触发后,整个总线将处于忙状态,由本次数据传输的主从设备独占,其他I2C设备无法访问。

②数据传输:主设备在SCL上的每一个时钟脉冲,都会同时在SDA线上传输一个数据位(先发高位再发低位,注意与串口协议不同)。

③应答信号:每个数据传输的字节完成后,都会跟上一个应答位。在SCL保持高电平期间SDA为低表示应答成功;在SCL保持高电平期间SDA为高表示应答失败。

④停止信号:当一次应答信号结束后,若不想进行数据传输,主机产生一个停止信号。SCL为高期间SDA由低到高上升沿跳变触发。

IIC的应答机制

IIC传输的要点就是,传输一个字节后面必然紧跟一个“响应”信号,这个响应信号可能来自主机或者从机,具体看传输方向。

①主机 发到 从机

主机对从机发送一个字节后,主机读取从机的应答信号(主机读SDA线)。

主机读取SDA为低电平,应答成功。

主机读取SDA为高电平,应答失败。

②从机 发到 主机

主机读取从机发送过来的一个字节后,主机要向从机发送一个应答信号(主机写SDA线)。

主机写SDA为低电平,从机收到后知道主机应答成功,继续传输。

主机写SDA为高电平,从机收到后知道主机无应答,从机停止传输,等待从主机过来的停止信号。

*起始信号和结束信号总是由主设备产生(IIC有主从的区别!!!)

IIC传输协议函数(根据IIC传输协议,模拟IO口IIC)

以IO口模拟IIC协议为例:

初始化状态

①初始化IIC,保持空闲状态

发送状态(主机)

①起始信号

PS:SDA_OUT相当于让SDA对应的IO口配置成输出模式

②停止信号

③发送数据(发送一个字节)

④发送完一个字节后,发送ACK应答位

·应答成功信号

·应答失败信号

接收状态(主机):

①接收数据(接收数据后判断ACK应答位,来判断上次传输是否应答成功)

IIC正常通信过程(很重要!!)

写操作

第一步,主机首先发送从机地址写(可以有多个从机)来确定是与哪一个从机进行通信。

第二步,从机发送“ACK”应答信号。

第三步,主机再发送相应寄存器地址

第四步,从机发送“ACK”应答信号。

第五步,主机将要写入寄存器的数据发送到从机。

第六步,从机发送“ACK”应答信号。

读操作

第一步,主机首先发送从机地址写(可以有多个从机)来确定是与哪一个从机进行通信。

第二步,从机发送“ACK”应答信号。

第三步,主机再发送相应寄存器地址

第四步,从机发送“ACK”应答信号。

第五步,主机重新发送从机地址读(可以有多个从机)来确定是与哪一个从机进行通信。

第六步,从机发送“ACK”应答信号。

第七步,主机读取寄存器的数据,并在读取完成后发送应答信号给从机。

IIC通信实例——MPU6050陀螺仪模块(模拟IO口模式)

①MPU6050 IIC写操作

②MPU6050 IIC读操作

关于地址:

首先,在MPU6050的参考手册中,我们可以得到MPU6050地址和相关一些寄存器的值。

如何初始化MPU6050模块?

整体思路:通过向MPU6050不同寄存器写命令来唤醒MPU6050,设置量程,参考系等。

如何从MPU6050模块读取数据?

(以读取陀螺仪XYZ轴数据为例,同样对其他可读参数也如此)

从MPU6050相应寄存器读取来获得数据。

IIC通信实例——EEPROM模块(库函数模式)

①IIC 库函数配置(设定好模式、设备地址、通信速率/时钟频率

②写操作(库函数)

③读操作(库函数)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。