• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 一種實現載波監聽多點接入/沖突檢測的多主RS485總線

    一種實現載波監聽多點接入/沖突檢測的多主RS485總線

    作者: 時間:2012-04-18 來源:網絡 收藏


    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協議,實現,邊發送邊監聽。也可以在此函數的基礎上進行諸如定義不同數據包的實時性級別、定義總線超時判斷等高級編程。

      該函數的主要流程如圖6。

      判斷總線狀態就是簡單地讀取總線狀態判斷電路的輸出,高為空閑,低為總線已被占用。為了減少誤判,通常在判斷總線狀態為空閑后還要繼續判斷一段時間,具體的總線狀態判斷策略要根據通信協議進行調整。

      如果判斷總線空閑,即可進行數據發送。在發送過程中可以方便地繼續讀取總線狀態以進行邊發送邊監聽的。一旦發現沖突發生,發送方放棄本次數據傳輸而轉入強化沖突流程(繼續發送幾個0x00以使各方都確認發生了總線沖突),然后再進入總線偵聽流程。以往的處理機制是通過對自己所發送的數據進行監聽接收,然后比較接收到的數據與發送的數據是否相符,判斷是否發生總線沖突,在軟件實現上比較復雜。而本系統的非常簡單:發送完一個字節就讀取一次總線狀態指示管腳的狀態,如果發現總線被占用,就是發生了總線沖突。

      接收程序方面,因為接收器常開,所以仍然可以使用串行接收器的中斷服務程序,將接收到的數據放入緩沖區,然后由命令解釋程序處理接收到的命令。本質上與RS232的串口通信程序完全一樣,只是如果接收器是常開的話,在自己發送數據時,要記住將串行接收器中斷關閉,發送完畢后再打開,以避免運行不必要的中斷服務程序。

      另外,還可以結合驅動器和總線狀態判斷邏輯對總線進行開路和短路的檢測/報警。具體說就是某一個節點使能總線驅動器,然后判斷總線狀態,如果仍然顯示總線空閑,說明總線短路或者總線到總線狀態判斷邏輯之間開路了。


    2.5 存在的不足之處

      該方法中的總線狀態判斷邏輯對邏輯0狀態的要求比較高,需要B線電平比A線高約1.1V才能得到低電平。如果采用總線判斷電路中的正向接收器的輸出端(OUT+)作為RXD信號,就會因為對邏輯0的要求而不滿足RS485的-200mV門限電平標準。若采用另一個具有故障保護功能的接收器并聯的話,固然能滿足-200mV門限電平標準,但整個節點的輸入阻抗將降低到6kΩ。

      以上不足之處都在于無法完全滿足標準標準,但在特定條件下是不會影響工作效果的。例如阻抗雖然降低了,但是當節點數不超過16時,是能夠很好地工作的。

      實驗表明,這種實現了CSMA/CD的多主式工作穩定,可靠性高,大大提高了實時性。特別適合于強調實時性的分布式控制系統,能夠方便地實現點與點之間的控制信息實時交換。


    上一頁 1 2 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 彭泽县| 常德市| 鲜城| 甘南县| 双桥区| 克什克腾旗| 宁蒗| 黑水县| 明星| 文登市| 陆川县| 江川县| 汉阴县| 祁连县| 平安县| 安康市| 长垣县| 越西县| 宕昌县| 武隆县| 敦化市| 尼勒克县| 彝良县| 宝鸡市| 凉城县| 宜宾县| 河北省| 河曲县| 家居| 三原县| 长岛县| 界首市| 新平| 内黄县| 南充市| 德兴市| 丘北县| 元阳县| 昂仁县| 凤庆县| 乐山市|