原创 Touch Sensor Library -- 来自ST的大礼

2009-2-21 04:02 5857 9 13 分类: MCU/ 嵌入式

今天看到一个帖子说是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的方案的优点是占用的程序空间少。

PARTNER CONTENT

文章评论4条评论)

登录后参与讨论

用户313618 2011-3-31 15:22

hi , well done do you still work on some TouchSensing projects ? oh by the way ,, the principle that u talked about in this article is not

用户906612 2009-5-13 12:46

写的非常好!呵呵

用户131114 2009-3-28 01:43

诶,只是看了一下ST提供的Touch Sensor Library的代码,分析了一下各个功能是如何实现的。我是拿不到ST的Touch Sensor的Demo板的。 但是可以拿到Atmel方案的Demo板,以后会针对Atmel的方案做一些测试,并提供一些经验。

用户156926 2009-3-27 13:01

文章写得好,期待更多关于touch lib的文章!!
相关推荐阅读
用户131114 2010-12-25 22:43
征集各种单片机/存储器的支持
先随便列几个:Actel FPGA,Renesas R8C,Nuvoton Cortex。当然,Versaloon已经支持的就不需要了。当然,一些简单的比如SPI Flash,可以都可以。合作(或者交...
用户131114 2010-12-11 17:06
STM32F207 demo板原理图
这个硬件是VersaloonHandy平台的第一个测试评估硬件。资源:1. usb device + host, LTC41602. 3路可控电压,分别用于SD供电、TFT背光、对外供电,IIC接口控...
用户131114 2010-09-13 15:13
Versaloon 平台硬件规划
按照计划,几个平台都进行的非常顺利。第二批的生产也在进行中。 抽空规划了一下Versaloon平台的下一个硬件。1。使用120M STM32F203系列100脚芯片,USB 2.0 HS OTG2。2...
用户131114 2010-09-11 01:04
USBDM也成为浮云了。。。。。
HSC08/HCS12(X)的调试支持也基本按时完成了。。。。。。碰到的困难比预想的多,8过仍旧只是浮云。。。。。。coldfireV1应该也可以支持,不过需要有demo板测试并做相应的调整。 上图:...
用户131114 2010-09-02 02:28
Versaloon平台发展规划
最近发布的Versaloon调试仿真平台计划,相信很快就能完成第一阶段,有人怀疑不? Versaloon在实现的理念上,有其先进性,在同一个简单的硬件上,能够实现这么多种芯片的支持,并且具备不错的性能...
用户131114 2010-09-01 17:40
STLink简单的像浮云一样
原来计划花2天时间,没想到一天就搞定了。。。。。。在STM8S103F2上测试通过。STVP在下载STM8S103F2的速度并不是一般的慢啊,每次64字节。。。。。。OMG。。。。 下一步准备OSBD...
EE直播间
更多
我要评论
4
9
关闭 站长推荐上一条 /3 下一条