新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 關于RS485接收發送數據的時序討論

        關于RS485接收發送數據的時序討論

        作者: 時間:2016-12-14 來源:網絡 收藏
        學習485總線時,遇到延時問題,困擾很久。通過學習知道了485半雙工收發時必須延時,以保證系統的穩定性、可靠性。好多資料都介紹了485 防靜電、抗干擾電路。惟獨沒提 每一幀收發停止位(或第9位)的延時和 半雙工總線收發切換延時 問題。
        我覺得在半雙工狀態下 485 幀的收發和總線的收發狀態切換延時問題 對485總線長期穩定的工作有很大影響。徹底搞懂這個問題對了解誤碼產生、數據丟失、總線的穩定性、可靠性都有重要意義。

        以下來源laoguo 21ic的文章 整理后:

        1、每一幀收發停止位(或第9位)的延時問題
        在RS-485半雙工通訊中,一般以單片機的TI,RI信號作收發切換控制信號,發送時,檢測TI是否建立起來,當TI為高電平后關閉發送功能轉為接收功能,接收時,檢測RI是否建立起來,當RI為高電平后,接收完畢,又可以轉為發送。因此,必須控制端RE*,DE的信號的有效脈寬應該大于發送或接收一幀信號的寬度。

        1

        從上面的時序圖可知:單片機在串行口發送數據時,只要將8位數據位傳送完畢,TI標志即建立,但此時應發送的第九位數據位(若發送地址幀時)和停止位尚未發出。如果在這時關閉發送控制,勢必造成發送幀數據不完整。
        接收數據時也同樣如此,單片機在接收完8個數據位后就建立起RI信號,但此時還未接收到第九位數據位(若接收地址幀時)和停止位。所以,接收端必須延時大于2位數據位的時間(1位數據位時間=1/波特率),再作應答,否則會發生總線沖突。
        總之,發送和接收控制信號應該足夠寬,以保證完整地接收一幀數據,任意兩個單機的發送控制信號在時間上完全分開,避免總線爭端。

        注:延時T秒的取值
        (1) 傳送地址幀時,T>2X(1/波特率),可以選取T=2.5X(1/波特率)。
        (2) 傳送數據幀時,T>1X(1/波特率),可以選取T=1.5X(1/波特率)。

        實際的軟件流程:
        1

        問題:(【5樓】以解決)
        可看到軟件流程并沒有在每一幀收發停止位(或第9位)后實現延時,而是在(數據包的)最后一個字節(幀)上延時。這樣能保障數據幀的正確(完整性)和穩定性嗎?

        2、半雙工總線收發切換延時問題
        為了可靠的工作,在485總線狀態切換時需要做適當延時,再進行數據的收發。具體的做法是在數據發送狀態下,先將控制端置“1”,延時1ms左右的時間,再發送有效的數據,一包數據發送結束后再延時1ms后,將控制端置“0”。這樣的處理會使總線在狀態切換時,有一個穩定的工作過程。

        問題:
        這里的 1ms是如何計算的? 485總線收、發狀態切換時需要做適當延時,是指 485芯片的收發切換需要延時還是 485總線電纜固有的特性?


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 枝江市| 普宁市| 观塘区| 肥乡县| 金阳县| 屯留县| 阿坝县| 板桥市| 沁阳市| 东乡县| 静宁县| 嘉义县| 渭南市| 突泉县| 宜丰县| 巫山县| 佳木斯市| 汉川市| 宝兴县| 酒泉市| 安岳县| 伊川县| 铁力市| 洛阳市| 乌鲁木齐市| 波密县| 龙州县| 新宾| 岳西县| 通辽市| 江口县| 邹城市| 海阳市| 手机| 德格县| 称多县| 尤溪县| 林甸县| 曲阜市| 麻城市| 高唐县|