英创工控主板同时驱动RS232和RS485的方法

 2009-7-1          [nemail]    
[lablebox]

        异步串口是目前工业设备最主要的通讯接口之一。在具体的工业现场中,串口的电气接口以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处于有效状态)表示串口处于发送状态。

 

        相关文章:EM9280(嵌入式Linux版)串口的RTS硬件方向控制方法

[lablebox]