对于从电器到可穿戴式设备的众多消费类产品,触摸控制是基本要求。鉴于触摸传感器的功能性设计和物理布局之间存在关联,对于开发人员而言,触摸传感器设计既是一项工程,更是一门艺术。因此,在通过多个设计交互来实现按钮、滑块和其他控件的最佳性能时,开发团队的开发速度会受到延缓。
为了支持项目开发,Cypress Semiconductor PSoC 4000S CapSense 原型开发套件提供一整套硬件和软件,可用于评估电容触摸感应以及加速其在各种产品中的应用。
本文将描述各种电容触摸感应方法的工作机制,以及使用这些方法进行设计时设计人员需要了解的一些注意事项。然后将介绍 PSoC CapSense 套件及其工作机制,以及使用该套件进行设计的方法。此外,还提供了代码示例。
为何选择电容触摸?
电容触摸传感器的性质使其适用于各类应用。由于不再需要传统机械按钮和开关中的活动零件,触摸传感器系统实现了高度可靠性,不太可能因磨损而发生故障。而且,触摸传感器系统可完全封装在保护材料中,因此能够在严苛环境中工作。除了可靠性之外,触摸传感器可轻松满足不同的形状要求,帮助工程师满足客户对家用电器、汽车以及其他主流产品的美观精巧设计需求。
手指或手接近专门构建的触摸表面时电容将发生变化,而电容触摸传感器充分利用了这一特征。触摸传感器使用自电容和互电容两种不同的方法来检测此类变化。
在自电容式触摸传感器中,当手指放在传感器板上时,会形成一个接地的导电通路,从而导致电容突然增大,明显大于传感器板和接地平面之间各种寄生电容源(图 1)。通常情况下,自电容是按钮或滑块等单点触摸应用的首要选择。
图 1: 自电容检测 I/O 引脚和接地之间的电容变化。使用接地网状填充层环绕传感器,可提高传感器的抗噪能力。(来源: Cypress Semiconductor)
相比之下,互电容感应测量发射和接收电极之间的电容(图 2)。在该图中,当控制器向发射引脚施加电压时,在接收引脚上测量的电荷量与两个电极之间的互电容成正比。相较于自电容,这项技术可提供更高的信噪比 (SNR),从而实现了更强的抗噪能力。较高的 SNR 还能够实现通过更厚的覆盖层进行工作的功能,例如工业应用所需的保护屏和显示屏。
此外,按照阵列形式排列的传感器可让开发人员同时跟踪不同点的互电容变化。因此,这种方法成为了多点触摸应用的绝佳选择,此类应用采用通常应用于较小型消费类产品的触摸板,或者运用于电器和汽车中作显示用途的触摸屏。
图 2: 在互电容感应系统中,控制器将电压切换到发射 (TX) 电极。在接收 (RX) 电极上测量的电荷量与两个电极之间的互电容成正比。手指等导电物体的触摸将导致所测量的互电容发生变化。(来源: Cypress Semiconductor)
传感器设计
如图 1 和图 2 所示,电容式传感器板由多层板上的印制线构建而成。对于基本的自电容按钮,最简单的设计是将传感器板印制线放在板子上方,印制线四周环绕着网状接地平面。传感器板连接到控制器(通常连接在板子下方)的输入引脚,还可提供接地平面。最后,顶层覆盖着不导电保护性化合物,形成了传感器覆面。对于小键盘,工程师通过将各个传感器板加入可寻址按钮阵列来扩展此项基本设计。
设计人员可以通过多个传感器板(一般以锯齿状排列)构建线性滑块。如下所述,相关触摸传感器软件可使用此排列所提供的信息,来更准确地计算手指位置。触摸板和触摸屏通过使用两个线性滑块来确定手指在板或屏幕表面的 X-Y 轴位置,进一步扩展了这种方法。
在实践中,工程师致力于降低寄生电容,但这会降低传感器的灵敏度,因而触摸电容传感器的物理设计会非常复杂。除了需要精心设计接地平面,网状接地平面还要求严格遵守特定的物理设计规则。此外,在液体可能导致传感器读数失真的家用电器和其他产品中,工程师构建了更为复杂的结构,从而帮助避免感应表面的液体导致读数错误的情况。互电容传感器阵列包含由多个 PC 板层上的发射和接收印制线构建而成的传感器阵列,进一步提高了设计的复杂性。
虽然设计人员在创建这些传感器时应保持谨慎,但电容触摸传感器的开发大部分都遵从典型设计流程。 然而,在传感器板全面投产之前,工程师通常需要调整硬件参数和软件设置,从而将元器件、传感器板和板中的具体特征考虑在内,并满足传感器性能的特定要求以及总功耗要求。专用片上系统 (SoC) 设备,例如 Cypress Semiconductor PSoC 4000S,集成了专门用于简化电容触摸传感器实现的特定功能,其中包括微调要求。
Cypress CapSense
Cypress PSoC 4 设备系列基于 ARM® Cortex®-M0+ 处理器内核,将存储器与可编程模拟和数字外设完美结合,此类外设专门用于满足各种应用的需求。值得一提的是,PSoC 4000S 提供了 Cypress 的专有 CapSense 功能,其中包括一个用于处理电容触摸传感器的完整信号链。由此,工程师仅需少数额外的元器件即可进行触摸传感器设计(图 3)。
图 3: Cypress Semiconductor PSoC 4000S 设备将 ARM Cortex-M0+ 内核、存储器以及外设与 Cypress 的 CapSense 电容传感器信号链集成在一起。开发人员仅需少数额外的元器件即可实现基于自电容或互电容设计的感应解决方案。(来源: Cypress Semiconductor)
对于自电容传感器设计,工程师将所有传感器板连接到 GPIO 引脚,并额外增加了一个外部 CMOD 电容器(图 3)。互电容传感器设计针对每个传感器接收和发射线使用独立的 GPIO,并采用一对外部电容器、CINTA 和 CINTB。另外,外部 CTANK 电容器可支持屏蔽式电极的应用,此类电极用于降低对传感器覆面表面存在液体的灵敏度。
PSoC 4000S 支持自电容和互电容两种方式。对于自电容感应,SoC 的 CapSense 三角积分 (CSD) 函数使用电流至数字转换器来测量 GPIO 上的自电容变化。对于互电容感应,SoC 的 CapSense 交叉点 (CSX) 函数驱动 Tx 电极并感测 Rx 电极的电荷。所测量的 Rx 电极电荷与两个电极之间的互电容成正比。
在两种方法中,转换器均生成原始计数,该计数反映 GPIO 上测量的自电容或 Rx 引脚上测量的互电容。通过将原始计数与可编程噪声和信号阈值进行对比,固件可以确定手指是否接触按钮传感器板或者与滑块或触摸板上特定位置相关的传感器(图 4)。
图 4: 当计数值高于可编程噪声阈值并达到可编程触摸阈值时,Cypress PSoC 4000S CapSense 模块将生成指示触摸的计数。CapSense 还支持高于和低于目标触摸检测阈值的磁滞电平。(图片来源:Cypress Semiconductor)
CapSense 可以执行此项扫描,而又无需 CPU 干预。因此,设计人员可以对 Cortex-M0+ 内核进行编程,以便在传感器扫描过程中执行其他任务。然而,实际上,与独立处理器活动相关的电流变化可能会将噪声引入 CapSense 模块中的敏感模拟电路。如此一来,开发人员通常会在扫描期间限制处理器的活动,尤其是需要高灵敏度和相应低噪声环境的应用。
事实上,由于制造差异,不同的传感器可能会表现出不同的噪声水平和灵敏度,因此需要仔细调整硬件和软件参数来修正这些差异。然而,除了系统性差异之外,环境条件中还会发生其他突发性变化,这可能会引入对灵敏度、性能和精度造成动态影响的因素。
为了在不断变化的条件下维持性能,PSoC 4000S 设备的 SmartSense 提供了自动微调功能,可以自动设置参数来保持最佳的灵敏度和性能。当 CapSense 模块初始化时,SmartSense 会重新计算扫描分辨率等参数,以及内部时钟和其他主要内部电路的设置。然而,在每次扫描开始时,SmartSense 都可以自动更新其他动态参数,包括噪声阈值和触摸阈值。因此,SmartSense 可以动态补偿不同的噪声环境,甚至还包括设计过程中无法预计的随机噪声尖峰。
但在某些情况下,设计人员可能仍需要使用手动微调的方法。例如,SmartSense 支持寄生电容高达 45 pF 的设计。因此,寄生电容非常高的设计可能需要手动微调。此外,SmartSense 仅支持自电容传感器设计,因此互电容传感器设计需要手动微调。实际上,在应用需要对特定参数设置(例如传感器扫描时间)进行严格控制的情况下,Cypress 建议使用手动微调的方法,即使是自电容设计亦是如此。
快速开发
尽管 PSoC 4000S 等相对复杂的设备具有集成功能,但可能仍需要费力对所有片载模块进行编程。为了简化编程和配置,Cypress 推出了免费的 PSoC Creator 软件环境。PSoC Creator 是一种集成式设计环境 (IDE),有助于让设备硬件配置细节和相关软件层变得简单明了。
PSoC Creator 与 Cypress PSoC 4 设计套件配套使用,此类套件包含集成式引导程序或调试器。因此,采用 PSoC 设备进行开发,只需将开发板连接到系统 USB 端口并选择适当参数即可。例如,开发人员仅需在 PSoC Creator 配置屏幕选择 SmartSense,即可对 SmartSense 进行自动微调(图 5)。
图 5: Cypress PSoC Creator IDE 简化了编程和开发过程。设备配置和 SmartSense 自动微调等功能的设置得到了简化,可在专门用于特定设备功能领域的屏幕上通过一系列选择操作实现。(图片来源:Cypress Semiconductor)
PSoC 4000S 硬件和 PSoC Creator IDE 的完美结合在实现电容感应设计的过程中表现出显著优势。然而,如前所述,寄生电容、噪声源以及其他具体设计注意事项等问题始终是开发团队研发电容触摸传感器解决方案的障碍。Cypress 凭借其 PSoC 4000S 原型开发套件满足了快速开发的需求,该套件可提供完整的电容触摸硬件实现和示例软件。该套件将 Cypress KitProg2 调试板、按钮传感器板、线性滑块板和主板,与用于低功耗蓝牙 (BLE) 通信的 PSoC 4000S 和 Cypress EZ-BLE PRoC 设备结合在一起。
开发人员仅需将板插入 USB 端口即可快速开始传感器应用测试(图 6)。通过 PSoC Creator,开发人员可选择和编译示例项目;采用 IDE 的固件编程器来对主板上的 PSoC 4000S 设备进行编程;最后使用集成式调试器来探索运行时操作。该套件支持按钮板和滑块板二者的自电容和互电容感应,因此开发人员可以使用 PSoC Creator 来配置套件,从而在任意配置中运行传感器。
图 6: Cypress PSoC 4000S 原型开发套件提供了独特的快速分离式设计,其中包括连接 USB 的调试板、触摸传感器板、线性滑块板,以及主板,这些都可以独立用于定制电容传感器设计的开发。(图片: Cypress Semiconductor)
PSoC Creator 和 PSoC 4000S 原型开发套件软件套件都可免费下载。PSoC Creator 用于配置和编程套件中的板载 PSoC 4000S 设备,而软件包包括一套全面的软件库以及用于介绍电容触摸应用主要设计模式的示例软件。
例如,按钮和滑块示例包中的 main.c 程序演示了设备初始化,以及连续的传感器采样。在此代码中,switch 语句按顺序进行传感器扫描(在可选自动调谐器传递信息之后);等待扫描完成;最终处理所有已启用的传感器(列表 1)。Cypress 库涵盖的包可实现序列中每个阶段所需的低级软件调用。
DEVICE_STATE currentState = SENSOR_SCAN;
...
/* Start CapSense block */
CapSense_Start();
...
for(;;)
{
/* Switch between SENSOR_SCAN->WAIT_FOR_SCAN_COMPLETE->PROCESS_DATA states */
switch(currentState)
{
case SENSOR_SCAN:
/* Initiate new scan only if the CapSense block is idle */
if(CapSense_NOT_BUSY == CapSense_IsBusy())
{
#if ENABLE_TUNER
/* Update CapSense parameters set via CapSense tuner before the
beginning of CapSense scan
*/
CapSense_RunTuner();
#endif
/* Scan widget configured by CSDSetupWidget API */
CapSense_ScanAllWidgets();
/* Set next state to WAIT_FOR_SCAN_COMPLETE */
currentState = WAIT_FOR_SCAN_COMPLETE;
}
break;
case WAIT_FOR_SCAN_COMPLETE:
/* Put the device to CPU Sleep until CapSense scanning is complete*/
if(CapSense_NOT_BUSY != CapSense_IsBusy())
{
CySysPmSleep();
}
/* If CapSense scanning is complete, process the CapSense data */
else
{
currentState = PROCESS_DATA;
}
break;
case PROCESS_DATA:
/* Process data on all the enabled widgets */
CapSense_ProcessAllWidgets();
/* Controls LEDs Status based on the result of Widget processing.*/
LED_Control();
...
}
}
}
列表 1: Cypress 的示例软件演示了 PSoC 4000S 电容感应功能的使用方法。本示例应用程序中,首先初始化 PSoC 4000S CapSense 模块,然后按顺序无限循环传感器扫描 (CapSense_ScanAllWidgets
),等待扫描结束,最后处理结果 (CapSense_ProcessAllWidgets
)。(代码来源: Cypress Semiconductor)
开发人员准备测试自己的传感器设计时,可以关闭调试器板和两块传感器板的电源,从而仅通过主板继续进行开发。此套件提供用于连接套件传感器和 PSoC 4000S GPIO 引脚的针座,可轻松扩展到定制设计的传感器板。
对于希望基于套件设计构建产品的设计人员,可以通过相关的参考设计获取完整的硬件原理图和相应软件。例如,硬件参考设计详细说明了一系列线性滑块传感器板的使用方法(图 7)。配套的软件套件提供了示例软件,演示了一种可提高手指位置估计精度的技术。
图 7: 在 Cypress PSoC 4000S 原型开发套件参考设计中,线性滑块包含大量以锯齿状排列的传感器板,可以提高手指位置的辨识分辨率。这种设计包含发射电极,能够以互电容和自电容两种模式运行。(图片来源:Cypress Semiconductor)
线性滑块的锯齿状排列可以确保,手指触摸到滑块的某一点时,也将在一定程度上触摸到相邻片区。软件套件在低级程序 (capsense_CalcCentroid
) 中使用了此信息,该程序使用显示最大计数的传感器 (Si) 及其任意一侧传感器(Si-1、Si+1)来计算计数值的质心(列表 2)。通过这样的方法内插手指位置,软件可以产生分辨率较高的手指定位解决方案,此方案的分辨率优于仅寻找显示最大计数值的传感器的方法。随后,示例软件应用程序就可以打开 LED、显示最大计数值的传感器和计数值较小的其他传感器(S0、S1、…、Si-1、Si)。
...
/* Si+1 - Si-1 */
numerator = (uint32) capsense_centroid[capsense_POS_NEXT] -
(uint32) capsense_centroid[capsense_POS_PREV];
/* Si+1 + Si + Si-1 */
denominator = (int32) capsense_centroid[capsense_POS_PREV] +
(int32) capsense_centroid[capsense_POS] +
(int32) capsense_centroid[capsense_POS_NEXT];
/* (numerator/denominator) + maximum */
denominator = (((int32)(uint32)((uint32)numerator << 8u)/denominator) + (int32)(uint32)((uint32) maximum << 8u));
...
/* Round result and put it to uint8 */
position = ((uint8) HI16((uint32)denominator + capsense_CENTROID_ROUND_VALUE));
return (position);
列表 2: capsense_CalcCentroid
程序针对线性阵列中的上一个、当前和下一个传感器从每个传感器的计数值数组中抽取传感器计数 (capsense_centroid
),以返回此处显示的质心计算结果。(代码来源: Cypress Semiconductor)
结论
触敏界面基于电容感应技术,为用户控制各种设备(从可穿戴式设备到洗碗机)提供了直观的方法。电容感应除了具有最小功率要求之外,还可提供可靠性和更长的使用寿命,这是机械按钮和开关难以实现的。然而,在设计稳固型感应系统时,开发人员会通过迭代设计来解决电容感应系统中相互依赖的电路设计和物理布局特性,但这会导致开发速度延缓。基于 Cypress Semiconductor PSoC 4000S 的完整原型开发套件和参考设计,提供了随即可用的解决方案,有助于开发人员为各种应用快速部署稳固的电容触摸感应设计。