轉(zhuǎn)自 | 記得城
RS-485在很多場景都有,特別是在一些工業(yè)設(shè)備中,本文帶你深入理解RS-485的原理。
▉ RS-485概述
RS-485和RS-232一樣,都是串行通信標(biāo)準(zhǔn),現(xiàn)在的標(biāo)準(zhǔn)名稱是TIA485/EIA-485-A,但是人們會習(xí)慣稱為RS-485標(biāo)準(zhǔn),RS-485常用在工業(yè)、自動化、汽車和建筑物管理等領(lǐng)域。
RS-485總線彌補(bǔ)了RS-232通信距離短,速率低的缺點(diǎn),RS-485的速率可高達(dá)10Mbit/s,理論通訊距離可達(dá)1200米;RS-485和RS-232的單端傳輸不一樣,是差分傳輸,使用一對雙絞線,其中一根線定義為A,另一個定義為B。
雙絞線
▉ RS-485物理層
RS-485的物理層負(fù)責(zé)在設(shè)備和物理傳輸介質(zhì)之間傳輸原始數(shù)據(jù)。它處理電信號到數(shù)字?jǐn)?shù)據(jù)的轉(zhuǎn)換,同時定義電壓、時序、數(shù)據(jù)速率等。
① 差分信號
長距離布線會有信號衰減,而且引入噪聲和干擾的可能性更大,在線纜A和B上的表現(xiàn)就是電壓幅度的變化,但是,采用差分線的好處就是,差值相減就會忽略掉干擾依舊能輸出正常的信號,把這種差分接收器忽略兩條信號線上相同電壓的能力稱為共模抑制。
標(biāo)準(zhǔn)規(guī)定了,邏輯1:+2V to +6V;邏輯0:-6V to -2V。
RS-485不需要使用特定的總線電壓,只看最小差分電壓,在較長的電纜長度上,接收器接收到的電壓可能會降低到+/- 200 mV,這對于RS-485仍然是完全可以接受的,這也是RS-485的優(yōu)點(diǎn)之一。
很多收發(fā)器的標(biāo)準(zhǔn)達(dá)到甚至超過TIA/EIA-485A規(guī)范,在實(shí)際使用中,以器件的SPEC參數(shù)為主,如下某收發(fā)器的負(fù)輸入閾值最小也是-200mV。
② 信號定義
現(xiàn)在很多的RS-485轉(zhuǎn)換器都是兼容RS-422的,所以看到很多轉(zhuǎn)換器上面的信號都是T/R+、T/R-,即對應(yīng)RS-485的A+和B-。
對于DB9針型的母頭,RS-485有如下的接線定義示意,Pin6~Pin9為N/A不接。
|
DB9 |
輸出信號 |
RS-422全雙工接線 |
RS-485半雙工接線 |
|
1 |
T/R+ |
發(fā)(A+) |
RS-485(A+) |
| 2 |
T/R- |
發(fā)(B-) |
RS-485(B-) |
| 3 |
RXD+ |
收(A+) |
空 |
|
4 |
RXD- |
收(B-) |
空 |
|
5 |
GND |
地線 |
地線 |
③ 拓?fù)浣Y(jié)構(gòu)
RS485有兩線制和四線制兩種接線,四線制只能實(shí)現(xiàn)點(diǎn)對點(diǎn)的通信方式,現(xiàn)很少采用,多采用的是兩線制接線方式,這種接線方式為總線拓?fù)浣Y(jié)構(gòu),在同一總線上最多可以掛接32個節(jié)點(diǎn)。
RS-485總線同I2C,也是主從模式,支持點(diǎn)對點(diǎn)單從機(jī)模式,也支持多從機(jī)模式,不支持多主機(jī)模式。
▉ RS-485收發(fā)器
RS-485是差分傳輸,如果用單片機(jī)控制RS-485接口的設(shè)備,需要用到收發(fā)器,這一點(diǎn)和CAN總線是類似的,如下是一個MCU控制一個RS-485的圖示。
收發(fā)器內(nèi)部是一個接收器(上半部分)加一個發(fā)送器(下半部分),下面簡單說說收發(fā)器的原理,便于理解MCU是如何和485設(shè)備通信的。
RS-485收發(fā)器內(nèi)部結(jié)構(gòu)
其中:
-
A和B為總線;
-
R為接收器輸入;
-
RE為接收器使能信號;
-
DE為發(fā)送器使能信號;
-
D為發(fā)送器輸出;
對于使能信號,字母上面加一橫的為低電平有效(如上圖RE),不加的為高電平有效(如DE)。
對于發(fā)送器,有如下的真值表:
1、當(dāng)驅(qū)動器使能引腳DE為邏輯高時,差分輸出A和B遵循數(shù)據(jù)輸入D處的邏輯狀態(tài)。D處的邏輯高導(dǎo)致A轉(zhuǎn)為高,B轉(zhuǎn)為低。在這種情況下,定義為VOD=VA-VB的差分輸出電壓為正。當(dāng)D為低時,輸出狀態(tài)反轉(zhuǎn),B變高,A變低,VOD為負(fù)。
2、當(dāng)DE低時,兩個輸出都變成高阻抗。在這種情況下,與D處的邏輯狀態(tài)是不相關(guān)的。
發(fā)送器真值表
對于接收器,有如下的真值表:
1、當(dāng)接收器使能引腳RE邏輯低時,接收器被激活。當(dāng)定義為VID=VA–VB的差分輸入電壓為正且高于正輸入閾值VIT+時,接收機(jī)輸出R變高。當(dāng)VID為負(fù)且低于負(fù)輸入閾值VIT-,接收機(jī)輸出R變低。如果VID在VIT+和VIT-之間,則輸出不確定。
2、當(dāng)RE為邏輯高或懸空時,接收機(jī)輸出為高阻抗,VID的大小和極性無關(guān)。
接收器真值表
▉ RS-485數(shù)據(jù)鏈路
上面講到的RS-485收發(fā)器的工作原理,下面簡單描述RS-485的數(shù)據(jù)鏈路,可以先看一下通俗易懂的UART協(xié)議幀格式
主機(jī)發(fā)送給從機(jī)或者從機(jī)發(fā)送給主機(jī),都會占用到A和B線,所以RS-485多用在半雙工模式。
主機(jī)的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ā)器后,主機(jī)立即將收發(fā)器的模式切換為接收模式。
從機(jī)和主機(jī)是類似的,從機(jī)控制RS-485收發(fā)器的/RE管腳,設(shè)置為接收模式,接收主機(jī)發(fā)送的比特流,將其轉(zhuǎn)換為單端信號,通過從機(jī)的UART RXD線接收,當(dāng)從機(jī)準(zhǔn)備好響應(yīng)時,它按主機(jī)原來的方式進(jìn)行發(fā)送,而主機(jī)變?yōu)榻邮铡?br />
▉ RS-232和RS-485轉(zhuǎn)換
RS-232和RS-485之間可以轉(zhuǎn)換,一個方法是RS-232轉(zhuǎn)換成TTL,再由TTL轉(zhuǎn)換為RS-485,當(dāng)然也有芯片支持將RS-232直接轉(zhuǎn)換成RS-485,網(wǎng)上有很多模塊。
RS-232和RS-485轉(zhuǎn)換模塊
▉ RS-485和CAN的區(qū)別
雖說RS-485沒有標(biāo)準(zhǔn)的數(shù)據(jù)協(xié)議格式,但和CAN總線在很多地方是有相似的,比如A&B和CANH&CANL都是差分信號,通信都需要收發(fā)器,都需要120歐姆的匹配電阻等等。
|
總線特性 |
CAN總線 | RS-485總線 |
|
硬件成本 |
稍高 |
低廉 |
|
總線利用率 |
優(yōu)先級自動仲裁,利用率高 | 采用輪詢,利用率低 |
|
數(shù)據(jù)傳輸率 |
高 |
低 |
|
錯誤檢測機(jī)制 |
控制器帶校驗(yàn)機(jī)制,保證底層數(shù)據(jù)傳輸正確 | 只有物理層規(guī)范,無數(shù)據(jù)鏈路層規(guī)定 |
|
單節(jié)點(diǎn)故障影響 |
總線無影響 | 總線癱瘓 |
|
開發(fā)成本 |
軟件開發(fā)靈活,時間成本低 | 開發(fā)難度較大 |
|
系統(tǒng)成本 |
較低 |
高 |
▉ RS-485常用電路
網(wǎng)上找的一個常用的RS-485電路,其中需要注意兩點(diǎn):
1、使能信號RE和DE可采用一個GPIO控制,節(jié)省資源,GPIO25輸出高電平,RE=DE=0V,進(jìn)入接收模式;GPIO25輸出低電平,RE=DE=3.3V,進(jìn)入發(fā)送模式。
2、有一些電路中會在A上加上拉,B上加下拉電阻,主要原因是:RS-485總線在idle狀態(tài),電平是不固定的,即電平在-200mV~+200mV之間,收發(fā)器可能輸出高也可能輸出低,UART在空閑時需要保持高電平的,如果此時收發(fā)器輸出一個低電平,對UART來說是一個start bit,會導(dǎo)致通信異常,關(guān)于Ru和Rd的阻值在這里不作過多贅述,后面有機(jī)會會詳細(xì)寫一篇文章。
關(guān)于第二點(diǎn),需要注意:
① A上加上拉,B上加下拉,接反數(shù)據(jù)通信也可能出錯。
② 某些收發(fā)器內(nèi)部集成上下拉電阻,則外部不需要再添加。





