关于电路
项目

用EFM8微控制器传感电容触摸感

2016年12月12日经过罗伯特·基姆(Robert Keim)

该项目使用EFM8 Slebeplay体育下载不了epy Bee微控制器的评估板探索电容触摸态技术。

该项目使用EFM8 Slebeplay体育下载不了epy Bee微控制器的评估板探索电容触摸态技术。

相关信息

需要硬件/软件

开发板

除了具有集成电容式模块的微控制器外,SLSTK2010A评估板还具有可以充当电容式接口界面的PCB结构。您可以在董事会的右下部分中看到它:

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

图形提供马克·休斯

在本文中,我们不需要循环扫描功能。尽管如此,我们将使用一个圆形传感器之一。你为什么问?简单:默认情况下,与较小圆的单个传感器没有连接到微控制器,并且获得该连接的唯一方法是通过零OHM电阻器足迹略大于沙子粒度。此外,所说的足迹危险地接近其他组件,包括微控制器。因此,我决定只使用其他传感器之一,而不是使用我的焊接融化EFM8并犯规一两个电阻。

改变电容

我们将首先使用Simplicity Studio中可用的演示项目之一:

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

让我们使用此程序来查看Cap-Sense信号到底发生了什么。如果您不熟悉电容触摸态技术,那么最好阅读上面在“相关信息”部分中列出的两篇封态文章。如果您对电容感感应不太了解,并且不愿意进行技术文章,那么这是底线:PCB的一部分设计以形成A(通常是指尖)的电容器。当您的手指与该PCB电容器接触时,总电容会增加。PCB电容器被合并到某种电路中,可以通过分析应用信号的定时特性的变化来检测电容的变化。

我没有读过困倦的蜜蜂的帽般的部分中的每个单词参考手册,但在我看来,没有关于EFM8硬件使用的特定电容变化检测技术的明确信息。因此,让我们探测一个盖sense引脚之一,看看发生了什么。我探测了P0.2,LCD友善地告诉我圆形滑块的哪一部分对应于P0.2信号(稍后再详细介绍)。

范围揭示了周期性的坡道波形:

当我在圆形滑块的P0.2区域附近的任何地方都没有手指时,以下示波器捕获显示了坡道脉冲的宽度。

下一个范围捕获显示您在P0.2传感器上牢固按下时波形的外观。

在单帧捕获中可能并不太明显,但是当我查看现场显示时,我可以清楚地看到,与手指接触会导致峰值电压降低和斜坡波形放电部分的变化。放电特性的变化只是您期望增加的电容:电压的降低稍微逐渐逐渐,因此电压返回0 V所需的时间略有。

I didn’t see a significant change in frequency resulting from finger contact, so I can only assume that the Sleepy Bee’s “capacitance to digital converter” (as shown in the block diagram, below) is detecting changes in capacitance based on changes in the discharge portion of the ramp waveform, perhaps in conjunction with amplitude variations.

电容式模块的框图,取自昏昏欲睡的蜜蜂参考手册,第154页。

观察者效应

我想更多地了解EFM8的盖胶态测量值,但是使用示波器进行探测并不是最好的方法。原因应该从一旦我们探测盖sense信号就会出现的小白色八角形清楚 - 在这种情况下,示波器探针和输入电路的功能是指尖的相当笨重且昂贵的替代品。我们看不到波形的默认状态,因为通过应用探测器,我们在传感器中添加了相对较大的电容。

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

实时电容监视器

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

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

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

这是PINOUT:

CS0:盖封度控制器

昏昏欲睡的蜜蜂的盖式模块是一个高性能的外围,可处理测量电容较小的小变化所涉及的大多数细节。它包括我可能永远不会使用甚至关注的各种功能,但我敢肯定它们对于设计消费电子产品的人很有价值。

我真正喜欢的一个功能是集成的累积和平均功能。电容式测量值可能很嘈杂,因此EFM8 CAP-SENSE硬件可以自动积累并平均64个样本非常方便。

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

这是main()函数:

int main(void){//调用硬件初始化例程ENTER_DEFAULTMODE_FROM_RESET();//对LCD模块EFM_DISP_ENABLE = HIGH给予EFM8控制。//初始化芯片选择至低(不活动)spi_cs = low;//清除LCD屏幕LCD_CLEAR_ALL();sfrpage = capsense_page;//启用Cap-Sense模块CS0CN0_CSEN = true;//选择16位转换CS0MD2&=〜(BIT7 | BIT6);CS0MD2 | =(BIT7 | BIT6);//确保清除测量结束的中断标志CS0CN0_CSINT =已清除;而(1){//启动电容测量CS0CN0_CSBUSY = true; while(!CS0CN0_CSINT); CS0CN0_CSINT = CLEARED; //print the measured value on the LCD Update_LCD(CS0D); Delay_10ms(10); } }

我想要的累积设置是64个样本,但是我不必手动执行该配置步骤,因为从硬件配置器工具中选择的选项中累积了累积设置。此外,默认计算启动操作是编写1到CSBUSY(CS0CN0寄存器中的位4),因此我也不需要配置此操作,因为CSBUSY是我想要启动测量的方式。我将增益设置为4倍(默认值为8倍),因为在8倍时,当我非常牢固地按下传感器时,我似乎正在达到或接近最大测量值。像累积设置一样,可以通过硬件配置器选择。

从Update_LCD(CS0D)语句中可以看到,屏幕上显示的数字只是Cap-Sense模块的数据寄存器的原始值。这不是Picofarads或任何其他单元中测量的电容变化在电容中。

固件正在使用

您可以在此处下载代码:

efm8_capacitivetouchsense.zip

这是一个可能为您节省一些麻烦的小细节:当我首次测试LCD接口时,我注意到看似随机的显示故障。我最终发现调试器正在干扰SPI通信,因为问题仅在我作为调试会话的一部分运行程序时才发生。当我关闭Simplicity Studio和MicroController之间的连接并让EFM8程序独立运行时,一切都很好。

您可以在下面的视频中看到,手指按下会产生大量的测量电容变化 - 比噪声变化大,当手指远离传感器时,这只是几个计数。这表明您可以通过选择适当的阈值来有效地检测到手指按压。

结论

现在,我们知道了很多关于1)昏昏欲睡的帽子模块如何检测电容变化的问题,以及2)如何启用模块并执行基本测量。我们将继续使用该评估委员会在未来文章中的电容触摸态功能。

为自己自己尝试一下!得到bom。

4条评论
  • F
    Fatizo 2018年1月31日

    你好,

    我想通过触摸感控制PWM的LED 0亮度,而不是操纵杆。我的意思是,当我接近生姜时,LED亮度会增加。你有榜样吗?

    先感谢您

    喜欢。 回复
    • RK37 2018年1月31日
      如果您搜索论坛,我认为您会发现一些讨论PWM LED控件的线程。这是我发现的两个:https://forum.allaboutcircuits.com/threads/dimming-leds-analog-or-pwm.45975/ https://forum.allaboutcircircuits.com/threads.com/threads/threads/simple-pwm-dred-pwm-driver-pwm-driver.48697/
      喜欢。 回复
      • F
        Fatizo 2018年2月13日
        谢谢RK37,我已经搜索了论坛,对我来说没有YHREADS,因为我想在接近手指时控制LED亮度(进近检测),亮度增加了,我将手指评估到传感器中,功能是电容的功能。我不知道怎么做...
        喜欢。 回复