分享

自制触摸屏

 共同成长888 2014-05-08
自制触摸屏

 

点击查看详细信息...

基于51单片机自制触摸屏

电容触摸研究


上一期我们聊到触摸技术的实现,触摸式的电子琴你有没有制作出来呢?你又有没有参考源程序来学习触摸式琴键的编程技巧呢?如果有,你会得到更深入的启发。实际上用单片机实现电平式触摸的原理是简单的,因为手指触摸即有电平的变化,读出电平状态就可以处理按键了。与之相比,看上去更高级一些的电容式触摸技术就没有这么简单了,所谓的“更高级”并不是因为它的技术实现复杂,还是指在应用上显得更文雅。电容式触摸技术可以让手指不接触到金属导线,给用户的感觉是更安全的。因为谁也不能保证裸露在外的金属片会不会带有上千伏的电压。电容式触摸技术的另一个优势是在产品设计方面。对于我们电子爱好者来说,找到一款适合自己DIY作品的外壳是很困难的,有的外壳制作高手可以在很短的时间内制作出精致又专业的外壳,可是并不是每个人都有这样的本领。为露出微动开关而在外壳上钻孔是再平常不过的了,可是钻了孔就很难美观了,我也一时为这个问题困惑。幸好有电容式触摸技术,可以把我们的触摸片设计在塑料外壳的内部(外壳不能是金属的,不然电容触摸就没有效果了),外壳的表面只要贴一张标签,写明这是触摸按键,具有什么功能就可以了。

电容式触摸技术这么好,在哪里可以得到呢?上一期我也有讲过,现在市场有专业的电容式触摸芯片,芯片厂商已经把电容式触摸的处理集成到芯片中。这种芯片的好处就是稳定性好,不需要二次开发就可以直接使用。芯片上都会留有各种接口,或与单片机连接或驱动控制电路。缺点是价格太高而且不易买到,与触摸芯片的好处相比,缺点好像是致命的。如果不能在一般的电子市场里买到,或者一片4键触摸芯片要花30块钱购买,那么又会有多少爱好者朋友真的可以轻松拥有呢?那么,能不能有更好的替代方案,我们可不可以用其他方法实现电容式触摸操作呢?

为了用单片机实现精简电路的电容式触摸操作,我是下了不少功夫的。结果很让我满意,心血没有白费。首先我研究了一下电容式触摸技术的实现原理。因为我需要从原理角度入手,看看在同一原理的情况下有没有什么方法可以用单片机模拟触摸芯片。上一期我们也简单地介绍过电容式触摸技术的原理,其实就是利用了电容通交流阻直流的特性,把手指和触摸片当成电容器的两个极片,手指和触摸片之间的绝缘材料就是电容器中的隔离介质。对了,另外还需要一个交流信号源的接触片,让它与信号输入的触摸片平行放置。当手指按到触摸区域时,一个交流回路就形成了。触摸片输入端可以收到与交流信号源相同的信号,这一信号的特性随着手指触摸面积和绝缘介质的厚度和材质而变化。看到这一原理,我闭上眼睛,用想象力构建一个单片机实验平台,用PWM功能产生交流信号,再用ADC功能作为触摸片输入端的信号读取,用给单片机下载的RS232串口和串口助手软件在电脑上显示出ADC接收到的数据。

嗯,这个想法是可行的,于是我开始行动,把想象的实验用实际的电路组建。这次依然使用了我所熟悉的STC单片机,STC12C5A60S2具有2路PWM输出和8路10位ADC功能,完全可以满足我的实验需要。电脑上直接用STC-ISP软件自带的串口帮助软件就可以显示十六进制的数据了。我在自己的网站里找到ADC和PWM功能的编程模板,新建立一个KEIL工程,开始移植模板、设计程序。程序很简单,就是一直读取ADC输入引脚的数据,从0×00到0×FF之间即表示0V到5V的电压值。PWM输出38kHz的方波信号,占空比调整到50%。硬件电路方面则是用了两片金属片作触摸片,一片连接到PWM输出引脚,另一片连接到ADC输入引脚,两个触摸片尽量靠近但不能碰上。绝缘介质没有精心选择,只是找到一张名片,这是目前可以找到的最佳材料了。连接用的是普通的导线,先不去考虑外来的干扰问题。

