amobbs.com 阿莫电子技术论坛

标题: 轻轻松松实现电容感应按键 [打印本页]

作者: chenjianlin    时间: 2009-3-8 14:48
标题: 轻轻松松实现电容感应按键
RC充放电原理电容感应按键

(原文件名:图形1.jpg) 看过PIC的电容按键方案,实际上仅仅是一个充放电过程,可以不用比较器吗?
答案是肯定的。一般双向I/O单片机都可以做RC电容感应按键。
这里我们用M48的端口PD0来做一个RC的电容感应按键。

(原文件名:图形2.jpg)
C1是分布电容,C2这里作为按键感应电容。
工作过程:
1:首先要禁止上拉电阻。
2:PD0输出高电平,向C1,C2充电。
3:PD0设置为输入,判断C1.C2向R1放电完毕的时间。
4:对比有C2和没有C2的放电时间,判断是否有键感应。
如图在只有C1的时候放电波形,放电时间测量为4.1us

(原文件名:图形3.jpg)
如图在有C2感应的时候放电波形,放电时间测量为5.58us

(原文件名:图形4.jpg)
可见有按键感应比无按键感应的放电时间要多1.48us。
下面关键的是怎样测量放电时间:
通常我们设置一个变量d,通过循环等待判断PD0是否=0来使变量d递增。判断完毕后,放电时间的短d最终值就小(无按键感应),放电时间长的d最终值就大(有按键感应)。
判断代码:
while(PIND_0==0)d++;
对应汇编代码:
main_0:
SBIC    0x09, 0x00
RJMP    main_1
INC     R18
RJMP   main_0
main_1:
通过汇编代码发现运行判断一次要5T时钟,
当时钟频率为1M时候,运行判断一次要5T时钟5us。
1.48/5=0.296   不足1个字。判断不出来。
当时钟频率为8M时候,运行判断一次要5T时钟0.625us。
1.48/0.625=2.368  约2-3个字。这个差值还是太小
当然这里的感应电容是1p,如果感应电容值变大也许能够识别出来。
这也许就是PIC的方案为什么采用比较器的缘故,硬件判别嘛,肯定要小于5T时钟。
我们可以采用定时器来代替变量d,这样运行判断一次就只需要3T时钟了(每次判断前开启定时器,每次判断完成后读取定时器值),判断代码如下:

//开定时器
while(PIND_0==0);
//读定时器值
对应汇编代码:
main_0:
SBIS    0x09, 0x00
RJMP    main_1
main_1:
通过汇编代码发现运行判断一次要3T时钟,
当时钟频率为1M时候,运行判断一次要3T时钟3us。
1.48/3=0.50  不足1个字。判断不出来。
当时钟频率为8M时候,运行判断一次要3T时钟0.375us。
1.48/0.375=3.95  约3-4个字。这个差值基本可以了。
可见这里要保证的是时钟频率要高。
采用8M频率,每次差值3-4,采样100次求和作为1次总采样。差值就相差300-400,就可以准确判断感应按键了。当然采样10次或者更多次总采样后采用求平均值等软件滤波方法来消除干扰或者误差更好。
另一种方法就是在10ms时间内求得判断的次数,有按键感应的判断次数比无按键感应次数少。基本和PIC的方案差不多。
以上方法笔者都试验过(见图),具体的程序,以及温漂,校准等这里就不详细讲解。

(原文件名:图形5.jpg)

(原文件名:图形6.jpg)

电荷转移(QT)原理电容感应按键
如图:
(原文件名:sensor072946m3.gif)
“电荷转移”或叫“QT”的原理是这样的:传感电极上的电荷会转移到一个较大的参考取样电容器上,电荷 在该电容器上积累,持续多个开关周期,将参考电容器上的电压积累到参考电压的水平,然后控制 逻辑电路会记录到达该电压值所需要的周期数目,并对参考电容器进行放电。
如图用M48的PD0和PD1端口来实现。

