異步串口是目前工業設備最主要的通訊接口之一。在具體的工業現場中,串口的電氣接口以RS232和RS485最為普遍。英創公司的工控主板產品在串口方面都有較強的配置,如EM9160、EM9260、EM9360都有6個獨立串口,這些串口大多以TTL信號形式從板卡的管腳輸入輸出,客戶需要在自己的應用底板上加入相應的驅動電路單元,以獲得所需的串口接口,如RS232或RS485。在實際的應用中,由于現場的設備串口接口的情況并不確定,這樣就要求客戶設備同時具備RS232和RS485兩種接口的功能。本文的主要目的就是介紹同時驅動RS232和RS485兩種串行接口的電路原理,以及在應用程序中相應的設置要求。
RS232接口是采用正負電平的單極性信號,一般以3線制的接口最為普遍,信號包括RS232_TX、RS232_RX及GND,具有全雙工通訊能力。RS485接口采用一對TTL電平的差分信號RS485_D-和RS485_D+,只能半雙工通訊,在通訊方向(接收或發送)的切換方面,一般有兩種方式:一種方式是利用TTL_TXD經過一定處理作為方向控制,這種方式也稱為自動方向切換方式;另一種方式是使用串口的RTS控制線來控制方向,RTS有效時處于發送狀態,無效時處于接收狀態。
在實際應用中,只能有一種接口與設備相連。在這一前提下,實現同時驅動RS232和RS485電路的關鍵是對來自RS232和RS485電路的接收信號232_RXD、485_RXD進行“線與”操作,“線與”通過兩個二極管來實現,即下面電路的D1和D2。
對RS485驅動電路,方向控制方式的選擇是通過焊接R12或R13來實現的,焊接R12選擇RTS方法控制方式,焊接R13則選擇自動方向控制方式。RTS方法控制方式的優點是在發送階段,驅動芯片(電路中為75LBC184)始終處于輸出狀態,抗干擾能力更強;而自動方向控制方案,可使串口操作程序完全一樣,而無論物理上是RS232還是RS485接口,自動方向控制方案需要在RS485的差分信號線上分別接上拉和下拉電阻,其阻值大小與驅動的線長有關,一般連線越長,電阻越小。圖1是一種典型的同時驅動RS232和RS485接口的電路原理圖(點擊圖片可獲得完整電路圖),僅供參考。
英創公司的ARM9工控主板均預裝了Windows CE操作系統,CE操作系統提供了完備的串口操作API函數,這些函數可在eVC環境下直接調用。對RS232接口,應用沒有任何專門操作,只需打開串口,設置串口的基本參數,如波特率等,就可以進行接口的讀寫了。對RS485接口,若需要使用RTS方向控制方案,則在設置串口參數時,需要特別地把RTS控制段設置為RTS_CONTROL_TOGGLE,相關的代碼如下所示:
DCB dcb; // 定義參數控制塊
GetCommState( m_hSer, &dcb ); // 讀取當前參數塊
dcb.fRtsControl = RTS_CONTROL_TOGGLE; // 設置RTS方向控制
SetCommState(m_hSer, &dcb); // 重設串口參數
上述代碼中m_hSer為打開串口文件“COMx:”的文件句柄。
為了充分利用工控主板的管腳資源,英創公司的EM9160、EM9260、EM9360這三種嵌入式工控主板的串口RTS信號一般都是與GPIO信號復用管腳的。在缺省配置下,EM9160和EM9260只有COM2和COM4支持RS485的RTS方向控制方案,而EM9360的6個串口均支持RS485的RTS方向控制方案。具體的管腳配置如下表所示:
板卡型號 | 串口號 | RTSn管腳 | 備注 |
EM9160 / EM9260 | COM2 | RTS2n(CN1.16#) | |
COM4 | GPIO6(CN1.35#) | ||
EM9360 | COM2 | GPIO6(CN2.25#) | 當使用任何RTSn功能時,精簡ISA總線高位地址SA5–SA12被禁止。 |
COM3 | GPIO7(CN2.26#) | ||
COM4 | GPIO8(CN2.27#) | ||
COM5 | GPIO9(CN2.28#) | ||
COM6 | GPIO10(CN2.29#) | ||
COM7 | GPIO11(CN2.30#) |
注意:所有的RTSn管腳都是低電平有效的信號,即RTSn平時為高,串口處于接收狀態;RTSn變低(RTS處于有效狀態)表示串口處于發送狀態。
成都英創信息技術有限公司 028-8618 0660