用光电编码器实现单键飞梭功能
扫描二维码
随时随地手机看文章
“单键飞梭”作为一种用户输入方法,其输入方式灵活可靠,特别适合应用在嵌入式仪器设备和手持式设备上。本文利用cpld鉴相控制模拟开关, 模拟手动按键得到统一的ps/2码,从而简化软件设计,提高了用户输入效率。 1 光电trim knob的工作原理光电trim knob又称为光电编码器(optical encoder),其中以bourns公司和greyhill公司的产品用得最广泛。本文就以bourns公司的enc产品为例,介绍其工作原理。如图1所示,trimknob有两个发光二极管及两个光敏三极管,中间是可自由转动的遮光板。当旋转trimknob时,两个光敏三极管会被遮光板有次序地遮挡而产生图2所示的波形。 如果是顺时针从位置#1旋转到位置#2,通道a会比通道b相位超前半个周期;反之如果是逆时针从位置#3旋转到位置#1, 通道b会比通道a相位超前半个周期。通过检测通道a和通道b的相位就能判断是顺时针还是逆时针转动。通过记录检测通道a和通道b波形变化的次数就能得到转动位置变化数目。2 holtek ht82k628a简介ht82k628a是台湾holtek公司为ibm pc/at及兼容机设计生产的专用键盘扫描控制芯片,支持101/102/104/109个键, ps/2接口。引脚定义如图3所示。行线r0~r15为键盘矩阵的扫描输出,列线c0~c7为键盘矩阵的扫描输入。 表1列举了几个行列线对应的键值,关于此芯片的更详细的应用,请见参考文献[1]。3 设计原理通过一个鉴相电路,输入为通道a、b,输出为cw、 ccw。cw、ccw控制模拟开关sw1、sw2。sw1的数据端分别连接在c6和r7上,从表1可以看出c6、r7对应f8键。顺时针转动一个位置,cw 输出一个脉冲,模拟开关sw1接通。从键盘扫描控制芯片ht82k628a角度看,效果和按下“f8”一样,如图4。4 实 现4.1 鉴相器的实现由于本系统其它逻辑部分电路用到xilinx公司的cpld xcr3032xl,所以我们把鉴相器电路也做在此cpld中。其中定义cw、ccw为输出引脚,ch_a、ch_b为输入引脚。状态机变化逻辑如下:state_diagram qstatestate st0: cw = 0; ccw = 0; if (!ch_a&ch_b) then st1 else if (ch_a&!ch_b) then st4else st0;state st1: cw=1;ccw=0;if (ch_a&ch_b) then st2 else st1;state st2: cw=1;ccw=0;if (ch_a&!ch_b) then st3 else st2;state st3: cw=1;ccw=0;if (!ch_a&!ch_b) then st0 else st3;state st4: cw=0;ccw=1;if (ch_a&ch_b) then st5 else st4;state st5: cw=0;ccw=1;if (!ch_a&ch_b) then st6 else st5;state st6: cw=0;ccw=1;if (!ch_a&!ch_b) then st0 else st6;4.2 模拟开关的实现一般手动按下一个键的开关时间是20ms,所以设计中在cw、ccw输出端加了一个单稳电路作为时延,单稳电路的输出作为模拟开关mc74hc4066的控制。电路设计如图5所示。 当鉴相器产生一个cw脉冲,u1就会触发产生一个20ms宽的脉