在线客服
  • |
  • 400-821-8800
  • |
  • 手机西域
    手机西域下载二维码

    开发者:西域智慧供应链(上海)股份公司

    版本:4.6.8

    扫一扫,下载西域客户端
    手机采购 移动办公
    iPhone Android
  • |
  • 快速下单
  • |
  • 我的西域
  • 多个电容触摸传感按钮的配置应用

    文/ 发布于2017-09-28 浏览次数:735

      下面介绍在使用超过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,并必须重启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-上,放置MUX2,用于按钮16-23,类似地在C121N3-上放置MUX3,用于按钮24~31。

      于是,用来处理这样设置的软件就变得相当简单。如果index是0~7,使能MUX0,设置通道选择位,使得index值(0,7)。如果index大于7,index被8除之后的模数就是通道选择位,index被8整除的商,对应的就是要使能的MUX。例如,假设要使能的MUX=2=MUX2要验证结果是否正确,就要回顾一下按钮index是如何分配的。在C121N2-上,MUX2对应按钮16~23,茌该MUX上按钮21的通道是第6个通道(其index为5),除了要使能外部MUX及其控制线之外,还必须为内部4通道MUX选择相应的比较器输入。由于在C121Nx-上MUXx的定义如前所述,整数除法index/8也能方便地给出针对CICH和C2CH的比较器输入通道位。下面的代码示例说明了在所述配置中,如何扫描32个按钮。

      4.方法比较

      处理按钮的每一种方法,都有其优缺点。附表比较了每种方法的一些关键特性。

      由于最终受到检测的物理限制,按钮个数并不能任意增加。对于需要4个或更少按钮的应用而言,只要使用默认按钮就足够了。通常,对于只需要一到两个按钮的应用,使用默认硬件设置是最适宜的。它扫描速度最快,由于寄生电容更小,与多路复用输入相比,远距离感应能力更好。

      如果按钮不超过10个,而且不需要同时按下两个按钮的话,使用配对按压方法较经济。除了增加布线和按钮焊盘之外,使用配对按压方法并不需要添加外部器件。这种简单的硬件扩展需要较复杂的软件。

      多路复用按钮系统的最大优点,在于按钮数可以超过10个。它还允许同时按下两个按钮。但是扫描速度取决于要扫描的输入个数。随着按钮数量的增加,扫描速度也将加大,扫描速度是有极限的,从而最大按钮数量将受到限制。改变Timer0的预分频数将加快或者减慢扫描速度,这可能对系统的长时间扫描有所帮助,但也将对传感过程本身产生影响。如通过多路复用器进行扩展中叙述的那样,随着添加的MUX的增多,最终寄生电容将变得非常大,导致无法检测按压。由于上述因素的存在,使得按钮数量不能任意增加,不过其可使用的按钮数量能够大大超过默认或配对按压方法所允许的按钮个数。

      5.小结

      可以使用若干方法来对多个电容触摸传感按钮进行控制。PIC16F616系列、PIC16F690系列及PIC16F887系列均可直接处理四个按钮的情况,而且不使用外部器件就可扩充到10个按钮。如果需要更多的按钮,可以使用外部多路复用器。在电容中断服务程序中,主要的处理方法是相同的,但在处理多个按钮时需要正确跟踪记录哪个index代表的是哪个实际按钮。在实际设计过程中,规划好软件中index与实际按钮之间的关系,将使得设计的软件部分更易于实现、编写和理解。

    免责声明:文章仅供学习和交流,如涉及作品版权问题需要我方删除,请联系我们,我们会在第一时间进行处理。
    相关标签:
    相关资讯
    沪公网安备 31011502008645号 | 沪ICP备09003861号 | 增值电信业务经营许可证:合字B2-20200044 | 第二类医疗器械经营备案编号:沪浦药监械经营备20200151号 | 医疗器械经营许可证编号:沪浦药监械经营许20200092号 | 互联网药品信息服务资格证书编号:(沪)-经营性-2020-0028 | 危险化学品经营许可证:沪(浦)应急管危经许[2022]204062(DYS)