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模块对SSI接口数据的读取操作就变得类似于对A/D、D/A或存储器读取数据的操作,非常简单。SSI208P模块还能将格雷码转换成二进制码。通信速率可配置,当通信速率配置为2MHz时,对于16位精度的编码器,系统数据更新率不低于100kHz,可以满足高速伺服控制系统的需求。
SSI208P控制时序如图2所示。CONVST上升沿启动一次SSI编码器数据收发过程。CONVST电平升高后,125ns内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,可用于实时性要求很高的应用场合。该方案已经成功运用于某车载武器系统的火控分系统中,运行稳定可靠。