一种利用机械鼠标快速实现角位移检测的软件设计方法
2015-05-07唐灵俊杨旸周思柱李宁
唐灵俊, 杨旸, 周思柱, 李宁
(长江大学 机械工程学院,湖北 荆州 434020)
0 引言
鼠标按照其工作原理可分为机械式和光电式,机械式鼠标的位移检测原理与光电传感器的原理相同,由鼠标底部的小球带动光电码盘旋转,然后通过光电检测部分读取码盘转过的栅格数目从而换算得到线位移大小。目前95%以上用户使用的是光电鼠标,机械鼠标渐渐被淘汰,本文对此情况采取废物利用,通过Visual Basic语言开发软件,读取鼠标指针数据,实现角位移检测。该方法最大的优点是:无需开发单片机,直接将机械鼠标的光电模块及光电码盘取出安装到被测转轴上,在电脑上运行软件就能够读取角位移参数。适合任何需要快速测量物体角位移的场合,即插即用,且精度较高。
1 机械鼠标原理简介及鼠标芯片功能介绍
不管是机械鼠标还是光电鼠标,其功能都是用来检测鼠标在桌面上移动的距离和方向,从而来帮助人们将电脑屏幕上的鼠标指针移动到正确的位置。机械鼠标移动时,靠桌面的摩擦力带动鼠标底部的小球滚动,小球驱动在X轴和Y轴方向布置的2个光电码盘转动。光电码盘上一般有36个栅格,在码盘两侧分别有1个红外发光二极管和1个光电探头,码盘每转过1个栅格,光线被遮挡1次,光电探头对应产生2路电脉冲,一路用于判别码盘转动的方向。电脉冲经过电路及鼠标芯片处理后将码盘转过的角度及方向发送给电脑。
EM84510EP是专门为机械鼠标设计的一款基于PS/2通信协议的芯片,芯片内部设有滤波放大电路,用来对光电探头发出的脉冲信号进行滤波、整形和幅值调整。因此光电探头的输出管脚可以直接和这款芯片引脚相连接。另外当光电码盘的孔的边缘处于将光线半遮半闭的位置,光电探头就会发出许多虚假信号。这款芯片也内置了防抖动电路,能够自动去除虚假信号。由于这款芯片是专门为鼠标设计的,因此该芯片还有一个增速功能。其具体原理是当光电码盘转速加快时,芯片会自动在光电探头输入的脉冲数目的基础上加上一些脉冲,这使得光电码盘在转过相同的转角的情况下,由于转速的增加却让鼠标指针得到更多的位移。这个功能使得光电码盘转过的角度与电脑得到的脉冲数目呈非线性关系,不利于用来测量角度。但可以在软件程序中,通过电脑和鼠标芯片的通讯让芯片关闭这项功能,保证电脑得到的脉冲数能够真正反映光电码盘转过的角度。鼠标芯片的采样率是100次/s,每次采样最多可以接受到28=256脉冲,因此对于一个36孔的光电码盘,其最大转速不应超过710 r/s。鼠标芯片的存储温度范围是-65~150℃,因此在较为恶劣的环境下,用该芯片设计制作的角度传感器依旧能正常工作。
图1 脉冲处理电路图
图2 齿轮增速机构
2 鼠标电路简化及光电码盘精度提高
将机械鼠标改造成为角度传感器,只需要用到其光电码盘及光电检测模块,因此可以将鼠标的电路图简化成如图1所示的形式,包括发光二极管、光敏三级管、鼠标芯片。
光电码盘每转过1周能够产生36个脉冲,再由鼠标芯片进行4倍频细分,使得光电编码器每转能够产生36×4=144个脉冲。即最小能够分辨的角度是360°÷144=2.5°,显然精度不够高,因此我们可以在光电码盘前端加上两级齿轮传动,来将分辨率放大16倍,其最小能够分辨的角度是 360°÷(144×16)=0.15°≈0.2°,如图2所示。鼠标光电码盘的大小一般为20mm,考虑到尺寸的搭配,齿轮可以选用玩具车上的塑料齿轮,这种齿轮价格十分便宜。其模数一般为0.5 mm,如:1、3号齿轮可以选用40齿(直径 20 mm),2、4号齿轮选用10齿(直径5 mm)。
3 软件设计
软件设计采用Visual Basic语言编程。程序包含两个部分,第一部分是将芯片初始化设置,去除自动加速功能。其具体方法是,程序向芯片发送十六进制代码E7,命令芯片关闭自动加速功能,当收到应答FA后,表明设置完成。加速功能去除后,程序执行第二部分,检测并计算码盘转角位移及速度。该部分程序中包含1个时钟控件Timer和1个计数器Counter。当光电码盘顺时针转过1个栅格时,计数器Counter加1,逆时针减1,由此可以求得角位移。将位移对时间进行微分,即可求得角速度,其具体方法是,时钟控件每秒触发1次,并记录下计数器当前值与前一秒的差值Ti。
角位移计算公式
式中:Ci为计数器Counter的值;N为齿轮1转1圈后电脑接收到的脉冲数。
角速度计算公式
式中:Ti为时钟控件记录下的计数器前后2s的差值,rad/s;
一般机械鼠标采用PS/2串口输出,对于一些不支持PS/2接口的电脑,采用一根PS/2转USB串口数据线就能将设备插入电脑。当设备插入电脑后,电脑实际上会将该设备识别为鼠标设备,因此当光电码盘旋转的过程中,鼠标指针也会做出相应运动。从而鼠标指针移动的步数可以准确地反映码盘转过的栅格数目。通过捕捉鼠标指针,可以使得计数器Counter的数值随着指针同步变化。然而当码盘总是朝着一个方向转动,鼠标指针可能超出边界而停止。对此可以在程序中加入一个判断函数,当指针超过边界时,立刻通过 SetCursorPos(X0,Y0)函数将指针调回原点重新运动。程序流程图如图3所示。
图3 程序流程图
4结语
本文提供了一种可快速将机械鼠标改造成为角度传感器的方法,能够实现一定精度的任意范围的角度测量.经过测试,其性能稳定。该方法最大的优点是无需开发单片机或者考虑外设与电脑的通讯协议,只需通过简单的编程或者直接运行本文所给出的程序代码,就能快速实现角位移及角速度的测量。
[1] 汪卓飞.一种高精度角度传感器的研究[D].杭州:浙江工业大学,2009.
[2] 李文强,杨录,田二明.利用机械鼠标实现高精度位置检测[J].机械工程与自化,2008(3):180-182.
[3] 陈曦.PS/2接口协议解析及应用[J].国外电子元器件,2004(4):14-18.
[4] 战延谋,王卓柱,周皓,等.基于鼠标芯片TP8452的方向角传感器设计[J].计算机测量与控制,2007,15(6):834-836.
[5] 何绪兰,林财兴.PS/2鼠标驱动关键问题的研究及程序实现[J].现代机械,2011(3):68-72.
[6] 李文强,杨录,田二明.利用机械鼠标实现高精度位置检测[J].机械工程与自动化,2008(3):180-182.