电容式触摸感应的技巧
时间:01-12
来源:互联网
点击:
触摸传感器被广泛使用已经有很多年了,不过,混合信号可编程器件的近期发展使得电容式触摸传感器在众多消费类产品中都成为了机械式开关的一种实用、增值型替代方案。本文将粗略地介绍一种可透过一层厚玻璃覆盖物来激活的触摸感应式按钮的设计实例。典型的电容式传感器设计所规定的覆盖物厚度为3mm 或更薄。随着覆盖物厚度的增加,透过一层覆盖物来检测手指的触摸将变得越来越困难。换句话说,伴随着覆盖物厚度的增加,系统调整的过程将从“科学”走向“技巧”。为了说明如何制作一个能够提升当今技术极限的电容式传感器,在本文所述的实例中,玻璃覆盖物的厚度被设定为10mm。玻璃易于使用,购买方便,而且是透明的(因此您可以看到位于其下方的金属感应垫)。玻璃覆盖物还被直接应用于白色家电。
手指电容
所有电容式触摸感应系统的核心部分都是一组与电场相互作用的导体。人体组织中充满了覆盖着一层皮肤(这是一种有损电介质)的导电电极。正是手指的导电特性使得电容式触摸感应成为可能。
简单的平行片电容器具有两个导体,其间隔着一层电介质。该系统中的大部分能量直接聚集在电容器极板之间。少许能量会溢出至电容器极板以外的区域中,而与该效应相关的电场线被称为“边缘场”。制作实用电容式传感器的部分难题是:需要设计一组印刷电路走线,以便将边缘场引导至一个用户可以够得到的有效感应区域。对于这样一种传感器模式来说,平行片电容器并非上佳之选。
把手指放在边缘电场的附近将增加电容式系统的导电表面积。由手指所产生的额外电荷积聚电容被称为手指电容CF。在本文中,无手指触摸时的传感器电容用CP 来表示,它代表寄生电容。
关于电容式传感器的一个常见的误解是:为了使系统正常工作,手指必需接地。手指是可以检测到的,因为它会保存电荷(而在手指浮置或接地时都将产生这种现象)。
传感器的 PCB布局
图1 示出了一块印刷电路板(PCB)的顶视图,在本设计实例中,该PCB 实现了其中的一个电容式传感器按钮。该按钮的直径为10mm,这是一个成人指尖的平均大小。为该演示电路而组装的PCB 包含4 个按钮,它们的中心相隔20mm。如图所示,接地平面也位于顶层。金属感应垫和接地平面之间设置了一个均匀的隔离间隙。该间隙的尺寸是一个重要的设计参数。如果间隙设置得过小,则过多的电场能量将直接传递至地。而如果间隙设置得过大,则将无法控制能量穿越覆盖物的方式。选择0.5mm 的间隙尺寸可以很好地使边缘场透过10mm 厚的玻璃覆盖物。
图2 示出了同一种传感器模式的截面图。如该图所示,PCB 中的一条通路将金属感应垫与电路板底面上的走线相连。当电场试图找到最短的接地路径时,介电常数εr 将对材料中的电场能量充填密度产生影响。标准窗户玻璃的εr 约为8,而采用FR4 材料制成的PCB 的εr 则在4 左右。白色家电中常用的Pyrex?(派莱克斯)玻璃具有数值大约为5 的εr。在本设计实例中,采用的是标准的窗户玻璃。需要注意的是,玻璃片是采用3M公司的468-MP 绝缘胶膜安装在PCB 上的。
CapSense 101
电容式触摸感应系统的基本元件是:一个可编程电流源、一个精密型模拟比较器和一根可通过一组电容式传感器进行排序的模拟多路复用器总线。在本文给出的系统中,一个弛张振荡器起着电容传感器的作用。该振荡器的简化电路示意图见图3。
比较器的输出被馈入一个PWM 的时钟输入,该PWM 负责对一个时钟频率为24MHz 的16 位计数器进行选通。触摸按键的手指使电容增大,从而导致计数值增加。手指就是以这样的方式来检测的。该系统的典型波形示于图4。
图5 给出了该项目的一种可实现方案的示意图。为了实现电容式触摸感应和串行通信,该电路采用了赛普拉斯的 CY8C21x34 系列PSoC芯片,该芯片包含一组模拟和数字功能块,这些功能块可由存储于板上闪存中的固件来配置。另一颗芯片负责处理RS232 电平移动,旨在提供至主机的通信链接,并实现115,200 波特的电容式触摸感应数据记录。PSoC 是通过ISSP 头(包含电源、地)以及编程引脚SCL和SDA 来编程的。主PC 通过一个DB9 连接器与电容式触摸感应电路板相连。
PSoC 采用固件来配置,以采用一个5V 工作电源和一个内部生成的24MHz 系统时钟。对该24MHz 时钟进行1:26 分频,以提供一个用于115,200 波特TX8 模块的时钟。CapSense 用户模块选择以“周期法”(Period Method)来运行,在该工作模式中,计数在固定数量的弛张振荡器周期中累加。换言之,16 位计数器值代表了一个与传感器电容成正比的周期。
清单1 罗列了系统固件。与设立电容式触摸感应系统相关的大部分工作都已被编码为一组由C 程序来调用的标准CSR 例行程序。例如:CSR_1_Start()负责配置PSoC 的内部布线,以使电流源DAC 与模拟多路复用器相连,而比较器与经过正确初始化的PWM和16 位计数器相连。
清单1:用于电容式触摸感应系统的固件
//-----------------------------start of listing--------------------------------------------------------
//----------------------------------------------------------------------------
// main.c, a CapSense program in C
// A demonstration of Capacitive Sensing with PSoC
// with a 10mm glass overlay
//----------------------------------------------------------------------------
#include // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
void main()
{
//a flag that is set when a finger is on any buttons
int bBaselineButtonFlag;
CSR_1_Start(); //initialize CapSense user module
TX8_1_Start(TX8_1_PARITY_NONE); //initialize TX8 module
M8C_EnableGInt; //enable global interrupts
CSR_1_SetDacCurrent(200,0); //set current source to 200 out of 255
//use low range of current source
CSR_1_SetScanSpeed(255); //set number of osc cycles to 255-2=253
while(1)
{
CSR_1_StartScan(1,1,0); //scan one button only, button 1 on P2[3]
//wait for scanning of button to complete
while (!(CSR_1_GetScanStatus() & CSR_1_SCAN_SET_COMPLETE));
//update baseline if required, set flag if any button pressed
bBaselineButtonFlag = CSR_1_bUpdateBaseline(0);
//data log the raw counts on button 1
TX8_1_PutSHexInt(CSR_1_iaSwResult[1]);
TX8_1_PutChar(',');
//data log switch mask... which switch is on?
TX8_1_PutSHexInt(CSR_1_baSwOnMask[0]);
TX8_1_CPutString(",");
//data log switch difference = raw counts - baseline
TX8_1_PutSHexInt(CSR_1_iaSwDiff[1]);
TX8_1_PutChar(',');
//data log update timer as a teaching aid
TX8_1_PutSHexInt(CSR_1_bBaselineUpdateTimer);
TX8_1_PutChar(',');
//data log the baseline counts for button 1
TX8_1_PutSHexInt(CSR_1_iaSwBaseline[1]/4);
TX8_1_PutCRLF();
}
}
//-------------------------------end of listing--------------------------------------------------------
手指电容
所有电容式触摸感应系统的核心部分都是一组与电场相互作用的导体。人体组织中充满了覆盖着一层皮肤(这是一种有损电介质)的导电电极。正是手指的导电特性使得电容式触摸感应成为可能。
简单的平行片电容器具有两个导体,其间隔着一层电介质。该系统中的大部分能量直接聚集在电容器极板之间。少许能量会溢出至电容器极板以外的区域中,而与该效应相关的电场线被称为“边缘场”。制作实用电容式传感器的部分难题是:需要设计一组印刷电路走线,以便将边缘场引导至一个用户可以够得到的有效感应区域。对于这样一种传感器模式来说,平行片电容器并非上佳之选。
把手指放在边缘电场的附近将增加电容式系统的导电表面积。由手指所产生的额外电荷积聚电容被称为手指电容CF。在本文中,无手指触摸时的传感器电容用CP 来表示,它代表寄生电容。
关于电容式传感器的一个常见的误解是:为了使系统正常工作,手指必需接地。手指是可以检测到的,因为它会保存电荷(而在手指浮置或接地时都将产生这种现象)。
传感器的 PCB布局
图1 示出了一块印刷电路板(PCB)的顶视图,在本设计实例中,该PCB 实现了其中的一个电容式传感器按钮。该按钮的直径为10mm,这是一个成人指尖的平均大小。为该演示电路而组装的PCB 包含4 个按钮,它们的中心相隔20mm。如图所示,接地平面也位于顶层。金属感应垫和接地平面之间设置了一个均匀的隔离间隙。该间隙的尺寸是一个重要的设计参数。如果间隙设置得过小,则过多的电场能量将直接传递至地。而如果间隙设置得过大,则将无法控制能量穿越覆盖物的方式。选择0.5mm 的间隙尺寸可以很好地使边缘场透过10mm 厚的玻璃覆盖物。
图2 示出了同一种传感器模式的截面图。如该图所示,PCB 中的一条通路将金属感应垫与电路板底面上的走线相连。当电场试图找到最短的接地路径时,介电常数εr 将对材料中的电场能量充填密度产生影响。标准窗户玻璃的εr 约为8,而采用FR4 材料制成的PCB 的εr 则在4 左右。白色家电中常用的Pyrex?(派莱克斯)玻璃具有数值大约为5 的εr。在本设计实例中,采用的是标准的窗户玻璃。需要注意的是,玻璃片是采用3M公司的468-MP 绝缘胶膜安装在PCB 上的。
CapSense 101
电容式触摸感应系统的基本元件是:一个可编程电流源、一个精密型模拟比较器和一根可通过一组电容式传感器进行排序的模拟多路复用器总线。在本文给出的系统中,一个弛张振荡器起着电容传感器的作用。该振荡器的简化电路示意图见图3。
比较器的输出被馈入一个PWM 的时钟输入,该PWM 负责对一个时钟频率为24MHz 的16 位计数器进行选通。触摸按键的手指使电容增大,从而导致计数值增加。手指就是以这样的方式来检测的。该系统的典型波形示于图4。
图5 给出了该项目的一种可实现方案的示意图。为了实现电容式触摸感应和串行通信,该电路采用了赛普拉斯的 CY8C21x34 系列PSoC芯片,该芯片包含一组模拟和数字功能块,这些功能块可由存储于板上闪存中的固件来配置。另一颗芯片负责处理RS232 电平移动,旨在提供至主机的通信链接,并实现115,200 波特的电容式触摸感应数据记录。PSoC 是通过ISSP 头(包含电源、地)以及编程引脚SCL和SDA 来编程的。主PC 通过一个DB9 连接器与电容式触摸感应电路板相连。
PSoC 采用固件来配置,以采用一个5V 工作电源和一个内部生成的24MHz 系统时钟。对该24MHz 时钟进行1:26 分频,以提供一个用于115,200 波特TX8 模块的时钟。CapSense 用户模块选择以“周期法”(Period Method)来运行,在该工作模式中,计数在固定数量的弛张振荡器周期中累加。换言之,16 位计数器值代表了一个与传感器电容成正比的周期。
清单1 罗列了系统固件。与设立电容式触摸感应系统相关的大部分工作都已被编码为一组由C 程序来调用的标准CSR 例行程序。例如:CSR_1_Start()负责配置PSoC 的内部布线,以使电流源DAC 与模拟多路复用器相连,而比较器与经过正确初始化的PWM和16 位计数器相连。
清单1:用于电容式触摸感应系统的固件
//-----------------------------start of listing--------------------------------------------------------
//----------------------------------------------------------------------------
// main.c, a CapSense program in C
// A demonstration of Capacitive Sensing with PSoC
// with a 10mm glass overlay
//----------------------------------------------------------------------------
#include // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
void main()
{
//a flag that is set when a finger is on any buttons
int bBaselineButtonFlag;
CSR_1_Start(); //initialize CapSense user module
TX8_1_Start(TX8_1_PARITY_NONE); //initialize TX8 module
M8C_EnableGInt; //enable global interrupts
CSR_1_SetDacCurrent(200,0); //set current source to 200 out of 255
//use low range of current source
CSR_1_SetScanSpeed(255); //set number of osc cycles to 255-2=253
while(1)
{
CSR_1_StartScan(1,1,0); //scan one button only, button 1 on P2[3]
//wait for scanning of button to complete
while (!(CSR_1_GetScanStatus() & CSR_1_SCAN_SET_COMPLETE));
//update baseline if required, set flag if any button pressed
bBaselineButtonFlag = CSR_1_bUpdateBaseline(0);
//data log the raw counts on button 1
TX8_1_PutSHexInt(CSR_1_iaSwResult[1]);
TX8_1_PutChar(',');
//data log switch mask... which switch is on?
TX8_1_PutSHexInt(CSR_1_baSwOnMask[0]);
TX8_1_CPutString(",");
//data log switch difference = raw counts - baseline
TX8_1_PutSHexInt(CSR_1_iaSwDiff[1]);
TX8_1_PutChar(',');
//data log update timer as a teaching aid
TX8_1_PutSHexInt(CSR_1_bBaselineUpdateTimer);
TX8_1_PutChar(',');
//data log the baseline counts for button 1
TX8_1_PutSHexInt(CSR_1_iaSwBaseline[1]/4);
TX8_1_PutCRLF();
}
}
//-------------------------------end of listing--------------------------------------------------------
传感器 电容 电容器 电路 PCB 电流 比较器 总线 振荡器 PWM 赛普拉斯 SoC PSoC 连接器 CSR DAC 滤波器 仿真 电子 相关文章:
- RGB色彩传感器工作原理及应用方案分析(02-16)
- CMOS图像传感器基本原理与应用简介(05-11)
- 选择合适的环境光传感器来优化OLED性能(07-01)
- 总结中小型触控面板技术(11-25)
- 基于光学传感器的智能玩具小车设计(02-21)
- 手机相机模块封装的关键技巧(11-28)