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