用光电编码器实现单键飞梭功能
发布时间:2008/5/27 0:00:00 访问次数:1188
    
    
    “单键飞梭”作为一种用户输入方法,其输入方式灵活可靠,特别适合应用在嵌入式仪器设备和手持式设备上。本文利用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 qstate
    state st0: cw = 0;
    ccw = 0;
    if (!ch_a&ch_b) then st1
    else if (ch_a&!ch_b) then st4
    else 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宽的脉
    
    
    “单键飞梭”作为一种用户输入方法,其输入方式灵活可靠,特别适合应用在嵌入式仪器设备和手持式设备上。本文利用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 qstate
    state st0: cw = 0;
    ccw = 0;
    if (!ch_a&ch_b) then st1
    else if (ch_a&!ch_b) then st4
    else 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宽的脉