• 公司地址
    广东,深圳
  • 联系电话
    400-8488-773

工控机高速采集SSI接口数据的方法

  SSI(Synchronous Serial Interface)即同步串行接口,具有传输速度快、连线简单、抗干扰能力强等优点,在光电编码器等各种传感器上得到了广泛的应用。工控机即工业控制计算机,具有计算机CPU、硬盘、内存、外设及接口,并有操作系统、控制网络和协议、计算能力、友好的人机界面,工控机以低成本、高性能、高可靠性等优势成为工业控制等领域的主流计算机。

  工控机一般不提供SSI接口,很难直接采集SSI接口的编码器等传感器数据。SSI接口转换器多将SSI数据转换成异步串行总线等低速现场总线,这大大限制了数据采集的实时性;市场上也有国外提供PCI或ISA接口的SSI接口卡,但价格昂贵且驱动程序较为复杂。工控机上多配备数字量输入/输出卡。本文采用数字量输入/输出卡控制SSI并行接口模块SSI208P,实现了一种SSI接口的低成本、高速数据采集方法。

  1、SSI208P模块介绍

  SSI208P模块可将SSI数据高速转换成并行数据,采用DIP28封装,内部集成了SSI同步时钟发生模块、数据串并转换模块、接口控制逻辑模块、输出控制模块以及收发驱动(TTL-RS422电平转换)模块等功能模块,其功能框图如图1所示。

SSI208P模块功能
SSI208P模块功能

  采用SSI208P模块对SSI接口数据的读取操作就变得类似于对A/D、D/A或存储器读取数据的操作,非常简单。SSI208P模块还能将格雷码转换成二进制码。通信速率可配置,当通信速率配置为2MHz时,对于16位精度的编码器,系统数据更新率不低于100kHz,可以满足高速伺服控制系统的需求。

  SSI208P控制时序如图2所示。CONVST上升沿启动一次SSI编码器数据收发过程。CONVST电平升高后,125ns内SSI208P模块开始向编码器发送

SSI208P控制时序图
SSI208P控制时序图

  一帧同步时钟脉冲信号,脉冲的个数由编码器的精度决定,同时转换结束管脚EOC变高。发送脉冲期间管脚EOC保持高电平状态,转换结束EOC管脚电平变低后,即可从Do~D₇并行读取编码器数据,每次读取八位,由A1、A0控制输出数据高低位,0表示读取最低八位、1表示读取最高八位,例如对于16位编码器只需读取两次(A1、A0分别为00、01),最多可以读取32位数据。编码器并行数据读取结束后将CONVST管脚置低,准备启动下一次转换。

  2、硬件设计

  数字量输入/输出卡与SSI并行接口模块SSI208P及SSI光电编码器之间的硬件连接原理图如图3所示。图中数字量输入/输出卡扩展了四路SSI编码器。数字量输入/输出接口由研华公司的多功能PCI数据采集卡PCI-1716提供,该采集卡除了提供16路模数转换通道和2路数模转换通道外,还提供了16路数字量输入和16路数字量输出通道。四通道光电编码器为16位格雷码输出格式。接口板上采用了四片SSI208P芯片,SSI时钟速率和编码器数据格式的设置都由接口板完成。PCI-1716的数字量输入端口的信号电气特性为:输入逻辑高电平:2.0~5.25V;输入逻辑低电平:0.0~0.80V;输出逻辑高电平:2.4V(最小);输出逻辑低电平:0.4V(最大)。参考SSI208P管脚的电气特性可知,PCI-1716和SSI208P的管脚可以直接连接。

硬件连接原理图
硬件连接原理图

  采用PCI-1716的输入端口DIO~DI7连接四片SSI208P的数据线Do-D,由于SSI208P在没有片选信号的情况下数据线是高阻态的,因此数据线可以共用。PCI-1716的输出端口DO1连接四片SSI208P的启动转换管脚START,可以同时控制四路SSI编码器。PCI-1716的输出端口DO0连接四片SSI208P的地址选择管脚A0.因编码器为16位,A₁接地。PCI-1716的四个输出DO2-DO5分别连接四片SSI208P的片选管脚CS。IO卡的四个输入DI9-DI11分别连接四片SSI208P的转换结束指示管脚/END。使用PCI-1716的18个IO口就可以实现四路光电编码器的时序控制和数据采集。

  3、软件设计

  编程采用BorlandC++Builder,调用PCI-1716的驱动程序操作各输入输出端口,在各输入输出端口上产生满足SSI208P的控制逻辑即可启动转换,采集数据。由图2可以看出SSI208P模块的启动转换控制和数据读取操作比较简单,软件流程如图4所示。

软件流程
软件流程

  相应的软件代码如下:

  staticPT_DioReadPortByteptSsiSta,plSsiVal;

  /1编码器状态和编码器数据结构声明

  USHORTSSI_STA,SSI_VAL;

  /1编码器的状态和数据变量声明

  intSSI_VAL1.SSI_VALL,SSI_VALH;

  /1编码器1各数据变量

  PT_DioWriteBitBit_Start,Bit_A0.Bit_CS1.Bit_CS2.

  Bit_CS3.Bit_CS4;

  /1各控制端口变量声明

  ptSsiVal.por=0;1/端口0用于读取编码器数据

  ptSsiVal.value=&SSI_VAL;

  ptSsiSta.port=1;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(inti=0;i<1;i++);1/延时至少125ns

  DRV_DioReadPortByte(DriverHandle,

  (LPT_DioReadPortByte)&ptSsiSta);

  while(ptSsiSta&Ox01)!=0)1/等待转换结束

  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片选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&OxFF;

  Bit_A0.state=1;//读取编码器次低8位

  DRV_DioWriteBit(DriverHandle,&Bit_A0);

  DRV_DioReadPortByte(DriverHandle,

  (LPT_DioReadPortByte)&ptSsiVal);

  SSI_VALH=SSI_VAL&OxFF;

  SSI_VAL1=(SSI_VALH<<8)ISSI_VALL;

  //数据拼接

  ……

  4、结束语

  本文基于SSI并行接口模块SSI208P和数字量输入/输出接口扩展卡,给出了一种工控机高速采集多通道SSI光电编码器数据的低成本实现方案。试验证明,在同步时钟设置为500kHz的情况下,转换读取四路16位SSI光电编码器的时间小于100μs,可用于实时性要求很高的应用场合。该方案已经成功运用于某车载武器系统的火控分系统中,运行稳定可靠。