易配在线

所属分类:资讯中心

多个电容触摸传感按钮的配置应用

发布时间:2013-02-25 浏览次数:962

下面介绍在使用超过4个电容触摸传感按钮时,如何扫描和检测按钮是否按下。文章针对的是PIC16F616系列、PIC16F690系列及PIC16F887系列单片机。

使用PIC单片机实现多个触摸按钮电路通常有三种方法。第一种方法是使用与比较器模块输入相连的片上4选l模拟多路复用器,创建简单的4传感嚣系统。第二种方法是把第一种途径创建的4传感器系统扩展成10传感器系统,扩展方法是把原先的4个输入配成对。第三种方法则是创建可扩展的系统,其原理是使用外部模拟多路复用器对添加的传感器进行多路复用。

1.使用默认数量的按钮

默认情况下,比较器模块能够进行电容触摸传感功能的PIC单片机,可以对比较器输入使用内部多路复用器,最多扫描四个按钮。内部MUX通过通道选择位来进行控制,即CMICONO的CICH<1:0>和CM2CONO的C2CH<1:0>。两个比较器的通道设置必须相同。

摘自PIC16F887系列单片机数据手册的简化框图如下图所示。图中,高亮显示部分是电容触摸传感所需的正确通路。在每个内部多路复用器上,选择的通道必须相同,以确保当一个按钮切换到下一个时通路相同。选择的通道必须相同是因为基本的传感器振荡电路需要把电容上的电压与上、下限值ClIN+、C21N+进行比较。如果负输入不同的话,电路将不会振荡,输出就会保持在高电平或低电平上。

上述具有触摸传感功能的比较器模块必须有SR锁存选项。

在软件中,使用C代码处理对四个按钮的扫描是非常有效和方便的。最方便的做法是,用数组来处理按钮的测量原始值和平均值,数组的每一个元素对应一个按钮的值。

每个按钮最好有各自的trip阈值,以便处理各个按钮的不同情形。在平常的C程序中,这些变量应定义如下:

注:为了便于讨论,本文假定使用的是简单的trip阈值。求平均值对于所有的方法而言,都是基本的方法。

数组变量average存放的是每个按钮的平均值,下标从0~3。同样也可以用一个数组来存放最新读数,用于查看或者辅助设计,但是原始数据并不需要保存,因为它是在每次扫描结束时测量得到的,并由中断服务程序(InterruptSer-viceRoutine,ISR)作出按钮是否按下的判断。

在深入讨论细节之前,先了解概况:基本运算是在中断服务程序中完成的。~旦某个按钮准备好进行测量并完成扫描,若产生Timer0溢出中断,则调用ISR。

其他中断也可能会调用ISR,但这将需要用户进行适当处理,其他中断将会与固定时基Timer0中断同时存在。大致的高阶ISR构成如下:

多个按钮的处理是通过编写注释“设置下一个传感器”下面的代码来实现的。要在四个按钮之间切换,需要一个下标变量来记录正在扫描的是哪个按钮,并根据该变量来进行正确的初始设置。使用四个按钮时,下标从0~3,就像定义average和trip数组那样。下标变量应定义如下unsignedcharindex;在ISR最后,递增扫描的index变量,为下一次扫描做准备。在index变量递增之后,必须设置比较器通道选择位CICH<1:0>、C2CH<l:0>,并必须重启Timer0和Timerl。这可以用许多方法实现,但方便的做法是创建一个存放4个常量的数组,常量是整个寄存器CMICONO和CM2CONO的设置值,然后使用index来读取这些值,并把它们载入寄存器中。

例如,假定常量数组定义为COMP1和COMP2。数组中存放的是寄存器的设置值,然后改变每个通道位,即位0和位1。

每一次按钮切换.ISR都将进行扫描,递增index,然后为要扫描的下一个按钮做好准备,即设置CMx-CONO寄存器并重启定时器。index递增不得超过3,然后必须从3回到0,这是软件细节,容易处理。一种计数到3然后回0的方法,是把结果与3进行“与(AND)”运算,即将最高6位清零,如例1所示。变量index递增到4(Obl00),而后与3(Ob011)进行与运算,得到结果0。

现在将按顺序0,1,2,3,0,1,2,3…不停地扫描四个按成是SetFlag(intindex)、ClearFlag(intindex)以及PerformAverage(intindex)函数。设置和清除标志位对某些应用可能已足够,而有些应用可能要直接采取其他操作。按钮操作以index值为准,因为index指明了按下的是哪个按钮。