一切就绪,开始实验。接通电源,单片机开始工作,串口助手的接收窗口不断显示出ADC的读数。在没有手指按压的时候,ADC的读数范围是在0×20到0x70之间,数据的变化看上去没有规律。可是当我的手指按在名片上的时候,特别是靠近ADC输入端触摸片的时候,ADC的读数是在0×10和0×FF之间有规律地跳变,不过跳变的频率并不快。这一实验结果给了我信心,我又继续实验,用手掌触摸、拿开名片直接接触触摸片、把名片换成玻璃片、用手触摸导线、用手触摸单片机的引脚,把每一项实验的结果记录下来,感觉成功离我不远了。PWM输出好像是必须的内容,不然没有交流信号源,也就不能产生电容回路了。那么我改变PWM的频率,ADC的读数会不会也随之变化呢?于是我把用PWM功能实现的交流输出改成了用I/O接口模拟,因为这样一来,在程序上更容易控制输出方波的频率。我试着把频率从1Hz开始慢慢调整到1kHz,在此过程中不断地用手指触摸,看看ADC读数有什么变化。结果证明,变化是有的,可是不明显,任凭方波频率怎么变换,ADC读数一直在一个固有频率周围徘徊。于是我试着关上方波输出,看看ADC读数的固有频率是不是来自方波以外的什么东西。果然,关掉交流信号输出,ADC还是可以读到固有频率的数据,在0×10和0×FF之间交替。当拿开名片直接触摸ADC输入引脚时,0×10还会变成0×00,也就是0V。这一结果让我兴奋,因为不需要交流信号源也可以读到一定频率的ADC交流数据,可是这一频率又是哪里来的呢?这个问题一直困扰着我,因为急于想实现单片机精简电容式触摸技术,所以就没有花时间认真研究这一频率的来历。可能是50Hz的市电频率在人体上的干扰,或是人体自带的杂波电流独有频率。我又考虑到这种频率会不会是我实验场地这里特有的什么干扰,于是我又去了另外一些地方做同样的实验,结果证明并不是实验场地的问题,这一频率依然是一个未经探索的秘密。

单片机实现电容式触摸开关

电容式触摸开关实验电路原理图

对固有频率的无知并不影响制作电容式触摸操作,这是让我很开心的事情,不然我还需要做一大堆实验来深入研究下去。当然,我以后会研究的,只是现在我最有兴趣的是实现电容式触摸。好的,我们整理一下思路。现在我们通过实验得到了这样的结果,硬件电路上只需要一个触摸金属片连接到单片机的ADC输入引脚,手指隔着名片触摸操作时,ADC的读数会在0×10和0×FF之间以一定的频率交替变化,

在没有手指触摸时,ADC的读数会在0×20和0×70之间交替变化。这些数据可能在环境不同时有所不同,但不变的是当手指触摸时ADC读数的变化数值会比没有触摸时大。有了这一项实验现象作为支点,我们接下来要做的就是用单片机处理ADC读数,判断数值变化的规律,从而得知是否有触发。编程并不难,每个人都可以有自己的数值处理方式。下面给出一段我编写的电容式触摸按键的源程序,大家可以参考,但这并不是唯一的处理方式,还会有更好的方法等着你去发现呢。

