RS-485是差分傳輸,如果用單片機控制RS-485接口的設(shè)備,需要用到收發(fā)器,這一點和CAN總線是類似的,如下是一個MCU控制一個RS-485的圖示。
圖1
收發(fā)器內(nèi)部是一個接收器(上半部分)加一個發(fā)送器(下半部分),下面簡單說說收發(fā)器的原理,便于理解MCU是如何和485設(shè)備通信的。
圖2 RS-485收發(fā)器內(nèi)部結(jié)構(gòu)
其中:
A和B為總線;
R為接收器輸入;
RE為接收器使能信號;
DE為發(fā)送器使能信號;
D為發(fā)送器輸出;
對于使能信號,字母上面加一橫的為低電平有效(如上圖RE),不加的為高電平有效(如DE)。
對于發(fā)送器,有如下的真值表:
當驅(qū)動器使能引腳DE為邏輯高時,差分輸出A和B遵循數(shù)據(jù)輸入D處的邏輯狀態(tài)。D處的邏輯高導(dǎo)致A轉(zhuǎn)為高,B轉(zhuǎn)為低。在這種情況下,定義為VOD=VA-VB的差分輸出電壓為正。當D為低時,輸出狀態(tài)反轉(zhuǎn),B變高,A變低,VOD為負。
當DE低時,兩個輸出都變成高阻抗。在這種情況下,與D處的邏輯狀態(tài)是不相關(guān)的。
圖3 發(fā)送器真值表
對于接收器,有如下的真值表:
當接收器使能引腳RE邏輯低時,接收器被激活。當定義為VID=VA–VB的差分輸入電壓為正且高于正輸入閾值VIT+時,接收機輸出R變高。當VID為負且低于負輸入閾值VIT-,接收機輸出R變低。如果VID在VIT+和VIT-之間,則輸出不確定。
當RE為邏輯高或懸空時,接收機輸出為高阻抗,VID的大小和極性無關(guān)。
圖4 接收器真值表
**2 **RS-485數(shù)據(jù)鏈路
上面講到的RS-485收發(fā)器的工作原理,下面簡單描述RS-485的數(shù)據(jù)鏈路。
圖5
主機發(fā)送給從機或者從機發(fā)送給主機,都會占用到A和B線,所以RS-485多用在半雙工模式。
主機的GPIO會控制RS-485收發(fā)器的DE管腳,設(shè)置發(fā)送模式,從UART TXD線向RS-485收發(fā)器的數(shù)據(jù)(D或DI)線發(fā)送一個字節(jié),收發(fā)器將在A和B線上將單端UART位流轉(zhuǎn)換為差分位流,數(shù)據(jù)離開收發(fā)器后,主機立即將收發(fā)器的模式切換為接收模式。
從機和主機是類似的,從機控制RS-485收發(fā)器的/RE管腳,設(shè)置為接收模式,接收主機發(fā)送的比特流,將其轉(zhuǎn)換為單端信號,通過從機的UART RXD線接收,當從機準備好響應(yīng)時,它按主機原來的方式進行發(fā)送,而主機變?yōu)榻邮铡?/p>
**3 **RS-232和RS-485轉(zhuǎn)換
RS-232和RS-485之間可以轉(zhuǎn)換,一個方法是RS-232轉(zhuǎn)換成TTL,再由TTL轉(zhuǎn)換為RS-485,當然也有芯片支持將RS-232直接轉(zhuǎn)換成RS-485,網(wǎng)上有很多模塊。
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可用于多點通訊,一條信號線上可連接多個設(shè)備,它通常采用主/從結(jié)構(gòu)。
在RS485(半雙工)通信中, 發(fā)送信號時,由TXD輸出的TTL電平信號經(jīng)RS485轉(zhuǎn)換器轉(zhuǎn)換后,從發(fā)送器(A和B)輸出RS485信號;接收信號時,RS485信號經(jīng)接收器(A和B)接收后,然后RS485轉(zhuǎn)換器將信號轉(zhuǎn)換為TTL電平信號,傳給RXD 。(注意: 2個需要通訊設(shè)備之間是各有一個RS485轉(zhuǎn)換器 , 并不是它們的信號只經(jīng)過了一個RS485轉(zhuǎn)換器就成功通訊了 )
圖7
在RS422(全雙工)通信中,因信號的輸入和輸出分開,所以需要兩根雙絞線來傳送輸入和輸出信號,標為A、B、Y、Z(A為輸入信號的正極,B為輸入信 號的負極,Y為輸出信號的正極,Z為輸出信號的負極)。發(fā)送信號時,由TXD輸出的TTL電平信號經(jīng)RS422轉(zhuǎn)換器后,從發(fā)送器(Y和Z)輸出RS485/RS422 信號;接收信號時,RS485/RS422信號經(jīng)接收器(A和B)接收后,RS422轉(zhuǎn)換器將信號轉(zhuǎn)換為TTL電平信號,傳給串口的RXD。
圖8:DM系列RS485/RS422接口轉(zhuǎn)換器原理圖(半雙工)
圖9:DM系列RS485/RS422接口轉(zhuǎn)換器原理圖(全雙工)
以上圖片只是貼出了一半的接線圖,這里給出一張多機通訊的RS485接線原理圖(半雙工)
圖10
典型接法
DM485的輸出端最多可以連接256個RS485接口,其典型接法如圖3(半雙工)和圖4(全雙工)所示。在最遠的兩個終端上,輸入和輸出端之間各需接 上一個120歐姆的電阻。在RS485/RS422的接口連接時,甲接口的輸出端接乙接口的輸入端,雙絞線的正極接正極,負極接負極;甲接口的輸入端接乙 接口的輸出端,雙絞線的正極接正極,負極接負極。
圖11
圖12
注意事項
1、在長距離傳輸中,一定要使用用雙絞線
2、多終端傳輸時,距離最遠的兩個終端上,輸入和輸出端之間一定連接120歐姆的電阻。
補充:我不知道為什么那么多的資料都沒有說明RS485通信發(fā)送和接收數(shù)據(jù)時的細節(jié),都只說2根線就能發(fā)送和接收數(shù)據(jù)?注意:485芯片有個控制端,控制端高電平時候為接收數(shù)據(jù),低電平時候為發(fā)送數(shù)據(jù)。而我們在實際項目開發(fā)的時候,在使用RS485通信時,如果自己的電路并沒有設(shè)計成RS485硬件自收發(fā)切換的電路,則需要自己控制485的收發(fā)使能引腳。即發(fā)送數(shù)據(jù)時,需要拉低485芯片控制端的IO口;相反接收數(shù)據(jù)時,需要拉高控制端的IO口。
需要自己控制收發(fā)的485芯片原理圖:
圖13
控制策略:UART_CON為低電平,485處于接收狀態(tài);UART_CON為高電平,485處于發(fā)送狀態(tài)。通過切換UART_CON的電平來達到485收發(fā)狀態(tài)的切換。
485芯片硬件自動收發(fā)切換電路:
圖14
接收:默認沒有數(shù)據(jù)時,在接收數(shù)據(jù)的過程中,TXD引腳是一直保持高電平的,三極管導(dǎo)通,RE低電平使能,485芯片處于接收狀態(tài),然后485芯片的RO引腳(也就是接RXD的引腳)就會反應(yīng)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”時,此時三極管導(dǎo)通,RE變?yōu)榈碗娖?,按理說會讓接收使能,但是由于還處于發(fā)送數(shù)據(jù)中,這種狀態(tài)下MAX485處于高阻態(tài),此時的狀態(tài)通過A上拉電阻(R5),B下拉電阻(R4)決定,此時A-B>0傳輸“1”,完成高電平的傳輸。
注意:這里面有個疑惑,發(fā)送數(shù)據(jù)“1”,三極管RE低電平有效,應(yīng)該是接收使能,為什么芯片是高阻態(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ù)傳輸了,也就是說,已經(jīng)確定好發(fā)送狀態(tài),電路發(fā)送“1”時RE雖然有效,但是由于它處于發(fā)送階段,芯片也不會收,即芯片處于高阻狀態(tài)。
**5 **RS-485和CAN的區(qū)別
雖說RS-485沒有標準的數(shù)據(jù)協(xié)議格式,但和CAN總線在很多地方是有相似的,比如A&B和CANH&CANL都是差分信號,通信都需要收發(fā)器,都需要120歐姆的匹配電阻等等。
**6 **RS-485常用電路
網(wǎng)上找的一個常用的RS-485電路,其中需要注意兩點:
圖15
1)使能信號RE和DE可采用一個GPIO控制,節(jié)省資源,GPIO25輸出高電平,RE=DE=0V,進入接收模式;GPIO25輸出低電平,RE=DE=3.3V,進入發(fā)送模式。
2)有一些電路中會在A上加上拉,B上加下拉電阻,主要原因是:RS-485總線在idle狀態(tài),電平是不固定的,即電平在-200mV~+200mV之間,收發(fā)器可能輸出高也可能輸出低,UART在空閑時需要保持高電平的,如果此時收發(fā)器輸出一個低電平,對UART來說是一個start bit,會導(dǎo)致通信異常。
評論