lazysummer 发表于 2007-11-11 17:53:22

【原创】新型单线AD键盘,保证稳定(附一个问题:如何减少AD键盘的干扰)

http://cache.amobbs.com/bbs_upload782111/files_8/ourdev_180514.jpg
原理非常简单,如上图,只要检测AD值便可以知道按下哪个键。不用像其他AD键盘那样对电阻阻值有要求,相对稳定很多,经过制作测试,没有试过误判,制作简单,但写程序时调试时会比较麻烦一点,需要对每个按键的AD值范围进行测量与记录。我自己做了一个30键键盘,测量记录也只用了10多分钟。

测量方法也很简单,编一个小程序,记录AD转换的最大值与最小值用液晶或者数码管显示出来。把键盘输出端接到AVR的AD端,逐个按键按,每个按键都多按几次,直到显示的最大最小值显示不再变化,记录最大最小值,这个范围值便是对应该按键的AD范围值。

记录好每个键的AD范围后,键盘的检测程序只要进行AD转换,然后判断该AD值属于哪个按键的AD值范围便知道是哪个按键。(如果不是对程序效率有很高的要求,请不要判断按键函数时用折半算法,因为用折半算法来写判断按键函数写需要非常大的时间和精力,而且程序容量也大很多很多。我折半算法写过一次,效率是提高了8倍,但耗费了我半天时间,而且可读性和可移植性很低。)

附带问题:
我自己做的30键键盘,用普通1k +-5%的炭膜电阻,实测AD干扰非常严重(不知道是不是因为有干扰),浮动最大有+-15LBS。但这些干扰很确定,每个按键的AD值浮动的范围都不会变,始终会在那个范围里浮动。例如键盘的第一个按键它的AD值范围是1000LBS到900LBS,无论用手机在旁边打电话啊,摆到电源隔壁啊,都是一样没变化。确定好每个键的AD值范围后就很稳定,没有试过检测错键。我不知道这是电路引入干扰还是电路元器件的问题。因为能把这个AD浮动范围缩小的话,就可以增加更加多的按键,现在+-15LBS的浮动范围最多只可以实现33个按键。如果AD浮动范围足够小的话,例如+-5LBS,理论上还可以实现组合键功能。我是一位初学者,请各位高手指点指点。

还有就是阿莫邮购非常好,昨天在阿莫那里订了一大箱元件来做项目,今天就到货,服务一流,元件包装一流!不足的是元件种类少了点,居然没有1%精度的电阻,原本还想买堆回来试下用来做这个键盘效果会不会好一点。-_-|

lazysummer 发表于 2007-11-11 18:30:03

补充,对比其他AD键盘设计的优点
http://cache.amobbs.com/bbs_upload782111/files_8/ourdev_180515.jpg
如这种AD键盘设计,如果做30个按键的话会很不稳定,后面的按钮会很容易出现误判,因为它每个按键的对应AD值是非线性分配的。
第n个按键的理论AD值是1024*(n-1)/n
第30个按键的理论AD值是1024*29/30=989.867LBS
第29个按键的理论AD值是1024*28/29=988.690LBS
第28个按键的理论AD值是1024*27/28=987.429LBS
第27个按键的理论AD值是1024*26/27=986.074LBS
......
可以看出如果按键数多的话,后面按键的对应AD相隔会非常小,对AD转换的精度要求非常高,达到1LBS,容错能力非常低,受点干扰或者AD转换有误(AVR的转换精度是+ -0.5LBS)就会出现出错。
如果要改善稳定性的话只有改变电阻R的值,按照经过计算的电阻分配表来连接电阻,这样的稳定度会高很多,对AD的转换精度也低很多,MAX公司最近准备上市一种专门的按键检测芯片max11041,用八位AD进行检测,支持30按键,所用的键盘电路就是这种,把R按它提供的电阻分配表来连接。但这样一来制作会难很多,因为不是很多人会有这么多种类而且齐全的电阻。
我所设计的AD键盘每个按键的对应AD值是接近线性分配的,稳定而且容易制作,经过实物测试(30键),只是AD浮动问题还没有解决才不能增加更多的按键。

dxjk 发表于 2007-11-11 19:41:42

是不是每做一个板都要测测量范围啊,如果哪样不妙了

Jacky 发表于 2007-11-11 19:53:56

假如若干年后,阻值发生漂移怎么办?用在产品上总觉得不放心

Qhjh 发表于 2007-11-11 21:31:59

如果感到不放心,在项目中触摸屏就甭用了.

bing0110 发表于 2007-11-11 22:24:01

【3楼】:用精密电阻

ssyniuej 发表于 2007-11-12 02:02:23

用恒流源来做,这样可以将容限加大,本来我用过这种设计,但后来所用的按键太少,所以还是直接用电阻分压了。

liqu 发表于 2007-11-12 08:03:07

