RS485是一種常見(jiàn)的通訊接口方式,在我們的實(shí)際產(chǎn)品中也是多次使用。但我們平常并不會(huì)去過(guò)多考慮某一實(shí)現(xiàn)的細(xì)節(jié)問(wèn)題,不過(guò)最近我們遇到了一個(gè)因如上下拉電阻的選擇問(wèn)題而造成的通訊故障,所以在這一片中我們來(lái)討論一下RS485總線上下拉電阻的選擇問(wèn)題。
1、出現(xiàn)的問(wèn)題
前段時(shí)間在調(diào)試多個(gè)站點(diǎn)的Modbus通訊的時(shí)候出現(xiàn)了一個(gè)問(wèn)題。在擁有6個(gè)節(jié)點(diǎn)的RS485總線上,主站發(fā)送給從站的報(bào)文能夠成功接收,從站返回的報(bào)文主站卻是接收不到。后來(lái)額外添加了上拉下拉電阻后,通訊恢復(fù)正常。這讓我們注意到,上下拉電阻的選擇對(duì)RS485總線通訊的影響問(wèn)題。
首先,我們來(lái)看看為什么會(huì)有接收不到報(bào)文的情況。根據(jù)RS485總線的相關(guān)標(biāo)準(zhǔn),當(dāng)RS485總線差分電壓大于+200mV時(shí),RS485收發(fā)器輸出高電平;當(dāng)RS485總線差分電壓小于-200mV時(shí),RS485收發(fā)器輸出低電平;當(dāng)RS485總線上的電壓在-200mV~+200mV之間時(shí),RS485收發(fā)器可能輸出高電平也可能輸出低電平,但對(duì)于某一特定的節(jié)點(diǎn)總是處于一種電平狀態(tài),若RS485收發(fā)器的輸出處于低電平,這對(duì)于UART通信來(lái)說(shuō)是一個(gè)起始位,此時(shí)通信會(huì)不正常,自然我們就接收不到正確的報(bào)文了。
既然是因?yàn)镽S485總線上A端和B端的電壓差處于-200mV~+200mV之間而造成的錯(cuò)誤,那么有沒(méi)有辦法防止它處于-200mV~+200mV之間呢?當(dāng)然是有辦法的,那就是利用上拉下拉電阻來(lái)鉗位這一電壓差值。這就引出了另一個(gè)問(wèn)題,我們?cè)撊绾芜x擇適合的上拉下拉電阻呢?接下來(lái)我們將討論這個(gè)問(wèn)題。
2、分析問(wèn)題
既然我們確認(rèn)是上拉下拉電阻的匹配問(wèn)題,那接下來(lái)我們就來(lái)討論一下上拉下拉電阻的選擇問(wèn)題。我們先從簡(jiǎn)單的的情況入手,逐步的討論更復(fù)雜的網(wǎng)絡(luò)情況。首先我們來(lái)看一下只有兩個(gè)節(jié)點(diǎn)的RS485網(wǎng)絡(luò),如下圖所示:
在上圖的兩個(gè)節(jié)點(diǎn)的網(wǎng)絡(luò)中,我們規(guī)定兩端都有終端電阻,兩個(gè)節(jié)點(diǎn)所采用的收發(fā)器的輸入電阻相同,在總線中只有一個(gè)節(jié)點(diǎn)配置有上拉下拉電阻。我們根據(jù)電路中流入流出同一節(jié)點(diǎn)的電流是相同的原理,可以得到如下的兩個(gè)等式:
在我們?cè)O(shè)計(jì)RS485總線電路時(shí),如果添加有上拉和下拉電阻,我們一般會(huì)選擇相同的阻值,我們記為R。那么我們根據(jù)上面兩個(gè)等式可以推導(dǎo)出下的算式:
有了這個(gè)式子我們可以計(jì)算出上拉下拉電阻的大小。因?yàn)槲覀兗由侠吕娮璧哪康木褪潜WC總線A端和B端的電壓差能夠符合不小于200mA的要求。所以我們以總線A、B的電壓差200mA來(lái)計(jì)算就可以得到上拉下拉電阻的值。
上面我們推導(dǎo)了兩個(gè)節(jié)點(diǎn)的計(jì)算公式,但兩個(gè)節(jié)點(diǎn)只是最簡(jiǎn)單的情況,而總線上往往存在多個(gè)節(jié)點(diǎn)。所以接下來(lái)我們來(lái)討論總線上存在n個(gè)節(jié)點(diǎn),總線兩端存在終端電阻,每一個(gè)節(jié)點(diǎn)都擁有相同的輸入電阻,只有主節(jié)點(diǎn)存在上拉下拉電阻,如下圖所示:
我們根據(jù)前面的推導(dǎo)過(guò)程可知,不同的只是因?yàn)樵黾庸?jié)點(diǎn)而增加的輸入電阻,所以我們根據(jù)上述電路可以推導(dǎo)出如下的公式:
這一公式與兩個(gè)節(jié)點(diǎn)的公式相比僅僅只是輸入電阻部分并聯(lián)引起的變化。同樣的,我們可以依據(jù)總線A端和B端的電壓差不小于200mA的要求來(lái)計(jì)算上拉下拉電阻的阻值。
我們雖然推導(dǎo)了總線上有多個(gè)節(jié)點(diǎn)的計(jì)算公式,但我們只考慮了一個(gè)節(jié)點(diǎn)擁有上拉下拉電阻的情況。實(shí)際應(yīng)用中,可能存在總線上有多個(gè)節(jié)點(diǎn)存在上拉下拉電阻的情況,所以我們來(lái)討論一下所有節(jié)點(diǎn)均存在上拉下拉電阻的極限情況,如下圖所示:
從上圖,我們不難看出與前一種多節(jié)點(diǎn)通訊的區(qū)別只是上拉下拉電阻的數(shù)量出現(xiàn)了變化。為了簡(jiǎn)化推導(dǎo)過(guò)程,我們同樣假設(shè)每個(gè)節(jié)點(diǎn)擁有相同的上拉下拉電阻,以及同樣的上拉電源和地。采用相同的電路原理我們可得到如下的計(jì)算公式:
在這個(gè)公式中,n為節(jié)點(diǎn)的數(shù)量,總線A端和B端的差值我們定義為最小的200mA,這樣我們就可以將這個(gè)公式簡(jiǎn)化為:
到這里,我們就得到了比較具有使用價(jià)值的上拉下拉電阻阻值的計(jì)算公式了。我們只需要根據(jù)實(shí)際的總線使用情況選擇n的值和電源的值就可以得到我們想要的上下拉電阻值。不過(guò)有一個(gè)問(wèn)題需要注意,上下拉電阻的數(shù)量可能與節(jié)點(diǎn)的數(shù)量不同,但輸入電阻的數(shù)量與節(jié)點(diǎn)數(shù)量相同,所以計(jì)算時(shí)要注意n的取值問(wèn)題。
3、求解思路
我們已經(jīng)推導(dǎo)了一個(gè)具有應(yīng)用價(jià)值的上下拉電阻計(jì)算公式。接下來(lái)我們就來(lái)使用這一公式計(jì)算我們前面遇到的實(shí)際問(wèn)題。
在第1節(jié)中,我們提到了一個(gè)實(shí)際問(wèn)題,是一個(gè)具有6個(gè)節(jié)點(diǎn)的RS485總線,我們來(lái)計(jì)算一下這個(gè)實(shí)際事例中上拉下拉電阻該如何選擇。我們的主站采用的收發(fā)器是MAX3485,上拉下拉電阻選擇了普遍的4.7K歐姆電阻,上拉電源采用了3.3V電源。從節(jié)點(diǎn)為其他廠商產(chǎn)品,所采用的收發(fā)器為SP3485和SP485,我們只考慮主節(jié)點(diǎn)有上拉下拉電阻的情況。
從MAX3485和SP3485以及SP485的數(shù)據(jù)手冊(cè)我們可以查到輸入電阻均為12K歐姆。而在主站這邊添加了終端電阻,而總線上的其他從站均為添加終端電阻。所以我們就可以將這些數(shù)據(jù)帶入到上面的公式計(jì)算上拉下拉電阻:
于是我們很容易得到上拉下拉電阻的阻值約為903歐姆。這是在只有主節(jié)點(diǎn)有上拉下拉電阻的情況下,如果每個(gè)節(jié)點(diǎn)都有上拉下拉電阻呢?在這一情況下,所需的上拉下拉電阻要大得多,6個(gè)節(jié)點(diǎn)的話,約為5417歐姆。如果兩個(gè)終端都采用了終端電阻,則上拉下拉電阻需要更小一些,約為458歐姆左右。同樣如果6個(gè)節(jié)點(diǎn)均采用上拉下拉電阻,則上拉下拉電阻的值約為2749歐姆。一般在設(shè)計(jì)電路時(shí),我們均默認(rèn)所有節(jié)點(diǎn)均有上拉下拉電阻,在不能確認(rèn)最遠(yuǎn)端的距離及終端電阻時(shí),選用5K歐姆左右的電阻是合適的。
我們似乎解決了我們前面所遇到的問(wèn)題,但還有一種情形我們需要考慮,那就是總線上擁有最多節(jié)點(diǎn)的情況。一般來(lái)說(shuō),總線上能夠掛載多少個(gè)節(jié)點(diǎn)與采用的RS485收發(fā)器有關(guān)。同樣以我們常用的MAX3485和SP3485為例,其理論上可以掛載包括自己在內(nèi)的32個(gè)節(jié)點(diǎn),所以我們就以32個(gè)節(jié)點(diǎn)、所有節(jié)點(diǎn)均有上拉下拉電阻,兩端均有終端電阻為例來(lái)計(jì)算上拉下拉電阻的值。
我們可得到上拉下拉電阻的值約為13778歐姆,但這個(gè)值是一個(gè)極限值,我們并不能選用它,因?yàn)槲覀儾荒鼙WC所掛載的每個(gè)節(jié)點(diǎn)都配有上拉下拉電阻。所以我們?cè)倮?jì)算一下只有我們?cè)O(shè)計(jì)的主節(jié)點(diǎn)具有上拉下拉電阻的情況。這種情況下,上拉下拉電阻的值約為431歐姆。那是不是我們選用這個(gè)最小值就可以適應(yīng)總線掛載2到32個(gè)節(jié)點(diǎn)的所有情況了呢?很遺憾,并不是這樣的,還有其它的要求需要我們考慮。
前述只考慮了上下拉電阻對(duì)RS485通訊的積極影響,而沒(méi)有考慮上下拉電阻的選擇對(duì)RS485通訊的消極影響。這個(gè)消極影響就是上下拉電阻以及終端電阻會(huì)影響RS485收發(fā)器的帶載能力。因?yàn)楦鶕?jù)RS485標(biāo)準(zhǔn),收發(fā)器需要能夠提供不低于1.5V的差分輸出,此時(shí)對(duì)總線上A端與B端的差分負(fù)載要求為54歐姆。
我們一如前面的推導(dǎo)過(guò)程來(lái)歸納差模負(fù)載的計(jì)算公式。我們依然按所有節(jié)點(diǎn)的輸入電阻相同,上拉下拉電阻相同,終端電阻為兩端都有的極限情況來(lái)推導(dǎo)公式。首先我們推導(dǎo)總線A端和B端的共模負(fù)載,得到公式如下:
有了這個(gè)共模負(fù)載的計(jì)算公式,我們就可以推導(dǎo)出總線A端和B端差模負(fù)載的計(jì)算公式:
根據(jù)這個(gè)差模公式我們可以來(lái)核算一下總線對(duì)上拉下拉電阻的要求。我們以32個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)都使用了上拉下拉電阻,兩端均有終端電阻,差模負(fù)載為54歐姆。我們依然以MAX3485和SP3485為例,其輸入電阻為為12K歐姆,計(jì)算可得共模負(fù)載為270歐姆,而上拉下拉電阻約為30857歐姆。這是在假設(shè)32個(gè)節(jié)點(diǎn)均有上拉下拉電阻的情況下得到的,而我們能夠確保有上拉下拉電阻的只有主節(jié)點(diǎn),所以我們可以得到只有主節(jié)點(diǎn)有上拉下拉電阻時(shí),電阻值約為964歐姆。
所以綜合上述計(jì)算過(guò)程,為了MAX3485和SP3485在2到32個(gè)節(jié)點(diǎn)的情況下均可用,理論上我們需要選擇上拉下拉電阻的值大于964歐姆即可,但實(shí)際情況卻不見(jiàn)得如此,因?yàn)槠渌?jié)點(diǎn)也可能會(huì)采用上拉下拉電阻,所以上拉下拉電阻需要適當(dāng)?shù)倪x擇大一點(diǎn),才能保證通訊的可靠性。
4、不是結(jié)論
至此我們已經(jīng)完成RS485總線中上拉下拉電阻選擇的計(jì)算過(guò)程。但在實(shí)際使用中上下拉電阻的選擇要復(fù)雜的多,因?yàn)樗坏c所采用的收發(fā)器有關(guān),還與總線上的節(jié)點(diǎn)數(shù)量有關(guān)。收發(fā)器的輸入阻抗也決定了總線所能掛載節(jié)點(diǎn)的數(shù)量。如我們前述的MAX3485和SP3485兩種收發(fā)器,其輸入阻抗為12K歐姆,掛載32個(gè)節(jié)點(diǎn)時(shí),共模電阻只有375歐姆,這時(shí)候如果我們想要利用上拉下拉電阻來(lái)保證通訊可靠,已經(jīng)不會(huì)有太大效果了。所以象MAX3485和SP3485這種擁有單位負(fù)載阻抗的收發(fā)器,在電路設(shè)計(jì)時(shí)就需要考慮其掛載節(jié)點(diǎn)的數(shù)量。
我們?cè)谇懊娴挠懻撝?,有些條件是我們假定的,如我們默認(rèn)所有節(jié)點(diǎn)的輸入阻抗均為單位負(fù)載,但實(shí)際情況不一定如此,不同節(jié)點(diǎn)的輸入電阻可能不一定相等。在RS485標(biāo)準(zhǔn)中規(guī)定了單位負(fù)載,輸入電阻與節(jié)點(diǎn)的關(guān)系:
所以我們選擇輸入電阻為12K歐姆來(lái)計(jì)算實(shí)際上是極小值,所以不同節(jié)點(diǎn)的輸入電阻不相同也沒(méi)關(guān)系,更大的輸入電阻反而降低了驅(qū)動(dòng)要求。
在前面的討論中我們都是按兩端有終端電阻來(lái)計(jì)算的,在實(shí)際使用中可能并非兩端都存在終端電阻,甚至沒(méi)有終端電阻的情況。根據(jù)前面的公式,我們不難發(fā)現(xiàn)如果只有1端有終端電阻或者沒(méi)有終端電阻的情況下,對(duì)上下拉電阻的要求更低一些,上下拉電阻可以適當(dāng)增大,所以只要符合兩端帶終端電阻的情況,其它情形自然也可滿足。
還有在總線上,不同節(jié)點(diǎn)采用的上下拉電阻以及上拉電源并不一定相同。我們假定上拉電源為3.3V,實(shí)際已經(jīng)是很低的情況,如果用更高的上拉電源,對(duì)上拉電阻的要求反而更低,所以用3.3V計(jì)算是能符合所有使用情況的。而至于上下拉電阻不同節(jié)點(diǎn)可能不同的問(wèn)題,我們考慮的是最低情況,如果某一個(gè)或幾個(gè)節(jié)點(diǎn)采用更大的電阻,由于電阻的并聯(lián)作用,不會(huì)造成電阻更大的問(wèn)題,即可保證壓差限制,也能保證差分負(fù)載的要求。
審核編輯:劉清
-
上拉電阻
+關(guān)注
關(guān)注
5文章
360瀏覽量
30633 -
下拉電阻
+關(guān)注
關(guān)注
4文章
147瀏覽量
20541 -
RS485
+關(guān)注
關(guān)注
39文章
1161瀏覽量
82377 -
RS485接口
+關(guān)注
關(guān)注
2文章
62瀏覽量
14196 -
modbus通訊
+關(guān)注
關(guān)注
0文章
13瀏覽量
1702
原文標(biāo)題:RS485通訊上下拉電阻的選擇
文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論