异步串口是目前工业设备最主要的通讯接口之一。在具体的工业现场中,串口的电气接口以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接口的电路原理图(点击图片可获得完整电路图),仅供参考。
图1 同时驱动RS232和RS485接口电路
英创公司的ARM9工控主板均预装了Windows CE操作系统,CE操作系统提供了完备的串口操作API函数,这些函数可在eVC环境下直接调用。对RS232接口,应用没有任何专门操作,只需打开串口,设置串口的基本参数,如波特率等,就可以进行接口的读写了。对RS485接口,若需要使用RTS方向控制方案,则在设置串口参数时,需要特别地把RTS控制段设置为RTS_CONTROL_TOGGLE,相关的代码如下所示:
DCBdcb; // 定义参数控制块
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方向控制方案。具体的管脚配置如下表所示:
板卡型号