AVR单片机RC触摸

发布者:火星最新更新时间:2017-01-10 来源: eefocus关键字:AVR单片机  RC触摸 手机看文章 扫描二维码
随时随地手机看文章

RC电容触摸感应按键
1:RC感应原理 
RC采样原理就是通过测量感应极电容的微小变化,来感知人体对电容式感应器(按键、轮键或者滑条)的感应。电极电容(C)通过一个固定的电阻(R)周期性地充放电。

(原文件名:image001.png) 
固定电压施加在VIN,VOUT的电压随着电容值的变化而相应增加或者降低, 如图2所示。

(原文件名:image002.png) 
通过计算VOUT的电压达到阀值VTH所需要的充电时间(tC),来得到电容值(C)。 
在触摸感应应用中,电容值(C)由两部分组成:固定电容(电极电容,CX)和当人手接触或者靠近电极时,由人手带来的电容(感应电容,CT)。电极电容应该尽可能的小,以保证检测到人手触摸。因为通常人手触摸与否,带来的电容变化一般就是几个pF(通常5pF)。 
利用该原理,就可以检测到手指是否触摸了电极。

(原文件名:image003.jpg) 
2:硬件实现 
图4显示了一个实现的实例。由R1,R2以及电容电极(CX)和手指电容(CT)并联的电容(大约5pF)形成一个RC网络,通过对该RC网络充放电时间的测量,可以检测到人手的触摸。 所有电极共用一个“负载I/O”引脚。电阻R1和R2尽量靠近MCU放置。电电R1(阻值在几百千欧到几兆欧之间)是主要电电阻,用于调节触摸检测的灵敏度。电阻R2(10K?)是可选的,用于减少对噪声影响。

(原文件名:image004.jpg) 
3:充放电时间测量原理
为了保证健壮的电容触摸感应的应用,充电时间的测量需要足够的精确。通常有两种方式来测量充电时间: 
1.  第一种方法是采用输入捕获(IC)定时器,当电压达到阀值时,触发定时器开始工作。该方案中时间测量的精确度直接取决于定时器计数器的频率。但是,由于每个电极都需要一个输入捕获通道,普通的MCU就不适合这种类型的电容感应应用了。 
2.  第二种方法采用一个简单的定时器(无需IC功能)和一系列简单的软件操作,即定时地检查感应I/O端口上的电压是否达到阀值。这样的话,时间测量的精确度就取决于执行一次完整软件查询需要的CPU周期数。这种测量方法会由于多次测量带来一些抖动,但是由于没有硬件限制,这种方法适用于需要很多电极的场合。 
第二种方法修改一下,使用自适应的软件序列,就可以在测量时间时获得和CPU频率(fCPU)一样的精度。
目前ST触摸感应采用第二种方法。
使用普通定时器进行充电时间的测量。对电容充电开始之前,定时器的计数器数值被记录下来。当采样I/O端口上的电压达到某个阀值(VTH)时,再次记录定时器计数器的值。二者之差就是充电或者放电的时间。

(原文件名:image05.jpg) 
为了提高在电压和温度变动情况下的稳定性,对电极会进行连续两次的测量:第一次测量对电容的充电时间,直到输入电压升至VIH。第二次测量电容的放电时间,直到输入电压降至VIL。下图以及以下的表格详细说明了对感应电极(感应I/O)和负载I/O引脚上的操作流程。

(原文件名:image06.jpg) 
4:电容充放电测量步骤
由于是测量整个充电和放电为一个过程,因此在电容充电开始时候计时器开始计数,在电容放电完成时候才停止计数,同时保存计数值

(原文件名:biao1.jpg) 
以上文字基本摘录至ST文献
5:数据处理
a:采样
由于我们在判断的时候是要花3个周期(while(PIND_X);),但是我们的计数器是1个周期的,这样判断采样值就会有误差。
举例说,在充电过程中比如在T=49点上好是VIH到达点。会出现以下三种情况:

