起源
RS-485即Recommended Standard 485 協議的簡寫。1983年被電子工業協會(EIA)批準為一種通訊接口標準.
數據在通信雙方之間傳輸,本質是傳輸物理的電平,比方說傳輸5V的電壓 -1V的電壓信號,這些物理信號在傳輸過程中會受到很多干擾,比方說你傳輸一個5V的電壓,到了接收端可能就變成了4.8V,并且通信的雙方高低電平的參考電壓可能不同。
那么這個時候就需要一個電平標準,來判斷多少V的電壓是高電平 1,多少V的電壓是低電平 0,這就誕生了 RS-485 RS-232
485接口常用的協議:工業HART總線協議;modbus協議;Profibus DP
信號傳輸模式
信號通過一組雙絞線差模傳輸,源端發出的信號+與信號-相位是相反的,可以有效抵消共模干擾。
電氣參數
電壓范圍為-7~+12V
半雙工通信
最多總線支持256個多點拓撲連接(取決于IC驅動能力),最后面一個接120歐終端電阻。
傳輸1200米時,速率最大到100kbps
最小差分電壓容限:200mV,低于該值則無法識別通訊。
信號A在空閑時候為高電平;信號B在空閑時為低電平。(有的設備上會標識485_A+,485_B-)
應用設計
拓撲結構
發送終端和接收終端是主從結構,主機可以和任何從機通信,讀寫。從機之間不可以通信,從機的狀態也是需要主機輪詢方式來讀取。
通常為兩種結構:
星型結構:所有的設備連接到一個中心點上,中心點一般為主機。此拓撲結構適用于設備數量少,且分布較近的場景。
總線型結構:所有設備連接到同一根總線上,形成一條直線。所有設備均通過總線通信。此拓撲結構適用于數量較多或分布較遠的場景。
端接設計
端接就是在最終端設備上接一個120Ω的電阻來達到匹配阻抗特征的目的。
標準規定的雙絞線的差分特征阻抗在100Ω至150Ω之間,由于RS-485采用雙絞線傳輸,RS-485標準制定者選擇120Ω作為標稱特征阻抗。
如果沒有端接。信號在線路上傳輸其阻抗是連續的,但是到達右側的時候則,等效阻抗變成了接收電路的輸入阻抗,比如是12kΩ(標準可掛載32個設備的驅動IC阻值),阻抗不連續了,信號的一部分能量就會按照原路徑返回,如返回回去的信號由于容抗及感抗,就會產生相差。反射回去的信號與原信號就會被疊加在一起。這樣就會造成通信發生錯誤的可能,嚴重的時候,通信就無法正確進行。這時候就需要在最終端接一個120Ω電阻(如下圖左邊所示)。
在通信環境比較差的情況下,共模干擾嚴重,可以考慮采用帶屏蔽雙絞線,屏蔽層接大地,
也可以在終端接一組π型的阻容的低通濾波結構(兩個60Ω電阻中間接一個220pF電容)來增加線路的抗噪聲能力。(如下圖右邊所示)
抗干擾設計
市面上485常見于3Pin端口(485A,485B,GND)。通常只是簡單地用一對雙絞線將各個接口的“A”、“B”端連接起來。對于E不接的大多數場景均能正常工作,對于以下兩種場景則會出現問題。
-
485收發器共模電壓范圍為-7~+12V,當感應電壓加載在共模電壓上,超過范圍就會損壞電路。
-
EMI問題:發送驅動器輸出信號中的共模部分需要一個返回通路,如沒有一個低阻的返回通道(信號地),就會以輻射的形式返回源端,整個總線就會像一個巨大的天線向外輻射電磁波。
隔離設計
現場有大電流開關設備,電機感性設備等,噪聲很可通過通訊的接地耦合進設備,在工業設備中尤其明顯。
所以會采用通訊隔離和電源隔離的設計。
通訊隔離設計
選擇具有隔離功能的芯片,比如ADI的 iCoupler技術產品ADM2481,ADM2485。
也可以采用光耦+普通RS-485收發器的方式,光耦必須要用高速的,低速光耦在高速率下容易丟包。
電源隔離設計
給隔離兩側電路分別供電,兩側的gnd不能直連,可串一個瓷片電容。
安全防護
A、B端串聯保險
接口的信號電平值較高,達到十幾V,容易損壞接口電路的芯片,而且和TTL電平不兼容,因此和單片機電路接起來的話必須加轉換電路。
防雷接口設計
需要在485的A、B連接氣體放電管用以防雷。
IC驅動能力
物理條件下一條485總線上節點數量是有上限的。
一條485總線上節點數量的限制條件是:有源驅動器的總電流負載,485總線負載電阻Rload不能大于375歐姆。
通常是用單位負載來衡量RS485總線驅動能力的,單位負載的定義則是根據標準的485總線接收器的輸入阻抗(12KΩ)來定義的,標準的RS485總線能夠驅動32個單位負載(即32個12KΩ并聯)。
為了能讓一條總線上掛載更多的設備,一些485接收器的輸入阻抗為48Kohm(1/4 unit load)或者是96Kohm(1/8 unit load),那么相應的總線可掛接的節點數分別為128個和256個。
另外,不同輸入阻抗的485接收器可以連接在一起,只要保證并聯輸入阻抗不能超過32個單位負載(即總線負載Rload<=375 Ω),通訊環境不好的情況下需要在最終端設備掛載終端電阻 120 Ω,用來改善總線上的匹配電阻。
IC的驅動能力
IC型號 | 掛載能力(個) | 單價(元) |
SP3285/SP3481 | 32 | |
SP485R | 400 | |
P485R | 400 | |
SN75176B | 32 | |
SP3485EN-L/TR | 32 | 1.2 |
THVD1500 /1510/1550 | 256 | |
MAX1483 | 256 | 1.5 |
WS3088 | 256 | 1.5 |
MAX3085 | 256 | 1.5 |
故而一般的協議,一根總線上最多掛載256個設備(地址碼決定了)。但還有另一種方法就是更改波特率,將在同一總線上的設備改為不同的波特率(1200,2400,4800,9600,19200),就可以允許相同的地址號,設備不同,增加掛載節點數。
IC傳輸方向的使能
由于485為半雙工通信,當主機發送數據時,數據沿著雙絞線傳輸至從機的差分接收電路。當從機發送數據時,數據沿著雙絞線傳輸至主機機的差分電路電路。所有的數據均是差分傳輸并且傳輸介質僅為一條雙絞線,所以在同一時間內數據只會流經一個方向。
通信IC芯片上有兩個使能腳,RE# 和DE。
RE#: Receiver Output Enable,接收器使能,
DE:Driver Output Enable,驅動輸出使能
當兩個使能腳并聯時,可以只通過一個IO來控制數據的傳輸方向(RE為低使能,DE為高使能)。
當兩個使能腳分別控制時(DE=1,RE=0),這樣可以實現發送和接收數據的閉環,常見于主機設備。可以實現收發器以及布線的自診斷,通過接收到的報文與發送出去的報文比較,診斷出芯片焊接,收發器是否損壞或者斷路,以及布線是否存在短路故障。
IC傳輸方向自動切換電路
RS485_RX為高時,SS8050導通,RE/DE接地,進入接收模式;
RS485_RX為低時,SS8050關閉,RE/DE拉高,進入發送模式;
按5V,3082收發芯片來計算的話,100k,0.1μ的電容,時間常數=10mS
High-level input voltage (D, DE, or RE inputs), VIH 2 VCC V
Low-level input voltage (D, DE, or RE inputs), VIL 0 0.8 V
從發送完到不再占用總線,也就是DE降到2V以下,需要9mS。
從發送完到開始接收總線上的數據,也就是RE降到0.8V以下,需要18mS。
所以,在波特率不低于100bps的情況下,看起來不錯。就是怕叢機回數據太快,你的芯片還沒進入接收狀態導致丟數據。
說得好
R10、C8要視情況減小,比如取10K、1nF,盡量小,用示波器看數據線波形,只要有個陡翹的推挽輸出邊沿即可,輸出AB波形大致是這樣:
一、RS485方向切換的方案1:使用反相器自動切換
大部分的低成本RS232-RS485轉換器采用了這種方法。具體的實現方法是:把串口的發送信號TX作為反相器的輸入,反相器的輸出則用來控制RS485收發器的收發控制引腳,同時在RS485收發器的A/B輸出端加上上拉/下拉電阻,
使用反相器自動切換電路
在空閑狀態下,串口的發送信號TXD為高電平,經過反相器后輸出低電平,使485芯片處于接收狀態,而RS485總線由于上下拉電阻的作用處于A高B低的狀態。當發送數據時,TXD信號線上的低電平比特位控制485芯片進入發送狀態,將該比特發送出去。而高電平比特位則使485芯片處于接收狀態,由于RS485總線上下拉電阻把總線置于A高B低的狀態,即表示發送了高電平。
簡單說,這種電路,就是發送低電平時,485芯片是 發送狀態,而發送高電平時,485芯片屬于接收狀態。
優勢:
只需要增加一個反相器就可以實現,無需軟件的干預,反相器可以使用一個三極管即可以實現,成本十分低廉(幾分錢);
劣勢:
由于上下拉電阻不可能選值太小,否則會影響正常發送的數據電平。所以這種換向模式在發送高電平時的驅動能力,并且,理論上我要求方向引腳要比數據先切換方向,但是由于方向引腳經過了反相器,達到芯片的時間變長了,比數據晚到,所以速率太高的情況容易丟包。如果需要驅動多個從設備,就會顯得力不從心,并且驅動能力太弱,只能短距離傳輸;并且傳輸速度不能太快,一般使用9600bps。
RS485方向切換的方案3:使用觸發器控制方向
為了克服反相器換向的缺點,出現了一種由RS觸發器控制的自動換向技術,如圖5所示。這個電路的關鍵是反相器和RS觸發器之間的由二極管、電阻、電容組成的充放電電路。在空閑狀態下,485芯片仍處于接收狀態。
當TXD信號線上發送數據的低電平起始位時,反相器輸出高電平,通過二極管為電容迅速充電,使RS觸發器R端為高電平,S端為低電平,觸發器輸出高電平,把ISL3152E置于發送狀態;當TXD信號線轉換為高電平時,反相器輸出低電平,電容通過電阻緩慢放電,使得R端暫時仍處于高電平狀態,加上S端的高電平狀態,使觸發器的輸出保持前面的高電平狀態,485芯片仍處于發送狀態。電容經過一段時間放電后,R端電壓轉變為低電平,則觸發器輸出低電平,把485芯片置回接收狀態。
通過選擇電阻和電容值,我們可以控制放電速度,使得一個低電平的起始位足以在整個字節發送。此類方案參數一致性非常差,實際使用的都是技高人膽大的。
優勢:
·無需軟件干預切換方向,驅動能力強(取決于RS485芯片)。
劣勢:
·增加的器件較多;
·不同的波特率需要匹配不同的RC參數
·溫度、老化、一致性等問題,會導致RC參數變化,從而導致切換時間錯亂導致丟包。
四、RS485方向切換的方案4:max13487芯片
為了克服軟件參與的方向控制不確定性,美信公司發布了宣稱首款支持芯片自動換向的RS485芯片,如下圖6,對比其他的RS485芯片,MAX16487的/RE引腳有兩個用于:
·/RE為低電平時,打開RO方向的接收數據。
·/RE為高電平時,芯片進入自動方向切換模式。
一般使用我們將/RE連接高電平,即自動換向模式。
由于美信沒有公布內部的邏輯原理,只描述內部有一個狀態機,我們只能外部猜測其工作原理:
·空閑模式下,數據流方向為RO方向;此為狀態1;
·當串口端有數據發送時,由于起始位為低電平,經過邏輯功能D后,A<B,經過COM
·邏輯功能且反相后,RI為高電平。此狀態為數據發送狀態2。
·經過一系列的邏輯運算(以RI、DI為輸入,但是不知道其內部的原理);狀態機檢測到數據發送完畢,芯片變成接收狀態1。
優勢:
· 由芯片自動切換方向,無需軟件干預切換方向,驅動能力強,通信速率高,MAX13488 宣稱最高可以到16Mbps,與普通的RS485芯片性能一樣。
劣勢:
·價格比普通的RS485芯片貴一倍以上。
RS485方向切換的方案5:周立功芯片RSM(3)485PHT
周立功公司將RS485的三個相關的功能模塊:DC電源、隔離、RS485芯片三合一,封裝在同一個芯片內部,由于沒有內部的資料,我們無法獲知其內部的邏輯功能。官方資料宣稱最高速率可以達到500Kbps,對于一般的應用足以。
優勢:
由芯片自動切換方向,無需軟件干預切換方向,驅動能力強,通信速率高,DC電源、隔離、RS485芯片功能三合一,節省板卡空間。
劣勢:
價格比分立器件搭建RS485電路貴,且一旦損害需要要整體更換。
二、RS485方向切換的方案2:使用軟件控制方向
市面上大部分的內置RS485的產品基本都是采用此類的方案,如下圖4中的RS_EN引腳。具體的 實現方式是:在空閑器件,RS_EN 為低電平,MCU處于接收狀態,在準備發送數據之前,MCU會拉高RS_EN,U1處于發送狀態,發送完畢之后,RS_EN重新處于低電平,U1處于接收狀態。
圖4 使用軟件控制方向切換
此類方案的關鍵是軟件需要掌握好RS_EN引腳的高低電平的時機,假設發送完數據后,沒有及時切換到接收狀態,而此時從機又回復數據,此時就會引起丟包,就會出現文章開頭圖2中的情形。不幸的時,軟件工程師的水平參差不齊,特別是在運行操作系統(Linux、WIndows等)以后,想要十分準確控制方向引腳的高低電平已經十分困難。
優勢:
無需增加任何的硬件成本,且RS485的驅動能力不受影響。
劣勢:
依賴于軟件控制方向引腳,如果運行復雜的操作系統,控制引腳的優先級不夠高,或者軟件的優化的不夠好,都會導致方向引腳的切換不及時,到時數據的丟包。并且,是否丟包還取決于從機的回復時間,測試過程不一定能夠測試出來。
通訊不通排查方法
排查串口端
- 串口端口號是否被占用
- 串口參數是否正確(波特率、校驗位、數據位、停止位)
- 串口硬件是否損壞(短接tx rx,看接收發送是否一致)
- 更換一個串口軟件
排查總線
- A、B兩端是否短路
- A、B兩端總電阻是否<375 Ω
- 共模干擾加載在信號線上,超出芯片逞能能力,接上屏蔽
- 示波器看下信號線的波形
- 電源干擾,電源沒接地線,波紋進設備。
- 外殼地線帶電或者沒接好導致干擾
其他
- 232轉接器可能供電不足,換有源轉接器
- 波特率過高,從機發送不及時造成誤碼率過高。降低波特率。