RS485是一种常见的通讯接口方式,在我们的实际产品中也是多次使用。但我们平常并不会去过多考虑某一实现的细节问题,不过最近我们遇到了一个因如上下拉电阻的选择问题而造成的通讯故障,所以在这一片中我们来讨论一下RS485总线上下拉电阻的选择问题。
1、出现的问题
前段时间在调试多个站点的Modbus通讯的时候出现了一个问题。在拥有6个节点的RS485总线上,主站发送给从站的报文能够成功接收,从站返回的报文主站却是接收不到。后来额外添加了上拉下拉电阻后,通讯恢复正常。这让我们注意到,上下拉电阻的选择对RS485总线通讯的影响问题。
首先,我们来看看为什么会有接收不到报文的情况。根据RS485总线的相关标准,当RS485总线差分电压大于+200mV时,RS485收发器输出高电平;当RS485总线差分电压小于-200mV时,RS485收发器输出低电平;当RS485总线上的电压在-200mV~+200mV之间时,RS485收发器可能输出高电平也可能输出低电平,但对于某一特定的节点总是处于一种电平状态,若RS485收发器的输出处于低电平,这对于UART通信来说是一个起始位,此时通信会不正常,自然我们就接收不到正确的报文了。
既然是因为RS485总线上A端和B端的电压差处于-200mV~+200mV之间而造成的错误,那么有没有办法防止它处于-200mV~+200mV之间呢?当然是有办法的,那就是利用上拉下拉电阻来钳位这一电压差值。这就引出了另一个问题,我们该如何选择适合的上拉下拉电阻呢?接下来我们将讨论这个问题。
2、分析问题
既然我们确认是上拉下拉电阻的匹配问题,那接下来我们就来讨论一下上拉下拉电阻的选择问题。我们先从简单的的情况入手,逐步的讨论更复杂的网络情况。首先我们来看一下只有两个节点的RS485网络,如下图所示:
在上图的两个节点的网络中,我们规定两端都有终端电阻,两个节点所采用的收发器的输入电阻相