旧乡故客
发表于: 2018-7-1 15:52:21 | 显示全部楼层

本篇文章主要使用EFM8 Sleepy Bee微控制器的评估板探索电容式触摸传感技术。


所需的硬件/软件

●    SLSTK2010A Sleepy Bee入门套件

●    Simplicity Studio


开发板

除了具有集成电容感应模块的微控制器外,SLSTK2010A评估板还具有可用作电容式触摸接口的PCB结构。您可以在电路板的右下角看到它:

EFM8CS1_photo1.jpg

实际上这里有四个传感器。圆的内部是一个单独的传感器。小圆圈和大圆圈之间的区域实际上是三个传感器,它们以形成圆形滑块的方式相互作用,即来自三个传感器的信号可以被处理以识别手指按压的位置。在下一张照片中,您可以(有点)看到使该功能成为可能的专用联锁传感器形状,然后在下图中更清楚地表明传感器设计。

EFM8CS1_photo2.jpg

EFM8CS1_circularslider.jpg

本文中我们没有必要使用圆形滑块功能;尽管如此,我们将使用其中一个圆形滑块传感器。你为什么问?简单:默认情况下,对应于较小圆圈的单个传感器未连接到单片机,并且获得所述连接的唯一方法是通过一个比一个沙粒略大的零欧姆电阻器占用面积。此外,所述占地面积危险地接近包括微控制器在内的其他组件。因此,我决定只使用其他传感器之一,而不是使用我的烙铁来熔化EFM8并弄脏附近的一个或两个电阻。


改变电容灵敏度

我们将开始使用Simplicity Studio中的一个演示项目:

EFM8CS1_demoproject.jpg

下载程序,然后按圆形滑块上的某个位置,液晶显示屏将显示一个与手指位置相对应的白色八角形。


让我们使用这个程序来看看cap-sense信号究竟是怎么回事。如果您不熟悉电容式触摸感应技术,最好阅读上面“相关信息”部分中列出的两篇上限感知文章。如果您对电容式感应的了解不多,而且您对技术文章不感兴趣,则以下是底线:PCB的一部分设计用于形成(通常是指尖大小的)电容器。当您的手指接触到该PCB电容时,总电容会增加。通过分析施加的信号的时序特性的变化,PCB电容器被结合到某种可以检测电容变化的电路中。


我没有阅读Sleepy Bee参考手册的cap-sense部分中的每一个字,但在我看来,EFM8的硬件使用的特定电容变化检测技术没有明确的信息。所以让我们来探测一个盖帽感应引脚,看看发生了什么。我探测了P0.2,液晶显示屏告诉我圆形滑块的哪一部分对应于P0.2信号(稍后会详细介绍)。


示波器显示一个周期性的斜坡波形:

EFM8CS1_scope1.jpg

下面的范围捕获显示了当我的手指没有靠近圆形滑块的P0.2区域时,斜坡脉冲的宽度。

EFM8CS1_scope2.jpg

下一个示波器捕获显示当我用力按压P0.2传感器时波形的样子。

EFM8CS1_scope3.jpg

在单帧拍摄中可能并不太明显,但是当我观看实时显示时,我可以清楚地看到,与手指接触导致峰值电压下降以及斜坡波形放电部分发生变化。放电特性的变化正是您期望增加电容的原因:电压下降略微更平缓,因此电压需要稍微多一些的时间才能恢复到0 V.


我没有看到手指接触导致的频率变化,所以我只能假设Sleepy Bee的“电容数字转换器”(如下面的框图所示)正在检测基于斜坡波形的放电部分,可能与幅度变化一起。

EFM8CS1_blockdiagram.jpg


观察者效应

我想更多地了解EFM8的电容式感应测量,但使用示波器进行探测并不是解决这个问题的最佳方法。原因应该从我们探测到帽检信号后出现的小白八角形清晰可见 - 在这种情况下,示波器探头和输入电路可用作指尖的相当笨重和昂贵的替代品。我们无法看到波形的默认状态,因为通过应用探头,我们为传感器添加了相对较大的电容量。


因此,我们需要一个实时显示器来报告电容测量而不会干扰传感器。为此,我们需要LCD和一些自定义固件。


实时电容监视器

这里的计划是在EFM8上启用基本的感应功能,然后在LCD上显示电容测量值。这将使我们能够看到响应于传感器和手指之间的任何类型的相互作用而发生的测量电容的准确变化。


