摘要: 提出了一种基于微加速度计的无线惯性鼠标的设计方案。该方案以微加速度计ADXL213作为信号检测元件,并采用低功耗处理器MSP430F135和RF芯片nRF401进行信号处理与无线传输。按该方案设计的鼠标结构简单、密封性好,在降低鼠标功耗和提高鼠标使用灵活性等方面具有较大的应用前景。
1 引言
鼠标作为PC机的输入工具,其重要性不言而喻。但是,随着计算机外围设备的越来越多,各种连线也越来越多,给用户带来了许多的不便。于是,人们便有了无线接口的想法,迫切希望有一种鼠标,它能够克服诸如有线的距离限制、有线鼠标的线材损耗、连线多且错综复杂等问题。在这种情况下,无线鼠标应运而生。目前市场上的无线鼠标几乎都是光电射频鼠标,它虽然克服了有线的缺点,但在功耗、使用场合等方面仍然存在一些不足。
采用微加速度计设计的无线鼠标,既可以独立使用,作为桌面PC 的鼠标;同时也可以作为单独的模块嵌入到现有的机械鼠标和光电鼠标中,实现鼠标的悬空使用,方便用户的操作。该设计兼顾了设计成本与鼠标使用寿命,使得惯性鼠标具有相当大的竞争力。
2 系统硬件设计
2.1 信号检测电路的设计
ADXL213是一种低成本、低功耗、集成了信号调理电路和占空比调制器的微加速度计芯片。输出为PWM数字信号,因此可与计数电路或单片机直接接口,无须放大和A/D电路。用户只需外接三个无源器件就可以设置滤波器输出带宽和输出PWM波的周期。
ADXL213的典型带宽为1Hz~2500Hz,其-3dB带宽公式为:
可见,带宽主要由C(x,y)确定。C(x,y)越小,信号带宽越宽,分辨率越高,响应速度越快。设计时,首先要确定被测加速度的频率范围,然后再设计滤波器的参数。尽量使滤波器的带宽略高于信号的最高频率,这样做不仅有利于滤除高频干扰,也利于降低系统噪声干扰。
对于占空比的设计,占空比调制器(DCM)的周期就是芯片输出方波的周期T2。该周期是由RSEL确定的,其关系式为T2=RSEL/125MΩ(RSEL是用来设置输出信号循环周期的电阻)。当DCM输出方波频率大于模拟带宽10倍以上,测量准确度就很理想。从这一点来看,T2越小越好,但是T2的减小会提高对计数器以及微控制器的处理速度要求。另一方面,要提高测量的分辨率就应该尽量提高T2时间内的计数次数,这就要求计数器和控制器有更高的处理速度,而实际中硬件的处理速度是受到器件性能限制的。综上所述,T2是根据模拟带宽、计数器和处理器速度以及测量分辨率的要求共同确定的。在设计时要明确测量的指标要求,综合考虑各种因素。
本设计中要求被测带宽为20~50Hz,则选择滤波器的带宽为60Hz,选定T2为1.25ms,即DCM输出方波频率为800 Hz,该频率是测量最大频率的16倍,因此可以很好地反映加速度的变化。根据上述选择,可以计算出电阻RSEL为156KΩ,两个电容选用0.08μF。
对于鼠标的按键设计,主要是要考虑消抖。考虑到鼠标体积、功耗等要求,设计中采用软件延时方式来消抖。加速度计及鼠标的按键信号的处理由MSP430F135单片机来完成。
设计时应将鼠标响应的实时性放在第一位,而将鼠标的功耗放在第二位。加速度计需设置一个控制开关,以解决其一直有信号输出的问题(加速度计有零漂,鼠标倾斜等原因)。按键及加速度计与单片机的连接如图1:
图1 鼠标按刍及加速度计与单片机的连接图
2.2 无线模块的设计
图2 发送端的硬件电路图
图3 接收端的电路图
传输模块的关键是无线收发芯片。考虑到鼠标的体积和功耗等方面的因素,无线通信模块选用了Nordic公司的nRF401芯片。nRF401在工作时,只需要外接一个晶振和几个阻容、电感元件,基本无需测试。设计中,单片机通过异步串口与nRF401通信,然后再分别使用三个引脚作为nRF401的通信控制即可。外接晶体及阻容、电感等元件均按照nRF401推荐的典型参数值选取。发送端的硬件电路如图2。接收端的nRF401接收到数据后通过USB接口与PC机相连,接收端的处理器采用AT89C51,具体连接见图3。
为了获得较好的RF性能,PCB设计至少需要两层板来实现,分成射频电路和控制电路两部分来布置。nRF401采用PCB天线,在天线的下面没有接地面。为了减少分布参数的影响,PCB上应该避免长的电源走线,所有元件地线,VDD连接线,VDD去耦电容必须离nRF401尽可能地近。nRF401的电源必须经过很好的滤波,并且与数字电路的电源分离,在离电源脚VDD尽可能近的地方用高性能的电容去耦,最好是一个小电容和一个大电容相并联。PCB板顶层和底层最好敷铜接地,把这两层的敷铜用较多的过孔紧密相连,再将VSS脚连接到敷铜面。所有开关信号和控制信号都不能经过PLL环路滤波器元件和VCO电感附近。
2.3 USB接口硬件设计
鼠标与计算机的通信采用USB通信方式。USB控制芯片选择了PHILIPS公司的PDIUSBD12。PDIUSBD12与89C51的连接如图3,PDIUSBD12的8位并行数据接入89C51的P0口,地址线A15(P2.7)作为PDIUSBD12的片选,地址线A14(P2.6)作为PDIUSBD12的命令或数据的选择线。PDIUSBD12 与89C51的数据交换采用中断方式(外中断INT0)。PDIUSBD12从USB口得到信息后向89C51发出中断信号,89C51进入中断处理程序进行响应。
3 系统软件设计
3.1 信号检测部分的软件设计
信号检测部分软件设计的关键是计算加速度计输出信号的占空比,从而计算出加速度值。待机时,处理器工作在低功耗模式LPM3,从而降低整个系统的功耗。加速度计的输出信号接MSP430F135的比较/捕获模块的输入端,为了能精确测出输出信号的占空比,可利用MSP430F135中Timer_A的比较/捕获模块,令其工作在捕获模式,且让其在上升沿和下降沿都捕获。在上升沿时,捕获一个定时器数据,这个数据在捕获寄存器器中读出;再等下降沿到来,在下降沿时又捕获一个定时器数据;两次捕获的定时器数据差就是脉冲的宽度也即输出信号中高电平的宽度。
限于篇幅,这里仅给出X轴的信号检测部分的程序,分别用start和end记录上升沿和下降沿捕获时计数单元的值:
#include 《msp430x13x.h》
unsigned int start,end;
unsigned char overflow;
void main(void) {
WDTCTL=WDTPW+WDTHOLD; //关闭看门狗
P1DIR|=BIT0+BIT4; //P1.0设为输出
P1SEL|=BIT1; //P1.1为模块使用
CCTL0=CM0+SCS+CAP+CCTE0; //软件捕获,CCIOA
输入,允许捕获中断
TACTL=TASSEL0+TACLR+TAIE+MC1; // ACLK,连续计数模式,清除TAR,允许定时器溢出中断
_EINT(); //系统总中断
for(;;){ //低功耗模式3
_BIS_SR(CPUOFF+SCG1+SCG0);
_NOP();}}
interrupt[TIMERA0_VECTOR]void TimerA0(void) {
Switch(TAIV) {
case:2; //捕获中断
if(CCTL0&&CM0) //上升沿
{CCTL0=(CCTL0&&(~CM0))|CM1; //改为下降沿触发
star=TAR; //记录初始时间
overflow=0; } //溢出计数复位
else if(CCTL0&&CM1) //下降沿
{CCTL0=(CCTL1&&(~CM1))|CM0; //改为上升沿触发
end=TAR; } //用start、end和overflow计算宽度
break;
case 10; //定时器溢出中断
overflow++; //溢出计数加1
break;
default: break; }}
3.2 无线通信模块部分的软件设计
为了节能,nRF401大多数情况下应处于关闭状态。由于无线部分硬件不具备自动唤醒功能,nRF401由MSPF135根据加速度信号来唤醒。在通信模块的设计中,鼠标的功耗、响应的及时性和指针定位的准确性是要考虑的主要问题。鼠标的通信是一种非对称的单工通信,系统的功耗主要产生在鼠标主体部分即发送端。接收端由USB接口供电,可以一直处于接收监听状态,不影响系统的功耗,因此不需要设置同步码来唤醒接收端,可以在帧尾加上2字节的CRC校验来校验数据传输的正确性,提高抗干扰能力。
综上所述,通信帧格式采用了1字节地址加4字节有效数据信息再加2字节CRC校验的短帧格式。当CRC校验错误时,直接丢弃该帧。这样做虽然牺牲了数据传输的可靠性(数据传输的可靠性对鼠标来说并不太重要),却换来了整个系统功耗的降低和响应时间的加快。
程序设计时应注意:nRF401的通信速率最高为20kbit/s;发送数据之前需将发送端置于发射模式(TXEN = l),接收端一直打开。在待机模式,电路不接收和发射数据。待机模式转换为发射模式的转换时间至少2ms;待机模式转换为接收模式的转换时间至少3ms。
3.3 USB接口的软件设计
USB接口的软件设计部分包括接口外设端的固件程序、PC操作系统上的USB设备驱动程序和串行通信程序。固件设计的目标是使PDIUSBD12在USB上达到最大的传输速率。本方案的固件设计采用完全的中断驱动方式。当CPU处理前台任务时,USB的传输在后台进行,中断和主循环的数据交换通过事件标志和数据缓冲区进行。这样既保证了最佳的传输速率,又简化了编程和调试。固件结构如图4所示,图中箭头表示数据传输方向。
图4 固件结构和数据流向
固件中必须先定义命令和数据所在的地址:
unsigned char d12 _cmd xdata_at_0X7FFF;
unsigned char d12_data xdata_at_0X3FFF;
向PDIUSBD12发命令和对其进行读写的子程序:
void_wrt_cmd (unsigned char command)
{d12_cmd=command;} // 向PDIUSBD发命令
void wrt_data (unsigned char tmp_data)
{d12_data=tmp_data;} // 向PDIDUSBD写数据
void read_data()
{return (d12_data);} // 从PDIUSBD12读数据
PDIUSBD12命令接口包括了对PDIUSBD12读写操作的所有命令,通过定义若干个子程序对应于各自不同的命令。当固件中其它程序需要对PDIUSBD12进行读写时,只须调用其中相应的子程序。
本设计的驱动程序直接采用了通用的USB鼠标的驱动程序,因而可以在很大程度上简化软件设计。
4 结语
本文作者创新点:本设计按照低功耗系统的设计原则,利用加速度计和用户操作的灵活性来判断和检测鼠标的移动,设计了一种没有活动部件、机械传动机构和光电器件的密封性好的低功耗无线惯性鼠标。测试结果表明该无线惯性鼠标灵敏度达到了使用要求,很好地解决了现有无线鼠标存在的电池寿命低、使用场合不灵活等缺点,具有较大的应用前景。
-
鼠标
+关注
关注
6文章
591浏览量
39760 -
光电器件
+关注
关注
1文章
178浏览量
18511 -
低功耗
+关注
关注
10文章
2398浏览量
103680
发布评论请先 登录
相关推荐
评论