chenjianlin 发表于 2009-3-8 14:48:24

轻轻松松实现电容感应按键

RC充放电原理电容感应按键
http://cache.amobbs.com/bbs_upload782111/files_13/ourdev_424428.jpg
(原文件名:图形1.jpg) 看过PIC的电容按键方案,实际上仅仅是一个充放电过程,可以不用比较器吗?
答案是肯定的。一般双向I/O单片机都可以做RC电容感应按键。
这里我们用M48的端口PD0来做一个RC的电容感应按键。
http://cache.amobbs.com/bbs_upload782111/files_13/ourdev_424427.jpg
(原文件名:图形2.jpg)
C1是分布电容,C2这里作为按键感应电容。
工作过程:
1:首先要禁止上拉电阻。
2:PD0输出高电平,向C1,C2充电。
3:PD0设置为输入,判断C1.C2向R1放电完毕的时间。
4:对比有C2和没有C2的放电时间,判断是否有键感应。
如图在只有C1的时候放电波形,放电时间测量为4.1us
http://cache.amobbs.com/bbs_upload782111/files_13/ourdev_424429.jpg
(原文件名:图形3.jpg)
如图在有C2感应的时候放电波形,放电时间测量为5.58us
http://cache.amobbs.com/bbs_upload782111/files_13/ourdev_424430.jpg
(原文件名:图形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的方案差不多。
以上方法笔者都试验过(见图),具体的程序,以及温漂,校准等这里就不详细讲解。
http://cache.amobbs.com/bbs_upload782111/files_13/ourdev_424420.jpg
(原文件名:图形5.jpg)
http://cache.amobbs.com/bbs_upload782111/files_13/ourdev_424421.jpg
(原文件名:图形6.jpg)

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

R1的电阻有点小,1-2M比较合适,可以延长放电时间,有手按下和没有按下会有比较明显的变化

qzzz 发表于 2009-3-8 16:37:52

这个要支持

af00 发表于 2009-3-8 17:00:42

顶了

155107149 发表于 2009-3-8 17:13:09

顶,我也试着做做看。。。

wajlh 发表于 2009-3-8 17:28:16

zhichi

xbq1001 发表于 2009-3-8 17:42:19

赞一个

ibq3100 发表于 2009-3-8 18:31:05

顶一个,试着做一个

deadleon 发表于 2009-3-8 18:36:52

留名学习

h2feo4 发表于 2009-3-8 18:38:16

学习了

kv2004 发表于 2009-3-8 21:22:45

多谢,看明白qt了。我也试试。

zhc7302 发表于 2009-3-8 21:46:02

mark!

kv2004 发表于 2009-3-8 22:23:00

用m16的两个端口,按照楼主的qt原理,做了一下,感觉效果相当明显!

eduhf_123 发表于 2009-3-8 23:38:19

MARK

252177861 发表于 2009-3-8 23:39:56

这篇文章得顶,前段时间还在自己琢磨着电容触摸按键的原理,基本想法和楼主一样哈哈,这下可以放心大胆的去做啦

nhlijiaming 发表于 2009-3-8 23:48:42

很好~~mark

ssyniuej 发表于 2009-3-9 00:03:42

学习了!谢谢。

pinocchio 发表于 2009-3-9 00:33:10

mark

armfans 发表于 2009-3-9 02:46:20

学习了

cgbabc 发表于 2009-3-9 08:03:32

支持一个

deepin 发表于 2009-3-9 09:07:06

MARK

deepin 发表于 2009-3-9 09:07:53

不过这种方案,要动作的时候还是得接触吧,就是说还是要把键按下去吧?

lihq97 发表于 2009-3-9 10:04:20

支持!

QZDZ 发表于 2009-3-9 10:06:07

如此好贴应该顶起来,希望再接再历,把抗干扰等算法搞定。

jchqxl 发表于 2009-3-9 10:23:54

实际中能够用吗?抗干扰什么的。

xiaoyuanlu 发表于 2009-3-9 11:35:27

MARK!学习了!

banyan_city 发表于 2009-3-9 11:37:15

学习了

mfkqqw 发表于 2009-3-9 11:48:35

学习了

jj3055 发表于 2009-3-9 12:04:40

mark

bigfatfish 发表于 2009-3-9 13:03:17

mark

xiong_ls 发表于 2009-3-9 13:59:18

lcw_swust 发表于 2009-3-9 21:01:46

众里寻它千百度,终于在这里找到这样的好贴了。。。

yhyf_heart 发表于 2009-3-9 21:09:51

好贴啊!

yaya001 发表于 2009-3-10 10:46:20

mark 一下

sunyouyuan 发表于 2009-3-10 11:02:26

mark!

yulutong 发表于 2009-3-10 11:06:33

楼道灯的触摸开关,它肯定没有用单片机的,请问怎么实现的?

ifree64 发表于 2009-3-10 11:08:23

mark学习

lxx_sea_sky 发表于 2009-3-10 11:09:25

强贴强顶

hibond 发表于 2009-3-10 12:45:58

mark

zhuzi1441 发表于 2009-3-10 13:11:14

mark

eiglxl 发表于 2009-3-10 13:22:35

mark

flyerhacker 发表于 2009-3-10 16:33:34

学习

hjjun 发表于 2009-3-10 17:14:59

顶!好好研究下!

dicat 发表于 2009-3-13 09:33:26

和QT的说明好象不太一样

Houcius 发表于 2009-3-13 11:00:29

与35楼同问

zrl700424 发表于 2009-3-13 11:15:28

【35楼】 yulutong 土土狗
楼道灯的触摸开关,它肯定没有用单片机的,请问怎么实现的?

那是触摸芯片,而楼主说的是感应芯片。触摸开关确实没用单片机,它是直接接触电极,由人体与地形成回路,触发可控硅导通实现的。

kv2004 发表于 2009-4-1 22:58:01

程序ourdev_431670.rar(文件大小:821K) (原文件名:m8.rar)
http://cache.amobbs.com/bbs_upload782111/files_13/ourdev_431671.jpg
(原文件名:电路图.jpg)

http://cache.amobbs.com/bbs_upload782111/files_13/ourdev_431672.jpg
(原文件名:抓图.jpg)

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

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

http://cache.amobbs.com/bbs_upload782111/files_13/ourdev_432196.jpg
(原文件名:点灯.jpg)

jerico 发表于 2009-4-21 12:42:34

原来这就是QT原理,哪QT比起第一种方法有什么优点没有呢?

daicp 发表于 2009-7-30 09:48:40

46L的会不会麻手呢?

kv2004 发表于 2009-7-30 10:10:00

46楼不会手麻,因为还隔着1~5毫米厚的塑料。

chengtina 发表于 2009-7-30 10:58:21

厉害!有时间锝做一个

uestcduoduo 发表于 2009-7-30 13:02:21

mark

elain 发表于 2009-7-30 13:45:51

mark

mayis 发表于 2009-8-7 17:47:33

MARK

oufuqiang 发表于 2009-8-7 19:12:59

mark

yaonui 发表于 2009-8-7 19:25:54

mark

plc_avr 发表于 2009-8-7 19:59:23

MARK一下。

fandipeng412 发表于 2009-8-7 20:03:44

./emotion/em002.gif

ds13512730250 发表于 2009-8-7 20:33:01

mark

jchqxl 发表于 2009-8-7 21:02:16

不错!

sunkmsr 发表于 2009-8-7 21:04:32

flag

shangxf 发表于 2009-8-7 21:34:33

不错

luld 发表于 2009-8-7 21:40:52

mark

xiaoning 发表于 2009-8-7 21:58:08

学习了 电容电灯也不错啊 呵呵
触摸键有空做个

chenjianlin 发表于 2009-8-8 07:30:38

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:36

学习!!

liujunjie 发表于 2009-8-8 10:28:52

mark!~

af00 发表于 2009-8-8 11:30:29

学习!ouravr总是不断有惊喜!

lichangan 发表于 2009-8-8 13:34:14

记号

guangan854214 发表于 2009-8-8 13:53:43

支持~~

wormchen 发表于 2010-3-26 10:04:42

好贴,MARK!

icevel 发表于 2010-3-27 23:06:29

mark

sino_design 发表于 2010-3-28 00:21:27

好贴

ppsen 发表于 2010-3-28 09:34:07

支持一下

zlutian 发表于 2010-3-28 09:58:51

好,mark

xuejianhua1986 发表于 2010-3-28 11:55:39

mark

thinki 发表于 2010-3-28 12:46:24

顶一下!

iam35200 发表于 2010-3-28 12:53:06

值得参考

lvyecc 发表于 2010-3-28 16:36:19

mark

kele2009 发表于 2010-3-28 16:39:16

学习了

bluefeel 发表于 2010-3-28 17:28:51

mark

PaulDE 发表于 2010-3-28 18:18:24

标记一下

autodash 发表于 2010-3-28 18:25:27

好贴

bigworms 发表于 2010-3-28 21:13:23

mark

qilin3 发表于 2010-3-28 22:54:40

good

leexue 发表于 2010-4-12 08:47:56

以前看的不是这个,还要简单一点。

sunzhaod 发表于 2010-4-12 09:00:41

mark

jielove2003 发表于 2010-4-12 09:25:19

学习了

abcdezh 发表于 2010-4-12 09:36:12

mark

flashman911 发表于 2010-4-12 10:01:41

MARK

smartzou 发表于 2010-4-12 10:32:52

mark

yusufu 发表于 2010-4-12 10:53:12

不错,学习了~~~

gpzdc986 发表于 2010-4-12 12:25:29

mark

vipcff 发表于 2010-4-12 12:47:22

MARK

renxupeng 发表于 2010-4-12 13:33:38

mark

alasika 发表于 2010-4-12 17:01:59

mark

lvwang2002 发表于 2010-4-12 17:10:53

mark

lionwang3 发表于 2010-4-12 19:11:55

顶一下!

hithyy 发表于 2010-4-12 20:45:30

顶下

jiangping_hbhm 发表于 2010-4-12 23:13:35

mark
页: [1] 2 3 4
查看完整版本: 轻轻松松实现电容感应按键