1、X-Y二维扫描台位置检测原理
X-Y二维扫描台X向、Y向位置检测元件采用开式光栅,50线/mm,由专用细分尺10细分后,测量分辨为2μm。开式光栅直接利用光电转换原理输出三相方波A、B、Z相。A、B相方波相位差90°,Z相用于基准点定位,其逻辑电平都为5V。当A相方波超前B相方波90°时,表示位移方向为正方向,当A相方波滞后B相方波90°时,表示位移方向为反方向。扫描台X向、Y向每位移2μm,光栅发出一个周期的方波。
图1 光方波
因此,X-Y二维扫描台的位置检测首先要解决对光栅信号的辨向问题,辨别出X、Y向的位移方向;其次,为保证生物芯片扫描在最高扫描分辨率为5μm时仍有较高扫描质量,X、Y方向位置检测精度应高于2μm,以减少扫描台的定位误差,因此要对光栅信号进一步细分;此外,还要完成将光栅信号转换成控制器能读取的位置数据,当X向、Y向位移方向为正时,此位置数据递增;当X向、Y向位移方向为负时,此位置数递减,并要保证实时的准确可靠的提供X、Y向的位置数据,作为控制器(如单片机、DSP)精确定位X-Y二维扫描台位置的依据。
原有的生物芯片扫描仪中X-Y二维扫描台的一个方向的位置检测采用4倍频专用集成电路QA740210对光栅信号进行辨向、细分,用4片4位二进制74LS193计数器级联实现对细分后的光栅信号16位计数,计数值(即位置数据)通过2片8位74LS245缓冲器输出至控制器。这样,X、Y两个方向的位置检测电路多达14片芯片,占用大量的PCB空间,布线复杂,板上信号间的串扰易引起计数误差和误清零现象,影响扫描台的精确定位。若只用一片FPGA实现位置检测电路,输入为光栅信号,输出即为位置数据,直接送入控制器,避免PCB板间信号串扰,就能有效消除计数误差和误清零现象。
2、X-Y二维扫描台位置检测的FPGA设计方案
选用Spartan-II系列FPGA(XC2S15-5VQ100)作为X-Y二维扫描台的位置检测电路,并行的对X、Y两路光栅信号的进行辨向、细分、计数,并提供与控制器的接口,实时可靠的将X、Y向位置数据传送给控制器。
FPGA内部模块划分如图2所示:从X向光栅来的A、B两相方波信号XA,XB由X向辨向细分电路辨向细分后,输出两路脉冲信号XCU、XCD,16位计数模块分别对这两路脉冲信号进行计数,并将两计数值XUPCNT、XDOWNCNT相减,其差作为X向的16位位置数据XCNT。接口电路对3位地址信号ADDR译码,通过XCLR、YCLR对X、Y计数器分别清零,并选通X向或Y向位置数据输出到控制器。
对Y向同样如此。本论文只以X向说明之。
2.1、辨向细分设计
当光栅正向移动时,A相、B相的电平逻辑表现为“00”→“10”→“11”→“01”→“00”序列;当光栅反向移动时,A相、B相的电平逻辑表现为“00”→“01”→“11”→“10”→“00”序列。因此,只要能辨别出这两种序列,就能实现辨向。
图2 序列图
引入外部频率为10MHz的时钟源,利用这个时钟的上升沿同时对A相、B相信号采样,作为当前XA、XB值,以二维向量AB_new记之,AB_new通过一级触发器后,记为AB_old,AB_new和AB_old都跟随A相、B相方波信号变化而变化,只是AB_old要滞后AB_new一个采样时钟周期。这样,就可以将AB_old和AB_new进行比较:当AB_old为“00”时,若AB_new为“10”,即A相超B相前90°,XCU输出一个负脉冲,XCD保持为高电平不变;若AB_new为“01”,即A相滞后B相90°,XCD输出一个负脉冲,XCU保持为高电平不变。X向光栅信号变化一个周期,如果A相超B相90°(位移方向为正),XCU就会输出四个负脉冲,如果A相滞后B相90°(位移方向为负),XCD就会输出四个负脉冲,同时实现了辨向与细分功能。
2.2、可逆计数器设计
用两个16位二进制计数器对两路脉冲信号XCU、XCD分别计数,然后用一个16位减法器对此两个计数器的计数值作差,被减数为XCU的计数值XUPCNT,减数为对XCD的计数值XDOWNCNT,其差作为X向的位置数据XCNT。这样,XCU有计数脉冲时,XCNT就会增加,而XCD有计数脉冲时,XCNT就会减小,实现了可逆计数。结合前面的辨向细分电路,使X向的位置数据在正向位移时增加,反向位移时减少。位置数据的变化真实反映了位移情况。
2.3、接口电路设计
接口电路是控制器实时可靠读取X向、Y向的位置数据或清零的接口。接口电路由译码电路、输出三态缓冲器组成。接口电路与控制器的16位数据线CNT用于FPGA向控制器传送位置数据,控制器的3位地址线ADDR作为译码电路的输入:能分别输出X、Y向位置数据,以及分别对X、Y向计数器清零。译码电路可使X向、Y向位置数据复用16位数据线,高效的利用控制器的端口资源;对3位地址信号译码产生清零信号,能有效地防止在只使用一根信号线时受干扰等原因而引起的误清零现象。
3、设计仿真和实现
在ISE6.1i开发平台上,用VHDL语言对辨向细分、计数、接口电路进行编程实现。图3是仿真波形。
由图3可看出,X、Y向可并行的对光栅信号辨向、细分、计数,下面只以X向说明:辨向细分电路根据两路正交的方波信号XA、XB的相位差分别在XCU,XCD上输出频率为XA、XB4倍的计数脉冲,实现了辨向细分;可逆计数器分别对XA、XB计数,计数值的差XCNT随X向的位移方向的变化增加或减少;当控制器的地址译码信号ADDR为“101”时,X向的位置数据XCNT输出到16位数据线CNT;当ADDR为“110”时,FPGA将Y向的位置数据YCNT输出到CNT;当地址线ADDR为“001”时,X向位置数据XCNT清零,CNT表现为高阻态;当ADDR为“010”时,Y向位置数据YCNT清零,CNT表现为高阻态;当ADDR为其他任意值时,CNT都表现为高阻态,使控制器能向其他外设交换数据。将代码下载到XC2S15-5VQ100后,用于生物芯片扫描仪中,准确可靠的实现了位置检测功能。