单片机编程入门RS485多机通信, 从机可接收到主机的数据, 主机无法接收到从机返回的数据.

急!!!rs485 接收不到数据 [问题点数:40分]

RS485通信,带有RS232转485接口,用电脑的串口调试助手发送命令,在电脑上能看到有正确的数据返回,但是用FPGA发送同样的命令后,没有数据返回(FPGA的tx端有数据发送会亮绿灯,rx端有数据返回会亮红灯,发送端的数据接到电脑上看也是验证了正确的,但是就是没有数据返回,连红灯都不亮一下)求解啊!!用串口调试助手收发都没有问题,在FPGA的板上就不行了。。

485需要控制收发开关和信号转换,示波器测量信号是否对?

#1楼说的对,485通讯需要两边都有485驱动电路,如果全双工需要4线,半双工的话需要收发转换控制,另外还要共地

检查通讯帧格式是否一致。几位数据位,几位停止位,有无(什么)校验?

没有示波器,不过收发数据没错,因为用串口调试助手发送给它后,它有返回数据,返回的数据也是正确的,只是用fpga发送同样的命令给它,就收不到它返回的数据了

因为如果有数据返回的话,fpga开发板上会有红灯亮,如果接收有误的话至少也会亮一下灯的,但就是连灯都不亮一下

检查通讯帧格式是否一致。几位数据位,几位停止位,有无(什么)校验?

8位数据位,一位起始位,一位结束位,无校验位

你用调试助手怎么接的?FPGA又是怎么接的?不明白你硬件连接

FPGA有收发控制吗?你是485不是422,需要收发控制。

哦,我猜到了,你用的4线全双工,fpga 和你的外设都能和电脑通讯,说明它们收发线排列是一样的。现在你要让它们之间通讯,需要交错一下发送接收线对。否则说对说,听对听,肯定是没法通讯了

我们经理让我简单测试485接口的设备好坏,有232转485转换器,可是我连232都不知道怎么用电脑测试,求告知。。。

你用调试助手怎么接的?FPGA又是怎么接的?不明白你硬件连接

我是用的232转485的转换器,带有自收发功能的,用PC的usb转232线连接到232转485转换器上,后面接的一个模块是称重传感器,这样通过PC发送命令是可以收到传感器传回来的数据的,但是把PC换成fpga,用的是DE2的开发板,板上有232接口,外面再接一个232转485,再接的称重传感器,fpga发送同样的命令之后,传感器没有数据返回(fpga发送的命令有验证过是正确的,而且把它接回PC上看,发出的命令也是跟之前PC发出去的命令是一样的)。现在测试了一下从232转485转换器出来的电压,485的A、B线间电压,用PC连接的时候是2.3V,但用FPGA连接的时候只有1.35V,所以怀疑是FPGA输出的信号电压不够造成485没有接收到信号,如果是这样的话应该怎么解决?或者还有没有其他的原因?急求解答啊!!好纠结!!

哦,我猜到了,你用的4线全双工,fpga 和你的外设都能和电脑通讯,说明它们收发线排列是一样的。现在你要让它们之间通讯,需要交错一下发送接收线对。否则说对说,听对听,肯定是没法通讯了

不是的,是用的半双工的

FPGA有收发控制吗?你是485不是422,需要收发控制。

我是用的232转485的转换器,带有自收发功能的,用PC的usb转232线连接到232转485转换器上,后面接的一个模块是称重传感器,这样通过PC发送命令是可以收到传感器传回来的数据的,但是把PC换成fpga,用的是DE2的开发板,板上有232接口,外面再接一个232转485,再接的称重传感器,fpga发送同样的命令之后,传感器没有数据返回(fpga发送的命令有验证过是正确的,而且把它接回PC上看,发出的命令也是跟之前PC发出去的命令是一样的)。现在测试了一下从232转485转换器出来的电压,485的A、B线间电压,用PC连接的时候是2.3V,但用FPGA连接的时候只有1.35V,所以怀疑是FPGA输出的信号电压不够造成485没有接收到信号,如果是这样的话应该怎么解决?或者还有没有其他的原因?

还有一种可能是你的DE2开发板输出只是TTL电平甚至cmos电平,不是标准RS232电平,所以不能驱动232/485转换器?可以检查一下开发板上有没有232驱动芯片。按说1.35V也足够485接收了。另外波特率误差也可能造成通讯问题

