一、RS485通訊介紹,RS485通訊網絡
RS232接口是一種用于近距離(最大30-60米)、慢速度、點對點通訊的通訊協(xié)議,在RS232中一個信號只用到一條信號線,采取與地電壓參考的方式,因而在長距離傳輸后,發(fā)送端和接收端地電壓有出入,容易造成通訊出錯或速度降低。
RS485/422接口采用不同的方式:每個信號都采用雙絞線(兩根信號線)傳送,兩條線間的電壓差用于表示數(shù)字信號。例如把雙絞線中的一根標為 A(正),另一根標為B(負),當A為正電壓(通常為+5V),B為負電壓時(通常為0),表示信號“1”;反之,A為負電壓,B為正電壓時表示信號 “0”。RS485/422允許通訊距離可達到1200米,采用合適的電路可達到2.5MB/s的傳輸速率。
RS422與RS485采用相同的通訊協(xié)議,但有所不同:它采用兩根雙絞線,數(shù)據(jù)可以同時雙向傳遞(全雙工)。 而RS485則采用一根雙絞線,輸入輸出信號不能同時進行(半雙工),RS485可用于多點通訊,一條信號線上可連接多個設備,它通常采用主/從結構。
在RS485(半雙工)通信中,發(fā)送信號時,由TXD輸出的TTL電平信號經RS485轉換器轉換后,從發(fā)送器(A和B)輸出RS485信號;接收信號時,RS485信號經接收器(A和B)接收后,然后RS485轉換器將信號轉換為TTL電平信號,傳給RXD。(注意:2個需要通訊設備之間是各有一個RS485轉換器,并不是它們的信號只經過了一個RS485轉換器就成功通訊了)
在RS422(全雙工)通信中,因信號的輸入和輸出分開,所以需要兩根雙絞線來傳送輸入和輸出信號,標為A、B、Y、Z(A為輸入信號的正極,B為輸入信 號的負極,Y為輸出信號的正極,Z為輸出信號的負極)。發(fā)送信號時,由TXD輸出的TTL電平信號經RS422轉換器后,從發(fā)送器(Y和Z)輸出RS485/RS422 信號;接收信號時,RS485/RS422信號經接收器(A和B)接收后,RS422轉換器將信號轉換為TTL電平信號,傳給串口的RXD。
圖1:DM系列RS485/RS422接口轉換器原理圖(半雙工)
圖2:DM系列RS485/RS422接口轉換器原理圖(全雙工)
以上圖片只是貼出了一半的接線圖,這里給出一張多機通訊的RS485接線原理圖(半雙工)
二、典型接法
DM485的輸出端最多可以連接256個RS485接口,其典型接法如圖3(半雙工)和圖4(全雙工)所示。在最遠的兩個終端上,輸入和輸出端之間各需接 上一個120歐姆的電阻。在RS485/RS422的接口連接時,甲接口的輸出端接乙接口的輸入端,雙絞線的正極接正極,負極接負極;甲接口的輸入端接乙 接口的輸出端,雙絞線的正極接正極,負極接負極。
三、注意事項
1、在長距離傳輸中,一定要使用用雙絞線
2、多終端傳輸時,距離最遠的兩個終端上,輸入和輸出端之間一定連接120歐姆的電阻。
補充:我不知道為什么那么多的資料都沒有說明RS485通信發(fā)送和接收數(shù)據(jù)時的細節(jié),都只說2根線就能發(fā)送和接收數(shù)據(jù)??? 注意:485芯片有個控制端,控制端高電平時候為接收數(shù)據(jù),低電平時候為發(fā)送數(shù)據(jù)。而我們在實際項目開發(fā)的時候,在使用RS485通信時,如果自己的電路并沒有設計成RS485硬件自收發(fā)切換的電路,則需要自己控制485的收發(fā)使能引腳。即發(fā)送數(shù)據(jù)時,需要拉低485芯片控制端的IO口;相反接收數(shù)據(jù)時,需要拉高控制端的IO口。
需要自己控制收發(fā)的485芯片原理圖:
控制策略:UART_CON為低電平,485處于接收狀態(tài);UART_CON為高電平,485處于發(fā)送狀態(tài)。通過切換UART_CON的電平來達到485收發(fā)狀態(tài)的切換。
485芯片硬件自動收發(fā)切換電路:
接收:默認沒有數(shù)據(jù)時,在接收數(shù)據(jù)的過程中,TXD引腳是一直保持高電平的,三極管導通,RE低電平使能,485芯片處于接收狀態(tài),然后485芯片的RO引腳(也就是接RXD的引腳)就會反應AB傳輸過來的數(shù)據(jù)。
發(fā)送:發(fā)送數(shù)據(jù)時,TX會先有一個下拉的電平(起始位-由高向低),表示開始發(fā)送數(shù)據(jù),此時三極管截止,DE為高電平發(fā)送使能。當發(fā)送數(shù)據(jù)“0”時,由于DI接口相當于接地,此時數(shù)據(jù)“0”就會傳輸?shù)紸B扣,A-B<0,則傳輸“0”,完成低電平傳輸,當發(fā)送“1”時,此時三極管導通,RE變?yōu)榈碗娖剑蠢碚f會讓接收使能,但是由于還處于發(fā)送數(shù)據(jù)中,這種狀態(tài)下MAX485處于高阻態(tài),此時的狀態(tài)通過A上拉電阻(R5),B下拉電阻(R4)決定,此時A-B>0傳輸“1”,完成高電平的傳輸。
注意:這里面有個疑惑,發(fā)送數(shù)據(jù)“1”,三極管RE低電平有效,應該是接收使能,為什么芯片是高阻態(tài)呢?這是因為UART發(fā)送數(shù)據(jù)是有一定格式的,TX和RX數(shù)據(jù)均以“位”為最小單位進行傳輸,在發(fā)送數(shù)據(jù)之前,UART之間要約定好數(shù)據(jù)傳輸速率,即波特率,數(shù)據(jù)傳輸格式(數(shù)據(jù)位,校驗,停止),平時數(shù)據(jù)線處于空閑狀態(tài)(1狀態(tài)),當發(fā)送數(shù)據(jù)時,TX由“1”變?yōu)椤?”維持1位的時間,這樣接收方檢測到開始位后,再等待1.5位時間就開始一位一位的進行數(shù)據(jù)傳輸了,也就是說,已經確定好發(fā)送狀態(tài),電路發(fā)送“1”時RE雖然有效,但是由于它處于發(fā)送階段,芯片也不會收,即芯片處于高阻狀態(tài)。