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