上个恒流源图吧,咱也学习一下.

donkey 发表于 2007-11-12 08:55:55

你这个按键有优先级的,同时按下就傻眼了

sunli_suzhou 发表于 2007-11-12 11:32:07

原理是好,我曾用在一款带水的机器上,在按键和主机接口处有点水(有水阻)导致误判把我搞死了。

Forever 发表于 2007-11-12 11:36:28

路过,顶一下!

haizhilan 发表于 2007-11-12 11:57:51

AD来做键盘,组合键怎么用呀?

feiyue 发表于 2007-11-12 18:39:30

一个AD口,多个按键,分压电阻等值,不是最优解!

hsj210 发表于 2007-11-12 21:57:14

这种电路存在很大的辟端,如果中间哪个电阻出现问题,后面的按键将会全部失效。所以用在厂品上时,是不会这样做的一般是:(这样也有一个好处,电阻比较好选)
   http://cache.amobbs.com/bbs_upload782111/files_8/ourdev_180641.JPG

MicroPLC 发表于 2007-11-12 22:26:03

精密电阻的造价也不低啊!

lazysummer 发表于 2007-11-13 00:52:40

哈哈··多谢各位的指教··
这是我第一个创作的东东,没什么技术含量和深度,请勿见怪。
我设计这个键盘的主要原因只是见到其他AD键盘制作太难,需要很多种电阻,对于我们学生来说不方便制作,所以就想出这样一个制作方便一点的键盘出来。这个设计绝对只是一个学生课余想太多的制作,远远没有到产品级。而且我做这个AD键盘主要是想试一下AD单线键盘和普通扫描键盘用起来有什么不同而已。大家就当作是看看学生作业那样吧,哈哈哈哈!
组合键公式还在推导验证中,如果各位有兴趣的话我推导好会发上来。
对于各位高手的指导,小弟虚心受教了。^-^

wanyou132 发表于 2007-11-19 17:13:45

这种键盘如果同时按下多于1个的键,那未检测到地键回是在一系列键中最接近ADC的输入的那个键,键有优先次序之分的.
这种键盘做组合键纯数扯淡,根本没有实际意义
能做到12键就可以,你得考虑按键阻值的变化
http://www2.ouravr.com/bbs/bbs_content.jsp?bbs_sn=830574&bbs_page_no=4&bbs_id=1000

zhonghua_li 发表于 2007-11-19 21:24:09

TO 楼主:这种电路的缺点就是,如果几个键同时按下可能会被当作别的键,这样很危险;而1楼的电路可以受最上面的那个按键屏蔽
TO 1楼:R2,R3,R4可以取得不一样,来把每档分成均匀的。

具体看这里:
http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=823640&bbs_page_no=1&search_mode=3&search_text=zhonghua_li&bbs_id=9999
之16,18楼

cjbcjb 发表于 2007-11-20 17:03:08

学习了

lazysummer 发表于 2007-11-27 02:44:12

http://cache.amobbs.com/bbs_upload782111/files_8/ourdev_180581.jpg


如上图一个六按键键盘,将AVCC连到键盘电源+5v,则理论上

n个按键键盘,按下第S按键AD值计算公式:AD=1024*(n-S)/n
按下按键1,AD值为1024*6/7=877.741
按下按键2,AD值为1024*5/7=731.428
按下按键3,AD值为1024*4/7=585.142
按下按键4,AD值为1024*3/7=438.857
按下按键5,AD值为1024*2/7=292.571
按下按键6,AD值为1024*1/7=146.714

n个按键键盘,同时按下第S1按键和S2按键AD值计算公式:
if(S1>S2) AD=1024*(n-s1+1)/(s2+n-s2+1);
if(S1<S2) AD=1024*(n-s2+1)/(s1+n-s2+1);

同时按下5和6键 AD值为1024*1/6=170.666
同时按下4和6键 AD值为1024*1/5=204.800
同时按下3和6键 AD值为1024*1/4=256.000
同时按下2和6键 AD值为1024*1/3=341.333
同时按下1和6键 AD值为1024*1/2=512.000 (与同时按下2和5键和同时按下3和4键相同)

同时按下4和5键 AD值为1024*2/6=1024*2/3=341.333 (与同时按下1和5键和同时按下2和3键相同)
同时按下3和5键 AD值为1024*2/5=409.600
同时按下2和5键 AD值为1024*2/4=1024*1/2=512.000 (与同时按下1和6键和同时按下3和4键相同)
同时按下1和5键 AD值为1024*2/3=682.666 (与同时按下2和3键和同时按下4和5键相同)

同时按下3和4键 AD值为1024*3/6=1024*1/2=512.000 (与同时按下1和6键和同时按下2和5键相同)
同时按下2和4键 AD值为1024*3/5=614.400
同时按下1和4键 AD值为1024*3/4=768.000

