今天看到一个帖子说是ST发布了Touch Sensor的Library,并且是以源代码形式。由于自己对触摸按键还是有一定的了解(以前做过Quantum的技术支持,当时就是不肯告诉我实现原理细节,现在总算有源代码可以一探究竟了),所以马上下载了源代码,看了一下。虽然碰到了一些困难,比如,没有用过STM8的,Datasheet里没有寄存器的位定义,没有STM8的指令集。但凭借自己高深莫测、变化多端、是常人1000倍的恰库啦、小宇宙和灵压,借助雅典娜血染的神圣衣、多种影分身和斩魂刀的帮助下,不断进入仙人模式+终极虚化。终于在几个小时内,看完并理解了Touch Sensor的实现原理,处理流程和算法。特此写这篇文章。
声明:所有这些相关的资料,只得用于ST出品的宇宙第一超级无敌前无古人后无来者高性能低功耗8位单片机STM8上(参考Touch Senser Library自带的License)。
废话不多说,上菜。。。(再说估计要被打了)
【实现原理(单路按键)】
对于单个按键,由2个IO口来实现对按键的信号的采样。关键的问题是,按键信号是什么?------ 按键的信号是时间。参考【处理流程】中图片的信号波形部分。LOADREF引脚为输出,另一个连接按键的引脚是输入(这里称为KEYPIN)。当LOADREF输出高电平时,KEYPIN从低电平变化到高电平(输出低电平转换到输入,并检测到高电平)的时间;和当LOADREF输出低电平时,KEYPIN从高电平变化到低电平(输出高电平转换到输入,并检测到低电平)的时间,这2个时间(以下成为按键的信号值)与电极上的电荷多少有关。当手隔着介质板按在电极上时,就形成了电容,使得电极上的电荷增多,手离开时,电极上的电荷减少,通过按键的信号值就能够反应按键是否被“按下”,由于这个技术实质是检测电荷的移动,所以称为电荷转移技术(Charge Transfer),是原Quantum公司的专利,现被Atmel收购,估计是ST在Quantum被收购前,从Quantunm购买了这个技术,所以才有今天的Touch Sensor Library。
【按键信号采样流程】
每次系统主循环轮询到按键检测函数后,便开始一个Port接着一个Port来检测按键。每个Port的检测分2个步骤,一个是获得按键信号,另一个是按键处理状态机。例如,"Acq SCKEY_P1"是检测Port1口上的按键的信号,"Proc SCKEY_P1"是处理Port1口上的按键的状态机。检测一个Port上的按键,也就是分别检测这个Port上所有配置为有效的按键引脚(也就是上面所说的KEYPIN)。每个KEYPIN会检测多次,由AcqNum定义。每次检测,是计算多次充电和放电时间的平均数,并调整范围,得到的结果就是这个按键的信号值。如果信号值不在定义的正常范围内,则为“Rejection”,如果超过一定数量,这认为该按键口出错。
【单通道按键状态机转换过程】
上电:所有按键初始化,状态为DISABLED_STATE。然后,应用程序设置使能的按键口。进入主循环中的按键检测函数,如果检测到对应的口上采集到的信号值正常,这时进入CALIBRATION_STATE状态。CALIBRATION_STATE状态下,会把几次检测到的信号值求平均值,作为参考值。并进入IDLE_STATE,可以接收手的触摸和洗礼 -_-!!!。
手摸上后:检测到的按键有效信号值(这里的有效信号值为按键的信号值减去参考值,用这种方式,就可以避免环境的变化对按键效果的影响,关键就在这里,用相对量来表示。最早的Cypress的触摸按键方案用的是绝对量,在环境变化时,容易误触发或者效果不理想)会增加,并大于按键有效检测门限。则进入PRE_DETECTED_STATE状态。在PRE_DETECTED_STATE状态下,首先会检测DES(相当于Windows中的RadioBox,即一组按键中,只有一个可以按下),如果DES组中,已经有其他按键处于按下状态,则当前按键的按下状态无效;否则,连续检测到信号几次后(积分处理,用于减少干扰的影响),进入DETECTED_STATE状态。在DETECTED_STATE状态下,如果检测到的信号小于按键释放门限后,则进入POST_DETECTED_STATE状态,然后同样经过积分(检测多次,避免干扰),进入IDLE_STATE。如果按键信号一直有效(超过一定时间,可能是由于某个金属物件被置放的按键上),则需要重新进入CALIBRATION_STATE进行校准,校准后,如果手按下(在金属物件没有移开的情况下),同样可以正常触发按键。
PreReCalibration:在IDLE_STATE下,如果按键信号增加或者缓慢减少,系统也会逐步重新校准,使得在环境变化时,仍旧能够有良好的效果(参考值会变化),且不会误触发。但如果有效信号值突然减小,并超过一个负门限,这需要进入PRE_CALIBRATION_STATE状态。在PRE_CALIBRATION_STATE状态下,通过积分后,再进入CALIBRATION_STATE状态,重新校准。
【ST方案的优缺点】
当然,偶米有STM8的芯片和硬件,所以也米有测试过,这里只是根据偶对触摸按键的原理的理解,大致无聊d判断一下ST的方案的优缺点,实际的结果还需要等有机会测试后,才能确定。
1.REF引脚公用。
Quantum的CT技术中,这个引脚不是公用的,原因在于稳定性和抗干扰性。ST的方案虽然节约了IO口,但可能会使得干扰下,效果不佳。另外,由于公用了REF引脚,所以当多个按键同时按下时,可能按键信号不佳。
2.按键参数统一
按键参数是在配置文件中的10) TSL PARAMETERS CONFIGURATION里定义的宏。这些参数对于所有按键公用,使得无法针对某个单一按键来调整参数。当触摸按键的电极大小和形状不同时,所有按键使用同一个参数显然无法得到最佳的效果。在原先Quantum的方案中,每个按键的参数都是可以调节的。ST的方案的优点是占用的程序空间少。
用户313618 2011-3-31 15:22
用户906612 2009-5-13 12:46
用户131114 2009-3-28 01:43
用户156926 2009-3-27 13:01