之前由于忙着画板子、调试,导致没能按时完成uFun的评测报告,放假最后一天便猛补uFun相关资料,看到群里诸多大神又是触摸按键控制RGB灯,又是用测距传感器做倒车雷达的,又是扩展OLED进行屏幕显示的。看得我是着实羡慕呀。怎奈自己对于STM32程序的编写能力有限,加之手边并没有什么可以拓展的模块,就不再编写STM32的程序了。 看到论坛里大家写的比较多的就是关于RGB灯、以及触摸按键的帖子,大概是因为这两个模块直接明了吧。写完程序烧录进去后,是否达到理想效果非常易于观察。那么接下来我就电容触摸按键的原理进行一个简介吧。首先,触摸按键相对于传统的机械按键有寿命长、占用空间少、易于操作等诸多优点。电容触摸按键其实就是在PCB板子上进行覆铜形成的,其实现原理如图所示:

先用开关将Cs(或Cs+Cx)上的电放尽,然后断开开关,让R给Cs(或Cs+Cx)充电,当没有手指触摸的时候,Cs的充电曲线如图中的A曲线。而当有手指触摸的时候,手指和触摸按键的焊盘之阿金引入了新的电容Cx,此时Cs+Cx的充电曲线如图中的B曲线。从图中可以看出,A、B两种情况下,Vc达到Vth的时间分别为Tcs和Tcs+Tcx。其中,除了Cs和Cx我们需要计算,其他都是已知的,根据电容充放电公式:Vc=VO*(1-e^(-t/RC)).其中Vc为电容电压、R为充电电阻、C为电容容值,e为自然底数,t为充电时间。根据这个公式,我们就可以计算出Cs和Cx。 只要我们能够区分Tcs和Tcs+Tcx,就已经可以实现触摸按键的检测了。当充电时间在Tcs附近时,我们可以认为没有触摸按键按下;当充电时间大于Tcs+Tcx时,就认为有触摸按键按下(Tx为检测阈值)。
在了解了电容检测的原理后,在每次MCU复位重启的时候,我们执行一次捕获检测(可以认为此时没触摸),记录此时的值,记为tpad_default_val,作为判断的依据。在后续的捕获检测当中,我们就可以通过与tpad_default_val的对比,来判断是否有触摸发生。
以上就是电容触摸按键的检测原理了,文章来源于正点原子STM32F1开发指南(精英版)-库函数版本。