打印
[MCU]

I2C通信距离到底是有什么决定的???疑惑求助

[复制链接]
12056|37
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hsxs|  楼主 | 2018-8-28 13:20 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
沙发
hsxs|  楼主 | 2018-8-28 13:23 | 只看该作者
我用示波器先测量了 单片机发出的数据,短距离时。示波器显示的波形是正常的

820DDC576C1F01743332210F59D1E1D8.jpg (203.77 KB )

短距离通讯的时候

短距离通讯的时候

使用特权

评论回复
板凳
hsxs|  楼主 | 2018-8-28 13:26 | 只看该作者
但是我一将导线延长至5米,我的单片机IO口出来的数据就不对了,SDA波形最后面被拉低了不少

DD021D23DD82CE828F0784AE5CC4BAE8.jpg (219.74 KB )

传感器线长5米

传感器线长5米

使用特权

评论回复
地板
hsxs|  楼主 | 2018-8-28 13:27 | 只看该作者
各位有遇到过需要I2C长距离通讯过的项目吗,,来讨论讨论吧

使用特权

评论回复
5
Cjy_JDxy| | 2018-8-28 13:40 | 只看该作者
I2C通讯就是距离不能太长的

使用特权

评论回复
6
lihui567| | 2018-8-28 14:57 | 只看该作者
I2C就是IC和IC之间通讯,距离很近,曾经试过2m没问题,速率不要太高。
距离主要由线间电容决定,可以用中继延长。

使用特权

评论回复
7
tom_xu| | 2018-8-28 16:04 | 只看该作者
I2C通信没听说过要几米以上的吧,几米以上用485吧。

使用特权

评论回复
8
tom_xu| | 2018-8-28 16:05 | 只看该作者
I2C通信本身就是用在同一块电路板上的芯片和芯片的通信。

使用特权

评论回复
9
gx_huang| | 2018-8-28 16:17 | 只看该作者
看波形,就知道你的I2C驱动有问题。
I2C总线,只能拉低,置高只能靠外部上拉电阻。
也就是说,下降沿可以比较陡峭,但是上升沿,必然是RC充电的波形。
速度降低一些,没有干扰的场合,5m是可以的。最好用屏蔽线,只是分布电容更大,但是干扰没有了。

使用特权

评论回复
10
hsxs|  楼主 | 2018-8-28 16:58 | 只看该作者
gx_huang 发表于 2018-8-28 16:17
看波形,就知道你的I2C驱动有问题。
I2C总线,只能拉低,置高只能靠外部上拉电阻。
也就是说,下降沿可以比 ...

是指第二幅示波器的图吗? 感觉后面的波形被拉低了。我也不知道是什么导致的。把线缩短之后 波形就是第一幅图那么干净了

使用特权

评论回复
11
hsxs|  楼主 | 2018-8-28 16:59 | 只看该作者
hsxs 发表于 2018-8-28 16:58
是指第二幅示波器的图吗? 感觉后面的波形被拉低了。我也不知道是什么导致的。把线缩短之后 波形就是第一 ...

我用逻辑分析仪测过,CLK的脉宽都是14us 到13us之间的,太快了吗?

使用特权

评论回复
12
雪山飞狐D| | 2018-8-28 17:40 | 只看该作者
本帖最后由 雪山飞狐D 于 2018-8-28 17:42 编辑

    距离长了,线间电容导致信号波形被过滤成正弦波了,I2C上拉电阻10K , 跟线间电容形成RC低通滤波器,工业长距离一般用4-20 mA 电流模式通信或者485一类的差分信号,信号线额定阻抗

使用特权

评论回复
评论
hsxs 2018-8-28 20:18 回复TA
@雪山飞狐D :好的,谢谢你的意见 
雪山飞狐D 2018-8-28 20:13 回复TA
@hsxs :你是实在要长距离用就加一个便宜的单片机,另外一边短距离读写数据,然后通过232传过来 
hsxs 2018-8-28 20:12 回复TA
@雪山飞狐D :没办法,,,有需求。。长距离测温需要用到。最长5M,本来是想用单总线通讯的方式,但是会影响到通讯 
雪山飞狐D 2018-8-28 20:11 回复TA
@hsxs :不要这样长距离用,人家设计标准就不是给你长距离用的 
hsxs 2018-8-28 19:30 回复TA
所以一方面是要想办法减小线间电容,另一方面是要减小上拉电阻 是吗??? 
13
caoenq| | 2018-8-28 20:18 | 只看该作者
告诉你个秘密,把上拉电阻换成500欧,或许可以解决问题

使用特权

评论回复
14
hsxs|  楼主 | 2018-8-28 21:01 | 只看该作者
caoenq 发表于 2018-8-28 20:18
告诉你个秘密,把上拉电阻换成500欧,或许可以解决问题

哈哈哈好的好的

使用特权

评论回复
15
Prry| | 2018-8-28 22:57 | 只看该作者
TTL电平只适合板间通信。i2c增加通信距离,找电平转换芯片,一个收一个发,以前用过NXP的,忘记什么型号了。度娘去搜搜或者nxp官网找找。

使用特权

评论回复
16
Prry| | 2018-8-28 22:58 | 只看该作者
hsxs 发表于 2018-8-28 21:01
哈哈哈好的好的

这个不可靠,产品量产卖出去,一个出问题就有你折腾,加电平转换芯片吧!

使用特权

评论回复
17
henangongda123| | 2018-8-29 08:03 | 只看该作者
caoenq 发表于 2018-8-28 20:18
告诉你个秘密,把上拉电阻换成500欧,或许可以解决问题

500!!

使用特权

评论回复
18
gx_huang| | 2018-8-29 08:21 | 只看该作者
hsxs 发表于 2018-8-28 16:58
是指第二幅示波器的图吗? 感觉后面的波形被拉低了。我也不知道是什么导致的。把线缩短之后 波形就是第一 ...

可以明确的告诉你,是你的I2C驱动程序错了,GPIO模式配置错了。
只要改为外部电阻上拉,上拉电阻可以适当减少,5m长度应该没有问题。
如果你还是不理解,不可能做好这个项目的。
可以肯定,90%以上的人,都搞不清楚I2C的规范为什么要外部电阻上拉。
正是因为你把GPIO配置成推挽输出,才导致一系列的问题。
由于线间的分布电容,I2C的2个信号互相干扰,你甚至可以对地加电容,减少互相的干扰。

使用特权

评论回复
19
gx_huang| | 2018-8-29 08:39 | 只看该作者
补充一下,I2C长线出现问题,原因有2个:
1、SDA和SCL之间的分布电容太大
2、SDA/SCL和GND之间的分布电容太大
知道原因了,你就可以直接短线模拟了,无非加3个电容就可以模拟了,也方便查找原因。

使用特权

评论回复
20
hsxs|  楼主 | 2018-8-29 11:22 | 只看该作者
gx_huang 发表于 2018-8-29 08:21
可以明确的告诉你,是你的I2C驱动程序错了,GPIO模式配置错了。
只要改为外部电阻上拉,上拉电阻可以适当 ...

我用的是新塘的51单片机。管脚配置成了开漏,他手册上面也说了推荐模式。。我现在就是觉得分布电容的问题了

使用特权

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

本版积分规则

12

主题

96

帖子

0

粉丝