历史上的今天
返回首页

历史上的今天

今天是:2025年01月15日(星期三)

正在发生

2020年01月15日 | AVR单片机中RC电容触摸的感应原理解析

2020-01-15 来源:elecfans

RC电容触摸感应按键


1:RC感应原理

RC采样原理就是通过测量感应极电容的微小变化,来感知人体对电容式感应器(按键、轮键或者滑条)的感应。电极电容(C)通过一个固定的电阻(R)周期性地充放电。


固定电压施加在VIN,VOUT的电压随着电容值的变化而相应增加或者降低。


通过计算VOUT的电压达到阀值VTH所需要的充电时间(tC),来得到电容值(C)。

在触摸感应应用中,电容值(C)由两部分组成:固定电容(电极电容,CX)和当人手接触或者靠近电极时,由人手带来的电容(感应电容,CT)。电极电容应该尽可能的小,以保证检测到人手触摸。因为通常人手触摸与否,带来的电容变化一般就是几个pF(通常5pF)。


利用该原理,就可以检测到手指是否触摸了电极。

AVR单片机中RC电容触摸的感应原理解析

2:硬件实现

图4显示了一个实现的实例。由R1,R2以及电容电极(CX)和手指电容(CT)并联的电容(大约5pF)形成一个RC网络,通过对该RC网络充放电时间的测量,可以检测到人手的触摸。 所有电极共用一个“负载I/O”引脚。电阻R1和R2尽量靠近MCU放置。电电R1(阻值在几百千欧到几兆欧之间)是主要电电阻,用于调节触摸检测的灵敏度。电阻R2(10K?)是可选的,用于减少对噪声影响。


3:充放电时间测量原理

为了保证健壮的电容触摸感应的应用,充电时间的测量需要足够的精确。通常有两种方式来测量充电时间:

1.第一种方法是采用输入捕获(IC)定时器,当电压达到阀值时,触发定时器开始工作。该方案中时间测量的精确度直接取决于定时器计数器的频率。但是,由于每个电极都需要一个输入捕获通道,普通的MCU就不适合这种类型的电容感应应用了。

2.第二种方法采用一个简单的定时器(无需IC功能)和一系列简单的软件操作,即定时地检查感应I/O端口上的电压是否达到阀值。这样的话,时间测量的精确度就取决于执行一次完整软件查询需要的CPU周期数。这种测量方法会由于多次测量带来一些抖动,但是由于没有硬件限制,这种方法适用于需要很多电极的场合。


第二种方法修改一下,使用自适应的软件序列,就可以在测量时间时获得和CPU频率(fCPU)一样的精度。


目前ST触摸感应采用第二种方法。

使用普通定时器进行充电时间的测量。对电容充电开始之前,定时器的计数器数值被记录下来。当采样I/O端口上的电压达到某个阀值(VTH)时,再次记录定时器计数器的值。二者之差就是充电或者放电的时间。


为了提高在电压和温度变动情况下的稳定性,对电极会进行连续两次的测量:第一次测量对电容的充电时间,直到输入电压升至VIH。第二次测量电容的放电时间,直到输入电压降至VIL。下图以及以下的表格详细说明了对感应电极(感应I/O)和负载I/O引脚上的操作流程。


4:电容充放电测量步骤

由于是测量整个充电和放电为一个过程,因此在电容充电开始时候计时器开始计数,在电容放电完成时候才停止计数,同时保存计数值

以上文字基本摘录至ST文献


5:数据处理

a:采样

由于我们在判断的时候是要花3个周期(while(PIND_X);),但是我们的计数器是1个周期的,这样判断采样值就会有误差。


举例说,在充电过程中比如在T=49点上好是VIH到达点。会出现以下三种情况:

1:在前一个判断点在46时间点上,刚好可以在49时间点判断采样到VIH

2:在前一个判断点在47时间点上,只能在50时间点判断采样到VIH,相差1个字

3:在前一个判断点在48时间点上,只能在51时间点判断采样到VIH,相差2个字


我们当然希望每次都是情况1出现,但是不可能啊!

采用软件方法测量3次,在3次中我们假设49,50,51点各出现一次。

第1次49 第2次 50 第3次 51

第1次49 第2次 50-1=49 第3次 51-2=49

但是我们怎么知道哪次测量是49或者50或者51呢?很简单我们每次测量比前一次延时1个周期,连续测量3次,这样就基本理论上跨越了3种可能出现的情况。但是如果三次都是一样的值,那就只有埋怨老天怨天了。


我们测量的是整个充放电过程,所以理论上要跨越3*3=9个延迟周期,同时我们还顺便把跨越的这9次测量当做1组多点测量的平均数据。