还有一种可能是你的DE2开发板输出只是TTL电平甚至cmos电平,不是标准RS232电平,所以不能驱动232/485转换器?可以检查一下开发板上有没有232驱动芯片。按说1.35V也足够485接收了。另外波特率误差也可能造成通讯问题

已经检查出来了,的确是您说得收发线排列是相同的,虽然是半双工的,但也是这个问题,收发线排列相同导致连接上出问题,拿线把收发线和地线引出来再连接好就可以了。真心非常感谢您!!!太谢谢了,都折腾我好久了,终于解决了!!谢谢谢谢!

解决了就好。不过我又不明白了,两线半双工怎么还有收发交错的问题呢?

解决了就好。不过我又不明白了,两线半双工怎么还有收发交错的问题呢?

因为两个都是母头,所以就买了一个双公头的做转接的,但是那个双公头的只是就引线转接出来,原来母头的发送线就连着原来的位置变到公头上,但是正常的公头那里的引针位置是接收端,所以接上就错了

哦,这么说应该是fpga的232输出连接232/485转换头时出的错

我们经理让我简单测试485接口的设备好坏,有232转485转换器,可是我连232都不知道怎么用电脑测试,求告知。。。

485一般是2线半双工,就不能这么测了。你要查你的设备接收什么数据回复是什么。如果需要发16进制数据那要用串口测试助手

我们经理让我简单测试485接口的设备好坏,有232转485转换器,可是我连232都不知道怎么用电脑测试,求告知。。。

把232RX,TX接起来。用串口调试工具,自己发自己收

你把rx和tx接一起试试

匿名用户不能发表回复!
}

    目前是通信控制领域的主流通信方式,数据通信、计算机网络、分布式工业控制系统及其测控领域中,经常采用串行通信来达到信息交换的目的。多机串行通信控制网络是物理层采用RS 485通信接口所组成的多机串行通信网络,RS 485既是物理层的协议标准,也是串行通信接口的电气标准。这种通信接口可以十分方便地将许多设备组成一个控制网络。RS 485通信方式有很多优点,首先它的通信距离比较远,通常可以做到数百米甚至千米以上,而且还可以实现多点通信方式,从而可以建立一个小范围内的局域网,因而更有实用价值。RS 485采用差模信号传输方式,与地电平关系不大,因而它抗干扰的能力比较好,即便在信号电压比较小的情况下也能获得稳定的传输。

    该系统的设计要求主机能够与从机之间进行地址确认并相互通信,从机能够准确检测到被测信号,主机能够接收从机传来的数据信号,并通过液晶显示器和发光二极管显示,同时采用RS 485总线主从机可以实现长距离通信。主从机采用的主要核心芯片均为,考虑性能及实际运行环境的需要,选用AT89S51单片机,串行通信网络结构如图1所示。

    (2)查询从机是否有信号(从机检测被测量时产生的相应的数据信号)发送到主机。
    (3)通过液晶显示发送信号的从机地址,同时可以通过发光二极管显示信号的级别(这里两个发光二极管分别代表两个行程开关的亮灭)。
    (2)检测被测量,并将被测信号数据发送给主机。
    主机主要有两大功能模块:液晶显示模块用来显示从机地址编号,所使用的器件为1602LCD,RS 485串行通信模块用来实现与从机之间的远距离串行通信,使用MAX485芯片来实现。
    从机的主要功能模块为RS 485串行通信模块用来完成与主机之间数据的发送和接收。
    主从机均采用的是AT89S51单片机,它是一个低功耗,高性能CMOS 8位单片机,片内含4 KB的可反复擦写1 000次的FLASH只读程序。单片机的XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。本开关设计外接12MHz。
    主从机均使用单片机2个全双工串行通信口外接MAX485芯片来完成与从机之间的串行通信,由串行口控制寄存器SCON设置串行口的工作方式、监视串行口工作状态、发送与接收的状态控制等。P3.0/RXD为串行通信接收端,P3.1/TXD为串行通信发送端。
    主机端口P0.0~P0.7作为液晶显示器的数据线,P0口上拉10 kΩ电阻与1602液晶的D0~D7数据端相连,P3.7与使能端E相连,P3.6与读/写信号线RW相连,P3.5与寄存器选择端RS相连。P1.0和P1.1引脚接两个发光二极管,用来显示从机发送信号的级别。
    从机P1.0和P1.1引脚分别接到一级行程开关和二级行程开关,用来检测两个开关的状态,最终由从机P1.0和P1.1这两个引脚将行程开关的状态发送到主机,主机读取状态值并且显示。
