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