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的作用下就可以产生充电过程。

  • 相关阅读:
    十二、 Spring Boot 静态资源处理
    九、 Spring Boot 拦截器
    docker之搭建私有仓库
    docker之Dokcerfile 常用指令
    docker之网络管理
    docker之故障问题解决方案
    docker之搭建LNMP
    docker之容器数据持久化
    都说岁月不饶人,我们又何曾饶过岁月
    docker之容器管理
  • 原文地址:https://www.cnblogs.com/yuanqiangfei/p/14430088.html
Copyright © 2011-2022 走看看