16点平均值也要根据index来进行。每次按钮切换都应重新计算平均值,平均值应存放在average数组中in-dex指向的相应位置。

2、通过配对按压来进行扩展

使用比较器模块作为触摸按钮接口的主要缺点之一,是输入按钮个数受到限制。要支持更多的传感器,一种方法是把现有触摸输入进行配对,构成新的触摸传感器(见下图)。当用户触压配对传感器时,配对的两个传感器的输入均受到相同作用,根据减少的偏移及施加在两个输入(而不是一个输入)上的作用,软件将配对触摸与来自单个输入的触摸区别开来。

由于配对传感器输入结合了已有输入,所以不需要额外的电路,系统计算平均值的存储器开销也不会增加。唯一需要增加的是解码逻辑,用于搜寻单个和配对盼按钮按压状态。

附表列出了传感器输入个数确定时,能够得到的触摸传感器数量。由于比较器输入有四通道的内部MUX,最大传感器数量是十个。

使用配对传感器系统依然存在局限。一次只能有一个传感器被按下,与完整传感器相比较,配对传感器只能使传感器电路的频率产生一半的偏移量。

这就要求在解码程序中有一些附加逻辑,并限制了一些传感器输入的灵敏度。在设计系统时,设计人员应该把这些因素都考虑进去,在灵敏度要求较高的应用中使用完整的传感器,而在能够接受较低灵敏度的应用中使用配对传感器。配对传感器的传感器模式要求两个传感器的输入相互交错。

需要传感器相互交错是为了在传感器上手指触摸位置不确定的情况下,尽可能使两个输入的偏移保持相等。如果可能的话,两个传感器元件的面积应该相等,约为单个传感器面积的l/2。尽管这样增加了传感器的大小,但配对传感器的灵敏度将更高。

注意,两个配对传感器元件之间的间距也应该尽可能大,这样在配对传感器两边连接的单个传感器被激活时,可以避免在元件之间产生交互。

共用按钮系统的解码逻辑从测试每个频率值开始,把频率值与两个触摸阈值进行比较,一个阈值用于单个传感器的处理,较小的阚值则用于配对传感器。测试结果交给搜索算法,搜索算法先检查配对偏移。然后检查单个偏移。

如果发现了配对偏移,就认为按钮已经检测到,不再进行单个偏移测试。,如果没有检测到配对偏移,就进行单个偏移测试,并报告任何检测到的按下状态。

如果检测到超过配对阈值的偏移超过了两个,就判定出现Fault(故障)状态,终止解码程序。

3.通过多路复用器进行扩展

增加按钮数量的另一种方法,是使用一个或几个外部模拟多路复用器。当要处理的按钮非常多时,此方法非常有效。与配对按压方法不同,它无需使用任何特殊技巧。其代价是更大的PCB表面积,而且每个MUX都引入电容,这将降低灵敏度。由于增加了按钮,整个系统的扫描速度也将降低。所以,建议最开始在每个比较器输入通道上只使用一个MUX,然后每添加一个MUX都要编译并测试系统,渐进地进行。由于寄生电容的增加,连接的MUX的数量是有限的,因为过高的寄生电容将使手指按压引起的电容改变无法被检测到。

处理外部MUX与处理内部MUX很相似,要选择把哪个比较器输入通道指派给哪两个比较器。现在选择MUX线的额外选择通道对于器件而言是外设,所以必须使用I/O引脚来选择MUX连接的电容焊盘通道,在内部必须设置比较器输入通道选择位,指向相应通道,从而确保来自MUX共用线的连接将被连接到正确的比较器输入上。

下图说明了如何把外部MUX连接到PIC单片机,在连接到比较器输入之前,焊盘先要通过MUX连接到共用线。

注:推荐的8通道模拟MUX是74HC4051,推荐的16通道MUX7是4HC4067。

现在,至关重要的是要注意在MUX和接通的按钮上,按钮的index是如何分配的,以及MUX的共用线连接的是哪个比较器的输入。index就是前面描述的变量,用来识别要扫描的按钮及在按钮之间进行切换。一种用来设置按钮mdex值的合理方法如下:假定需要32个按钮,这需要使用4个8通道MUX。

在C121NO-上,放置MUXO;这个多路复用器将用于按钮0~7。在C121Nl-上,放置MUX1,用于按钮8~l5。在C121N2-上,放置M

首页|关于网站|联系我们