ESP32 触摸传感器应用方案简介

ESP32 触摸传感器应用方案简介


ESP32 不仅提供核心的 Wi-Fi 和蓝牙功能,还集成了丰富的外设,不需要额外的外部元器件即可实现应用,比如,ESP32 支持具有 10 个触摸通道的触摸传感器系统。

目录

  • 1. 触摸按键简介

    • 1.1. 触摸按键的基本知识

    • 1.2. 开发流程

    • 1.3. 名词解释

  • 2. ESP32 触摸传感器介绍

    • 2.1. 触摸传感器主要特征

    • 2.2. 触摸传感器通道

    • 2.3. 触摸传感器功能描述

    • 2.4. 触摸传感器驱动程序介绍

  • 3. 触摸传感器机械和硬件设计

    • 3.1. 机械设计

    • 3.2. 使用芯片和模组的注意事项

    • 3.3. PCB 布局规范

  • 4. 触摸传感器软件设计

    • 4.1. Wi-Fi 对触摸的影响

    • 4.2. 触摸按键消抖方案

    • 4.3. 自校准方案

    • 4.4. 触摸按键软件设计

    • 4.5. 触摸滑块软件设计

    • 4.6. 触摸矩阵键盘软件设计

  • 5. 开发套件及相关资源

1. 触摸按键简介

电容式触摸感应技术已经广泛应用于家用电器、消费电子等领域,以此发展的触摸按键产品与传统按键相比按键有下面的优点:

  • 无机械装置,不宜磨损老化,超长使用寿命。
  • 表面无缝隙,无水分、杂质渗透。
  • 减少元件使用,BOM 成本降低。
  • 面板不需开孔,工业设计成本降低。
  • 产品外观美观,设计灵活。

1.1. 触摸按键的基本知识

电容式触摸感应技术通过测量面板(传感器)和其环境之间的电容变化来检测触摸界面附近是否有触摸事件发生。

1.1.1. 触摸按键基本结构

下面一个典型的触摸传感器系统组成的示意图。

电容组成 说明
Cground 触摸电路参考地和大地之间的电容
Ccomponet ESP32 内部寄生电容
Ctrace 走线与电路参考地之间的寄生电容
Celectrode 触摸电极与电路参考地之间的寄生电容
Ctouch 手指与触摸电极所形成的相对于大地的电容

触摸传感器的读数值是上述所有电容共同作用的结果。其中 Ctrace、Celectrode、Ccomponet 通常被统称为寄生电容 Cp(即未发生触摸动作时的电容)。Ctouch 为发生触摸动作时,系统总电容的变化量(ΔC==Ctouch)。当寄生电容 Cp 越小,Ctouch 越大时,触摸动作越容易被系统检测到,即触摸传感系统的灵敏度就越高。如下图所示的电容变化率影响关系:

下图显示了有手指触摸时的电场分布。触摸电极与手指之间形成电场。

开发步骤 说明
知识准备 设计人员需了解电容式触摸传感器工作原理,设计规则,设计参考
需求确认 确认使用触摸传感器的通道数,触摸电极类型(触摸按键,线性滑条,矩阵按键)
机械设计 参考规则选择触摸电极的摆放位置,触摸盖板材料(材料和厚度影响触摸的灵敏度)
PCB 设计 参考规则设计 PCB 的原理图和布局,减少板上寄生电容
软件开发 可以使用轮循式或者中断式设计应用。ESP32 也提供了多种触摸场景的软件设计参考例程,例程中包含滤波算法
阈值参数调节 根据自己的硬件环境选择合适的触发阈值,既能防止误触也能保证较强灵敏度
设计验证 触摸受设计环境影响较大,建议在产品上测试触摸传感器的灵敏度和稳定性

1.3. 名词解释

触摸电极:触摸传感器系统中的组件。可以是一个传感器或一组类似传感器,包括触摸按键、滑条、矩阵按键。

总电容量:指每个触摸传感器通道上的电容总量,包括触摸电路内部电容、寄生电容、触摸电容。

脉冲计数值:ESP32 触摸传感器内部电路对通道电容充放电,相同的时间间隔内的充放电次数称为脉冲计数值,此值与总电容量成反比。

灵敏度:触摸传感器触摸时的读数变化率,即 (非触发值-触发值)/非触发值*100%。传感器灵敏度取决于电路板布局、覆盖层属性、软件参数设置等。

稳定性:触摸传感器读数的离散程度,可以使用脉冲计数值的标准差表示。传感器稳定性取决于电路板布局、覆盖层属性、软件参数设置等。

