新闻中心

EEPW首页 > 物联网与传感器 > 设计应用 > 电容触摸传感的理论框架

电容触摸传感的理论框架

——
作者:Thomas Perme 微芯科技公司 应用工程师时间:2009-08-06来源:电子产品世界收藏

  简单解码:按键是否被按下

本文引用地址:http://www.eepw.com.cn/article/96947.htm

  为了确定按键是否被按下,需要先确定滑动平均值。确定平均值之后,根据测量值相对于平均值的偏差可以指示按键是否被按下。对于我们的系统,读数下降表示按键按下。因为涉及到一些环境效应和其他因素(例如噪声),所以必须设置一定的容限。但是,该系统未提供迟滞值,若读数在均值与判决门限值之差附近上下变化,就会出现系统在判定按下与未按下之间来回振荡这一糟糕的情形。为了避免这一点,需要包含迟滞值:

  if (reading < average – trip) {

  Buttons.SENSOR0 = PRESSED;

  } else if (reading > average – trip + hyst) {

  Buttons.SENSOR0 = UNPRESSED;

  }

  以上代码在按钮释放中增添了迟滞值,使按钮不会产生振动。这也为开关构造了最低程度的消抖功能。机械按钮会在0-VDD之间来回抖动。按钮不会产生该问题;但是,通过增添迟滞值,按钮按下的操作与原来无异,只是加强了对按钮释放的判断。这可以产生最低程度的消抖效果,因为单次按下仍然可以触发按键。要进一步增强消抖,可以要求连续几次的读数均有效,才表示按钮确实按下,然后向应用程序指示按钮被按下。这样可以防止虚假的低读数影响系统。

  复杂解码方案

  上面用于确定按钮是否被按下的解码方案是相当简单的。

  对于百分比按下检测,将继续使用前面讨论的求均值方案。但是,读数变量将变换为如下形式:

  unsigned long percent;

  percent = average – (reading*16);

  if (percent < 0) {

  percent = 0; // 忽略上升

  } else {

  percent = percent * 1000; // 乘以1000

  percent = percent / average; // 结果使用100.0%的形式

  }

  结果变量percent包含0~1000的值,更具体地说,值的范围约为0~200(代表20.0%)。结果值保持单个小数位,因为更多小数位并不会提高精度。

  更换先前的“if”语句,产生类似于以下语句的“if”语句:

  #define PCT_ON 50 // >5.0%,打开

  #define PCT_OFF 30 // <3.0%,关闭

  if (reading < PCT_ON) {

  Buttons.SENSOR0 = PRESSED;

  } else if (reading > PCT_OFF) {

  Buttons.SENSOR0 = UNPRESSED;

  }

  下一个复杂解码方案称为“多键表决”。如前面所讨论,不仅会与手指和周围的地产生耦合,而且会相互耦合。因此,触摸一个会影响另一个传感器,但影响程度通常会低于其他意外激励。如果即使影响程度较低,影响仍足以触发按下状态,会发生什么情况?



评论


相关推荐

技术专区

关闭