(原文件名:图形7.jpg)
C1是分布电容,C2这里作为按键感应电容。C3是参考电容。
工作过程:
1:首先要禁止上拉电阻。
2:PD0=0,PD1为高阻或者为0输出,放掉C3上电荷。
3:PD1输入(高阻断开)PD0输出高电平,向C1,C2充电。
4:PD0输入(高阻断开),PD1输出低电平C1.C2上的电荷向C3转移。
5:判断PD0是否为高电平。
6:循环3-5步骤。
比较:有按键感应比无按键感应的开关次数少。
这种原理是测量C3上的电压,因此对频率要求不是很高,但要求I/O脚漏电流越小越好,同时I/O内部的二极管漏电流也有影响。
该方法笔者试验过,具体的程序,以及温漂,校准,焊盘影响等这里就不详细讲解。
估计有很多电容感应IC就是以上原理做的,仅仅是估计呀,不过懂了原理后你也可以自己做。
作者: lyp103    时间: 2009-3-8 15:57
R1的电阻有点小,1-2M比较合适,可以延长放电时间,有手按下和没有按下会有比较明显的变化
作者: qzzz    时间: 2009-3-8 16:37
这个要支持
作者: af00    时间: 2009-3-8 17:00
顶了
作者: 155107149    时间: 2009-3-8 17:13
顶,我也试着做做看。。。
作者: wajlh    时间: 2009-3-8 17:28
zhichi
作者: xbq1001    时间: 2009-3-8 17:42
赞一个
作者: ibq3100    时间: 2009-3-8 18:31
顶一个,试着做一个
作者: deadleon    时间: 2009-3-8 18:36
留名学习
作者: h2feo4    时间: 2009-3-8 18:38
学习了
作者: kv2004    时间: 2009-3-8 21:22
多谢,看明白qt了。我也试试。
作者: zhc7302    时间: 2009-3-8 21:46
mark!
作者: kv2004    时间: 2009-3-8 22:23
用m16的两个端口,按照楼主的qt原理,做了一下,感觉效果相当明显!
作者: eduhf_123    时间: 2009-3-8 23:38
MARK
作者: 252177861    时间: 2009-3-8 23:39
这篇文章得顶,前段时间还在自己琢磨着电容触摸按键的原理,基本想法和楼主一样  哈哈,这下可以放心大胆的去做啦
作者: nhlijiaming    时间: 2009-3-8 23:48
很好~~mark
作者: ssyniuej    时间: 2009-3-9 00:03
学习了!谢谢。
作者: pinocchio    时间: 2009-3-9 00:33
mark
作者: armfans    时间: 2009-3-9 02:46
学习了
作者: cgbabc    时间: 2009-3-9 08:03
支持一个
作者: deepin    时间: 2009-3-9 09:07
MARK
作者: deepin    时间: 2009-3-9 09:07
不过这种方案,要动作的时候还是得接触吧,就是说还是要把键按下去吧?
作者: lihq97    时间: 2009-3-9 10:04
支持!
作者: QZDZ    时间: 2009-3-9 10:06
如此好贴应该顶起来,希望再接再历,把抗干扰等算法搞定。
作者: jchqxl    时间: 2009-3-9 10:23
实际中能够用吗?抗干扰什么的。
作者: xiaoyuanlu    时间: 2009-3-9 11:35
MARK!学习了!
作者: banyan_city    时间: 2009-3-9 11:37
学习了
作者: mfkqqw    时间: 2009-3-9 11:48
学习了
作者: jj3055    时间: 2009-3-9 12:04
mark
作者: bigfatfish    时间: 2009-3-9 13:03
mark
作者: xiong_ls    时间: 2009-3-9 13:59

作者: lcw_swust    时间: 2009-3-9 21:01
众里寻它千百度,终于在这里找到这样的好贴了。。。
作者: yhyf_heart    时间: 2009-3-9 21:09
好贴啊!
作者: yaya001    时间: 2009-3-10 10:46
mark 一下
作者: sunyouyuan    时间: 2009-3-10 11:02
mark!
作者: yulutong    时间: 2009-3-10 11:06
楼道灯的触摸开关,它肯定没有用单片机的,请问怎么实现的?
作者: ifree64    时间: 2009-3-10 11:08
mark学习
作者: lxx_sea_sky    时间: 2009-3-10 11:09
强贴强顶
作者: hibond    时间: 2009-3-10 12:45
mark
作者: zhuzi1441    时间: 2009-3-10 13:11
mark
作者: eiglxl    时间: 2009-3-10 13:22
mark
作者: flyerhacker    时间: 2009-3-10 16:33
学习
作者: hjjun    时间: 2009-3-10 17:14
顶!好好研究下!
作者: dicat    时间: 2009-3-13 09:33
和QT的说明好象不太一样
作者: Houcius    时间: 2009-3-13 11:00
与35楼同问
作者: zrl700424    时间: 2009-3-13 11:15
【35楼】 yulutong 土土狗
楼道灯的触摸开关,它肯定没有用单片机的,请问怎么实现的?

那是触摸芯片,而楼主说的是感应芯片。触摸开关确实没用单片机,它是直接接触电极,由人体与地形成回路,触发可控硅导通实现的。
作者: kv2004    时间: 2009-4-1 22:58
程序ourdev_431670.rar(文件大小:821K) (原文件名:m8.rar)