测量时间:完成触摸传感器测量过程所需要的时间。

测量间隔:触摸传感器两次连续测量之间的时间。

寄生电容(Cp):寄生电容是由 PCB 走线、触摸电极、过孔以及气隙组成的传感器电极的内部电容。应该减少寄生电容,因为它会使触摸传感器的灵敏度降低。

栅格地:当设计有电容式触摸传感器功能的 PCB 板时,触摸电路周围应谨慎铺铜。接地铜层能增加抗干扰能力,也能增加触摸传感器的寄生电容 Cp,减少灵敏度。因此折中的方式是在实铜和净空之间选择一种特殊的 格填充的方式(地线交叉织成 状)。

触摸去抖:正常使用触摸按键时,阈值与触摸延迟在一定的范围内变化。通过设置合适的参数,可过滤掉假的触摸信 。

API:指的是触摸传感器 API,核心函数可在 ESP-IDF 中查看,具体介绍在 触摸传感器 API 参考 中查看,API 扩展可在 触摸传感器组件 中查看。

2. 触摸传感器介绍

本章介绍 ESP32 触摸传感器的管脚分布、工作原理及部分相关寄存器和驱动接口。

2.1. 触摸传感器主要特征

  • 最多支持 10 路电容触摸管脚/通用输入输出接口 (General Purpose Input and Output, GPIO)
  • 触摸管脚可以组合使用,可覆盖更大触感区域或更多触感点
  • 触摸管脚的传感由有限状态机 (FSM) 硬件控制,由软件或专用硬件计时器发起
  • 触摸管脚是否受到触碰的信息可由以下方式获得:
    • 由软件直接检查触摸传感器的寄存器
    • 由触摸监测模块发起的中断信 判断
    • 由触摸监测模块上的 CPU 是否从 Deep-sleep 中唤醒判断
  • 支持以下场景下的低功耗工作:
    • CPU 处于 Deep-sleep 节能模式,将在受到触碰后逐步唤醒
    • 触摸监测由超低功耗协处理器 (ULP 协处理器) 管理
      ULP 用户程序可通过写入与检查特定寄存器,判断是否达到触碰阈值

2.2. 触摸传感器通道

ESP32 提供了多达 10 个的支持电容式触摸传感的 IO,能够检测触摸传感器上因手指接触或接近而产生的电容变化。芯片内部的电容检测电路具有低噪声和高灵敏度的特性,支持用户使用面积较小的触摸垫来实现触摸检测功能,用户也可使用触摸板阵列以探测更大的区域或更多的测试点。下表列出了 ESP32 中 10 个具备触摸传感功能的 IO。

触摸传感器通道 管脚
T0 GPIO4
T1 GPIO0
T2 GPIO2
T3 MTDO
T4 MTCK
T5 MTDI
T6 MTMS
T7 GPIO27
T8 32K_XN
T9 32K_XP

2.3. 触摸传感器功能描述

2.3.1. 内部结构

触摸传感器的内部结构见下图:

ESP32 内部电流源会对每个触摸管脚周期性充放电。充放电过程中,触摸管脚的电压在参考高值 (drefH) 与参考低值 (drefL) 之间变化。如上图所示,在比较器作用下,由下限充电到上限然后再放电回到下限即完成一次充放电周期的计数。每个变化周期,触摸传感器将生成一个输出脉冲 (OUT),并计数一次。无干扰理想环境中触摸管脚上的电容值保持恒定,同一时间间隔内输出的脉冲(OUT)数量是恒定的。

触摸管脚上充放电的速率由内部电流源输出电流强度决定,电流源强度由寄存器 DAC[2:0] 配置,充放电过程的上下限分别由寄存器 DREFH[1:0] 和 DREFL[1:0] 确定。

当手指触摸传感器时,手指与传感器金属板之前形成平行板电容器,其等效电容并联连接在了触摸管脚上,增大了触摸管脚的电容。根据公式 du/dt=C/I,电容充放电电流不变,电容量增大,则充放电时间增加,同一时间间隔内输出的脉冲数(OUT)减少。我们根据相同间隔内的脉冲计数(OUT)的变化量判断是否有手指触摸传感器。

在应用层,用户可以调用函数 读取脉冲计数值(OUT)。

下图是手指触摸时脉冲计数(OUT)产生变化的过程:

2.3.3. FSM 描述

