新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > CapSense触摸感应技术在手机中的应用

CapSense触摸感应技术在手机中的应用

——
作者:赛普拉斯半导体国际有限公司 翁小平时间:2006-10-23来源:中电网收藏

触摸感应技术是赛普拉斯半导体使用CY8C21x34系列PSoC芯片开发的、用于触摸式按键、触摸式滚动条(Slider)、触摸式平板(Touchpad)的触摸感应技术。它利用PSoC的CY8C21x34系列芯片一些特有的资源,根据电容感应的原理和松弛震荡器的技术实现触摸感应。区别于其他触摸感应技术,技术具有几乎不需要外围元件、每一个按键的灵敏度可单独调整、一个芯片可同时实施多个触摸式按键和触摸式滚动条等优点。可用于各种家电产品代替传统的轻触按键和薄膜键盘。同样它也非常适用于时尚手机。本文介绍技术的基本原理以及它在手机中的应用。

CapSense技术的基本原理

CapSense技术是根据电容感应的原理和松弛震荡器来实现触摸感应。众所周知,PCB板上相邻的导线或铜箔之间存在寄生电容Cp。如图1所示,当有手指接近或触摸铜箔时,相当于附加了两个电容,这两个电容等效于并联在Cp上的一个电容Cf。如果在手指与铜箔之间有不导电的介质,它将影响Cf。介质越厚、介质的介电常数 r越小,对它的影响就越大。为了检测Cp和Cp的变化Cf,我们用图2所示的电路对其实施操作。图中左半面是一个松弛震荡器,它的工作过程如下:使用恒流源以iCHARGE电流对Cp充电,当Cp上的电压上升并刚好超过比较器的反向输入端的电压VBG(1.3V)时,比较器翻转到高电平,控制复位开关闭合,Cp迅速放电到零。比较器翻转恢复到低电平,恒流源以iCHARGE电流再对Cp充电。这个过程周而复始,形成震荡。而震荡的周期近似于充电的时间:

tCHARGE=CpVBG/iCHARGE

图中右半面是一个间隔计数器。它由一个8位的PWM和一个16位的定时器组成。它实施一段时间间隔(PWM的Duty)里16位的定时器对系统时钟的计数。PWM的输入来自比较器的输出,16位的定时器被设置成捕捉定时器,它的输入来自系统时钟SYSCLK。当PWM进入Duty状态时启动16位的定时器工作,当PWM的Duty状态结束时捕捉16位定时器的计数。这个计数的值为:
n=NperiodsXtCHARGEXSYSCLK

其中NPERIODS为当PWM为Duty状态时松弛震荡器的震荡次数,它的值被设置成PWM的周期值减2。将tCHARGE=CpVBG/iCHARGE代入上式有:

n=NPERIODSXCPVBGXSYSCLK/iCHARGE

当其他值都被固定以后n和Cp有唯一确定的关系。如果有手指触摸时,Cp将变化到Cp+Cf,而n将由n1变化到n2

⊿n=n2-n1

当⊿n大于预先设定的阀值时,就可以表明有手指触摸。图3是无手指触摸和有手指触摸对应松弛震荡器的波形和PWM及定时器计数值变化的示意图。

CapSense技术的实施

CapSense所需要的资源包括松弛震荡器和间隔定时器全部都被包含在PSoC芯片里,芯片外围不需要任何元件。为了实施CapSense,PSoC的集成开发环境(IDE)Designer4.2已经为CY8C21x34芯片建立了CSR模块,通过对CSR模块的硬件配置和函数的调用来实施CapSense。


CSR模块的配置

在IDE的器件编辑状态,选择并放置CSR模块后,激活CSR模块导向器(图4),在CSR模块导向器中可以设置多少个触摸按键以及每一个按键所对应的管脚;也可以同时设置一个或两个滚动条(Slider)以及滚动条由几个感应块组成和它们所对应的管脚。滚动条的分辨率可以大于组成它按键的个数,它也在这里被设定。

在模块的参数设置窗口,可以设置CSR模块的工作模式(周期或频率)、手指信号的阀值、噪声信号的阀值、基本线修正的速率和抗ESD信号的周期。当所有设置完成以后,点击Generate Device Application按钮,即可自动生成CSR模块有关的程序供用户程序调用。


几个关键函数的调用

下面是CSR模块的几个关键函数:
void CSR_Start();
void CSR_Stop();
CSR_SetDacCurrent(BYTE bValue, BYTE bRange);
CSR_SetScanSpeed(BYTE bDivider);
void CSR_StartScan(bStrtSw, bSwCnt, bMode);
BYTE CSR_GetScanStatus();
BYTE CSR_iReadSwitch(Byte bSwitch);
CSR_bUpdateBaseline(bSwGroup);
BYTE CSR_bGetCentroidPos(bSwGroup);

CSR_Start和CSR_Stop分别是启动和停止CSR模块。CSR_SetDacCurrent用于设定给Cp充电的恒流源的大小,bValue、bRange参数用于分两级设定恒流源的值。CSR_SetScanSpeed用于设置PWM的周期值,其参数bDivider的值减2为PWM的Duty值。上面两个函数的参数的调整可以调节触摸按键和触摸滚动条的灵敏度和扫描周期。 CSR_StartScan用于启动扫描,bStrtSw、bSwCnt和bMode参数分别用于设置第一个扫描键的键号、顺序扫描键的个数和扫描的方式,扫描的方式有单次扫描和连续扫描两种方式。 CSR_GetScanStatus函数返回扫描的状态,CSR_iReadSwitch函数得到扫描的结果即定时器的计数值。

CSR_bUpdateBaseline是一个重要而有多种功能的函数,如图5所示。对于每一个触摸感应键,都有一个Baseline用于跟踪在没有手指触摸时的定时器计数值,它是通过将每一次扫描得到的定时器的计数值做IIR滤波并符合有关条件后才作修正。作为差值比较的基准线,每一次扫描得到的定时器的计数值都要和它比较得到差值,该差值再和手指信号的阀值比较以判定有无手指触摸。参数bSwGroup可选0、1和2,表明本次调用是修正触摸按键还是第一或第二滚动条。返回值是0或1,表明无或有手指触摸。除了实施以上功能外,该函数还要完成峰值检测和ESD检测,用于提高测试的性能。

手指在滚动条上的定位

滚动条通常被做成锯齿排列,每一个锯齿条对应一个感应块,当手指触摸滚动条或在其上移动时,某一时刻会有几个连续的感应块被感应(如图6),手指中间对应的感应块感应量最大,两边顺序递减。这就可以用重心法来确定手指在滚动条上的位置,此式是n=\frac{\sum_{n=0}^{m}n


推荐阅读

评论

技术专区

关闭