• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

求助,关于单片机之间的通信问题

请问各位大侠,像下图1这样连接,通信正常(可以接收和发送),说明程序和硬件没问题吧?但如果把图1的光耦(801 P521 GR)换成图2的接法(光耦由发送端换到接收端),就通信不上了?请问这是什么原因呢?光耦我用导线把它引出来接,这方便我更换,且保证光耦是同一个光耦.我分析了好几天了,实在是找不出问题的根源啊!!电源我加多了下个“派”型漓滤了,电阻等参数我也换过了,但就是不行!真是极度郁闷啊!!
还有一个问题,就是把图1的光耦换成(746 P521 GB)的话同样是通信不上!!理论上来讲这两个光耦可以互换啊!!

500) {this.resized=true; this.width=500; this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}" onclick="if(!this.resized) {return true;} else {window.open('http://u.dianyuan.com/bbs/u/71/2992531225704867.jpg?x-oss-process=image/watermark,g_center,image_YXJ0aWNsZS9wdWJsaWMvd2F0ZXJtYXJrLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxQXzQwCg,t_20');}" onmousewheel="return imgzoom(this);">

                        图1

500) {this.resized=true; this.width=500; this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}" onclick="if(!this.resized) {return true;} else {window.open('http://u.dianyuan.com/bbs/u/71/2992531225704896.jpg?x-oss-process=image/watermark,g_center,image_YXJ0aWNsZS9wdWJsaWMvd2F0ZXJtYXJrLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxQXzQwCg,t_20');}" onmousewheel="return imgzoom(this);">

                        图2
谢谢各位,急救啊!!
全部回复(10)
正序查看
倒序查看
whatcall
LV.5
2
2008-11-03 18:20
首先我觉得你这电路信号隔离的不完整(是不是还没设计完,只是先试验一下?)
从理论上来说可能是可以的,不过光耦两侧的电路特性毕竟不一样.单片机的发送引脚需不需要上拉?驱动能力?你先解决电源的问题就偏离了主题.TXD和RXD的信号才是关键嘛.最有效的调试方法是用示波器看RXD TXD 波形,需要注意的一点是对于UART接口来说,电平的有效状态是低电平,当通信处于闲置时,引脚是高电平.因此先看看逻辑对不对,逻辑正确的话再观察波形的边沿是否满足要求.这样解决问题是比较合理的.
当然如果你手边没有示波器,只好先用万用表量一下无通信数据时各引脚状态是否正常?有通信时,用交流档测量有无一定的交流电压(这个电压取决于通信的间隔和数据,可以定期发送0xFF、0x55、0x00观察不同的数据电压是否不同). 另外可以降低波特率试验.
0
回复
2008-11-03 22:26
@whatcall
首先我觉得你这电路信号隔离的不完整(是不是还没设计完,只是先试验一下?)从理论上来说可能是可以的,不过光耦两侧的电路特性毕竟不一样.单片机的发送引脚需不需要上拉?驱动能力?你先解决电源的问题就偏离了主题.TXD和RXD的信号才是关键嘛.最有效的调试方法是用示波器看RXDTXD波形,需要注意的一点是对于UART接口来说,电平的有效状态是低电平,当通信处于闲置时,引脚是高电平.因此先看看逻辑对不对,逻辑正确的话再观察波形的边沿是否满足要求.这样解决问题是比较合理的.当然如果你手边没有示波器,只好先用万用表量一下无通信数据时各引脚状态是否正常?有通信时,用交流档测量有无一定的交流电压(这个电压取决于通信的间隔和数据,可以定期发送0xFF、0x55、0x00观察不同的数据电压是否不同).另外可以降低波特率试验.
嗯,老兄你说的没错,刚开始时我的电路是三路都隔离的,但通信不上,于是我就把隔离电路全去掉,这样就能通信成功了.所以我排除了程序上的问题.就一路一路来隔离看看到底是那里出了问题,结果就是我开贴所说的一样,即只隔离TXD时可以通信,TXD和RXD都隔离或只隔离RXD时就不行了.所以才想不透啊,理论上这个很容易分析,但理论跟实际就是差别那么大啊!!!!

还有,我用示波器测过成功通信时的波形,大概了解通信的原理和逻辑电平.当我只隔离RXD端时,发送端的波形很正常,即跟正常时的波形基本一致,只是接收端一直保持高电平(理论上不隔离时能通信,波形正常,即可证明那里能接收到数据,为什么一接上隔离电路就没波形了呢,想不通???)

