RS-485總線的方向控制如何實現(xiàn)?要注意什么?
A:準雙工模式的RS-485會涉及這一問題,對于對于4線制的RS-485,因為信號是單向傳輸?shù)?,不存在這樣的問題。因為準雙工要在一條總線上傳輸上行和下行的信號。要解決這個問題,分兩個方面考慮----我們在分析這個問題時將我們認識到的都寫進去,以便給大家提供一個電路設(shè)計時、考慮和分析處理問題的綜合參考,這也許不是很通用的范例,但對我們來說,有這樣的例子已經(jīng)是很滿足的“范例”了。值得提醒的是,部分同學(xué)可能認為高手很特別,其實不然,他們會的東西你可能早知道大概了,但他們手里的知道與多少存在點生疏的情況相比,他們的知識比較活而有序,而你的比較散亂而無序,象一盤散沙,多與他們交流,你很快就會發(fā)現(xiàn)自己離高手的差距并不大,只是在應(yīng)用上,時不時出現(xiàn)這個想不到那個想不到。他們能這樣是靠積累得來的,靠自己的磨練出來的。你付出了同樣的勞動,應(yīng)該不難趕上和超過他們。
本文引用地址:http://m.butianyuan.cn/article/201612/330159.htm一、注意事項----設(shè)計電路前要考慮什么問題?
存在這樣的問題的位置有2處:收發(fā)節(jié)點和線路中繼器。為了防止驅(qū)動器沖突,必須考慮方向控制的問題。如圖,理論上有接收優(yōu)先和發(fā)送優(yōu)先方法。如圖1中的上和下的兩個接法,是接收優(yōu)先的方法。所謂接收優(yōu)先,就是如果處于接收狀態(tài),硬件電路自動關(guān)閉發(fā)送功能;反之,如果電路處于發(fā)送狀態(tài)下硬件電路自動關(guān)閉接收功能,甚至可以關(guān)斷接收器進行發(fā)送,那么就是發(fā)送優(yōu)先。
事實上,發(fā)送優(yōu)先的方法是不可行的,但人們往往最先想到采用這種方法。因為如果電路存在接收數(shù)據(jù)的時候已經(jīng)說明其它節(jié)點的驅(qū)動器也在工作,如果這時強行發(fā)送數(shù)據(jù)不但會自己的數(shù)據(jù)發(fā)送不成還會破壞其它節(jié)點正在發(fā)送的數(shù)據(jù)。因此,對于兩線制的RS-485來說,只能采取接收優(yōu)先的方法。這是用RS-485做信號雙向傳輸時首先要注意的問題。
另一個問題是要注意RS-485的定義和數(shù)據(jù)的形式:線路側(cè)和設(shè)備側(cè),有效數(shù)據(jù)都是低電平而不是高電平,這是RS-485的定義所決定的。如圖2,發(fā)送器和接收器兩部分都如此。(如需了解為什么要選擇是低電平有效,請參閱“Q115.數(shù)字電路為什么是低電平有效的多?”)。數(shù)據(jù)形式是不可以控制的,如連續(xù)或間斷地出現(xiàn)0或1,在此期間,接收器不能因為一時的電平轉(zhuǎn)換就釋放總線給發(fā)送器,以便讓接收器可以收到連結(jié)的1(通常0沒有問題,因為我們考慮問題就是從它開始的)。
二、如何實施?
表面上接收優(yōu)先很容易實現(xiàn),但實際上要考慮的問題并不是那么簡單的。我們下面把文件寫長一點,逐個將問題加以細剖。
1 目標及對目標的理解
如果線路收發(fā)器有單片機,問題比較容易解決,方向控制由節(jié)點主機的I/O實施控制就是了。不過,這并不是絕對沒有問題。畢竟它也要處理時間。我們現(xiàn)在的目標是最大限度的避免軟件控制而使用硬件控制,并適合線路中繼器沒有單片機支持的要求。
如果節(jié)點類似于中繼器性質(zhì),那么就不會再有單片機支持。這時,只有依靠硬件實現(xiàn)。純硬件實現(xiàn),可以避開軟件問題,工作可靠性和對線路數(shù)據(jù)的破壞性要下降。因此,下面我們重點分析討論這個問題。
如圖1,我們已經(jīng)否定了中間一個圖的發(fā)送優(yōu)先方式----狠狠地給它打一個叉叉!那么,剩下的雙向轉(zhuǎn)發(fā)電路還是已經(jīng)是否完善了?觀察發(fā)現(xiàn),當線路處于空閑狀態(tài)或一旦輸出高電平時,所有接收器都將被鎖定在高電平輸出----所有的接收器都處于被禁止狀態(tài)而沒有一個可以能被打開----無論此時線路上A、B端是高電平還是低電平,都不能為接收器所接收。與此同時,此時的驅(qū)動器是全部打開的。不論4腳的電平是高或是低,都被直接送出線路A、B上,這樣是無論哪個節(jié)點都在“發(fā)送”數(shù)據(jù),因而,也無論哪個節(jié)點也發(fā)送不了數(shù)據(jù)!可見,圖1的方法過于簡單,不能使用,只能作為一種原理性思路。
2 基本思路----了解矛盾的要點
從上述分析可以發(fā)現(xiàn),不論接收器輸出高電平還是低電平,都要關(guān)閉驅(qū)動器才能保證接收不被發(fā)送器的輸出干擾與破壞總線上的數(shù)據(jù)。要做到這點,似乎很矛盾。但我們也知道,總線上必定要有空閑時間的,不然就不能正常傳輸數(shù)據(jù)了。如何識別正在傳輸高電平(數(shù)據(jù)1狀態(tài))和空閑狀態(tài)并利用兩者的差異來解決所面臨的問題,既是我們要解決的矛盾,也是我們現(xiàn)在的設(shè)計任務(wù)。為了在這種看上去很矛盾的情況下達到我們的目的,我們先進行電路狀態(tài)確認:
- 發(fā)送器的屏蔽----為了在不發(fā)送數(shù)據(jù)時不管總線是真正空閑或是連續(xù)處于發(fā)送1的假空閑狀態(tài)、正在接收0的真占用狀態(tài),控制電路仍然使發(fā)送功能處于關(guān)閉狀態(tài)(被屏蔽);
- 發(fā)送器的開啟----而只有在確認不是正在接收數(shù)據(jù)時再通過“發(fā)送控制”信號來撒銷對發(fā)送功能的屏蔽就是電路要實現(xiàn)的功能----體現(xiàn)了完全的接收優(yōu)先的前提;
- 防止數(shù)據(jù)倒灌----當然,發(fā)送時數(shù)據(jù)不能倒灌回來(發(fā)送時,接收控制端必須為低電平)。如若不然,自己發(fā)送的低電平信號反過來鎖死發(fā)送器就無法“發(fā)送”數(shù)據(jù)了。
- 狀態(tài)控制小結(jié)----只有在節(jié)點確認數(shù)據(jù)線空閑后再主動去開啟驅(qū)動器并占用總線。具體上可從數(shù)據(jù)的特點下手:總線上是不會連續(xù)多次發(fā)送全1或全0的數(shù)據(jù)的,因此,如果利用這一特點作為觸發(fā)事件,每次給總線以一定的占用時間t就可以解決問題。硬件上能實現(xiàn)這個要求的就是單穩(wěn)態(tài)觸發(fā)器。
3 換向控制
現(xiàn)在讓我們的看看圈圈設(shè)計的一個電路(圖3)----這個電路是他改了幾次后出來的,電路在工作上有單穩(wěn)態(tài)電路的特點,電路圖如圖3所示。詳見通訊技術(shù)的帖子“請教:rs485的方向控制一般怎么實現(xiàn)”(因本篇跟蹤此帖進行修改,故而標題就那樣起了)。圈圈的這個圖,除了參數(shù)需要調(diào)整外,原理是基本上可行的,目前的問題是(不管是不是高速傳輸),可能因觸發(fā)開通時間影響導(dǎo)致最早發(fā)送數(shù)據(jù)丟失或損壞(因為C1和R3是有時間常數(shù)的,雖然充電時是經(jīng)過Q1進行,時間很短,但不能不考慮數(shù)據(jù)被破壞的可能。稍后詳之。)。原理/邏輯上,如果不考慮接收高電平數(shù)據(jù),Q2和Q4還可以省去。電路中最值得注意的是R2的設(shè)置比較妙,它是一個“軟”下拉電阻:在C2的維持下,即使存在持續(xù)接收高電平時有“發(fā)送”信號,也由于Q3的大電流作用而屏蔽了Tx信號的下拉。這個電路,開始看C2是多余的,但注意到存在連續(xù)高電平的數(shù)據(jù)后就能明白少不了它。只是它的取值比較困難----既要考慮維持連續(xù)接收高電平時通過Q2為Q3提供電流,也要考慮時間常數(shù)的問題。另外,僅僅從接收器來看,C1是多余的,但它同樣存在連續(xù)發(fā)送高電平數(shù)據(jù)的問題,因此不能少。好在C1和C2的時間常數(shù)并不耦合,具有相互獨立性,因此,調(diào)試還是比較容易些。
從以上分析看出,完善電路的接收控制后,最關(guān)鍵的問題是C1和R3處DE(高電平數(shù)據(jù)發(fā)送使能)和/RE(低電平數(shù)據(jù)接收使能)引腳的電平問題,即充電時間受制于Q1的導(dǎo)通電阻,應(yīng)當因此而帶來的一些影響。
總的來看,真正傳輸數(shù)據(jù)前先打開驅(qū)動器的條件不應(yīng)改變,只有這樣才能保證數(shù)據(jù)可靠地傳輸(按常規(guī)就是這樣做的)?,F(xiàn)在的問題是:打開驅(qū)動器的時間總是要占用時間的,要求還必須是低電平,高電平不起任何作用。同時,直接用數(shù)據(jù)打開驅(qū)動器是不可取的,這樣做有損壞數(shù)據(jù)的危險。因此,可以這樣說,設(shè)計思路上與使用I/O口先打開DE再發(fā)送數(shù)據(jù)的思路是一樣的。為了達到不需要I/O干預(yù),那么就需要使用專門的開啟代碼機制解決吧。
通過線與讓I/O控制先送出開啟電平來開啟驅(qū)動器比之由數(shù)據(jù)線先送一個字節(jié)開啟代碼相對簡單,雖然電路稍為復(fù)雜一些,但不對接收方識別提出要求。線與的方法優(yōu)點是之一占用時間少又類似常規(guī)機制;第二個優(yōu)點是節(jié)省光耦,即在線路采用光隔離措施時能與數(shù)據(jù)線共用一個光耦。但必須在發(fā)送真正的數(shù)據(jù)前及時退出。為了及時準確控制,感覺用單穩(wěn)態(tài)觸發(fā)器為好。圖3的電路,影響時間常數(shù)的主要因素是數(shù)據(jù)速率。速率高,時間常數(shù)要小些,速率低,時間常數(shù)要大些。調(diào)試相對難是這個電路的不一定的不足。不過,要注意這個電路的兩個時間常數(shù)并不相同,原因是C2要經(jīng)過Q4的發(fā)射結(jié)放電,而C1不存在這樣的問題。該電路的不足還有收發(fā)控制電平不是數(shù)字信號而是模擬信號。
編輯中……
參見圖2的真值表。只要把SN75LBC184的2、3腳接到1腳就可以實現(xiàn)自動實現(xiàn)方向控制了。這時,要求控制器能夠自動偵測線路空閑狀態(tài)。只有在到總線空閑一定的時間后才能實施自己的數(shù)據(jù)發(fā)送(由波特率決定)。
為了解決這個問題,可以按圖3的方法進行,圖1只能作為理解接收優(yōu)先的簡易電路看待。
圖1 75LBC184雙向傳輸.gif
圖2
圖3 RS-485的雙向傳輸之換向控制.jpg
編輯中
評論