搜索
bottom↓
回复: 45

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

[复制链接]

出0入0汤圆

发表于 2007-11-11 17:53:22 | 显示全部楼层 |阅读模式

原理非常简单,如上图,只要检测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%精度的电阻,原本还想买堆回来试下用来做这个键盘效果会不会好一点。-_-|

出0入0汤圆

 楼主| 发表于 2007-11-11 18:30:03 | 显示全部楼层
补充,对比其他AD键盘设计的优点

如这种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浮动问题还没有解决才不能增加更多的按键。

出0入0汤圆

发表于 2007-11-11 19:41:42 | 显示全部楼层
是不是每做一个板都要测测量范围啊,如果哪样不妙了

出0入0汤圆

发表于 2007-11-11 19:53:56 | 显示全部楼层
假如若干年后,阻值发生漂移怎么办?用在产品上总觉得不放心

出0入0汤圆

发表于 2007-11-11 21:31:59 | 显示全部楼层
如果感到不放心,在项目中触摸屏就甭用了.

出0入0汤圆

发表于 2007-11-11 22:24:01 | 显示全部楼层
【3楼】:用精密电阻

出0入0汤圆

发表于 2007-11-12 02:02:23 | 显示全部楼层
用恒流源来做,这样可以将容限加大,本来我用过这种设计,但后来所用的按键太少,所以还是直接用电阻分压了。

出0入0汤圆

发表于 2007-11-12 08:03:07 | 显示全部楼层
上个恒流源图吧,咱也学习一下.

出0入0汤圆

发表于 2007-11-12 08:55:55 | 显示全部楼层
你这个按键有优先级的,同时按下就傻眼了

出0入0汤圆

发表于 2007-11-12 11:32:07 | 显示全部楼层
原理是好,我曾用在一款带水的机器上,在按键和主机接口处有点水(有水阻)导致误判把我搞死了。

出0入0汤圆

发表于 2007-11-12 11:36:28 | 显示全部楼层
路过,顶一下!

出0入0汤圆

发表于 2007-11-12 11:57:51 | 显示全部楼层
AD来做键盘,组合键怎么用呀?

出0入0汤圆

发表于 2007-11-12 18:39:30 | 显示全部楼层
一个AD口,多个按键,分压电阻等值,不是最优解!

出0入0汤圆

发表于 2007-11-12 21:57:14 | 显示全部楼层
这种电路存在很大的辟端,如果中间哪个电阻出现问题,后面的按键将会全部失效。所以用在厂品上时,是不会这样做的一般是:(这样也有一个好处,电阻比较好选)
   

出0入0汤圆

发表于 2007-11-12 22:26:03 | 显示全部楼层
精密电阻的造价也不低啊!

出0入0汤圆

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

出0入0汤圆

发表于 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

出0入0汤圆

发表于 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楼

出0入0汤圆

发表于 2007-11-20 17:03:08 | 显示全部楼层
学习了

出0入0汤圆

 楼主| 发表于 2007-11-27 02:44:12 | 显示全部楼层



如上图一个六按键键盘,将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公司也推出专门的检测芯片,数据手册上也给出了电阻分配表,稳定性于实用性无需质疑。我这个设计是我原创的,拿出来给大家献丑一下,稳定性和实用性的确还是不够。

出0入4汤圆

发表于 2007-11-27 13:15:47 | 显示全部楼层
经典,路过

出0入0汤圆

发表于 2008-1-10 16:36:34 | 显示全部楼层
留个脚印

出0入0汤圆

发表于 2008-1-10 16:51:23 | 显示全部楼层
路过,学习

出0入0汤圆

发表于 2008-1-10 17:23:26 | 显示全部楼层
强烈建议不要使用AD键盘。接触不良时会出现误操作。创维电视就经常出现。可以把键盘和LED驱动共同IO口。

出0入0汤圆

发表于 2008-1-10 21:06:37 | 显示全部楼层
使用时间长了,可能会出问题,要使用,键应该尽量少些,把范围给得大一些!有点误差也不会有什么影响!

出0入0汤圆

发表于 2008-1-11 20:40:57 | 显示全部楼层
将19楼的图按键一去掉,R1.R2的连接点接单片机基准电源输入,单片机选外部基准,(在AVR上实现),这样就不会有干扰了.

出0入0汤圆

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

出0入0汤圆

发表于 2008-4-16 11:06:43 | 显示全部楼层
记号

出0入0汤圆

发表于 2008-4-16 13:26:44 | 显示全部楼层
做的少还好点,按键一多容易出错

出0入0汤圆

发表于 2008-5-24 16:38:54 | 显示全部楼层
这样的按键千万别搞到生命支持系统上面,出问题的话那很可怕的^……

出0入0汤圆

发表于 2008-5-24 23:17:41 | 显示全部楼层
谢谢, mark

出0入0汤圆

发表于 2008-5-25 00:15:44 | 显示全部楼层
AD程序一定要做数字滤波,特别是对随机的干扰脉冲要滤掉,这样的键盘按键不多,AD值间隔较大的情况下还是具有实用价值的。

出0入0汤圆

发表于 2008-5-25 07:09:52 | 显示全部楼层
记号

出0入0汤圆

发表于 2008-5-25 20:25:22 | 显示全部楼层
记号

出0入0汤圆

发表于 2008-5-25 20:45:56 | 显示全部楼层
我觉得程序上做数字滤波,电路上每个A/D引脚都对地接一个小滤波电容.肯定就不会再有干扰了.

出0入0汤圆

发表于 2009-6-11 14:03:04 | 显示全部楼层
luoguo

出0入0汤圆

发表于 2009-6-11 17:30:05 | 显示全部楼层
路过。

出70入0汤圆

发表于 2009-6-11 21:46:20 | 显示全部楼层
我曾经也用过楼主的设计方法,稳定性比较差,按键越多,受干扰的就越严重。

出0入112汤圆

发表于 2010-4-11 17:21:30 | 显示全部楼层
回复【37楼】gshuang1
-----------------------------------------------------------------------

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

出0入0汤圆

发表于 2010-4-13 13:34:54 | 显示全部楼层
非顶不可

出0入0汤圆

发表于 2010-4-22 13:58:44 | 显示全部楼层
这种键盘的编程思路是怎么样的呢?检测放电时间?然后根据时间查表,求值(是一个范围值)?

出0入4汤圆

发表于 2011-8-12 14:31:19 | 显示全部楼层
感觉很好,哈哈

出0入0汤圆

发表于 2012-1-10 16:28:55 | 显示全部楼层
强烈建议不要使用AD键盘。接触不良时会出现误操作。

出0入17汤圆

发表于 2012-10-19 21:54:13 | 显示全部楼层
哈哈,跨时代的帖子。07年到12年,楼主该工作多年了吧。大家在实际产品中是否有用到过这种方法的呢,10个按键以内。。

出0入0汤圆

发表于 2012-11-30 11:05:40 | 显示全部楼层
MARK~

出0入0汤圆

发表于 2013-2-20 16:49:33 | 显示全部楼层
AD按键还是不要用到产品上吧,干扰还不是最大问题,最大的问题是按键互相影响,还有按钮的接触电阻直接影响键位可靠性根本不能保证,每用一段时间就要换新的按钮,你敢这样折腾吗?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-8 00:38

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表