(原文件名:电路图.jpg)


(原文件名:抓图.jpg)

用的是mega8L,算法不太好,感觉稳定性还可以。

--------------------------------------------
增加开、关灯 程序+电路 点击此处下载 ourdev_432195.rar(文件大小:837K) (原文件名:电容点灯.rar)


(原文件名:点灯.jpg)
作者: jerico    时间: 2009-4-21 12:42
原来这就是QT原理,哪QT比起第一种方法有什么优点没有呢?
作者: daicp    时间: 2009-7-30 09:48
46L的会不会麻手呢?
作者: kv2004    时间: 2009-7-30 10:10
46楼不会手麻,因为还隔着1~5毫米厚的塑料。
作者: chengtina    时间: 2009-7-30 10:58
厉害!有时间锝做一个
作者: uestcduoduo    时间: 2009-7-30 13:02
mark
作者: elain    时间: 2009-7-30 13:45
mark
作者: mayis    时间: 2009-8-7 17:47
MARK
作者: oufuqiang    时间: 2009-8-7 19:12
mark
作者: yaonui    时间: 2009-8-7 19:25
mark
作者: plc_avr    时间: 2009-8-7 19:59
MARK一下。
作者: fandipeng412    时间: 2009-8-7 20:03

作者: ds13512730250    时间: 2009-8-7 20:33
mark
作者: jchqxl    时间: 2009-8-7 21:02
不错!
作者: sunkmsr    时间: 2009-8-7 21:04
flag
作者: shangxf    时间: 2009-8-7 21:34
不错
作者: luld    时间: 2009-8-7 21:40
mark
作者: xiaoning    时间: 2009-8-7 21:58
学习了 电容电灯也不错啊 呵呵
触摸键有空做个
作者: chenjianlin    时间: 2009-8-8 07:30
RC电容感应被ST开源出来了的,在
http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=3433822&bbs_page_no=1&search_mode=3&search_text=chenjianlin&bbs_id=9999
有AVR的RC电容感应完全流程。
作者: ggyyll8683    时间: 2009-8-8 08:31
学习!!
作者: liujunjie    时间: 2009-8-8 10:28
mark!~
作者: af00    时间: 2009-8-8 11:30
学习!ouravr总是不断有惊喜!
作者: lichangan    时间: 2009-8-8 13:34
记号
作者: guangan854214    时间: 2009-8-8 13:53
支持~~
作者: wormchen    时间: 2010-3-26 10:04
好贴,MARK!
作者: icevel    时间: 2010-3-27 23:06
mark
作者: sino_design    时间: 2010-3-28 00:21
好贴
作者: ppsen    时间: 2010-3-28 09:34
支持一下
作者: zlutian    时间: 2010-3-28 09:58
好,mark
作者: xuejianhua1986    时间: 2010-3-28 11:55
mark
作者: thinki    时间: 2010-3-28 12:46
顶一下!
作者: iam35200    时间: 2010-3-28 12:53
值得参考
作者: lvyecc    时间: 2010-3-28 16:36
mark
作者: kele2009    时间: 2010-3-28 16:39
学习了
作者: bluefeel    时间: 2010-3-28 17:28
mark
作者: PaulDE    时间: 2010-3-28 18:18
标记一下
作者: autodash    时间: 2010-3-28 18:25
好贴
作者: bigworms    时间: 2010-3-28 21:13
mark
作者: qilin3    时间: 2010-3-28 22:54
good
作者: leexue    时间: 2010-4-12 08:47
以前看的不是这个,还要简单一点。
作者: sunzhaod    时间: 2010-4-12 09:00
mark
作者: jielove2003    时间: 2010-4-12 09:25
学习了
作者: abcdezh    时间: 2010-4-12 09:36
mark
作者: flashman911    时间: 2010-4-12 10:01
MARK
作者: smartzou    时间: 2010-4-12 10:32
mark
作者: yusufu    时间: 2010-4-12 10:53
不错,学习了~~~
作者: gpzdc986    时间: 2010-4-12 12:25
mark
作者: vipcff    时间: 2010-4-12 12:47
MARK
作者: renxupeng    时间: 2010-4-12 13:33
mark
作者: alasika    时间: 2010-4-12 17:01
mark
作者: lvwang2002    时间: 2010-4-12 17:10
mark
作者: lionwang3    时间: 2010-4-12 19:11
顶一下!
作者: hithyy    时间: 2010-4-12 20:45
顶下
作者: jiangping_hbhm    时间: 2010-4-12 23:13
mark




欢迎光临 amobbs.com 阿莫电子技术论坛 (https://www.amobbs.com/) Powered by Discuz! X3.4