摘要:安捷伦(Agilent)公司的HDNS2000芯片是一种高性能的运动检测器件,在目前的光学鼠标中应用广泛,其易用性和廉价性使其非常适合应用于中低精度的运动和位置检测中。本文介绍HDNS2000的功能、特点,从硬件与软件两个方面讨论HDNS2000与AVR单片机的接口设计。
在机电产品设计中,有时需要检测物体间的相对运动,包括运动方向和运动距离。若采用机械式的结构,比如机械鼠标中的滚轮和轨迹球,则会由于频繁的机械运动而发生故障,导致精度下降甚至失效,维修起来也不方便。另外它需要两个物体表面相接触,靠相互间的摩擦进行工作,这在某些场合是不能允许的。解决方案之一就是采用光电器件,运用光学原理来测定运动。安捷伦公司的HDNS2000就是为此而设计的,虽然它的市场是针对光学鼠标,但也可以作为一种高性能而又廉价的器件运用于工业控制领域中。
1 HDNS2000芯片介绍
1.1 主要功能与特性
HDNS2000是安捷伦推出的高性能的光学感测芯片,它的内部包含三个基本模块:图像拾取系统、DSP处理器、PS/2或四状态输出转换器,如图1所示。在HDNS2000芯片的底部有一个感光眼,如同一个小型的摄像头,不断地对物体表面进行拍照,接着将前后两次的图像送入DSP中进行处理,以判断物体移动的方向和大小,最后将数据转化为PS/2格式或者以两通道四状态格式输出。图2中的(a)与(b)分别为芯片前后两次拾取的图像。比较图2中的(a)和(b)可以看出,物体向左下方移动了一点。
HDNS2000的图像拾取系统每秒钟可以拾取1500张图像,可以精确地测量最高30.48 cm/s(12 英寸/s)的运动,解析度为400点每英寸。
1.2 引脚介绍
HDNS2000的主要引脚框图如图3所示。
PS2_C:PS/2接口的时钟端。
MODE/XA:复用引脚,接高电平时表示选择PS/2模式;否则,为XA输出。
RB/XB:复用引脚,PS/2模式时为鼠标右键输入;否则,为XA输出。
MB/YB:复用引脚,PS/2模式时为鼠标中键输入;否则,为YB输出。
LB/YA:复用引脚,PS/2模式为鼠标左键输入;否则,为YA输出。
XY_LED:激光LED控制输出,在物体长时间不移动时,HDNS2000可以控制LED关闭,以节约能量。
VDD3:3.3 V直流电源输入。
REFB:内部参考引脚,通过电容与VDD3相连。
PS2_D :PS/2接口的数据端。
NRESET:低电平复位引脚。
VDD5:5 V直流电源输入。
GND:电源地。
OSC2:晶振输出。
OSC1:晶振输入,外接18.432 MHz晶振。
2 HDNS2000与AVR单片机接口设计
2.1 HDNS2000与AT90S8015接口
HDNS2000直接提供有PS/2接口,方便了PS/2鼠标的设计;但在机电控制中,为了提高效率,宜直接采用HDNS2000的另一种输出模式,即X向与Y向两通道四状态输出模式。此时XA、XB指示X向移动状态,而YA、YB指示Y向移动状态。图 4为HDNS2000与AVR单片机AT90S8515的接口原理图。接口主要占用了4个引脚,其它两个是可选的,所以,即使是AVR中最低档的ATtiny系列也可以方便地与HDNS2000连接。
图4 HDNS2000与AT90S8015接口原理图
另外在对节能要求不高的场合,可以将激光LED的一端直接与地相连接,而通过控制开关三极管2N3906来主动控制HDNS2000的工作状态。本文作者在设计时正是采用的这种方式。在进行系统设计时,最好采用安捷伦公司提供的套件,其中包括HDNS2000芯片、HDNS2100透镜、HDNS2200 激光LED卡件及HLMP-ED80激光LED,激光波长为639 nm。
2.2 四位状态机的工作过程
在HDNS2000内部有两个状态机分别指示X、Y两个方向,每个状态机又有四个稳定的状态。图5是状态机的示意图。由图5可见,一开始系统处于状态0,每当检测到物体向正向或反向移动1个单位时就转移到下一个状态,所以只要连续监测状态机状态的变化就可以判断物体移动的方向和距离。图6(a)和(b)分别为负向移动和正向移动时状态机输出的波形。值得注意的是,每个状态的最少停留时间为133μs。
2.3 接口软件设计
由状态机输出波形图可以看出,有一种很简单自然的接口设计方法,就是将状态输出引脚接到单片机的外部中断引脚上,使其在每个波形的上下边沿都产生中断,再在中断处理程序中,检测另一对应波形的电平高低,就可以判断移动方向。比如在XA的上升沿时,若XB是低电平就是左移,若XB是高电平就是右移。这种方法需要单片机提供足够多的外部中断。若同时检测X向与Y向运动,且单片机1个引脚不能同时提供上升沿和下降沿中断的情况下,就需要占用8个中断、8条引脚;而目前许多单片机仅提供2个外部中断引脚,这种要求显然较为苛刻。
另一种方式就是降低精度要求,仅在XA与YA的上升沿进行检测,此时仅需要2个外部中断引脚。但这种方式在一种极端条件下会出错,读者可以自行分析。若只检测X一个方向,则可以同时检测上下沿中断,这样不会出错。这种方式牺牲了一点对运动换向和震颤的敏感度;但编程简单,不失为一种好方法。
本文采用的是查询方式,这种方式不占用任何中断,且能够不损精度地同时检测X向与Y向运动。前面已经提过,每个状态的最小保持时间为133 μs,所以,只要将查询的周期控制在60μs之下就可以抓住每个状态的变化。对于AT90S8515,若按晶振为8 MHz计算,则只需将查询周期汇编指令数控制在450条以下就可以了。实际上,以下给出的C语言程序经过编译后只有不大于60条汇编指令,完全能够满足系统要求。
该方法的基本思想是将状态机的前一状态与现在的状态组合在同一字节内,如表1所列,寻找其中的规律,简化程序设计。表1中以PRE开头的表示前一状态的对应值。
表1 组合前后两状态在同一字节
位bit | 3 | 2 | 1 | 0 |
值 | XA | XB | PRE_XA | PRE_XB |
位bit | 7 | 6 | 5 | 4 |
值 | YA | YB | PRE_YA | PRE_YB |
以X向移动为例(仅看前半字节),正向移动时对应的值为0b1000、0b1110、0b0111、0b0001,负向移动时对应的值为0b0010、0b1011、0b1101、0b0100。假设状态不变的情况已经排除,且查询周期足够短,不会出现相对周期的组合值。所以只要能将以上两组值区分开来就可以了,这也正是程序中两条条件判断语句的目的。读者可以对照程序自行验证。接口程序如下:
while(1){
state=PINA&0xcc;
state_change=state^pre_state;
combo_state=sate | (pre_state>>2);
if(state_change & 0x0c)
{
if((combo_state & 0x06) == 0x06)
{asm("INC R20");goto next;}
if((combo_state | 0x09) == 0x09)
{asm("INC R20");goto next;}
asm("DEC R20");
}
next:
if(state_change & 0xc0)
{
if((temp & 0x60) == 0x60)
{asm("INC R21");goto end;}
if((temp | 0x90) == 0x90)
{asm("INC R21");goto end;}
asm("DEC R21");
}
end:pre_state=state;}
程序已经事先定义了寄存器R20与R21分别为X、Y向的计数器,用来表示X、Y向移动的距离。以上程序段利用内嵌汇编语句优化了程序结构。实际上,还可以对编译器生成的汇编代码进行优化,这里就不再详述了。
结 语
以上软硬件接口设计虽然是以功能强大的AVR单片机作为例子,但通过仔细分析不难发现,在简单的应用场合,用普通的51单片机,甚至如AT89C2051在12 MHz晶振频率下也可以实现其功能。所以整个系统会是相当廉价的。
安捷伦公司最近在继HDNS2000之后,又推出了升级芯片HDNS2051和适于无线应用的芯片HDNS2030,除了更强的处理能力外,主要改进还在于采用了单电源供电,提供了省电模式,去掉了不实用的PS/2接口,引入了同步串行口,允许用户对分辨率进行设置等。这些改进极大地方便了用户的使用,一方面扩大了其光学感测芯片市场占有率,另一方面无疑也为机电产品设计者提供了一种更强大、更方便、更廉价的运动检测方案。
- HDNS(6704)
相关推荐
中图仪器光学3D表面轮廓仪在光学行业中的应用
光学传感器在电子应用中的作用
在运动控制中,传感器是控制的关键部分
ADXL362有时无法产生运动中断是怎么回事?如何解决?
Avago两款发光LED光学导航传感器
Avago推出SoC系统级芯片和光学导航传感器产品
DM368运动检测功能问题,求助。
ESSE触控芯片在方案应用中遇到的问题怎么解决
HCTL-2020 解码器及其在多关节机器人运动控制中的应用
SMD-240912CW-02运动检测器模块
SMD-240912PS-02运动检测器模块
ST多轴运动传感器模块实现精确的运动检测功能
Sub-1 GHz无线运动检测器系统
TMS320F28035芯片在运行过程中时常出现宕机现象
TheUMS与Wi-Fi相结合的超小型雷达运动检测传感器
UAA4713运动检测器接口芯片相关资料分享
adxl362使用在高温环境时,在静止状态下进入运动模式
光电鼠标电路原理分析
加速度传感器的原理和应用-手机翻转、失重检测、运动检测、位置识别
基于图像处理的PCB自动检测系统的设计与研究(第一部分)
封装天线设计简化毫米波在楼宇和工厂中感测的教程
怎么通过五种运动检测模式实现应用产品的变革?
求助运动检测传感器选型
用于自动检测的板测宽仪
请问ADXL362有时无法产生运动中断是什么原因?
转:运动检测及测速GUI
采用16-bit MCU的超低功耗运动检测系统解决方案介绍
视频序列中的运动目标检测

