项目中几个板子上都用到了485总线,在测试过程中也出现过种种问题,这几天把网上搜集的跟RS485相关的资料整理了一下,总结出关于RS485的一些常见问题,相信把这些问题都理解透彻将会对RS485的基本概念有个全面的掌握。以下大部分资料都是从网络上所得,如果对其说法的正确性有怀疑欢迎讨论,我的邮箱:yangfeng_22@sohu.com.
以下是几个485通信的实用电路:
以下是485接口的几个典型问题:
1 为何A端加上拉,B端加下拉?
由于RS-485芯片的特性,接收器的检测灵敏度为± 200mV,即差分输入端VA-VB ≥+200mV,输出逻辑1,VA-VB ≤-200mV,输出逻辑0;而A、B端电位差的绝对值小于200mV时,输出为不确定。如果在总线上所有发送器被禁止时,接收器输出逻辑0,这会误认为通信帧的起始引起工作不正常。解决这个问题的办法是人为地使A端电位高于B两端电位,这样RXD的电平在485总线不发送期间(总线悬浮时)呈现唯一的高电平,单片机就不会被误中断而收到乱字符。通过在485电路的A、B输出端加接上拉、下拉电阻(1K欧姆),即可很好地解决这个问题。
2 为何串接20欧姆电阻?
考虑到线路的特殊情况(如某一台分机的485芯片被击穿短路),为防止总线中其它分机的通信受到影响,在485信号输出端串联了两个20Ω的电阻,使A端和B端与总线之间加以隔离,这样本机的硬件故障就不会使整个总线的通信受到影响。
3 为何A端和B端要串接120欧姆电阻?
在应用系统工程的现场施工中,由于通信载体是双绞线,它的特性阻抗为120Ω左右,所以线路设计时,在RS-485网络传输线的始端和末端各应接1只120Ω的匹配电阻,以减少线路上传输信号的反射。
注:一般情况下不需要增加终端电阻,只有在485通信距离超过100米的情况下,要在485通讯的开始端和结束端增加终端电阻。匹配电阻要消耗较大电流,不适用于功耗限制严格的系统。另外一种比较省电的匹配方案是RC 匹配(A端和B端串接一电阻和电容),利用一只电容C 隔断直流成分,可以节省大部分功率,但电容C的取值是个难点,需要在功耗和匹配质量间进行折衷。除上述两种外还有一种采用二极管的匹配方案,这种方案虽未实现真正的匹配,但它利用二极管的钳位作用,迅速削弱反射信号达到改善信号质量的目的,节能效果显著。
4 总线传输端如何保护?
输出电路的设计要充分考虑到线路上的各种干扰及线路特性阻抗的匹配。由于工程环境比较复杂,现场常有各种形式的干扰源,所以485总线的传输端一定要加有保护措施。在电路设计中采用稳压管(P6KE68)组成的吸收回路,也可以选用能够抗浪涌的TVS瞬态杂波抑制器件,或者直接选用能抗雷击的485芯片(如SN75LBC184/SN65LBC184等)。
5 为何DE控制端要默认为0?
在RS-485总线构筑的半双工通信系统中,在整个网络中任一时刻只能有一个节点处于发送状态并向总线发送数据,其他所有节点都必须处于接收状态。如果有2个节点或2个以上节点同时向总线发送数据,将会导致所有发送方的数据发送失败。因此,在系统各个节点的硬件设计中,应首先力求避免因异常情况而引起本节点向总线发送数据而导致总线数据冲突。以MCS51系列的单片机为例,因其在系统复位时,I/O口都输出高电平,如果把I/O口直接与RS-485接口芯片的驱动器使能端DE相连,会在CPU复位期间使DE为高,从而使本节点处于发送状态。如果此时总线上有其他节点正在发送数据,则此次数据传输将被打断而告失败,甚至引起整个总线因某一节点的故障而通信阻塞,继而影响整个系统的正常运行。考虑到通信的稳定性和可靠性,在每个节点的设计中应将控制RS485总线接口芯片的发送引脚设计成DE端的反逻辑,即控制引脚为逻辑“1”时,DE端为“0”;控制引脚为逻辑“0”时,DE端为“1”。
6 什么叫共模干扰和差模干扰?如何消除通讯线上的干扰?
485通信线由两根双绞的线组成,它是通过两根通信线之间的电压差的方式来传递信号,因此称之为差分电压传输。差模干扰在两根信号线之间传输,属于对称性干扰。消除差模干扰的方法是在电路中增加一个偏值电阻,并采用双绞线;共模干扰是在信号线与地之间传输,属于非对称性干扰。消除共模干扰的方
法包括:
(1)采用屏蔽双绞线并有效接地
(2)强电场的地方还要考虑采用镀锌管屏蔽
(3)布线时远离高压线,更不能将高压电源线和信号线捆在一起走线
(4)不要和电控锁共用同一个电源
(5)采用线性稳压电源或高品质的开关电源(纹波干扰小于50mV)
7 485总线应采用什么样的通讯线?
必须采用国际上通行的屏蔽双绞线。我们推荐用的屏蔽双绞线的型号为RVSP2*0.5(二芯屏蔽双绞线,每芯由16股的0.2mm的导线组成)。采用屏蔽双绞线有助于减少和消除两根485通信线之间产生的分布电容以及来自于通讯线周围产生的共模干扰。工程商大都习惯采用5类网线或超5类网线作为485通信线,这是错误的。这是因为:
(1)普通网线没有屏蔽层,不能防止共模干扰。
(2)网线只有0.2mm平方,线径太细,会导致传输距离降低和可挂接的设备减
少。
(3)网络线为单股的铜线,相比多芯线而言容易断裂。
RS-485总线在实际工程中总是出现一些接线的问题,注意,在接传输线时一定要用同样的双绞线或者同样的电缆,有些人一段使用双绞线,由于双绞线长度不够或者在中间接上一段电话线或者是其他的线,这样阻抗就不连续,产生很大的反射信号,通信是不能正常进行的。
8 构建RS485网络需要注意哪些问题?
RS-485支持半双工或全双工模式,网络拓扑一般采用终端匹配的总线型结构而不支持环形或星形网络,构建485网络需要注意以下几点:
(1) 最好采用一条总线将各个节点串接起来。从总线到每个节点的引出线长度应尽量短,以便使引出线中的反射信号对总线信号的影响最低。有些网络连接尽管不正确,在短距离、低速率仍可能正常工作,但随着通信距离的延长或通信速率的提高,其不良影响会越来越严重,主要原因是信号在各支路末端反射后与原信号叠加,会造成信号质量下降。
(2) 应注意总线特性阻抗的连续性,在阻抗不连续点就会发生信号的反射。
下列几种情况易产生这种不连续性:总线的不同区段采用了不同电缆,或某一段总线上有过多收发器紧靠在一起安装,再者是过长的分支线引出到总线。
(3) 终端负载电阻问题:在设备少距离短的情况下不加终端负载电阻整个网络能很好的工作但随着距离的增加性能将降低。理论上,在每个接收数据信号的中点进行采样时,只要反射信号在开始采样时衰减到足够低就可以不考虑匹配。但这在实际上难以掌握.一条经验性的原则可以用来判断在什么样的数据速率和
电缆长度时需要进行匹配:当信号的转换时间(上升或下降时间)超过电信号沿总线单向传输所需时间的3倍以上时就可以不加匹配。例如具有限斜率特性的RS-485接口MAX483输出信号的上升或下降时间最小为250ns,典型双绞线上的信号传输速率约为0.2m/ns(24AWG PVC电缆),那么只要数据速率在250kbps以内、电缆长度不超过16米,采用MAX483作为RS-485接口时就可以不加终端匹配。
注:终端匹配的方法可参考问题3。
9 RS485网络的最大传输距离和网络最大节点数由哪些因素决定?
在使用RS485接口时,对于特定的传输线经,从发生器到负载其数据信号传输所允许的最大电缆长度是数据信号速率的函数,这个长度数据主要是受信号失真及噪声等影响所限制。当数据信号速率降低到90Kbit/S以下时,假定最大允许的信号损失为6dBV时,则电缆长度被限制在1200M。尽管理论上RS485的最长传输距离能达到1200米,但在实际应用中传输的距离要比1200米短,具体能传输多远视周围环境而定。在传输过程中可以采用增加中继器或者集线器的方法对信号进行放大,最多可以加八个中继,也就是说理论上RS485的最大传输距离可以达到9.6公理。利用485中继器或485集线器,可以将一个大型485网络分隔成若干个网段。485中继器或485集线器就如同485网段之间连接的"桥梁"。当然每个网段还是遵循上面485集线器是485中继器概念的拓广,它不仅解决了多分叉问题,同时也解决了网段之间的485规范,即1.2公里长度,32个节点数间相互隔离的问题,即某
一个网段出现问题(例如短路等),不至于影响到其它网段,从而极大地提高了大型网络的安全性和稳定性。如果真需要长距离传输,可以采用光纤为传播介质,收发两端各加一个光电转换器,多模光纤的传输距离是5~10公里,而采用单模光纤可达50公里的传播距离。
网络节点数与所选RS-485芯片驱动能力和接收器的输入阻抗有关,如75LBC184标称最大值为64点,SP485R标称最大值为400点。实际使用时,因线缆长度、线径、网络分布、传输速率不同,实际节点数均达不到理论值。例如75LBC184运用在500m分布的RS-485网络上节点数超过50或速率大于9.6kb/s时,工作可靠
性明显下降。通常推荐节点数按RS-485芯片最大值的70%选取,传输速率在1200~9600b/s之间选取。通信距离1km以内,从通信效率、节点数、通信距离等综合考虑选用4800b/s最佳。通信距离1km以上时,应考虑通过增加中继模块或降低速率的方法提高数据传输可靠性。
10 485通信的软件设计要注意哪些?
软件设计对系统联网的可靠性有很大影响。由于485总线是异步半双工的通信总线,在某一个时刻总线只可能呈现一种状态,所以这种方式一般适用于主机对分机的查询方式通信,总线上必然有一台始终处于主机地位的设备在巡检其他分机,这就需要制定一套合理的通信协议来协调总线的分时共用。可以采用数据包通信方式,通信数据是成帧、成包发送的,每包数据都由引导码、地址码、长度码、命令码、内容和校验码等部分组成。其中: 引导码是用于同步每一包数据的引导头(如0x7E);地址码是分机的本机地址号;长度码是这一包数据的总长度;命令码是主机对分机(或分机应答主机)的控制命令;“内容”是这一包数据里的各种信息;校验码是这一包数据的校验标志,可以采用奇偶校验、“和”校验
以及CRC校验等不同方式。此外,为了可靠的工作,在485总线状态切换时需要做适当延时,再进行数据的收发。具体的做法是在数据发送状态下,先将控制端DE置“1”,延时1ms左右的时间,再发送有效的数据,一包数据发送结束后再延时1ms后,将控制端置“0”。这样的处理会使总线在状态切换时,有一个稳定的工作过程。11 485接口除了两根通信线,为什么还要接地?仅仅用一对双绞线将各个接口的A、B端连接起来,而不对RS-485通信链路的信号地接地,在某些情况下也可以工作,但给系统埋下了隐患。(1)共模干扰问题: RS-485接口采用差分方式传输信号并不需要对于某个参照点来检测信号系统,只需检测两线之间的电位差就可以了。但应该注意的是收发器只有在共模电
压不超出一定范围(-7V至+12V)的条件下才能正常工作。当共模电压超出此范围,就会影响通信的可靠直至损坏接口。如下图所示,当发送器A向接收器B发送数据
时,发送器A的输出共模电压为VOS,由于两个系统具有各自独立的接地系统存在着地电位差VGPD,那么接收器输入端的共模电压就会达到VCM=VOS+VGPD。RS-485
标准规定VOS≤3V,但VGPD可能会有很大幅度(十几伏甚至数十伏),并可能伴有强干扰信号致使接收器共模输入VCM超出正常围,在信号线上产生干扰电流轻则影响正常通信,重则损坏设备。(2)EMI问题:发送驱动器输出信号中的共模部分需要一个返回通路,如没有一个低阻的返回通道(信号地),就会以辐射的形式返回源端,整个总线就会像一个巨大的天线向外辐射电磁波。
12 RS-485与RS-422有何不同?
很多人往往都误认为RS-422串行接口是RS-485串行接口的全双工版本,实际上,它们在电器特性上存在着不少差异,共模电压范围和接收器输入电阻不同使得该两个标准适用于不同的应用领域。RS-485串行接口的驱动器可用于RS-422串行接口的应用中,因为RS-485串行接口满足所有的RS-422串行接口性能参数,反之则不能成立。对于RS-485串行接口的驱动器,共模电压的输出范围是-7V和+12V之间;对于RS-422串行接口的驱动器,该项性能指标仅有±7V。RS-422串行接口接收器的最小输入电阻是4KΩ;而RS-485串行接口接收器的最小输入电阻则是12KΩ。
13 RS-485有何规格要求?
RS-485标准采用平衡式发送,差分式接收的数据收发器来驱动总线,支持多点通信,具体规格要求:
· 接收器的输入电阻RIN≥12kΩ
· 驱动器能输出±7V的共模电压
· 输入端的电容≤50pF
· 在节点数为32个,配置了120Ω的终端电阻的情况下,驱动器至少还能输出电压1.5V(终端电阻的大小与所用双绞线的参数有关)
· 接收器的输入灵敏度为200mV(即(V+)-(V-)≥0.2V,表示信号"0";
(V+)-(V-)≤-0.2V,表示信号"1")
· 最大输入电流:1.0mA/-0.8mA(12Vin/-7Vin);
· 最大总线负载:32个单位负载(UL);
· 最大传输速率:10Mbps;
· 最大电缆长度:4000英尺。
14 PC机如何使用485通信?
由于PC机默认的只带有RS232接口,有两种方法可以得到PC上位机的RS485电路:(1)通过RS232/RS485转换电路将PC机串口RS232信号转换成RS485信号,对
于情况比较复杂的工业环境最好是选用防浪涌带隔离珊的产品。(2)通过PCI多串口卡,可以直接选用输出信号为RS485类型的扩展卡。
15 RS-485系统的出现故障该如何分析诊断、处理?
(1)若出现系统完全瘫痪,大多因为某节点芯片的VA、VB对电源击穿,使用万用表测VA、VB间差模电压为零,而对地的共模电压大于3V,此时可通过测共模电压大小来排查,共模电压越大说明离故障点越近,反之越远;
(2)总线连续几个节点不能正常工作。一般是由其中的一个节点故障导致的。一个节点故障会导致邻近的2~3个节点(一般为后续)无法通信,因此将其逐一与总线脱离,如某节点脱离后总线能恢复正常,说明该节点故障;
(3)集中供电的RS-485系统在上电时常常出现部分节点不正常,但每次又不完全一样。这是由于对RS-485的收发控制端TC设计不合理,造成微系统上电时节点收发状态混乱从而导致总线堵塞。改进的方法是将各微系统加装电源开关然后分别上电;
(4)系统基本正常但偶尔会出现通信失败。一般是由于网络施工不合理导致系统可靠性处于临界状态,最好改变走线或增加中继模块。应急方法之一是将出现失败的节点更换成性能更优异的芯片;
(5)因MCU 故障导致TC 端处于长发状态而将总线拉死一片。提醒读者不要忘记对TC 端的检查。尽管RS-485 规定差模电压大于200mV 即能正常工作。但实际测量:一个运行良好的系统其差模电压一般在1.2V 左右(因网络分布、速率的差异有可能使差模电压在0.8~1.5V 范围内)。