“电容式触摸开关实验”是我制作的一款简单的触摸开关,在单片机的P1.7接口上接一个LED,使用连接在P1.0接口上的触摸片来控制LED的亮或灭。你可以直接制作这个触摸开关,以此了解电容式触摸的性能。当然,这也是一个很好的实例,参考电路原理图和源程序就可以了解其工作原理。只要在源程序上稍微修改就可以制作属于你自己的电容式触摸作品了。在制作电容式触摸操作作品的时候需要注意一些问题,这些问题并不是从什么专业机构找来的资料,而是我通过实验总结出来的经验,仅供大家参考。另外,对于没有交流信号源参与的电路是否可靠我还没有研究,这一制作是在我的几个实验环境下完成的,并不能表示在你的环境里也可以实现。本文介绍的电容式触摸技术仅算是抛砖引玉,也是大家和我一起共同验证的过程,看看我还有哪些没有考虑周全的地方。欢迎读者朋友把你的想法和建议与我交流,我真的很希望和大家一起把这项技术改进到和专业的触摸芯片媲美。

注意事项:
◆ ADC读数和ADC位数、采集速度具有一定关系。
◆ 使用电池供电和使用市电供电时ADC的读数也有区别。
◆ 使用电池供电时电容式触摸的灵敏度较市电供电时低。
◆ 不用绝缘介质下ADC读数变化有所不同。
◆ 连接ADC输入端的触摸片的面积也会影响电容式触摸的灵敏度。
◆ ADC读数只是在某一个数值的区间,为了判断可靠,需要设计防误判程序。

细心的朋友可能注意到了,我在源程序中ADC读数部分加入了防误判程序,实践证明这是非常有必要的。其实防误判程序就是通过连续多次读取ADC数值,然后把多次读到的结果进行对比。如果有外部干扰或是ADC读数错误,在这个对比的过程中就会被发现,即达到防干扰、防误判的作用。电容式触摸开关实验的源程序文件请到《无线电》杂志网站上下载。

防误判部分源程序

/******************************************************************************
函数名:触摸按键处理函数
调 用:? = Read_R ();
参 数:无
返回值:bit 1表示有感应物,0表示没有感应物
结 果:
备 注:需要根据实现应用调协灵敏度和其他参数
/*****************************************************************************/
bit Read_R (void){
unsigned char R,ii,m=0,i,j,k;
bit aa;
for(ii=0;ii<3;ii++){ //循环检查防干扰
j=0;k=0;
for(i=0;i<10;i++){ //一次采集数据的数量
DELAY_MS (3); //3毫秒延时
R = Read (0); //ADC读取数据
if(R < 0x2F){ //此参数可调整感应灵敏度值在0x01到0x2F
k++; //波谷计数加1

}
if(R == 0xFF){ //ADC读数的最大值必须等于0xFF
j++; //波峰计数加1
}
}
if(k>1 && j>1){ //触摸波形的数量积加m的值
m++;
}else{
m=0; //如果波形条件不符合则m=0
}
}
if(m>2){ //根据m的数值判断是否有感应物体
aa =1;
}else{
aa=0;
}
return(aa); //将aa作为返回值
}
/*****************************************************************************/

制作mini48定时器

虽然上文介绍了这么多关于电容式触摸技术的内容,可是我们下面要完成的制作却是使用了电平式触摸技术。因为电容式触摸的设计还没有成熟,还有可改进的空间。另外我手上目前还没有什么基于电容式触摸技术的作品,虽然我正在开发的mini3216准备使用电容式触摸按钮,可是mini3216的创新重点并不是电容式触摸,而是比电容式触摸更好的设计。为难之下,我将mini48定时器作为这一期的制作实例。尽管是电平式触摸,但mini48的精巧设计定会给你带来创新的启发。Mini48定时器依然是我的精简电路设计风格,它的设计理念延续了mini1608,又另有独特之处。电池盒、单片机、晶体、电容、蜂鸣器、数码管,几种元器件打造简单的定时器制作,我相信这是你所见过的最简单的定时器制作。Mini48采用4位共阳一体数码管,用来显示定时值的小时和分钟,最大定时时间是23小时59分。时间到时蜂鸣器会鸣响,提示用户定时时间到。如果鸣响1分钟依然没有关闭电源,单片机就会进入掉电模式,在此模式下系统几乎不耗电。时间的设定没有采用传统的微动开关,而是采用了电平式触摸技术,当手指触摸数码管各位上方对应的单片机引脚时,定时值就会加1,设置简单,操作还很有趣。电路设计方面没有使用PCB板,而是将单片机与数码管直接焊接在一起,这也得益于元器件特有的结构,诸多创新设计都来源于发现元器件结构和性能方面的巧合。