B手指同步

我们的程序一般都是采样多点,然后求平均。问题就出在这里,比如程序判断9个点,在前6个点手指没有触摸,后3个点手指按触摸,这样求出的平均值就偏小,和手指远离按键的效果一样了。特别是平均点越多越是会出现这样的问题。


因此要求判断和手指触摸同步。比如程序判断9个点,在前3个点手指没有触摸,后三个点手指触摸,我们判断到第4个点有手指,从4-13扫描9个点。这样就包含了手指的同步状态。当然有人说要是我在第7个点把手移开了不就变成后面几点没有按键吗?开玩笑的,CPU的速度那么快,也许CPU扫描完成9个点然后再出去转悠一圈回来,你的手指状态还没有来的及改变呢。


当然然我们也可以采用连续扫描两次9个点,如果两次值相差在一定范围内,说明手指状态一样。笔者还是采用该种办法,虽说CPU速度快,但我怕他出去溜达的时候给什么大姨妈缠住不回来就惨了。


C:按键判别

经过以上处理假如我们得到触摸值为80,没有触摸时候的值是60,取一个按键开启值70,只要按键值大于70就表示有触摸。但是不是只要触摸值小于70就表示没有按键呢?当然不是,手指毕竟是抖动的,一会大于70,一会儿小于70。按键就抖动了。


我们采用一个按键释放值63,这样当触摸值大于70按键开启,一直到触摸值小于63才表示按键释放,就消除了按键抖动。


当然我们实际没有必要知道每次按键的扫描值,只要给每个通道设置一个差值,让CPU自己去做触摸值和基本值之间的差值比较就可以了。如差值大于10按键开启,差值小于3按键释放。

D:按键抑制和校准

按键抑制:我们把没有触摸时候的电容充放电值扫描纪录下来保存为基本按键值。然后把以后扫描道的触摸电容充放电值和基本值比较,在所有通道中差值最大那一组才开启。起到相邻按键抑制作用。不过笔者认为该功能真的作用不大,有时候还会起反作用。

按键校准:该步骤很重要,由于环境温度,电压等造成基本电容变大,这样如果不重新校准基本值的话,差值很小,会造成灵敏度降低,甚至检测不到按键。校准其实很简单,采用1个定时器,在2秒钟内如果没有检测到触摸状态就重新扫描保存基本值。


好了就这样基本上RC电容按键就完成了。


写在这里,不得不说一下,笔者用AT2313编译过6键的RC触摸按键,稳定性还是不错的,不过在实验室,为什么不在恶劣的环境下试验呢?


下面说一下RC电容感应的缺点,不谈优点,笔者认为基本没有。

1) 要求CPU速度要快,一般8M以上

2) 容易受干扰,输入检测是高阻态嘛

3) 该方法检测的手指电容变换不大(灵敏度和干扰相克,同时电容的穿透感应最强是在充放电的瞬间,而不是整个过程,RC原理恰恰是运用的整个过程)

4) 软件处理麻烦


建议玩玩,或者用在搞死人不偿命的设备上还是可以的,比如小玩具,手机等。严禁用在工业产品上啊。


笔者用2313做过RC电容感应按键6个,模仿ST的

PD1作为公共脚

PA1PA0PD2PD3PD4PD5做K0-K5 6个按键

PB4PB3PB2PB1PB0PD6接发光二极管来反映状态

本来还留有I2C口的,由于感觉该方案实在不能用于工业,所以就到此为止。

推荐阅读

史海拾趣

B&B Electronics Manufacturing Company公司的发展小趣事

在国内市场取得一定成绩后,B&B公司开始将目光投向国际市场。通过参加国际电子展会、建立海外销售网络等方式,公司逐渐打开了国际市场的大门。其产品以高品质和可靠性赢得了海外客户的信赖,为公司的进一步发展奠定了坚实的基础。

Brainboxes公司的发展小趣事

随着全球化进程的加速,Brainboxes逐渐将业务拓展至全球范围。公司在多个国家和地区设立分支机构或销售网络,以便更好地服务当地客户。同时,Brainboxes也在不断探索新的应用领域和市场机会,为公司的未来发展奠定坚实基础。展望未来,Brainboxes将继续致力于技术创新和市场拓展,为电子行业的发展贡献更多力量。

这五个故事分别展现了Brainboxes公司在电子行业中的创立与发展、技术创新与荣誉、内部制造与供应链、客户亲密度与工业连接以及全球布局与未来展望等方面的事实。通过这些故事,可以更加全面地了解Brainboxes公司在电子行业中的成长轨迹和发展成就。

Design Gateway公司的发展小趣事

