一種實現載波監聽多點接入/沖突檢測的多主RS485總線
2.1 系統框圖
系統由總線狀態判斷邏輯、驅動器自動切換邏輯兩部分組成,如圖3所示。系統資源只占用CPU的3個管腳:RXD、TXD、總線狀態指示腳,不占用任何中斷。在軟件實現方面由于采用了硬件判斷總線狀態而變得非常簡單,只需要對標準的232通信程序做微小修改即可。
2.2 總線狀態判斷邏輯
該電路由雙RS485總線接收器構成,兩個接收器的輸出相與后得到總線狀態信號。偏置電阻網絡的對稱形式使得在總線沒有被驅動的情況下,兩條總線的電平相等。總線狀態判斷邏輯如圖4所示。由于接收器的兩個接入點電平不同,所以當總線處于高阻狀態或者總線被短路時,兩個接收器都是高電平輸出,總線狀態為高電平。因為A、B線通過6.8kΩ電阻分別接入兩個接收器的不同接收端,所以當總線出現任何一個確定的邏輯狀態時,都將引起其中一個接收器的輸出變為低電平,這樣總線狀態就變為低電平,表明總線被占用。經過理論計算和EWB仿真,該網絡從A、B點看接入阻抗為12.2kΩ,恰好滿足RS485協議的接收器輸入阻抗要求。 2.3 驅動器無延遲自動切換邏輯 為了實現驅動器的無延遲自動切換,TXD信號反相后接到驅動器使能,而驅動器輸入直接接地,如圖5所示。這樣處理使驅動器只在數據為0時打開,把數據0發出去。而當數據為1或者無數據時立刻關閉,縮短了切換時間。但是這樣做,使得數據1無法被正常發送出去。為使串行數據能被正確地接收,有兩個辦法產生數據中的1。第一個辦法,使用總線判斷電路中的正向接收器的輸出端?穴OUT+?雪作為RXD信號,該信號在總線空閑、開路和短路時輸出邏輯1,并且與RXD信號同相。第二個辦法,使用類似MAX3080自帶故障保護(fail-safe)功能的芯片作為接收器。MAX3080將接收器的觸發門限電壓從-200mv~+200mv調整為-200mv~-50mv,也能夠在總線空閑、開路和短路時輸出邏輯1。如果總線上的每一個節點都使用這些方法,那么所有節點都可以實現驅動器無延遲自動切換而不必擔心數據中的1不能被正確接收。 2.4 軟件的實現 發送數據方面,只需將標準串口函數putc()封裝成一個函數RS485PutString()發送數據即可。在RS485PutString()函數中,能夠方便地實現各種總線狀態判斷策略,甚至是CSMA/CD協議,實現載波監聽,邊發送邊監聽。也可以在此函數的基礎上進行諸如定義不同數據包的實時性級別、定義總線超時判斷等高級編程。
評論