雷达故障自动检测系统

光电鼠标芯片组在无接触检测运动物体中的应用

基于背景差分的人体运动检测

CAN总线在粮情自动检测系统中的应用


一种用CPLD实现视频信号运动检测的方法


ST多轴运动传感器模块实现精确的运动检测功能

一种带有运动检测功能的无线图像监控终端


运动检测和视觉跟踪的智能监控系统

聚焦医疗应用:ADI MEMS运动检测技术显身手

光流法在运动目标识别领域的理论与应用

运动检测新秀:首款监测心率的SMART自行车头盔

建立无线运动检测系统

降压升压转换器有助于延长电池寿命的运动检测

设计具有Sub-1 GHz的无线运动检测器系统

运动员身体形态轮廓自动检测软件设计

利用无线保真信号进行人体运动检测方法

基于16-bit MCU实现超低功耗运动检测系统解决方案[图]


低功耗无线PIR运动检测参考设计--TIDA-01476解决方案

使用高动态范围对数传感器和运动检测软件捕捉本地图像

单芯片毫米波解决方案设计运动检测系统


ISENSOR运动检测技术的结构、性能和应用

基于三轴数字加速度计的无线运动检测监控平台

被动红外运动传感器在运动检测领域中的应用

特斯拉研发运动检测传感器,可检测留在车内的儿童防中暑

基于被动红外 (PIR) 的运动探测器


探究具有Sub-1 GHz的无线运动检测器系统

使用Wi-Fi运动检测的家庭安全和医疗保健


分享一个超声波运动检测器电路


利用OpenCV构建一个RaspberryPi运动检测系统


PCBA生产中自动光学检测(AOI)检测的作用

使用ESP32CAM、Drive和Ubidots的运动检测系统

超声波运动检测器的电路图分享


设计具有Sub-1 GHz的无线运动检测器系统

使用Raspberry Pi的Motioneyeos网络摄像头运动检测

python opencv运动检测代码分享

双面检测aoi光学检测仪详细介绍


采用tinyAVR 2系列实现高性价比的低功耗PIR运动检测

评论