主机通过轮询的方式,当主机查询n号从机时,与n号从机进行地址确认,并判断n号从机是否有信号产生,如果没有,主机将查询n-1号从机,如果有信号产生,主机接收到信号并存储该从机的主机编号,分别通过发光二极管和液晶显示出来,如果n-1号从机继续有信号产生,主机继续接收,直到接收完毕,主机将查询n-2号从机,如此往复。从机的个数可以在主机程序中对从机个数n值进行设定。
    电子开关的设计核心主要通过单片机的多机串行通信来实现。
    AT89S51串行口主要由发送器、接收器和串行控制寄存器组成。发送器主要由发送缓冲寄存器SBUF和发送控制器组成。接收器主要由接收缓冲寄存器SBUF,接收移位寄存器和接收控制器组成。
    串行口控制寄存器SCON用于设置串行口的工作方式、监视串行口工作状态、发送与接收的状态控制等。它是一个既可字节寻址又可位寻址的特殊功能寄存器。控制寄存器SCON的格式如下:

    本电子开关单片机串行通信工作方式选择为工作方式2,在方式2下,串行口工作在11位异步通信方式。一帧信息包含一个起始位“0”,八个数据位,一个可编程第九数据位和一个停止位“1”。其中可编程位是SCON中的TB8位,在八个数据位之后,可作奇偶校验位或地址/数据帧的标志位使用,由使用者确定。

    波特率的选择:方式2的波特率是固定的。

    多机通信主要靠主、从机之间正确地设置与判断多机通信控制位SM2和发送或接收的第9数据位(D8)。

    电子开关多机串行通信的实现流程:

    (2)主机置REN=1,TB8=1,将地址信息发送给从机,并等待是否发送完毕,从机等待主机发送地址。

    (3)从机接收到地址与本机地址核对,核对正确,置SM2=0,向主机发送应答地址并等待发送完毕,主机接收之后进行地址确认,并置TB8=0。

    (4)从机地址发送完毕后,接着发送信号数据并等待发送完毕。

    (5)主机接收到数据将从机编号发送到液晶显示,将信号数据发到发光二极管显示信号级别。

主从机在进行数据通信之前,首先进行地址确认,其目的就是让主机知道哪号从机向主机发送数据。主机首先发送n号从机地址编号#0FFH,所有从机接收到主机发送的地址后与各自的地址进行核对,地址不是#OFFH的从机将继续等待主机的呼叫,核对正确的从机向主机发送本机的应答地址,主机收到从机的应答地址后进一步做出判断,确认是否是n号从机的地址。地址确认正确之后,主机与n号从机进行数据通信,直到数据通信完毕,主机将呼叫下一号从机。

一个主机与多个从机进行串行通信的时候,如果当某一从机有数据时向主机发送,这时可能出现两个,三个或者更多从机同时产生数据,需要同时向主机发送,这样就会导致数据通信的冲突问题。该电子开关的设计采用主机轮询从机的方式,从而有效避免了主从机数据通信冲突的问题,主机先呼叫n号从机,地址确认之后,是n号的从机应答并与主机进行通信,其余从机处于等待状态,主机接收n号从机数据,并判断该从机是否继续有数据发送,此时其他从机若有数据只能处于排队等待中,不会对主机产生干扰,主机接收完毕后将n号从机地址减1,呼叫n-1号从机,如此反复轮询各个从机。主机轮询的过程是很快的,从机检测到被测信号的时候也能得到及时的处理。如图2所示。

    RS 485采用平衡发送和差分接收方式来实现通信:在发送端TXD将串行口的TTL电平信号转换成差分信号A,B两路输出,经传输后在接收端将差分信号还原成TTL电平信号。两条传输线通常使用双绞线,又是差分传输,因此有极强的抗共模干扰的能力,接收灵敏度也相当高。如果以10 Kb/s速率传输数据时传输距离可达12 m,而用100 Kb/s速率传输数据时传输距离可达1.2 km。如果降低波特率,传输距离还可进一步提高。

485串行通信只需给主机和每个从机接各接一片MAX485芯片,其接收器的输出端RO和驱动器的输入端DI,只需分别与单片机的RXD和TXD相连即可;和DE端分别为接收和发送的使能端,当为逻辑0时,器件处于接收状态;当DE为逻辑1时,器件处于发送状态,因为MAX485工作在半双工状态,所以只需用单片机的一个管脚控制这两个引脚即可;在主机电子开关中使用单片机的P3.4引脚控制MAX485的和DE两端,如图3所示。

