位移检测技术经过多年发展已经相当成熟,各种位移传感器纷纷出现,但低成本的位移传感器结构简单,精确度不高,线性度低,而高成本的位移传感器虽然性能优异,但制作工艺难度大,难以普及。所以开发一款低成本、高性能的位移传感器具有很高的现实意义。鉴于此,本文提出了通过LabVIEW 编程实现精确度高、线性度好、测量范围大、无需其余硬件设备的鼠标位移测量方法。
1 鼠标的工作原理及位移测量的实现方法
1.1 鼠标的工作原理与驱动程序
鼠标( mouse) 在现代个人电脑( PC)中被广泛应用,特别是图形用户界面(GUI)的流行,鼠标已经不可或缺。大规模的生产使鼠标的价格很低,通过利用鼠标来测位移也使成本趋于合理。经过数十年的技术发展,尤其是光电鼠标与激光鼠标的出现,其精度得到极大提高。利用鼠标进行位移测定,具有高精度、低成本的优点。鼠标虽然实际上是位移传感器,但其是为PC 机配备的外部输入设备,各种 *** 作系统自带的鼠标驱动程序只是为了提供图形用户界面 *** 作,无法满足普遍的位移测量要求。
鼠标全称显示系统纵横位置指示器。光电鼠和机械鼠的最大区别是对轨迹的检测方法,但其工作原理基本相同: 通过光栅信号传感器或光电传感器将位移转换为电脉冲信号,然后通过芯片将信号处理为数据包传递给PC 机。目前利用鼠标实现位移测量的方法主要是利用单片机实现信号处理,实现位移检测功能,但此方法稳定性差,噪声较大,需要额外硬件系统,性价比低。在 *** 作系统已经尽可能挖掘了底层硬件数据通信能力的情况下,重新对底层硬件通信浪费资源。实际上,鼠标提供GUI *** 作,通过鼠标移动控制显示设备上鼠标指针的像素移动。反之,可以利用指针运动的位移来确定实际鼠标的位移。
1.2 鼠标坐标系统与显示坐标系统的关系
鼠标坐标系统( 即实际位移) 与显示坐标系统通过映射来完成对应关系,二者坐标均使用平面直角坐标系。鼠标坐标系统在平面上任意取一点作为原点,以相对原点的偏移量计算目标点的坐标值,然后以相对该目标点的偏移量计算下一新目标点的坐标值,以此类推。鼠标坐标系统中基本单位为米基。显示坐标系统同显示器的实际分辨率及工作方式有关。使用平面直角坐标系,原点在屏幕的左上方,横向代表X 方向,纵向代表Y 方向。图形方式下的横向、纵向的象素为基本单位进行衡量。例如,1024×768 分辨率时,显示坐标的横向和纵向坐标范围为0~ 1023,0~ 767。
鼠标坐标系到显示坐标系完成三个方面的映射:(1) 原点映射:( x 0 , y 0 ) = ( X 0, Y0 ) , 其中X 0 , Y0 ( 为屏幕原点坐标)值可任意给定:( 2) 目标点映射:( x i , y i ) = ( x i- 1 +△x i , y i- 1 + △yi ) →(X i , Yi ) = X i- 1 + △X i , Yi- 1 + △Yi ( i =1, 2 ……, n, 横向下界≤ X i ≤ 横向上界,纵向下界≤Yi ≤纵向上界; ( 3) 基本单位映射: 在图形方式下( 米基到象素映射) ,△x i / x 方向比例因子= △X i , △yi / y 方向比例因子= △Yi ( i =1, 2……,n)。改变米基到象素的比例因子μ 影响鼠标灵敏度,μ 值决定着指针的移动速度,可以在PC 机w indow s *** 作系统中的控制面板设置。因此无须改变鼠标底层的硬件驱动,实际鼠标的位移可以通过象素坐标来确定。但实际的显示坐标均有边界限制,不能满足大范围的位移测量。通过LabVIEW编程消除显示坐标系象素X i 与Yi 的上下界限制,通过测量指针移动的象素来精确检测鼠标的位移量。
1. 3 位移测量的LabVIEW 实现方法
通过库函数节点( CLF) 来访问动态链接库( DLL) 的方法,直接调用WINDOWS API 函数与LabVIEW 自行编制的库函数,使得LabVIEW 对鼠标的通信得到大大的增强,同时也为 *** 作系统底层函数支持LabVIEW 提供了便捷,节省了内存空间。与鼠标相关的动态链接库函数如表1 所示,二者库函数有部分相同的功能。
表1 鼠标驱动程序接口函数
通过调用以上函数实现鼠标的位移测量。具体方法为: 在显示坐标系内,坐标范围分成M × N 象素。位移的X 、Y 分量二者互不影响,编程时可以分别处理。方法实现的重点是消除 *** 作系统固有的显示坐标系象素X i 与Yi 的上下界限制。首先要判断鼠标的运动方向,若鼠标向左移动,则其必然到达坐标系右边界。这时通过函数使象素X i 置零,Yi 不变,同时记录一次其过边界。通过显示坐标( X i , Yi ) 与初始坐标( X 0 ,Y0 ) 之差与过边界次数即可求出在显示坐标中鼠标指针的位移。其他运动方向的位移同理可以得到。最后通过比例因子μ将显示坐标映射到鼠标坐标系中,即可求出实际位移( x i ,yi ) .详细的程序流程图如图1 所示。
图1 鼠标位移测量程序流程图
LabVIEW 具有代码直观、层次清晰的图形化编程特点。在前面板上设置显示坐标为M×N = 500 × 300 的指针工作区域,并设置初始坐标在工作区的中心( 250, 150) .X 方向右位移消除边界的部分程序框图如图2 所示,条件语句判断当指针到达右边界( 499, Yi ) 时,下一次循环将其设为( 0, Yi ) ,并将以后的位移增加1 倍M.循环体内使用了移位寄存器。
图2 部分消除边界的LabVIEW 程序框图
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)