同时按下2和3键 AD值为1024*4/6=1024*2/3=682.666 (与同时按下1和5键和同时按下4和5键相同)
同时按下1和3键 AD值为1024*4/5=819.200

同时按下1和2键 AD值为1024*5/6=853.333

因为最近要考试,还没有把组合建公式推导完成,现在简单的推导一下组合键功能。
理论上如AD检测误差控制在+-10LBS内,侧可以实现九种两键组合键功能,此设计在理论是可以实现组合键功能的

回十六楼,这个设计是没有优先次序之分的,计算公式已给出。

回十七楼,你贴子所说的设计已经用于随身听,mp3等产品的线控很久了,max公司也推出专门的检测芯片,数据手册上也给出了电阻分配表,稳定性于实用性无需质疑。我这个设计是我原创的,拿出来给大家献丑一下,稳定性和实用性的确还是不够。

chendaon 发表于 2007-11-27 13:15:47

经典,路过

halloween 发表于 2008-1-10 16:36:34

留个脚印

abcdezh 发表于 2008-1-10 16:51:23

路过,学习

Edesigner 发表于 2008-1-10 17:23:26

强烈建议不要使用AD键盘。接触不良时会出现误操作。创维电视就经常出现。可以把键盘和LED驱动共同IO口。

gphs 发表于 2008-1-10 21:06:37

使用时间长了,可能会出问题,要使用,键应该尽量少些,把范围给得大一些!有点误差也不会有什么影响!

cfanandham 发表于 2008-1-11 20:40:57

将19楼的图按键一去掉,R1.R2的连接点接单片机基准电源输入,单片机选外部基准,(在AVR上实现),这样就不会有干扰了.

cfanandham 发表于 2008-1-11 20:53:15

这种键盘键较多时一般需写一个专用标定程序,在生产中的电路连接测试时(就是JTAG的最初开发目的),将标定数据写入EEPROM,换上真正的功能芯片时读取EEPROM的内容作为按键判断的依据,每台机器都不一定一样.(呵呵,无意中实现了加密).
每一种电路都不是十全十美的,当我们将一个电路应用到具体的环境中时,如果他的缺点不会对总体产生不可饶恕的影响,那么我们就可以说这个电路适合这个环境.

changyi942 发表于 2008-4-16 11:06:43

记号

langeliu 发表于 2008-4-16 13:26:44

做的少还好点,按键一多容易出错

maskiss 发表于 2008-5-24 16:38:54

这样的按键千万别搞到生命支持系统上面,出问题的话那很可怕的^……

zlutian 发表于 2008-5-24 23:17:41

谢谢, mark

gxlujd 发表于 2008-5-25 00:15:44

AD程序一定要做数字滤波,特别是对随机的干扰脉冲要滤掉,这样的键盘按键不多,AD值间隔较大的情况下还是具有实用价值的。

ndust 发表于 2008-5-25 07:09:52

记号

madha 发表于 2008-5-25 20:25:22

记号

FIFO 发表于 2008-5-25 20:45:56

我觉得程序上做数字滤波,电路上每个A/D引脚都对地接一个小滤波电容.肯定就不会再有干扰了.

0620221 发表于 2009-6-11 14:03:04

luoguo

fwluck 发表于 2009-6-11 17:30:05

路过。

gshuang1 发表于 2009-6-11 21:46:20

我曾经也用过楼主的设计方法,稳定性比较差,按键越多,受干扰的就越严重。

xunke 发表于 2010-4-11 17:21:30

回复【37楼】gshuang1
-----------------------------------------------------------------------

ad值有越大时会出现+/-1误差,我用STC单片机的实验的。

slamkk 发表于 2010-4-13 13:34:54

非顶不可

newer2008 发表于 2010-4-22 13:58:44

这种键盘的编程思路是怎么样的呢?检测放电时间?然后根据时间查表,求值(是一个范围值)?

cumt_123456 发表于 2011-8-12 14:31:19

感觉很好,哈哈

jamesabc007 发表于 2012-1-10 16:28:55

强烈建议不要使用AD键盘。接触不良时会出现误操作。

HZKJ 发表于 2012-10-19 21:54:13

哈哈,跨时代的帖子。07年到12年,楼主该工作多年了吧。大家在实际产品中是否有用到过这种方法的呢,10个按键以内。。

SevenWans 发表于 2012-11-30 11:05:40

{:loveliness:}{:loveliness:}{:loveliness:}MARK~

liang118038 发表于 2013-2-20 16:49:33

AD按键还是不要用到产品上吧,干扰还不是最大问题,最大的问题是按键互相影响,还有按钮的接触电阻直接影响键位可靠性根本不能保证,每用一段时间就要换新的按钮,你敢这样折腾吗?
页: [1]
查看完整版本: 【原创】新型单线AD键盘,保证稳定(附一个问题:如何减少AD键盘的干扰)