485总线是一种常用的差分信号传输方式,它具有抗干扰能力强、传输距离远、节点数多等优点,广泛应用于通信、工业自动化等领域。但是,在实际应用中,我们可能会遇到一个问题,就是485总线是否需要在A和B两条线上加上下拉电阻,以及加多大的电阻合适。
485总线是如何工作的?
首先,我们需要了解485总线的工作原理和信号特性。根据RS-485标准,485总线是通过两条线(A和B)来传输差分信号的,根据两条线之间的电压差来判断的当前数据位是0还是1。
485传输时的数据有三种状态:
1.当A和B之间的电压差VAB=UA-UB大于+200mV时,485收发器输出的逻辑为1;
2.当A和B之间的电压差VAB=UA-UB小于-200mV时,485收发器输出逻辑为0;
3.当A和B之间的电压差VAB=UA-UB在-200mV~+200mV之间时,485收发器可能输出高电平也可能输出低电平,是一个不确定的状态。
如何避免出现不确定状态?
在正常情况下,我们希望接收器收到的数据只能是0或1,对于不确定的状态是不能出现在485总线上的。那么,什么情况下会出现不确定的状态呢?
主要有以下两种情况:
1.当485总线处于空闲状态时,所有的485收发器都处于接收状态,没有任何一个收发器在驱动总线时。此时,由于没有任何信号源在总线上产生差分电压,A和B两条线上的电压基本相等,也就是说,差分电压基本为0。
2.当485总线处于开路状态时,也就是说,某个485收发器与总线断开连接时。此时,由于断开连接的收发器不再对总线产生影响,其余收发器之间的差分电压也基本为0。
当485驱动器输出不足以使A、B产生绝对值大于200mV压差时,此时485总线信号状态已经不能反映驱动器状态,接收器也无法识别正确信号。
3.当485总线出现不确定的状态时,会导致通信错误或失效。例如,如果某个485收发器在不确定状态下认为收到数据0信号,向串口输出低电平,那么对于UART通信来说,这就相当于一个起始位(Start Bit),会引起误判或误码;如果某个485收发器在不确定状态下输出高低电平交替变化,那么对于UART通信来说,就会干扰正常数据,导致UART接收器收到异常数据。
为了防止485总线出现不确定的状态,我们根据这两种异常分析,导致这两种异常的原因都是当收发器处于接收状态时,AB线上无法保持正常电压差。要保持空闲或断线的状态下也能有正确的压差,我们需要在A和B两条线上加上下拉电阻(通常A接上拉电阻,B接下拉电阻),以保证总线在空闲或开路状态下有一个固定的差分电压。
那么,在选择下拉电阻的大小时,我们需要考虑哪些因素呢?主要有以下几个方面:
1.上下拉电阻应该足够小,以保证空闲或开路状态下的差分电压大于+200mV或小于-200mV(根据具体情况选择),从而避免不确定状态。
2.上下拉电阻应该足够大,以减少功耗和热量,同时不影响485收发器的驱动能力和输出电压。
3.上下拉电阻应该与485收发器的输入阻抗、终端电阻、总线长度、节点数等因素相匹配,以保证总线的阻抗匹配和信号完整性。
首先,我们针对收发器处于断线的状态时,此时收发器A、B电压由RU、RT、RD和RIN共同决定,即:
通常我们将RU和RD使用相同的值,则公式可简化为:
此时,我们设芯片内部差分输入电阻RIN=15kΩ、VCC=3.3V且RT=120R,可以算出此时,0Ω≤R≤239Ω,当然只要R≤232.5kΩ都能满足断线情况下A、B线处于数据1状态。
针对于空闲状态,考虑到大部分节点设备都会在A、B线上添加RU和RD电阻,且会在终端上增加RT电阻。
我们根据前面的推导过程可知,不同的只是因为增加节点而增加的输入电阻和上下拉电阻,所以我们根据上述电路可以推导出如下的公式:
在这个公式中,m为带上下拉电阻的节点数量,n为节点数量。总线A端和B端的差值我们定义为最小的200mA,这样我们就可以将这个公式简化为:
有了这个公式就可以根据实际的节点数量来确定上下拉电阻的值。
然而根据这个公式计算出来的结果仅仅只是一个理想值,在实际使用中上下拉电阻一般都是在节点内部确定了的。不同的节点设备,其内部的上下拉电阻可能不同,我们需要考量节点的数量来考量这个电阻的值。要确定上下拉电阻的值还需要考虑驱动芯片的带载能力。不能将上下拉电阻设置得很小。
总之,485总线要在AB线上加上下拉电阻,主要是为了保证总线在空闲或开路状态下有一个固定的差分电压,从而避免不确定状态导致的通信错误或失效。在选择下拉电阻的大小时,需要综合考虑功耗、驱动能力、阻抗匹配等因素,以保证通信的稳定性和可靠性。