一种工控机高速采集SSI接口数据的方法 vga接口接线图

  摘 要:同步串行接口(SSI)具有速度快、连线简单、抗干扰能力强等优点,在工业控制等领域得到了越来越广泛的应用。一般的工控机上不提供SSI接口,市场上的SSI接口扩展卡很少且价格昂贵。介绍了SSI并行接口模块SSI208P,基于数字量输入/输出扩展卡和SSI208P,给出了一种工控机高速采集多通道SSI光电编码器数据的低成本实现方案,详细阐述了硬件和软件设计方法。
  关键词:SSI;光电编码器;工控机;数据采集
  SSI(Synchronous Serial Interface)即同步串行接口,具有传输速度快、连线简单、抗干扰能力强等优点,在光电编码器等各种传感器上得到了广泛的应用[1,2]。工控机即工业控制计算机,具有计算机CPU、硬盘、内存、外设及接口,并有操作系统、控制网络和协议、计算能力、友好的人机界面,工控机以低成本、高性能、高可靠性等优势成为工业控制等领域的主流计算机。
  工控机一般不提供SSI接口,很难直接采集SSI接口的编码器等传感器数据。SSI接口转换器多将SSI数据转换成异步串行总线等低速现场总线,这大大限制了数据采集的实时性;市场上也有国外提供PCI或ISA接口的SSI接口卡,但价格昂贵且驱动程序较为复杂。工控机上多配备数字量输入/输出卡。本文采用数字量输入/输出卡控制SSI并行接口模块SSI208P,实现了一种SSI接口的低成本、高速数据采集方法。
  1 SSI208P模块介绍
  SSI208P模块可将SSI数据高速转换成并行数据,采用DIP28封装,内部集成了SSI同步时钟发生模块、数据串并转换模块、接口控制逻辑模块、输出控制模块以及收发驱动(TTL-RS422电平转换)模块等功能模块,其功能框图如图1所示。
  采用SSI208P模块对SSI接口数据的读取操作就变得类似于对A/D、D/A或存储器读取数据的操作,非常简单。SSI208P模块还能将格雷码转换成二进制码。通信速率可配置,当通信速率配置为2 MHz时,对于16位精度的编码器,系统数据更新率不低于100 kHz,可以满足高速伺服控制系统的需求。
  SSI208P控制时序如图2所示。CONVST上升沿启动一次SSI编码器数据收发过程。CONVST电平升高后,125 ns内SSI208P模块开始向编码器发送一帧同步时钟脉冲信号,脉冲的个数由编码器的精度决定,同时转换结束管脚EOC变高。发送脉冲期间管脚EOC保持高电平状态,转换结束EOC管脚电平变低后,即可从D0~D7并行读取编码器数据,每次读取八位,由A1、A0控制输出数据高低位,0表示读取最低八位、1表示读取最高八位,例如对于16位编码器只需读取两次(A1、A0分别为00、01),最多可以读取32位数据。编码器并行数据读取结束后将CONVST管脚置低,准备启动下一次转换。
  2 硬件设计
  数字量输入/输出卡与SSI并行接口模块SSI208P及SSI光电编码器之间的硬件连接原理图如图3所示。图中数字量输入/输出卡扩展了四路SSI编码器。数字量输入/输出接口由研华公司的多功能PCI数据采集卡PCI-1716提供,该采集卡除了提供16路模数转换通道和2路数模转换通道外,还提供了16路数字量输入和16路数字量输出通道[3]。四通道光电编码器为16位格雷码输出格式。接口板上采用了四片SSI208P芯片,SSI时钟速率和编码器数据格式的设置都由接口板完成。PCI-1716的数字量输入端口的信号电气特性为:输入逻辑高电平:2.0~5.25 V;输入逻辑低电平:0.0~0.80 V;输出逻辑高电平:2.4 V(最小);输出逻辑低电平:0.4 V(最大)。参考SSI208P管脚的电气特性可知,PCI-1716和SSI208P的管脚可以直接连接。
  采用PCI-1716的输入端口DI0~DI7连接四片SSI208P的数据线D0-D7,由于SSI208P在没有片选信号的情况下数据线是高阻态的,因此数据线可以共用。PCI-1716的输出端口DO1连接四片SSI208P的启动转换管脚START,可以同时控制四路SSI编码器。PCI-1716的输出端口DO0连接四片SSI208P的地址选择管脚A0,因编码器为16位,A1接地。PCI-1716的四个输出DO2-DO5分别连接四片SSI208P的片选管脚CS。IO卡的四个输入DI9-DI11分别连接四片SSI208P的转换结束指示管脚/END。使用PCI-1716的18个IO口就可以实现四路光电编码器的时序控制和数据采集。
  3 软件设计
  编程采用Borland C++ Builder,调用PCI-1716的驱动程序操作各输入输出端口,在各输入输出端口上产生满足SSI208P的控制逻辑即可启动转换,采集数据。由图2可以看出SSI208P模块的启动转换控制和数据读取操作比较简单,软件流程如图4所示。
  相应的软件代码如下:
  static PT_DioReadPortByte ptSsiSta,ptSsiVal;
  // 编码器状态和编码器数据结构声明
  USHORT SSI_STA,SSI_VAL;
  // 编码器的状态和数据变量声明
  int SSI_VAL1,SSI_VALL,SSI_VALH;
  // 编码器1各数据变量
  PT_DioWriteBit Bit_Start, Bit_A0, Bit_CS1, Bit_CS2, Bit_CS3, Bit_CS4;
  // 各控制端口变量声明
  ……
  ptSsiVal.port = 0; //端口0用于读取编码器数据
  ptSsiVal.value = &SSI_VAL;
  ptSsiSta.port = 1; //端口1用于读取编码器状态
  ptSsiSta.value = &SSI_STA;   Bit_START.port=0; //输出端口0.1位启动转换
  Bit_START.bit=1;
  Bit_A0.port=0; //输出端口0.0位地址线A0
  Bit_A0.bit=0;
  ……
  Bit_START.state=0;//START上升沿启动转换
  Bit_START.state=1;
  DRV_DioWriteBit(DriverHandle,&Bit_ Start);
  For(int i=0;i<1;i++);//延时至少125ns
  DRV_DioReadPortByte( DriverHandle,
  (LPT_DioReadPortByte)& ptSsiSta);
  while((ptSsiSta&0x01)!=0) //等待转换结束
  DRV_DioReadPortByte( DriverHandle,
  (LPT_DioReadPortByte)& ptSsiSta);
  Bit_CS2. state =1; //片选2-4置高
  DRV_DioWriteBit(DriverHandle,&Bit_ CS2);
  ……
  DRV_DioWriteBit(DriverHandle,&Bit_ CS4);
  Bit_CS1. state =0; //片选1置低
  DRV_DioWriteBit(DriverHandle,&Bit_ CS1);
  Bit_A0. state =0; //读取编码器低8位
  DRV_DioWriteBit(DriverHandle,&Bit_ A0);
  DRV_DioReadPortByte( DriverHandle,
  (LPT_DioReadPortByte)&ptSsiVal);
  SSI_VALL= SSI_VAL&0xFF;
  Bit_A0.state =1; //读取编码器次低8位
  DRV_DioWriteBit(DriverHandle,&Bit_ A0);
  DRV_DioReadPortByte( DriverHandle ,
  (LPT_DioReadPortByte)&ptSsiVal);
  SSI_VALH= SSI_VAL&0xFF;
  SSI_VAL1= (SSI_VALH<<8)| SSI_VALL;
  //数据拼接
  ……
  4 结束语
  本文基于SSI并行接口模块SSI208P和数字量输入/输出接口扩展卡,给出了一种工控机高速采集多通道SSI光电编码器数据的低成本实现方案。试验证明,在同步时钟设置为500 kHz的情况下,转换读取四路16位SSI光电编码器的时间小于100 μs,可用于实时性要求很高的应用场合。该方案已经成功运用于某车载武器系统的火控分系统中,运行稳定可靠。
  参考文献
  [1] 靳红涛, 赵勇进, 陈朝基. 一种SSI接口光电编码器数据并行采集设计方法[J].电子技术, 2008, (5).
  [2] 张子蓬, 王淑青, 刘辉. SSI接口的绝对值角度编码器值的读出方法研究[J]. 工业控制计算机, 2005, (12).
  [3] PCI-1716/1716L安装使用手册[M].
  作者简介
  靳红涛,博士、高级工程师,从事伺服控制、陀螺稳定技术研究。

推荐访问:采集 工控机 接口 方法