RS-485是一種基于差分信號傳送的串行通信鏈路層協議。它解決了RS-232協議傳輸距離太近(15m)的缺陷,是工業上廣泛采用的較長距離數據通信鏈路層協議。 由于它使用一對雙絞線傳送差分信號,屬半雙工通信,所以需要進行接收和發送狀態的轉換。一般的8腳TTL電平到RS-485電平轉換芯片的引腳定義如圖1所示。 其中,引腳意義如下: RO——接收數據的 TTL電平輸出; ——低電平有效的接收允許; DE——高電平有效的發送允許; DI——發送數據的TTL電平輸入; A——485差分信號的正向端; B——485差分信號的反向端。 在RS-485電路設計中,通常將和DE短接,用1根信號線來控制,這樣可以做到收發的切換。 RS-485芯片通常處于接收狀態。當要發送數據時,由程序控制/DE 變為高電平,然后UART單元發送數據,程序要等待發送完畢后,再將RS-485芯片轉換到接收狀態。發送完畢的標志一般由UART的特定寄存器提供狀態指示,程序需要去查詢。 在單片機電路中,一般用1根I/O線來控制RS-485芯片的接收和發送狀態的轉換。這樣需要由軟件來控制 I/O引腳的電平,以達到控制RS-485收發轉換的目的。 這樣的控制方法造成RS-485通信存在以下問題: 在想要發送數據和真正的能發送數據之間,存在一定的轉換延時; 如果發送到接收的轉換時機不當,則會造成數據丟失; 在接收和發送數據轉換期間,容易引入干擾,使UART單元收到多余的雜亂數據。 鑒于以上情況,筆者經過探索和參照其它相關電路,設計了一種可以實現RS-485接收和發送零延時轉換的電路,如圖2所示。 當不發送數據時,TTL電平的Tx信號為高電平,經V1反向為低電平,RS-485芯片處于接收狀態。 當發送數據時,① 若Tx為低電平,經V1反向后,DE/為高電平,發送允許。此時由于DI 接地,所以RS-485芯片的輸出端A、B產生表示低電平的差分信號,低電平的Tx被送出。② 若Tx為高電平,經V1反向后,DE/為低電平,RS-485芯片的A、B端處于高阻態。此時靠電阻R1和R2的下拉和上拉作用,使總線上產生正的差分信號,從而將Tx的高電平信號送出。 由以上分析看出,在使用這個電路時,只要程序能保證不同時進行接收和發送的操作,即保證是半雙工傳送數據,程序不必用指令控制DE/進行接收和發送的轉換。轉換由硬件本身完成。 發送高電平的過程中,由于RS-485芯片處于接收狀態,此時的發送信號必須是在總線上其它節點發送數據時,才能將高電平信號送出。所以,仍需要軟件設計中做好總線仲裁。 經過在沒有嚴重干擾的實驗室中的實驗,在使用0.5mm2屏蔽平行線時,此電路的傳送距離可達1200m。 |