1985年,泰德·维特(Ted Waitt)和Mike Hammond两位年轻人决定辍学创业。他们利用维特祖母的15,000美元存款作为担保,从银行获得了10,000美元贷款,租用了一台计算机,并准备了一份三页的经营计划。在维特父亲位于爱荷华州苏城的牧场里,他们创办了TIPC Network公司(Gateway的前身)。公司起步时,主要向得克萨斯电脑器械公司销售零配件,并开展计算机邮购业务。得益于直销商业模式,Gateway在短短四个月内就实现了10万美元的销售额。

Good Sky Electric Co Ltd公司的发展小趣事
电气维护保养是确保摇臂钻床长期稳定运行的重要环节。在维护时,应首先断开电源并锁定开关,以确保安全。然后,可以依次检查电气元件的外观是否完好、接线是否牢固、接触是否良好等。对于老化的元件或损坏的部件,应及时进行更换或修复。此外,还应定期清洁电气元件和散热系统,以保持良好的工作环境和散热效果。
APC (APC by Schneider Electric)公司的发展小趣事

APC的产品和服务在全球范围内赢得了广泛认可。其InfraStruXure产品线因其集成式的电力、制冷、机架、管理和服务实现了一种开放、具有适应性且集成化的解决方案,赢得了近20个奖项。此外,APC还因其卓越的产品和业务表现,在多个年份赢得了全球100多个奖项。这些奖项不仅证明了APC在电子行业中的领先地位,也反映了其对于创新和质量的不懈追求。

东晶(ECEC)公司的发展小趣事

随着产品质量的不断提升和市场份额的逐步扩大,东晶电子开始将目光投向国际市场。公司积极参与国际展会,与全球知名电子企业建立合作关系,产品出口到欧洲、北美、东南亚等多个国家和地区。同时,东晶电子还与国际知名厂商进行技术交流和合作研发,不断提升自身技术水平,以适应全球市场的竞争需求。

问答坊 | AI 解惑

基础是王道——模拟中常用元器件简介

一、电阻 电阻在电路中用“R”加数字表示,如:R1表示编号为1的电阻。电阻在电路中的主要作用为 分流、限流、分压、偏置等。 1、参数识别:电阻的单位为欧姆(Ω),倍率单位有:千欧(KΩ),兆欧(MΩ)等。换算 方法是:1兆欧=1000千欧= ...…

查看全部问答>

请问有没有朋友会用VB做软件的?

急求有没有朋友会用VB开发软件,软件的最基本功能是将屏幕上的数据打包成一定格式的数据包通过网卡(RJ45口)发送出去(与QQ的远程协助有点类似),如果有朋友会的话,希望能够一起合作,详细事宜具体再谈。QQ:474340457 [ 本帖最后由 wenhuawu 于 ...…

查看全部问答>

如何在DXP2004里面直接设置PCB板子的大小?

我以前做板子都是先摆好元件封装在框起板子,定尺寸。但是现在要求直接设置板子大小后在往里放元件封装,不知如何设置,请教大家。…

查看全部问答>

FLASH测试求助

最近在调spansion的8M NOR FLASH,本来已测试成功,可昨天再运行的时候,总莫名奇妙的挂住; manufacturerid和deviceid可以正确读出,跟踪调试后发现问题出在调用CFI指令的地方。 flash是挂在PCI总线上。 望各位赐教。 …

查看全部问答>

应用程序通过以太网下载NK到FLASH?

原先是PB通过以太网下载NK.bin到FLASH里面的,但是感觉很麻烦,每次都要启动PB。我想做一个应用程序通过以太网下载NK.bin到FLASH里面。注:EBOOT功能完整…

查看全部问答>

恩智浦在中国大陆和台湾地区启动NFC合作伙伴计划

恩智浦在中国大陆和台湾地区启动NFC合作伙伴计划 恩智浦推出独一无二的生态系统,助力NFC技术实现跨设备、跨应用普及   中国上海,2011年6月7日 —— 恩智浦半导体NXP Semiconductors N.V. (NASDAQ:NXPI) 近日宣布推出首个近距离无线通信 ...…

查看全部问答>

DC电机驱动选型

A3906TB6612FNGVNH3SP30L298A4988BTN7971B…

查看全部问答>

附件A – TSP指令

注释:以下列表提供了本文使用的TSP指令。这些指令可能无法在某种具体情况下使用,也不适用于所有情况。   配置指令   3700系列: channel.connectrule .指示系统中闭合与断开通道的连接规则。 .channel.BREAK_BEFORE_MAKE或1在 ...…

查看全部问答>

中断中遇到的问题

P1OUT=BIT0+BIT3;//P1IN低电平跳转,为什么呢?求大神指点…

查看全部问答>