最原始的原理图如下,但这样通信不成功,所以才一分别测试500) {this.resized=true; this.width=500; this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}" onclick="if(!this.resized) {return true;} else {window.open('http://u.dianyuan.com/bbs/u/71/2992531225722405.jpg');}" onmousewheel="return imgzoom(this);">
0
回复
2008-11-03 22:38
正常通信时TXD引脚的波形如下(采用扫描的)
500) {this.resized=true; this.width=500; this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}" onclick="if(!this.resized) {return true;} else {window.open('http://u.dianyuan.com/bbs/u/71/2992531225722786.gif');}" onmousewheel="return imgzoom(this);">

RXD引脚的波形跟上面的差不多,只是比较疏一点(因为我发是地几个单元发,收只是跟自己地址相符时才收)

通信不上时,TXD引脚的波形也正常,只是RXD就一直保持高电平.
0
回复
whatcall
LV.5
5
2008-11-04 18:42
@小心有毒
正常通信时TXD引脚的波形如下(采用扫描的)[图片]500){this.resized=true;this.width=500;this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}"onclick="if(!this.resized){returntrue;}else{window.open('http://u.dianyuan.com/bbs/u/71/2992531225722786.gif');}"onmousewheel="returnimgzoom(this);">RXD引脚的波形跟上面的差不多,只是比较疏一点(因为我发是地几个单元发,收只是跟自己地址相符时才收)通信不上时,TXD引脚的波形也正常,只是RXD就一直保持高电平.
我想你可以沿着这个思路测下去.
不要只盯着单片机的引脚,顺着信号的来源和去向测一下.你用通信好不好来形容过于粗略.你的系统中MCU是主机吗?TXD一直正常不奇怪,因为就是单片机的输出嘛,RXD的引脚一直为高说明无有效输入信号.用示波器看看通信链路上的几个点:
TXD->发送光耦次侧(即RS485 收发器的D脚)-> A,B间差分电压->485 A,B间差分电压->接收光耦的原边(即RS85收发器的R脚)->RXD.
这样问题很容易找出来. 如果仍然不能解决,使能端的电平再看看.就这么几个器件,不复杂.

不过照你的描述,问题的产生就是因为RXD的隔离造成的,因此建议首先检查RXD隔离的两端信号是否匹配,我觉得 光耦的 RS85收发器的R脚逻辑信号八成是正确的,可能是两边的电阻值选择不当.
0
回复
2008-11-05 08:55
@小心有毒
嗯,老兄你说的没错,刚开始时我的电路是三路都隔离的,但通信不上,于是我就把隔离电路全去掉,这样就能通信成功了.所以我排除了程序上的问题.就一路一路来隔离看看到底是那里出了问题,结果就是我开贴所说的一样,即只隔离TXD时可以通信,TXD和RXD都隔离或只隔离RXD时就不行了.所以才想不透啊,理论上这个很容易分析,但理论跟实际就是差别那么大啊!!!!还有,我用示波器测过成功通信时的波形,大概了解通信的原理和逻辑电平.当我只隔离RXD端时,发送端的波形很正常,即跟正常时的波形基本一致,只是接收端一直保持高电平(理论上不隔离时能通信,波形正常,即可证明那里能接收到数据,为什么一接上隔离电路就没波形了呢,想不通???)最原始的原理图如下,但这样通信不成功,所以才一分别测试[图片]500){this.resized=true;this.width=500;this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}"onclick="if(!this.resized){returntrue;}else{window.open('http://u.dianyuan.com/bbs/u/71/2992531225722405.jpg');}"onmousewheel="returnimgzoom(this);">
把R13改成2K以上试试
0
回复
cuixin
LV.3
7
2008-11-09 15:06
不知道你的通信速度是多大?光偶是有延时的,而且非常大特别是关断的时候,你好好看521的手册,另外你的程序中的读取的时间等.
0
回复
2008-11-12 18:52
你改大R13试了吗?我遇到过这种事,加大R13就解决了,光耦输出相当一个电阻,当有输入时,输出导通,但有较大电阻,电流较大时,会有较大压降,所以不能正常工作,加大R13,减小集电结电流,集电结电压会降低,系统才能正常工作.
0
回复
ketjin
LV.3
9
2008-11-25 20:55
电阻没优化,看看521的手册吧,或者你速度太快,应当用高速的
0
回复
ketjin
LV.3
10
2008-11-25 20:58
813的基极大概200多
C集的忘了
可在9600
0
回复
ketjin
LV.3
11
2008-11-25 20:59
@小心有毒
正常通信时TXD引脚的波形如下(采用扫描的)[图片]500){this.resized=true;this.width=500;this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}"onclick="if(!this.resized){returntrue;}else{window.open('http://u.dianyuan.com/bbs/u/71/2992531225722786.gif');}"onmousewheel="returnimgzoom(this);">RXD引脚的波形跟上面的差不多,只是比较疏一点(因为我发是地几个单元发,收只是跟自己地址相符时才收)通信不上时,TXD引脚的波形也正常,只是RXD就一直保持高电平.
拉开看,很难看
0
回复