485總線是一種常用的差分信號(hào)傳輸方式,它具有抗干擾能力強(qiáng)、傳輸距離遠(yuǎn)、節(jié)點(diǎn)數(shù)多等優(yōu)點(diǎn),廣泛應(yīng)用于通信、工業(yè)自動(dòng)化等領(lǐng)域。但是,在實(shí)際應(yīng)用中,我們可能會(huì)遇到一個(gè)問題,就是485總線是否需要在A和B兩條線上加上下拉電阻,以及加多大的電阻合適。
485總線是如何工作的?
首先,我們需要了解485總線的工作原理和信號(hào)特性。根據(jù)RS-485標(biāo)準(zhǔn),485總線是通過兩條線(A和B)來(lái)傳輸差分信號(hào)的,根據(jù)兩條線之間的電壓差來(lái)判斷的當(dāng)前數(shù)據(jù)位是0還是1。
485傳輸時(shí)的數(shù)據(jù)有三種狀態(tài):
1.當(dāng)A和B之間的電壓差VAB=UA-UB大于+200mV時(shí),485收發(fā)器輸出的邏輯為1;
2.當(dāng)A和B之間的電壓差VAB=UA-UB小于-200mV時(shí),485收發(fā)器輸出邏輯為0;
3.當(dāng)A和B之間的電壓差VAB=UA-UB在-200mV~+200mV之間時(shí),485收發(fā)器可能輸出高電平也可能輸出低電平,是一個(gè)不確定的狀態(tài)。
如何避免出現(xiàn)不確定狀態(tài)?
在正常情況下,我們希望接收器收到的數(shù)據(jù)只能是0或1,對(duì)于不確定的狀態(tài)是不能出現(xiàn)在485總線上的。那么,什么情況下會(huì)出現(xiàn)不確定的狀態(tài)呢?
主要有以下兩種情況:
1.當(dāng)485總線處于空閑狀態(tài)時(shí),所有的485收發(fā)器都處于接收狀態(tài),沒有任何一個(gè)收發(fā)器在驅(qū)動(dòng)總線時(shí)。此時(shí),由于沒有任何信號(hào)源在總線上產(chǎn)生差分電壓,A和B兩條線上的電壓基本相等,也就是說,差分電壓基本為0。
2.當(dāng)485總線處于開路狀態(tài)時(shí),也就是說,某個(gè)485收發(fā)器與總線斷開連接時(shí)。此時(shí),由于斷開連接的收發(fā)器不再對(duì)總線產(chǎn)生影響,其余收發(fā)器之間的差分電壓也基本為0。
當(dāng)485驅(qū)動(dòng)器輸出不足以使A、B產(chǎn)生絕對(duì)值大于200mV壓差時(shí),此時(shí)485總線信號(hào)狀態(tài)已經(jīng)不能反映驅(qū)動(dòng)器狀態(tài),接收器也無(wú)法識(shí)別正確信號(hào)。
3.當(dāng)485總線出現(xiàn)不確定的狀態(tài)時(shí),會(huì)導(dǎo)致通信錯(cuò)誤或失效。例如,如果某個(gè)485收發(fā)器在不確定狀態(tài)下認(rèn)為收到數(shù)據(jù)0信號(hào),向串口輸出低電平,那么對(duì)于UART通信來(lái)說,這就相當(dāng)于一個(gè)起始位(Start Bit),會(huì)引起誤判或誤碼;如果某個(gè)485收發(fā)器在不確定狀態(tài)下輸出高低電平交替變化,那么對(duì)于UART通信來(lái)說,就會(huì)干擾正常數(shù)據(jù),導(dǎo)致UART接收器收到異常數(shù)據(jù)。
為了防止485總線出現(xiàn)不確定的狀態(tài),我們根據(jù)這兩種異常分析,導(dǎo)致這兩種異常的原因都是當(dāng)收發(fā)器處于接收狀態(tài)時(shí),AB線上無(wú)法保持正常電壓差。要保持空閑或斷線的狀態(tài)下也能有正確的壓差,我們需要在A和B兩條線上加上下拉電阻(通常A接上拉電阻,B接下拉電阻),以保證總線在空閑或開路狀態(tài)下有一個(gè)固定的差分電壓。
那么,在選擇下拉電阻的大小時(shí),我們需要考慮哪些因素呢?主要有以下幾個(gè)方面:
1.上下拉電阻應(yīng)該足夠小,以保證空閑或開路狀態(tài)下的差分電壓大于+200mV或小于-200mV(根據(jù)具體情況選擇),從而避免不確定狀態(tài)。
2.上下拉電阻應(yīng)該足夠大,以減少功耗和熱量,同時(shí)不影響485收發(fā)器的驅(qū)動(dòng)能力和輸出電壓。
3.上下拉電阻應(yīng)該與485收發(fā)器的輸入阻抗、終端電阻、總線長(zhǎng)度、節(jié)點(diǎn)數(shù)等因素相匹配,以保證總線的阻抗匹配和信號(hào)完整性。
首先,我們針對(duì)收發(fā)器處于斷線的狀態(tài)時(shí),此時(shí)收發(fā)器A、B電壓由RU、RT、RD和RIN共同決定,即:
通常我們將RU和RD使用相同的值,則公式可簡(jiǎn)化為:
此時(shí),我們?cè)O(shè)芯片內(nèi)部差分輸入電阻RIN=15kΩ、VCC=3.3V且RT=120R,可以算出此時(shí),0Ω≤R≤239Ω,當(dāng)然只要R≤232.5kΩ都能滿足斷線情況下A、B線處于數(shù)據(jù)1狀態(tài)。
針對(duì)于空閑狀態(tài),考慮到大部分節(jié)點(diǎn)設(shè)備都會(huì)在A、B線上添加RU和RD電阻,且會(huì)在終端上增加RT電阻。
我們根據(jù)前面的推導(dǎo)過程可知,不同的只是因?yàn)樵黾庸?jié)點(diǎn)而增加的輸入電阻和上下拉電阻,所以我們根據(jù)上述電路可以推導(dǎo)出如下的公式:
在這個(gè)公式中,m為帶上下拉電阻的節(jié)點(diǎn)數(shù)量,n為節(jié)點(diǎn)數(shù)量??偩€A端和B端的差值我們定義為最小的200mA,這樣我們就可以將這個(gè)公式簡(jiǎn)化為:
有了這個(gè)公式就可以根據(jù)實(shí)際的節(jié)點(diǎn)數(shù)量來(lái)確定上下拉電阻的值。
然而根據(jù)這個(gè)公式計(jì)算出來(lái)的結(jié)果僅僅只是一個(gè)理想值,在實(shí)際使用中上下拉電阻一般都是在節(jié)點(diǎn)內(nèi)部確定了的。不同的節(jié)點(diǎn)設(shè)備,其內(nèi)部的上下拉電阻可能不同,我們需要考量節(jié)點(diǎn)的數(shù)量來(lái)考量這個(gè)電阻的值。要確定上下拉電阻的值還需要考慮驅(qū)動(dòng)芯片的帶載能力。不能將上下拉電阻設(shè)置得很小。
總之,485總線要在AB線上加上下拉電阻,主要是為了保證總線在空閑或開路狀態(tài)下有一個(gè)固定的差分電壓,從而避免不確定狀態(tài)導(dǎo)致的通信錯(cuò)誤或失效。在選擇下拉電阻的大小時(shí),需要綜合考慮功耗、驅(qū)動(dòng)能力、阻抗匹配等因素,以保證通信的穩(wěn)定性和可靠性。