(原文件名:调整大小 图形1.jpg) 
1:在前一个判断点在46时间点上,刚好可以在49时间点判断采样到VIH 
2:在前一个判断点在47时间点上,只能在50时间点判断采样到VIH,相差1个字
3:在前一个判断点在48时间点上,只能在51时间点判断采样到VIH,相差2个字
我们当然希望每次都是情况1出现,但是不可能啊!
采用软件方法测量3次,在3次中我们假设49,50,51点各出现一次。
第1次  49                        第2次 50                        第3次 51
第1次49                第2次 50-1=49                        第3次 51-2=49
但是我们怎么知道哪次测量是49或者50或者51呢?很简单我们每次测量比前一次延时1个周期,连续测量3次,这样就基本理论上跨越了3种可能出现的情况。但是如果三次都是一样的值,那就只有埋怨老天怨天了。
我们测量的是整个充放电过程,所以理论上要跨越3*3=9个延迟周期,同时我们还顺便把跨越的这9次测量当做1组多点测量的平均数据。
B手指同步
我们的程序一般都是采样多点,然后求平均。问题就出在这里,比如程序判断9个点,在前6个点手指没有触摸,后3个点手指按触摸,这样求出的平均值就偏小,和手指远离按键的效果一样了。特别是平均点越多越是会出现这样的问题。
因此要求判断和手指触摸同步。比如程序判断9个点,在前3个点手指没有触摸,后三个点手指触摸,我们判断到第4个点有手指,从4-13扫描9个点。这样就包含了手指的同步状态。当然有人说要是我在第7个点把手移开了不就变成后面几点没有按键吗?开玩笑的,CPU的速度那么快,也许CPU扫描完成9个点然后再出去转悠一圈回来,你的手指状态还没有来的及改变呢。
当然然我们也可以采用连续扫描两次9个点,如果两次值相差在一定范围内,说明手指状态一样。笔者还是采用该种办法,虽说CPU速度快,但我怕他出去溜达的时候给什么大姨妈缠住不回来就惨了。
C:按键判别
经过以上处理假如我们得到触摸值为80,没有触摸时候的值是60,取一个按键开启值70,只要按键值大于70就表示有触摸。但是不是只要触摸值小于70就表示没有按键呢?当然不是,手指毕竟是抖动的,一会大于70,一会儿小于70。按键就抖动了。
我们采用一个按键释放值63,这样当触摸值大于70按键开启,一直到触摸值小于63才表示按键释放,就消除了按键抖动。
当然我们实际没有必要知道每次按键的扫描值,只要给每个通道设置一个差值,让CPU自己去做触摸值和基本值之间的差值比较就可以了。如差值大于10按键开启,差值小于3按键释放。
D:按键抑制和校准
按键抑制:我们把没有触摸时候的电容充放电值扫描纪录下来保存为基本按键值。然后把以后扫描道的触摸电容充放电值和基本值比较,在所有通道中差值最大那一组才开启。起到相邻按键抑制作用。不过笔者认为该功能真的作用不大,有时候还会起反作用。
按键校准:该步骤很重要,由于环境温度,电压等造成基本电容变大,这样如果不重新校准基本值的话,差值很小,会造成灵敏度降低,甚至检测不到按键。校准其实很简单,采用1个定时器,在2秒钟内如果没有检测到触摸状态就重新扫描保存基本值。
好了就这样基本上RC电容按键就完成了。
写在这里,不得不说一下,笔者用AT2313编译过6键的RC触摸按键,稳定性还是不错的,不过在实验室,为什么不在恶劣的环境下试验呢?
下面说一下RC电容感应的缺点,不谈优点,笔者认为基本没有。
1)        要求CPU速度要快,一般8M以上
2)        容易受干扰,输入检测是高阻态嘛
3)        该方法检测的手指电容变换不大(灵敏度和干扰相克,同时电容的穿透感应最强是在充放电的瞬间,而不是整个过程,RC原理恰恰是运用的整个过程)
4)        软件处理麻烦
建议玩玩,或者用在搞死人不偿命的设备上还是可以的,比如小玩具,手机等。严禁用在工业产品上啊。
笔者用2313做过RC电容感应按键6个,模仿ST的
PD1作为公共脚
PA1  PA0  PD2  PD3  PD4  PD5做K0-K5 6个按键
PB4  PB3  PB2  PB1  PB0  PD6接发光二极管来反映状态
本来还留有I2C口的,由于感觉该方案实在不能用于工业,所以就到此为止。(以后会提供工业上的触摸方案)
下面提供该方案的hex文件。和原代码供大家玩玩。
(顺便说一句,本人源代码写的垃圾,只供参考,还有用WINAVR编写的话,代码够呛,现在才发现AVR的代码空间好小哟,真的有点限制AVR单片机的发展啊)