所需元器件

元器件清单

品名 型号 数量 说明
单片机 STC11L60XE 1 可用STC12C5A60S2等5V单片机代替
晶体 12MHz 1
电容 30pF 2
电池盒 2节5号(AA) 1 电池盒上要带有开关
蜂鸣器 5V无源 1 可用压电陶瓷片代替
LED数码管 SR430563K 1 4位共阳动态显示

电路原理图

好了,闲言少讲,开始行动吧。文中使用的是STC11L60XE,这是一款3V电压的单片机,可以用2节5号(AA)电池供电。如果你买不到3V单片机,也可以使用STC11F60XE或者STC12C5A60S2系列等5V的单片机代替,当然电源也要跟着换成3节5号电池。不能用89C51系列单片机代替,因为89系列的单片机比较古老,不能实现电平式触摸。蜂鸣器要购买那种无源的,如果你想减小体积也可以用压电陶瓷片代替。数码管需要是4位共阳的指定型号,其实就是引脚定义要一致,数码管的体积过大或过小都不能正好焊接在单片机上,所以这个部分一定要注意

1步:将12MHz晶体和30pF电容按电路原理图焊接在单片机背面的引脚上。让单片机具有外部精准时钟源,这样可以产生准确的定时器时间。在我写这篇文章时听说STC公司新推出一款15C系列单片机,它的内部R/C振荡器是高精度的,可以完全省去外部的时钟晶体。如果以后有机会把mini48的单片机改成15C系列的话,我们就可以省去这一步,不需要焊接晶体和电容了。

2步:把电池盒上自有的导线焊接在蜂鸣器上,并把焊接处用热缩管包好。注意无源蜂鸣器也是分正、负极的,不要接反。这样的焊接并不是最终的电路,一会我们还要把导线从中间剪断。

3步:把电池盒正极的导线(红线)并联在单片机的第40脚上。负极的导线剪断,电池盒一端焊接在单片机的第20脚上,蜂鸣器一端焊接在单片机的第1脚上。如此焊接之后,电池盒、单片机、蜂鸣器三者仍然保持了原来的结构。

4步:把数码管直接焊接在单片机上。奇妙的是数码管的引脚正好和单片机的引脚相对应,好像是为其量身定做的一样。单片机I/O接口采用推挽输出方式,可以直接驱动数码管显示,不需要驱动电路。程序上采用逐点扫描方式,省去了限流电阻,并保证数码管上的各段码亮度一致。数码管上方对应的单片机引脚正好设计成电平式触摸按键,省去了微动开关,让设计更加简洁。

5步:打开电源开关,系统初始从3分钟开始倒计时。触摸小时和分钟各位上方对应的单片机引脚就可以将此位加1,加到9时返回到0,从而调整定时时间。

Mini48制作时需要注意以下事项:


在向mini48写入HEX文件时,需要在STC-ISP软件中设置RET为P4.7接口,否则数码管不能正常显示。如果使用与本文中引脚定义不同的数码管,需要在mini48源程序中修改引脚定义,否则不能代替使用。STC单片机内部具有静电保护电路,所以直接触摸引脚不会出现静电损坏芯片的情况。

触摸技术在电子产品中的应用已经很成熟了,可是在电子爱好者的圈子里却还是个新鲜玩意。对于电平式和电容式触摸技术,我所做的研究仍然不够。本文只是希望用我们电子爱好者现有的技术和材料实现与专业触摸芯片同等的性能,让触摸技术可以在电子爱好者的圈子里兴起。让更多的朋友对单片机实现触摸技术产生兴趣,从而让更多的人研究它,让它成熟起来,让我们在微动开关、薄膜键盘之外多出一个选项。让触摸技术的普及带动电子制作的创新,让我们这群废寝忘食的电子爱好者们玩得更新颖、更时尚。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多