RS485使用介绍
二. 单片机 RS-485 多机通讯的实现
摘要 本文介绍一种能利用 RS-485 电气特性和简单的结构方式,采用自定义串 行通信协议,实现单片机 RS-485 多机通讯的方法和技巧。
关键词 单片机,RS-485 总线,总线冲突,串行通信
1 简介 RS-485 串行总线接口标准以差分平衡方式传输信号,具有很强的抗共模干
RS-485 的使用
一.一. 485 接口芯片简介 1.一般说明
MAX481/MAX483/MAX485 是用于 RS—485 通信的小功率收发器,它们都含有 一个驱动器和一个接收器。MAX483 的特点是具有限斜率的驱动器,这样可以使 电磁干扰(EMI)减至最小,并减小因电缆终端不匹配而产生的影响,因此可以 高达 250Kbps 的速度无误差的传送数据。MAX481 和 MAX485 的驱动器不是限斜率 的,允许它们以每秒 2.5Mbps 的速度发送数据。这些收发器的工作电流在 120— 500uA 之间。此外 MAX481/MAX483 有一个低电流的关闭方式,在此方式下,它们 仅需要 0.1uA 的工作电流。所以这些收发器只需一个+5V 的电源。
图 4 程序流程图 注:延时 T 秒的取值 (1) 传送地址帧时,T>2X(1/波特率),可以选取 T=2.5X(1/波特率)。 (2) 传送数据帧时,T>1X(1/波特率),可以选取 T=1.5X(1/波特率)。
三. RS-485 通讯常见问题 1. MAX488/MAX490 在点对点通信中工作很正常,但在点对多点通信时却无法
常用的 RS-485 总线驱动芯片有 SN75174,SN75175,SN75176。SN75176 芯
片有一个发送器和一个接收器,非常适合作为 RS-485 总线驱动芯片。SN75176
及其逻辑如图 1 所示。 图 1 SN75176 芯片及其逻辑关系
3 RS-485 方式构成的多机通信原理 在由单片机构成的多机串行通信系统中,一般采用主从式结构:从机不主动
这些驱动器具有短路电流限制和使用热关闭控制电路进行超功耗保护。在超 过功耗时,热关闭电路将驱动器的输出端置于高阻状态。接收器输入端具有自动 防止故障的特性,当输入端开路时,确保输出为高电平。MAX481/MAX483/MAX485 是为半双工应用而设计的。
1)应用范围 * 低功率 RS—485 收发器 * 电平变换器 * EMI 灵敏情况下应用的收发器 * 工业控制局部区域网络 2)特点 * 无误差数据传送的限斜率驱动器(MAX483) * 0.1uA 低电流关闭方式(MAX481/MAX483) * 低静态电流:120uA(MAX483),300uA(MAX481/MAX485) * -7—+12V 共模输入电压范围 * 三态输出 * 30ns 传输延时,5ns 传输延时偏差(MAX481/MAX485) * 半双工工作方式 * 工作电源为单一+5V * 总线可接 32 个收发器(MAX485) * 限流和热敏控制电路为驱动器提供过载保护 3)引脚排列,引脚说明和典型工作电路
3) 总线上所连接的各单机的发送控制信号在时序上完全隔开。 为了保证发送和接收信号的完整和正确,避免总线上信号的碰撞,对总线的 使用权必须进行分配才能避免竞争,连接到总线上的单机,其发送控制信号在时 间上要完全隔离。 总之,发送和接收控制信号应该足够宽,以保证完整地接收一帧数据,任意 两个单机的发送控制信号在时间上完全分开,避免总线争端。 程序流程框图,参见图 4。其中:a)为发送流程图;b)为接收流程图。
发送命令或数据,一切都由主机控制。并且在一个多机通信系统中,只有一台单 机作为主机,各台从机之间不能相互通讯,即使有信息交换也必须通过主机转发。 采用 RS-485 构成的多机通讯原理框图,如图 2 所示。
图 2 采用 RS-485 构成的多机通讯原理框图 在总线末端接一个匹配电阻,吸收总线上的反射信号,保证正常传输信号干
1) 复位时,主从机都应该处于接收状态。 SN75176 芯片的发送和接收功能转换是由芯片的 RE* ,DE 端控制的。RE*=1, DE=1 时,SN75176 发送状态;RE*=0,DE=0 时,SN75176 处于接收状态。一般使 用单片机的一根口线连接 RE*,DE 端。在上电复位时,由于硬件电路稳定需要一 定的时间,并且单片机各端口复位后处于高电平状态,这样就会使总线上各个分 机处于发送状态,加上上电时各电路的不稳定,可能向总线发送信息。因此,如 果用一根口线作发送和接收控制信号,应该将口线反向后接入 SN75176 的控制 端,使上电时 SN75176 处于接收状态。 另外,在主从机软件上也应附加若干处理措施,如:上电时或正式通讯之前, 对串行口做几次空操作,清除端口的非法数据和命令。 2) 控制端 RE*,DE 的信号的有效脉宽应该大于发送或接收一帧信号的宽度。
MAX481/MAX483/MAX485 的引脚排列和典型工作电路分别如图 2—4 所示:
图 2—4
引脚说明如下表 2—2 所示:
MAX481/MAX483/MAX485 引脚说明
MAX481/MAX483 名称
功能
/MAX485 引脚
1
RO 接 收 器 输 出 端 。 若 A 大 于
B200mVRO 为高,若相反 RO 为
a 发送时,检测 TI 是否建立起来,当 TI 为高电平后关闭发送功能转为接收 功能;
b 接收时,检测 RI 是否建立起来,当 RI 为高电平后,接收完毕,又可以转 为发送。
在理论上虽然行得通,但在实际联调中却出现传输数据时对时错的现象。根 据查证有关资料,并在联调中借助存储示波器反复测试,才发现一个值得注意的 问题,我们可以查看单片机的时序:
在 RS-232,RS-422 等全双工通讯过程中,发送和接收信号分别在不同的 物理链路上传输,发送端始终为发送端,接收端始终为接收端,不存在发送、接 收控制信号切换问题。在 RS-485 半双工通讯中,由于 SN75176 的发送和接收都 由同一器件完成,并且发送和接收使用同一物理链路,必须对控制信号进行切换。 控制信号何时为高电平,何时为低电平,一般以单片机的 TI,RI 信号作参考。
正常通信是由于 MAX488/MAX490 没有发送使能控制,因而其输出无法处于
高阻态,当多个输出被连接在一起时(即点对多点通信时),差分输出信号线 被多个发送器驱动(通常为 TXD=1 对应的电平状态);当某个节点开始通信, 且发送 TXD=0 对应的差分电平时,A,B 两线上将形成很大的短路电流,若 长时间工作,则接口芯片将损坏;而这种情况不会在点对点通信中发生,且 不会出现在点对多点通信中的处于点的一方,这也是象 MAX488/MAX490 以 及其它一些没有发送使能控制的接口的适用范围。以上是造成这个问题的原 因,当然,类似情况也会出现在那些带使能控制而软件没有编程控制使能的 接口芯片中。 2. RS-485/RS-422 接 口 在 停 止 通 信 时 接 收 器 仍 有 数 据 输 出 是 由 于 RS-485/RS-422 在发送数据完成后,要求所有的发送使能控制信号关闭且保 持接收使能有效,此时,总线驱动器进入高阻状态且接收器能够监测总线上 是否有新的通信数据。但是由于此时总线处于无源驱动状态(若总线有终端 匹配电阻时,A 和 B 线的差分电平为 0,接收器的输出不确定,且对 AB 线 上的差分信号的变化很敏感;若无终端匹配,则总线处于高阻态,接收器的 输出不确定),容易受到外界的噪声干扰。当噪声电压超过输入信号门限时(典 型值±200mV),接收器将输出数据,导致对应的 UART 接收无效的数据,使 紧接着的正常通讯出错;另外一种情况可能发生在打开/关闭发送使能控制的 瞬间,使接收器输出信号,也会导致 UART 错误地接收。解决方法:1)在 通讯总线上采用同相输入端上拉(A 线)、反相输入端下拉(B 线)的方法对 总线进行钳位,保证接收器输出为固定的“1”电平;2)采用内置防故障模 式的 MAX308x 系列的接口产品替换该接口电路;3)通过软件方式消除,即 在通信数据包内增加 2-5 个起始同步字节,只有在满足同步头后才开始真正 的数据通讯。 3. 采用 RS-485/RS422 接口通讯时,在什么条件下需要采用终端匹配?电阻 值如何确定?如何配置终端匹配电阻? 在长线信号传输时,一般为了避免信号的反射和回波,需要在接收端接入终 端匹配电阻。其终端匹配电阻值取决于电缆的阻抗特性,与电缆的长度无关。 RS-485/RS-422 一般采用双绞线(屏蔽或非屏蔽)连接,终端电阻一般介于 100 至 140Ω之间,典型值为 120Ω。在实际配置时,在电缆的两个终端节点 上,即最近端和最远端,各接入一个终端电阻,而处于中间部分的节点则不 能接入终端电阻,否则将导致通讯出错。 4.为什么在 RS-485/RS-422 构成的通信网络中,传输数据包时经常出现多出 一个数据或少一个数据的现象? 一般在点-多点通信系统中会经常出现这个问题, 归纳出现的原因大致如下: 1) 在半双工通信中,一般可以通过禁止 RS-485 收发器接收使能或 UART 内部 的接收使能,以保证不出现自发自收,进而减少 CPU 的开销。当数据发送完 成后,RS-485 接收器和内部 UART 将回到允许接收状态而发送器将关闭,在 此状态切换过程中,可能出现 RS-485 接收器输出低电平跳变,而此时 UART 已经允许接收,从而导致多接收一个字节。 正确处理方法应该为:从接收状态向发送状态转换时,先禁止内部 UART 的 接收使能,再打开接口的发送器使能,然后,允许内部 UART 的发送使能, 开始发送数据;从发送状态向接收状态转换时,先禁止内部 UART 的发送使 能,再关闭接口的发送使能(如果接口的接收使能被禁止,则紧跟着打开接 口的接收使能),在延时 2 至 4 个 NOP 指令后,才打开内部 UART 的接收使
2)网络能力 RS-485 是一个多引出线接口,这个接口可以有多个驱动器和接受器,而 不是限制为两台设备。利用高阻抗接受器,一个 RS-485 连接可以最多有