基于RS485總線的單片機對等網絡的設計與實現
1 引 言
本文引用地址:http://www.104case.com/article/172121.htm隨著自動控制技術的應用和發展,控制系統越來越復雜。單片機的應用系統已從單機逐漸向多機聯網的方向發展,如:數據采集、消防、門禁、消費等控制系統,這就需要單片機之間或單片機與微機之間組成網絡以進行相互通信。現有的各種總線產品,如基金總線(FF)、LonWorks總線、ProfiBus總線、 HART總線及CAN總線等,雖然各有特色,但由于其兼容性差、造價高、維護不便等方面的原因,未能得到普遍應用。
RS485總線作為一種簡易、廉價的通信技術,其收發器采用平衡驅動和差分接收,具有抑制共模干擾的能力。RS485接收器靈敏度可達±200 mV,因而大大提高了通信距離。在100 kb/s速率下電纜長度可達1 200 m,如果通信距離縮短,最大速率更可達10 Mb/s。RS485總線上允許帶多個驅動器和接收器,最新的收發器可帶128個節點,用于構建多點通信網絡。由于RS485總線具有設備簡單、價格低廉、能進行長距離通信的特點,故在工程中得到了廣泛應用。
通常在RS485總線產品的應用中,都采用主從控制方式,即由1臺微機或1臺單片機作為主機,其余的作為從機。主機和從機之間可以直接進行通信,從機之間要進行通信時必須通過主機。通信方式則由主機采取輪詢的方式對各從機進行查詢。這種方式使軟件的設計大為簡化,但也帶來很多弊端。
(1)由于采取主機輪詢方式進行通信,因此,通信的吞吐量較低,不適用于通信量要求較大,或平均通信量較低,但呈突發式的場合,如:消費系統、考勤系統等。
(2)由于采取主機輪詢方式進行通信,因此,系統較大時,實時性較差。
(3)由于采取主機輪詢方式進行通信,主機在不停地查詢各從機,每個從機都必須對主機的查詢作出響應,以決定是否對該機進行通信,這樣,勢必增加各從機的系統開銷。
(4)當從機之間需要進行通信時,必須通過主機,增加了從機間通信的難度。
針對主從式網絡的這些缺點,本文提出一種采用RS485總線的單片機對等網絡的設計方法。在這種網絡中,各節點(單片機)之間沒有主從之分,是完全吞吐量大而且靈活。最后給出了該網絡的C51語言實現方法。
2 網絡原理
在主從式網絡中,信道由主機進行控制,不存在競爭信道的問題。在對等式網絡中則不同,由于每個節點均可根據自己的需要隨時發送信息,必然會競爭使用信道,因此,如何合理分配信道的使用權就成為對等式網絡的關鍵問題。與計算機網絡[1]類似,解決信道分配問題可采用靜態分配方案和動態分配方案。在靜態分配方案中,時分多路復用TDMA(TimeDivision Multiple Access)是常用的方法,在TDMA中,時間被均分為N段時隙,每個節點靜態的占用一個。如果每個節點都能充分利用自己的時隙發送數據,該方案是十分靈活而高效的。
然而,實際中有些節點數據很多,時隙不夠用,而有些節點數據卻很少,不能充分利用分配給他的時隙而使這段時間被閑置。因此,信道靜態分配方案不能有效地處理通信的突發性。在動態分配方案中,帶沖突檢測的載波偵聽多路訪問CSMA/CD(carrier sensemultiple access with collision detection)協議是常用的方法。
該協議中,當一個節點要發送數據時,他首先偵聽信道,看是否有其他節點正在發送。若沒有其他節點在發送,他就開始發送,否則,等待一個隨機的時間后,重復上述過程。當2個節點偵聽到信道空閑并同時開始傳送時,必然會產生沖突,此時,他們幾乎將同時檢測到沖突,一旦檢測到沖突,不是繼續傳完他們的幀,而是盡快停止,這樣既節省了時間又節省了頻帶。在等待一個隨機的時間后,重新開始上述的發送過程。
CSMA/CD能有效地解決通信的突發性。在負載較低時,欲發送數據的節點能立即發送,負載較重時,也可保證通信的穩定,本文中將采用該協議來實現網絡通信。
3 硬件電路設計
實現CSMA/CD協議的關鍵是載波偵聽和沖突檢測。這就要求每個節點能夠接收所有節點傳送過來的數據,包括他自己。
在RS485總線組成的網絡中,由于單片機串口為TTL電平,需要通過485專用收發芯片,完成電平轉換及數據收發。這里選用較常用的 SN75176。該芯片內將3態差分線驅動器和差分輸入線接收器結合在一起。驅動器和接收器分別具有高電平有效和低電平有效使能端,如圖1所示。在主從式網絡中,一般將驅動器和接收器的使能端連接在一起以便起方向控制的作用,使收發器工作于半雙工狀態。在這里收發器必須工作于全雙工狀態,以便節點能接收到自己發出的信息。因此,將接收器的使能端接低電平,而驅動器的使能端則由單片機的IO口控制,平時為低電平,釋放總線,要發送數據時則轉換為高電平。這樣構成的單片機對等網絡如圖2所示。
4 軟件實現
本文采用Franklin C51來實現CSMA/CD網絡協議。用C語言來編寫單片機目標系統軟件可縮短開發周期,增加軟件的可讀性,便于改進和擴充,從而研制出規模更大,性能更完備的系統[2]。
系統中設置定時器0作為延時計時器,他有兩組延時參數。一組用于偵聽網絡是否空閑。每次接收中斷時,給定時器0重裝延時參數,并設置網絡忙標志。該參數的值應保證在正常的數據發送時,定時器不會溢出。這樣,若有節點正在發送數據,定時器0將被反復重裝,并設置網絡忙標志。若所有節點停止發送數據,定時器將溢出,此時,停止計時并清除網絡忙標志,表示網絡空閑。發送程序檢測到該標志,即可開始發送數據。發送程序每發送1 B數據時,將該數據存入一個臨時變量中。此時,接收程序同時也會接收到一個數據,將接收到的數據與臨時變量中的數據進行比較,若相等,表示數據發送成功,否則,表示發生沖突,此時立即停止發送,并給定時器0設置一個隨機延時值,延時結束后重復上述過程。實現以上算法的C51程序如下[3]:
5 結 語
本文設計了一個基于RS485總線的單片機對等網絡,并用C51語言實現了該網絡。與常用的主從式的單片機網絡相比,對等網絡具有數據吞吐量大、節點與節點間可直接通信的特點,因此,特別適合通信量大、通信呈突發式或節點間通信頻繁的場合。該網絡已在門禁系統中實際應用。實踐表明,該方法是十分有效而靈活的。
參考文獻
[1]AndrewS.Tanenbaum計算機網絡[M].第3版.北京:清華大學出版社,1998.
[2]馬忠梅.單片機的C語言應用程序設計[M].修訂版.北京:北京航空航天出版社,1999.
[3]KeilC51使用技巧及實踐[DB].
評論