该项目涉及的大部分固件工作都与LCD接口有关 - 将像素数据阵列合并到数字中,将像素数据写入LCD模块,将二进制值显示为十进制数。我不会多说这些话题,因为它们在以前的文章中讨论过;这一点尤其重要,因为数字显示与我在这个项目中所做的相似。通过本文底部的链接,您可以访问所有源文件和项目文件,并且您应该能够通过研究使用描述性标识符并且评论很好的代码来收集相当多的信息。


我将要提到的一个重要区别是SPI接口。在以前的项目中,我使用EFM8和LCD模块之间进行SPI通信的中断驱动固件,但在此项目中,我使用了更简单的轮询实现(请记住KISS原则)。


这里是引脚分配:

EFM8CS1_SBpinout.jpg


CS0:Cap-Sense控制器

Sleepy Bee的cap-sense模块是一款高性能外设,可处理测量电容小变化时涉及的大部分细节。它包含了我可能永远不会使用甚至关注的各种功能,但我相信它们对于设计消费电子产品的人来说非常有价值。


我真正喜欢的一个功能是集成的累积和平均功能。电容感测量可能会有噪音,所以EFM8帽检测硬件可以自动累加并平均多达64个采样,这很方便。


当您在硬件配置器中启用“电容式感应库”时,您会注意到IDE会自动将两个与感应相关的功能插入到main()例程中。我不知道这些是做什么的,说实话,我对自动驾驶型库代码的耐心有限,只会让我忘记我的微控制器内部实际发生的事情。所以我删除了这些函数调用并手动配置了CS0模块。 (公正地说,我当然很欣赏硬件配置工具,它可以大大减少设置和清除众多特殊功能寄存器中所有正确位的复杂且容易出错的过程。)


这是main()函数:

  1. int main(void)
  2. {
  3.         //call hardware initialization routine
  4.         enter_DefaultMode_from_RESET();

  5.         //give the EFM8 control over the LCD module
  6.         EFM_DISP_ENABLE = HIGH;

  7.         //initialize chip select to LOW (inactive)
  8.         SPI_CS = LOW;

  9.         //clear the LCD screen
  10.         LCD_Clear_All();

  11.         SFRPAGE = CAPSENSE_PAGE;

  12.         //enable the cap-sense module
  13.         CS0CN0_CSEN = TRUE;

  14.         //select 16-bit conversions
  15.         CS0MD2 &= ~(BIT7|BIT6);
  16.         CS0MD2 |= (BIT7|BIT6);

  17.         //make sure that the end-of-measurement interrupt flag is cleared
  18.         CS0CN0_CSINT = CLEARED;

  19.         while(1)
  20.         {
  21.                 //initiate a capacitance measurement
  22.                 CS0CN0_CSBUSY = TRUE;
  23.                 while(!CS0CN0_CSINT); CS0CN0_CSINT = CLEARED;

  24.                 //print the measured value on the LCD
  25.                 Update_LCD(CS0D);

  26.                 Delay_10ms(10);
  27.         }
  28. }
复制代码

我想要的累计设置是64个采样点,但我不必手动执行该配置步骤,因为累积设置是从硬件配置程序工具中选择的选项中进行的。此外,默认的测量开始动作是向CSBUSY写入1(CS0CN0寄存器的第4位),所以我不必配置它,因为CSBUSY是我想要启动测量的方式。我将增益设置为4倍(默认值为8倍),因为在8倍增益下,当我非常坚固地按压传感器时,似乎达到或接近最大测量值;可以通过硬件配置器选择增益,如累计设置。


正如您从Update_LCD(CS0D)语句中看到的,屏幕上显示的数字只是来自cap-sense模块数据寄存器的原始值。这不是以皮法或任何其他单位测量的电容,而且绝对电容是不相关的 - 电容感测技术是基于电容的变化。


固件

这里有一点细节可以为您节省一些麻烦:当我第一次测试LCD接口时,我注意到看似随机的显示故障。我最终发现调试器干扰了SPI通信,因为只有当我作为调试会话的一部分运行程序时才会出现问题。当我关闭Simplicity Studio和微控制器之间的连接并让EFM8程序独立运行时,一切都很好。


您可以在下面的视频中看到,手指按压会在测得的电容上产生很大的变化 - 比噪声变化大得多,当手指远离传感器时,这只是少数计数。这表明,只需选择适当的阈值,您就可以有效检测到手指按压。


结论

我们现在知道一个关于1)Sleepy Bee's cap-sense模块如何检测电容变化以及2)如何启用模块并执行基本测量的好处。我们将在以后的文章中继续使用此评估板的电容式触摸感应功能。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 29 | 回复: 32



手机版|

GMT+8, 2025-1-21 12:09 , Processed in 0.044166 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表