打印

I2C通信距离的问题

[复制链接]
7085|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kuliuyisi|  楼主 | 2007-12-10 12:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
做了一个数据采集系统。主控芯片是CY7C68013单片机,利用其I2C接口对从模块进行控制,从模块接到命令后动作,并采集数据,然后将数据送回单片机。整个总线长度30cm,不算长。试验中发现离单片机近的从模块采集数据老是不正常,远的好像没问题。有时,只接少数几个从模块时,离单片机近的从模块也正确,但是从模块数量较多时,例如12个,近的就不行了。不知问题出在哪,请指教!



我尝试把单片机程序中从模块动作和采集数据之间的延时加大,好像也没有效果。

相关帖子

沙发
赤铸| | 2007-12-10 16:46 | 只看该作者

30cm, IIC, 勉为其难

光加大延时不行,还要降低 IIC 时钟频率
狠狠降!然后在接收端加小电容(nF 级),再不行就承认失败

使用特权

评论回复
板凳
computer00| | 2007-12-10 16:53 | 只看该作者

我试过1m多长都没问题。

使用特权

评论回复
地板
xwj| | 2007-12-10 16:53 | 只看该作者

这个长度肯定是没问题的,注意上拉电阻和时钟速度即可

使用特权

评论回复
5
maychang| | 2007-12-10 16:58 | 只看该作者

30cm可不算长,应该没有什么问题吧

从模块数量多,其输入电容均并联,必然比较大,减少上拉电阻看看。

使用特权

评论回复
6
赤铸| | 2007-12-10 17:19 | 只看该作者

看错了,把 30cm 看成 30m 了,呵呵

使用特权

评论回复
7
赤铸| | 2007-12-10 17:20 | 只看该作者

30cm 适当降低时钟频率,或减小上拉电阻就行了

上拉电阻一般不要小于 1kohm

使用特权

评论回复
8
kuliuyisi|  楼主 | 2007-12-10 21:39 | 只看该作者

是近的有问题,不是远的

不是通信距离的问题,因为是近的有问题啊。
上拉电阻2.2K,I2C传输速率100K。
赤铸说狠狠讲传输速率,如何将?这个速率是CY7C68013支持的最低速率了。
你说在接收端加小电容(nF 级),这个电容是加在哪两路之间?

另外,我这个系统的从部件数量较多,大概有40个,每个部件输入电容7pF,而且我在总线上加了I2C中继器PCA9515,将总线一分为二,每段电容都可容纳400pF电容,整个总线电容达到800pF。

各位说的都很有道理,回去我试试减少上拉电阻试试。还请大家帮忙给分析分析。

使用特权

评论回复
9
赤铸| | 2007-12-10 21:46 | 只看该作者

我前面是看成了30m,所以提那样的“变态”建议

当时还在惊讶呢。30cm 距离,走线很重要
1. 全部在板子上走,还是经过了接插件?
2. 布线是否考虑了回路串扰?

用示波器看看总线上波形到底什么样(主要是上升沿),也许比什么都管用

使用特权

评论回复
10
kuliuyisi|  楼主 | 2007-12-10 23:04 | 只看该作者

所有的从模块均经过接插件和总线相连

SDA、SCL阻抗和延时如何测量?

使用特权

评论回复
11
kuliuyisi|  楼主 | 2007-12-11 12:59 | 只看该作者

今天看了波形

用示波器看了看,好像距离远的模块和近的模块没有什么分别。
各位大侠的回答基本上是针对总线不能正常工作的。
实际上是距离远的模块没有问题,近的有问题,如果总线存在设计上的错误,就应该都有问题了。不知是不是干扰的问题,越近干扰越大。可能还有驱动能力的问题。

使用特权

评论回复
12
xwj| | 2007-12-11 14:00 | 只看该作者

肯定不是干扰的问题,应该还是总线匹配、反射的问题

再就是你挂的东西太多了点,实在不行就换485吧

使用特权

评论回复
13
kuliuyisi|  楼主 | 2007-12-11 18:55 | 只看该作者

没有设计终端匹配电阻,我试验一下

使用特权

评论回复
14
yadog| | 2007-12-11 19:44 | 只看该作者

re

近的时候,并上几个电容(慢慢加)看下会出现什么现象

估计是程序写到了临界状态

使用特权

评论回复
15
kuliuyisi|  楼主 | 2007-12-11 21:19 | 只看该作者

电容并在SDA和SCL之间吗?

使用特权

评论回复
16
赤铸| | 2007-12-11 21:44 | 只看该作者

接插件和总线拓扑都是问题

最好给出总线的分布图
通俗说,多结点的连接,有两种基本方式:有分叉的和无分叉的
一般认为后者更好,前者分叉不宜过长

IIC 总线跟其它总线不同,不便加并联终端电阻,可在分叉上适当串联小电阻(反正用接插件,好试),只要不影响逻辑电平,就适当大一些

使用特权

评论回复
17
赤铸| | 2007-12-12 00:07 | 只看该作者

关键是从接插件分出去的线(支线)多长?什么样的线?

使用特权

评论回复
18
pppking| | 2007-12-12 08:55 | 只看该作者

你向周立功咨询一下,他们正在代理一款IIC远程通讯芯片

可以将IIC信号传送2公里,肯定符合你的要求吧

使用特权

评论回复
19
kuliuyisi|  楼主 | 2007-12-12 09:22 | 只看该作者

每个从模块上有I2C转换芯片

每个从模块通过接插件和总线相连,信号线接到从模块上的一个PCA9501芯片,该芯片是用来讲串行数据转换成并行数据的I2C芯片,输入电容7pF,这个芯片紧挨着接插件,连线当然是电路板上的线了。I2C到该芯片以后就被转换了,可以说就没I2C什么事了,所以说总线上的信号到从模块上的的距离是比较短的,2个厘米吧。

使用特权

评论回复
20
kuliuyisi|  楼主 | 2007-12-12 14:06 | 只看该作者

试试二极管钳位功能来削弱反射信号

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

113

帖子

0

粉丝