A端和B端分别为接收和发送的差分信号端,当A引脚的电平高于B时,代表发送的数据为1;当A的电平低于B端时,代表发送的数据为0。在与单片机连接时接线非常简

    A端和B端分别为接收和发送的差分信号端,当A引脚的电平高于B时,代表发送的数据为1;当A的电平低于B端时,代表发送的数据为0。在与单片机连接时接线非常简单。只需要一个信号控制MAX485的接收和发送即可。

    复位时,主从机都应该处于接收状态。

    控制端,DE的信号的有效脉宽应该大于发送或接收一帧信号的宽度。

    同时将A和B端之间加匹配电阻,一般可选120 Ω的电阻,吸收总线上的反射信号,保证正常传输信号干净、无毛刺。匹配电阻的取值应与总线的特性阻抗相当。

    接收和发送的使能端和DE的引脚控制在程序中的实现,主机部分程序如下:

    液晶显示模块选用1602液晶,1602液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。电子开关上使用1602液晶显示,是用来显示发送信号数据的从机编号,某一从机检测到信号时将会显示:
    RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,RS为高电平RW为低电平时可以写入数据。E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。D0~D7为8位双向数据线。
    主机接收到某一从机发来的一级或二级信号时,将此从机的编号发送至液晶显示出该从机的编号。主机首先对地址编号值进行百十个位分离,然后在液晶上逐位显示。

    该电子开关从功能上主要分为主机和从机电子开关两部分。

    主机主要完成数据的接收和处理,以及将最终结果状态显示出来,从机电子关主要完成信号的检测,同时将数据发送给主机,整个系统的搭建由一个主机和一个或多个从机电子开关组成,从机电子开关的数量可以根据实际情况的需要而定。

     因该电子开关要应用到传送带位置跑偏的检测中,从机电子开关要安装在一个档杆机构(如图4,图5所示)中,每个档杆机构中内部都有两个行程开关,根据所要求的信号级别,分别将它们设置为一级行程开关和二级行程开关,档杆通过凸轮机构与行程开关相连,从机电子开关的两个数据输入线接到两个行程开关上即可。

该电子开关主要针对大中型传送带传送过程中位置跑偏的检测而设计完成,同样也可以应用到其他相关的设备及场合的位移量及跑偏量的检测。在传送带两侧已确定位置放置从机电子开关,当传送带传送过程中某处有一定量的位置跑偏,会通过档杆触动一级行程开关,产生一级触发信号,并将信号传送到从机电子开关,从机电子开关检测到并将其发送到主机处理,主机负责显示产生故障的从机编号及故障级别,以供工作人员了解到传送带何处产生一级跑偏,并对传送带做出相应调整,同理传送带某处产生二级跑偏量的时候,将会由从机电子开关将二级信号发给主机显示。
    传送带上的安装结构示意图如图5所示。


    当1号从机所连接的行程开关档杆机构中1级行程开关被按下时,1号从机检测到一级故障信号,与主机进行地址确认之后,并向主机发送数据,此时主机上液晶显示器上显示:Fault Machine is:001(故障从机编号为001),同时发光二级管有一个显示灯熄灭(正常状态下两个发光二极管处于发光状态),同理若是2号从机检测到故障信号时,运行结果如图6所示。

    该电子开关采用了单片机多机串行通信原理而设计,由RS 485模块和1602液晶显示模块组建的小型电子开关系统,在工业控制中,多机串行通信的应用越来越广泛,可以在此电子开关设计的基础上开发功能更强的基于RS 485总线的多机串行通信的电子开关相关产品,以应用于工业控制,检测等及其他领域中。

}

专业文档是百度文库认证用户/机构上传的专业性文档,文库VIP用户或购买专业文档下载特权礼包的其他会员用户可用专业文档下载特权免费下载专业文档。只要带有以下“专业文档”标识的文档便是该类文档。

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取,非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档。

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取,非会员用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档。

付费文档是百度文库认证用户/机构上传的专业性文档,需要文库用户支付人民币获取,具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档。

共享文档是百度文库用户免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定。只要带有以下“共享文档”标识的文档便是该类文档。

}

我要回帖

更多关于 单片机编程入门 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信