关键字:AVR单片机  RC触摸 引用地址:AVR单片机RC触摸

上一篇:AVRStudio 的编译优化级别
下一篇:AVR硬件设计

推荐阅读最新更新时间:2024-03-16 15:29

任务1:焊接工具的选择
本系列教程以AVR单片机为对象,介绍单片机的快速开发方法。 参考教材:《单片机技术及应用项目教程》 栾秋平 电子工业出版社 2019.6 第1版 本文介绍焊接工具的选择方法,工具选择仅作参考。 一、焊台 二、烙铁头 三、镊子 四、斜嘴钳 五、尖嘴钳 六、吸锡器 七、吸锡带 八、焊锡丝
[单片机]
任务1:焊接工具的选择
解决AVR单片机烧写过程中弄错熔丝位而造成无法读写的问题
在AVR单片机烧写的过程中,难免有弄错熔丝位的时候,结果是AVR单片机无法读写了!这时我们该怎么办呢,将昂贵的芯片丢掉,再用一块新的。其实这一般是没有必要的,写错熔丝位而导致单片机不能读写,一般不外乎(个人愚见)设设置错了时钟模式,比如说本来是用内部晶振的,结果弄成了外部晶振,而单片机的外部有没有接晶振,这时单片机没有了时钟信号,当然就没有办法在读写了,估计大家也猜到了怎么办了吧,是的,就是由外部提供时钟源。 有第一张图的时钟选择,我们就知道我们得准备多种时钟源: 高频石英/陶瓷晶振,这个直接接在 单片机 晶振位置就可以了,注意频率不要太高,4~5M的就可以了,不放心的话,接两个20P~30P的电容也行! 低频晶振,和
[单片机]
解决<font color='red'>AVR单片机</font>烧写过程中弄错熔丝位而造成无法读写的问题
基于μCOS-Ⅱ系统的智能寻迹模型车的设计与实现
智能车辆是当今车辆工程领域研究的前沿,它体现了车辆工程、人工智能、自动控制、计算机等多个学科领域理论技术的交叉和综合,是未来汽车发展的趋势。以往智能小车在软件设计上多采用单程序控制,不利于智能车在外部环境改变时做出快速反应,为使智能车系统反应更为快速,该智能车应用μC/OS-Ⅱ系统,该系统适合小型控制系统,具有执行效率高、占用空间小、实时性能优良等特点。且选用功耗较低、资源更为丰富的AVR系列ATmega16单片机作为核心控制单元。 采用红外探测法实现寻迹功能,即将红外光电传感器固定在底盘前沿,利用其在不同颜色的物体表面具有不同的反射性质的特点,在小车行驶过程中不断地向地面发射红外光,单片机就是否收到反射回来的红外光为
[嵌入式]
AVR单片机生成负压的原理解析
红外测温传感器的输出是一个mV级的电压信号,大约在室温下(26℃左右)输出0电压,温度再低就是负电压了。要用单片机检测这样一个小信号,必须进行放大,可一般的单电压运放都不能放大小信号(我曾经折腾过LM324的单电压小信号放大,发现大约在100mV以下,LM324就没有反应了),最常规的解决方案就是使用双电压供电。 双电压是个头疼的事情,弄两路电压一般来说要使用变压器,还得是双绕组的,全桥整流,78 79系列IC伺候着。。。看着就不爽! 如果要改用电池供电。。。麻烦啊! 于是打算用负压生成电路。 负压生成都是一个套路,用振荡器产生交流电,然后用电感产生感应电动势,或者用二极管和电容组成的倍压电路。。。既然用了单片机,那么产生
[单片机]
<font color='red'>AVR单片机</font>生成负压的原理解析
AVR单片机中断的学习探究(外部中断与内部中断)
最开始的一点,所有中断的配置都必须要打开全局中断控制#asm(“sei”) //打开SREG的全局使能I置位 首先博主先探究了一下AVR单片机的外部中断。 外部中断需要用的必须先看原理图的INT0 INT1的引脚。因为外部中断是通过这两个引脚来触发,只要使能引脚,而且配置引脚为输出方式,电平如果发生合适的变化(具体通过高低电平还是上升沿下降沿控制是通过MCUCR寄存器来控制),中断便会触发。 配置外部中断相应的寄存器初始化的步骤--写在init.c中: (1)还是第一点,打开全局中断使能位; (2)配置MCUCR寄存器,通过控制寄存器的位数来控制具体由什么信号来触发中断; (3)配置通用中断控制寄存器 GICR:控制哪一个外部中
[单片机]
基于AVR单片机的AT24C01-512eeprom读写程序
针对AT24Cxx系列eeprom存储器,写的时候有越页功能,不用考虑页边界,I2C用软件模拟实现,完善中 #define SDA1() PORTC|=1 PC1 //数据输出1, #define SDA0() PORTC&=~(1 PC1) //数据输出0 #define SDAout() DDRC|=1 PC1 //数据线改为输出 #define SDAin() DDRC&=~(1 PC1) //数据线改为输入 #define RSDA() PINC&(1 PC1) //读数据 #define SCL1() PORTC|=1 PC0 //时钟线输出1 #define SCL0() PORTC&=~(1 PC0) /
[单片机]
基于AVR单片机的LED显示屏控制系统的研究
1 引言   LED 显示屏是八十年代后期在全球迅速发展起来的新型信息传播媒体,是集微电子技术、光电子技术、计算机技术、信息处理技术于一体的大型显示系统。它以其色彩鲜艳、动态范围广、亮度高、寿命长、工作性能稳定而日渐成为显示媒体中的佼佼者,广泛应用于广告、证券、信息传播、新闻发布等方面, 是目前国际上较为先进的宣传显示媒体 .本文提出了一种主从式单片机的LED 显示屏解决方案, 该设计方案利用AVR单片机自身的FLASH ROM 和RAM,外部无需任何存储电路,电路结构简单。   2 系统的工作原理及总体方案设计   2. 1 AVR 单片机   AVR 单片机是增强型内置Flash 的RISC(ReducedInstr
[工业控制]
基于<font color='red'>AVR单片机</font>的LED显示屏控制系统的研究
基于AVR单片机的LED显示屏的灰度设计与实现
  LED点阵块具有亮度高、发光均匀、可靠性好、拼装方便等优点,能构成各种尺寸的显示屏。目前,LED显示屏已被广泛应用于文字显示并取得了很好的效果,但是大部分仅能显示滚动的文字信息而不能显示图像,并且还存在系统复杂等缺点。本文提出了一种主从式单片机的LED显示屏解决方案,该设计方案利用AVR单片机自身的FLASH ROM和RAM,外部无需任何存储电路,电路结构简单。该系统实现了图像的16阶灰度显示,可广泛用于商场、车站等公共场合。 1 AVR单片机简介   AVR单片机是增强型内置FLASH的RISC(ReducedInstruction Set CPU)精简指令集高速8位单片机,硬件采用哈佛(Harward)结构,达到一个
[家用电子]
基于<font color='red'>AVR单片机</font>的LED显示屏的灰度设计与实现
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved