zoukankan      html  css  js  c++  java
  • STM32(十九)电容按键检测

       如上图为一个电容按键结构图,由绝缘材料、金属感应片以及FR-4板材构成,金属感应片和接地的金属片形成一个等效电容Cx,当手指触摸时金属感应片和手指会形成一个Cs等效电容。

    工作原理:

      在电路板未上电时,可以认为电容Cx是没有电荷的,在上电时,在电阻作用下,电容Cx就会有一个充电过程,直到电容充满, 即Vc电压值为3.3V,这个充电过程的时间长短受到电阻R阻值和电容Cx容值的直接影响。但是在我们选择合适电阻R并焊接固定到电路板上后,这个充电时间就基本.上不会变了,因为此时电阻R已经是固定的,电容Cx在无外界明显干扰情况下基本上也是保持不变的。

      当手指触摸时,相同的电阻R情况下,电容容值=Cx+Cs,电容容值增大了,这就导致需要更长的充电时间,通过判断充电时间就可以判断电容按键是否被按下。

    测量充电时间:

      我们可以利用定时器输入捕获功能计算充电时间,即设置TIMx_CH为定时器输入捕获模式通道。这样先测量得到无触摸时的充电时间作为比较基准,然后再定时循环测量充电时间与无触摸时的充电时间作比较,如果超过一定的阈值就认为是有手指触摸。

    图33-4 为Vc跟随时间变化情况,可以看出在无触摸情况下,电压变化较快;而在有触摸时,总的电容量增大了,电压变化缓慢一些。

      为测量充电时间,我们需要设置定时器输入捕获功能为上升沿触发,图33-4中Vq就是被触发_上升沿的电压值,也是STM32认为是高电平的最低电压值,大约为1.8V。 tl和t2可以通过定时器捕获/比较寄存器获取得到。

      不过,在测量充电时间之前,我们必须想办法制作这个充电过程。之前的分析是在电路板上电时会有充电过程,现在我们要求在程序运行中循环检测按键,所以必须可以控制充电过程的生成。我们可以控制TIMx_ CH引脚作为普通的GPIO使用,使其输出一小段时间的低电平,为电容Cx放电,即Vc为0V。当我们重新配置TIMx_ _CH 为输入捕获时电容Cx在电阻R的作用下就可以产生充电过程。

  • 相关阅读:
    二分法查找递归方式()
    JDBC操作MySQL(crud)
    (转)JAVA中的权限修饰符
    抽象类和接口(面试题总结)
    java基础-集合
    Java泛型通配符以及限定
    div中嵌套的多个div使用了浮动后居中的办法
    将博客搬至CSDN
    (补)Java解析XML之dom4j
    Java单元测试
  • 原文地址:https://www.cnblogs.com/yuanqiangfei/p/14430088.html
Copyright © 2011-2022 走看看