用户可以实时读取每个触摸传感器通道的脉冲计数值(OUT),根据脉冲计数值(OUT)的变化判断是否有手值触摸。这种轮循方式占用较大 CPU 资源。ESP32 也支持配置硬件寄存器实现检测手指触摸动作,硬件周期性检测脉冲计数值,如果超过设置的阈值时会产生硬件中断,通知应用层某个触摸传感器通道可能被触发了。

内部的硬件逻辑包含有限状态机 (Finite-State Machine, FSM)。FSM 将执行触摸传感器的内部结构描述的序列检测。软件可通过专用寄存器操作 FSM。
FSM 的内部结构可见下图。

IIR 滤波周期:10 ms

因为示波器端子有相对参考地的电容,如需准确测量通道电压变化,需要添加缓冲器(Buffer)。

相关 API 说明:

2.4.3. 充放电压门限设置

上一节提到了触摸传感器内部电路充放电的电压门限、高电压衰减值(HATTEN),用户可以设置这几个参数。门限的范围越小,脉冲计数值越大。但门限过小会导致读数的稳定性变差。选择合适的门限电压可以提高读数的稳定性。
下图是示波器抓取某一触摸管脚上的充放电电压波形,不同的电压参数的对比。

电压参数为:refh = 2.4V, refl = 0.8V, atten = 0V。

不同电压值对稳定性和灵敏度有一定的影响,门限电压范围越大,系统抗干扰能力越强。电压值建议选择 (refh = 2.7V, refl = 0.5V, atten = 0V) 或者 (refh = 2.4V, refl = 0.8V, atten = 0V) 组合。
如果高电压门限在供电电源允许范围内,衰减值应设置为 0V。
下表是在触摸测试板上测得的数据,包括非触摸时读数的标准差和触摸产生的读数变化率。

电压组合不同 读数标准差 触摸时读数变化率 (%)
2.7 / 0.5 / 0 1.14 73.3
2.4 / 0.8 / 0 1.35 69.3
2.7 / 0.8 / 0 1.77 71.4
2.4 / 0.8 / 0.5 2.87 68.9

相关 API 说明:

2.4.4. 设置充放电电流

通过下面接口设置触摸传感器内部电流源的电流大小,改变电容的充放电速率。高的充放电电流会增加抗干扰能力,建议选择 TOUCH_PAD_SLOPE_7。

相关 API 说明:

2.4.5. 读取数据

用户读取脉冲计数值使用下面的接口。接口返回的 touch_value 是脉冲计数值。如果滤波器功能开启,使用 读取滤波之后的脉冲计数值。开启滤波器功能时不影响 接口使用。

相关 API 说明:

2.4.6. 中断触发

ESP32 触摸传感器支持中断触发模式,触发阈值可配置。中断模式可代替循环读取脉冲计数值模式,节省软件资源。
中断模式和延迟读取配合可以实现触摸按键消抖方案,排除误触发的干扰,下文软件章节会详细介绍此方案。

相关 API 说明:

3. 触摸传感器机械和硬件设计

触摸传感器系统设计过程更像是一种艺术作品的设计,需要追求完美的工匠精神。设计电容式触摸感应功能时,一定要记住触摸传感器是整个设计中的一部分,尽量规避其他设计对其产生的影响。注意从 PCB 布局到最终操作环境的每一个细节,这有助于实现强大且可靠的系统性能。

3.1. 机械设计

3.1.1. 覆盖层设计

覆盖层是触摸传感器设计中非常重要,也具有挑战性的部分。设计者要在满足工业设计的同时达到最好的触摸性能。对于触摸传感器,覆盖层最大的作用是隔离外界环境,对电路提供 ESD 保护,减少误触操作的概率。

3.1.1.1. 材质选择

C touch = ε S/(4π*k*d)

手指和触摸传感器中的触摸电极都是导电介质,两者可等效为平行板电容器, Ctouch 与 ε 成正比。高介电常数将导致高灵敏度。由于空气的介电常数是最低的,所以需要消除传感器垫块和覆盖层间的任何间隔。
一些普通覆盖层材料的介电常数如下表列出。介电值在 2.0 和 8.0 间的材料适合于电容感应应用。

材料 ε 击穿电压(V/mm)
空气 1.0 1200-2800
福米卡/td> 4.6 – 4.9 18000
玻璃(标准) 7.6 – 8.0 7900
玻璃(陶瓷) 6.0 13000
PET 薄膜 3.2 280000
聚碳酸酯 2.9 – 3.0 16000
丙烯酸 2.8 13000
ABS 2.4 – 4.1 16000
木表和桌面 1.2 – 2.5 3900
石膏(石膏板) 2.5 – 6.0

