【科普贴】I2C接口详解——偏硬件解析

一、 I2C接口简介

I2C最早是Philips公司开发的一款简单的双向总线,实现有效的IC控制。把这个总线写成Inter IC 简称IIC或I2C(PS:说白了2就是两个“I”的意思。)
I2C总线一些特征:
1、 只有两根线分别是串行数据线(SDA),串行时钟线(SCL)。
2、 每个连接到总线的器件有唯一一个地址。
3、 总线中可以存在一个主机多个从机的模式,也存在多个主机的模式(实际应用非常少,本文不做累述)。
4、 使用串行8位双向数据传输方式。有标准模式(Standard mode)传输速度达100kbit/s;快速模式(Fast mode)传输速度达400kbit/s;超快速模式(Fast mode Plus)传输速度达1Mbit/s;高速模式(High speed mode)传输速度达3.4Mbit/s。通常多用到标准模式。
5、 总线上的设备数量只受到总线电容(Bus capacitance)小于400pf的限制。
6、 可以使用普通GPIO口模拟I2C,但要需要将GPIO配置成OD模式(开漏模式)

二、I2C位传输规则

1、起始信号&停止信号
起始条件:当SCL为高电平时,SDA从高电平向低电平切换。
停止信号:当SCL为高电平时,SDA从低电平向高电平切换
在这里插入图片描述
2、数据的有效性
I2C信号为电平采样信号(其他很多协议都是信号沿采样,如SPI)。规定SDA上的数据在SCL高电平周期内保持稳定,在SCL低电平周期内允许变化。
在这里插入图片描述
3、响应时钟信号(ACK)
数据传输必须带响应 相关的响应时钟脉冲由主机产生 在响应的时钟脉冲期间发送器释放SDA线(高)。
在响应的时钟脉冲期间接收器必须将SDA 线拉低使它在这个时钟脉冲的高电平期间保持稳定的低电平。
通常,被寻址的接收器在接收到的每个字节后,必须产生一个响应。
当从机不能响应从机地址时,例如它正在执行一些实时函数不能接收或发送。从机必须使数据线保持高电平,主机然后产生一个停止条件终止传输或者产生重复起始条件开始的传输。
如果从机接收器响应了从机地址但是在传输了一段时间后不能接收更多数据字节,主机必须再一次终止传输,这个情况用从机在第一个字节后没有产生响应来表示,从机使数据线保持高电平,主机产生一个停止或重复起始条件。
在这里插入图片描述
4、地址格式
在发送起始信号后,主机会发送一个从机地址,这个地址共有7位。紧接着第8位(R/ W)“0”表示“写”,“1”表示请求数据“读”。
第一个字节的头7位组成了从机地址最低位(LSB)是第 8 位,它决定了报文的方向
第一个字节的最低位是“0”表示主机会写信息到被选中的从机“1”表示主机会向从机读信息
当发送了一个地址后,系统中的每个器件都在起始条件后将头7位与它自己的地址比较 如果一样,器件认为它被主机寻址,至于从机是接收数据还是发送数据都由 R/ W 位决定。
在这里插入图片描述

三、I2C电气特性标准

I2C通讯的时候需要注意时序是否满足条件,特别注意建立时间,保持时间等时序。如出现问题需要测试波形与表格中的电气特性进行详细对比。

在这里插入图片描述在这里插入图片描述

四、I2C上拉电阻选择

1、SDA和SCL都是双向的线路,都是通过一个电流源或者上拉电阻接到电源电压,这个电流源的最大值为3mA。
2、开漏状态下有3mA的反向电流,SDA,SCL的低电平的最大值为VOL(max)=0.4V。(I2C协议中可以看到)
通过上述既可以得到:
在这里插入图片描述在这里插入图片描述
3、最大上拉电阻的受到上升时间和负载电容的响应,具体的计算公式见下,具体的tr可在电气特性表中找到
在这里插入图片描述在这里插入图片描述
所以说有些人说I2C的标准上拉电阻是2.2K是不正确的。

  • 12
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
MATLAB(Matrix Laboratory,矩阵实验室)是一款强大的科学计算软件,它在科学研究、工程设计、数据分析和教学等领域都有广泛的应用。在机器人领域,MATLAB机器人工具箱(Robotics Toolbox for MATLAB)则是一款非常重要的工具箱,它可以实现机器人动力学模拟、控制器设计、路径规划和视觉处理等各种任务。本文将重点介绍MATLAB机器人工具箱中的建模与正逆运动学算法。 建模是机器人控制中非常重要的一步,在机器人工具箱中可以通过类似DH表示法的方式来对机器人进行建模。这里我们以一个三自由度的SCARA机器人为例进行说明。首先需要定义机器人的DH参数,比如对于SCARA机器人,可以采用以下方式定义: ```matlab L1 = Link([0, 0, 0, pi/2, 0]); L2 = Link([0, 0, 0.25, 0, 0]); L3 = Link([0, 0, 0.25, 0, 0]); SCARA = SerialLink([L1 L2 L3], 'name', 'SCARA'); ``` 其中Link表示机械臂链接,SerialLink表示串联链接,name表示机器人的名称。接着可以使用plot和animate方法来绘制机器人的3D模型,如图所示: ```matlab SCARA.plot([0, pi/4, pi/2]); %绘制机器人在三个角度下的姿态图 SCARA.teach(); %绘制机器人可交互的3D模型 ``` ![scara](https://img-blog.csdn.net/20170601140015099?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ3VpbGRlbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/75) 接着我们再来介绍一下MATLAB机器人工具箱中的正逆运动学算法。 正运动学是指根据机器人各个关节的角度来计算机器人的末端执行器的姿态(位置和姿态角),可以通过以下代码来实现: ```matlab theta = [0, pi/4, pi/2]; %关节角度 T = SCARA.fkine(theta); %末端执行器的姿态 disp(T); ``` 其中fkine表示正运动学求解,返回机器人末端执行器的位姿矩阵T(4x4)。需要注意的是,机器人正运动学求解中必须使用李代数(Lie algebra)和指数映射(Exponential map)的方法,以保证运算的精度和稳定性。 逆运动学是指根据机器人末端执行器的姿态来计算各个关节的角度,可以采用以下方法来实现: ```matlab T = [1, 0, 0, 0.3; 0, 1, 0, 0.3; 0, 0, 1, 0.5; 0, 0, 0, 1]; %给定机器人末端执行器的位姿矩阵 q = SCARA.ikine(T); %计算机器人各个关节的角度 disp(q); ``` 其中ikine表示逆运动学求解,需要注意的是,机器人逆运动学求解中必须考虑机器人的奇异问题、避障问题和轨迹规划问题,以保证机器人的运动轨迹和效率。 总的来说,MATLAB机器人工具箱中的建模与正逆运动学算法为机器人控制和仿真提供了很好的工具和方法,可以大大简化机器人控制的难度和复杂度。未来随着机器人技术的不断发展和普及,MATLAB机器人工具箱的应用也将逐渐扩大。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值