传导材料不能用做覆盖层,因为它会与电场模式相干扰。因此,不要对覆盖层使用含有金属微粒的油漆。

3.1.1.2. 厚度选择

覆盖层厚度与灵敏度成反比,选用厚度小的盖板可以提高触摸灵敏度,如下图所示。

产品设计触摸管脚功能尽量集中分配,这样 PCB 设计时方便能做数字信 与模拟信 隔离。比如需要 4 个触摸传感器,则可选择 T1~T4,而不是 T0,T4,T7,T9。

触摸管脚相邻管脚不应分配高频数字信 如 SPI,I2C,PWM 等。

3.2.2. 布局规划

  • 走线方向
    触摸传感器走线不应经过芯片和模组下方。走线不应靠近射频天线电路。

  • 模组贴装

    • 模组上的触摸通道的走线是在底层,模组的贴装区域应按下面方式设置栅格地。下图中红色是触摸传感器的走线和引脚位置,此区域内对应的贴装区不应铺地,蓝色区域表示的是可铺地的区域。
    • 模组贴装的焊盘设计不应过大,不应延伸到模组底层的铺地区,否则触摸通道会紧邻 GND,造成过大的寄生电容,降低灵敏度。

下图是实际测试结果。当 GPIO32 输出不同的电流大小时,触摸传感器通道的读数发生变化,且每个触摸通道上读数的变化率和变化方向不同。

3.3.4. 走线位置

触摸传感器属于模拟电路,设计走线位置是为了防止其他数字电路或环境对触摸电路干扰。触摸传感器周围尽量使用铺地屏蔽隔离。以下是关于走线位置的注意事项:

  • 为防止用户误触,应在触摸电极的背面走线。
  • 触摸电极下方不能走线,除了与之相连的触摸传感器走线。
  • 触摸传感器走线不应与高频数字线并行排列,或使用接地屏蔽触摸传感器走线。
  • 如需与通信数字线(如 SPI、I2C)相交,应确保触摸传感器走线与其呈直角相交。
  • 走线应远离高功率电路,如开关电源、LCD、电机驱动、射频天线电路等。

3.3.5. 走线过孔

  • 走线时使用过孔数量越少越好,尽量减少寄生电容。
  • 过孔放置在触摸电极的边缘上,减少走线长度。
  • 过孔直径应为 10 mil。

当 LED 打开或关闭时,走线上驱动 LED 的电压转变会耦合到触摸传感器输入,影响触摸传感器充放电过程。为了防止耦合(串扰),应将触摸传感器和 LED 驱动的走线位置分开。间距最小值应为 4 mm,也可以使用 格地隔离,如下图所示。

  • LED 与触摸传感器接近

如果将 LED 放置在触摸传感器附近(在 4 mm 范围内),而且 LED 的某一端随时变为非低阻抗状态,那么触摸传感器的电容将在 LED 打开和关闭两种状态间变化。这种电容的变化可能会导致误触发,应使用旁路电容减少这种影响。旁路电容应并联在 LED 的旁边,旁路电容的典型值 1 nf。在通过下拉或上拉来打开 LED 或通过悬空来关闭 LED 的情况下,该操作非常重要。

3.3.8. 串联电阻

触摸传感器走线及触摸电极会产生寄生电容(Cp),Cp 与走线上的串连电阻 R 会形成 RC 滤波器,实现滤波功能,减少走线上的耦合噪声和干扰。如下图:

关于串联电阻应注意:

  • 串联电阻位置应距离触摸管脚 1 mm 以内。
  • 串联电阻阻值建议 470Ω 到 2 KΩ,建议 510Ω。

3.3.9. 电源设计建议

  • ESP32 芯片应使用电源芯片单独供电,不应与其他高功耗,高频率元件使用同一电源,如 LED 驱动芯片,电机驱动芯片等。
  • ESP32 应严格依照ESP32 硬件设计指南中电源参考电路设计,减少电源纹波。

3.3.10. 连接器

在触摸传感器设计中,存在触摸电极和触摸芯片不在同一 PCB 的使用场景,这就需要用到连接器。连接器的选型和布局会影响触摸传感器的寄生电容 Cp 。以下是关于连接器的注意事项:

  • 连接器焊盘封装面积不应过大,并减少其周围的铺地。
  • 应选用连接牢固的连接器,不应出现接触不良的现象。
  • 触摸传感器走线经过大面积焊盘时会产生寄生电容,应避免这样走线,如下图所示。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年1月20日
下一篇 2018年1月20日

相关推荐