关于单片机触摸按键
轻触按键在单片机系统中的应用

轻触按键在单片机系统中的应用按键在单片机智能控制系统中常用作为人机交互中输入信息作用,我们通过按键输入各种信息,调整各种参数或发出控制指令,按键处理是一个很重要的功能模块,按键处理程序关乎整个系统的交互性能,也影响系统的稳定性,按键检测处理是单片机学习开发的基本功,我们必须很好地学习掌握按键处理技术。
在单片机应用系统中,按键主要有两种形式:1、直接按键; 2、矩阵编码键盘。
直接按键的每个按键都单独接到单片机的一个I/O口上,直接按键则通过判断按键端口的电位即可识别按键操作;而矩阵键盘通过行列交叉按键编码进行识别。
下面我们以S51增强型单片机实验板的直接按键来学习单片机按键应用开发。
S51增强型单片机实验板的4个直接按键原理图。
S51增强型单片机按键原理图图 1一、按键时序分析通常所用的按键为轻触机械开关,正常情况下按键的接点是断开的,当我们按压按钮时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。
因而机械触点在闭合及断开的瞬间均伴随有一连串的抖动,按键的时序如下图2所示,抖动时间的长短由按键的机械特性及操作人员按键动作决定,一般为5ms~20ms;按键稳定闭合时间的长短是由操作人员的按键按压时间长短决定的,一般为零点几秒至数秒不等。
按键操作时序示意图图 2从上面图2中我们可以看到,一次完整的击键过程,包含以下5个阶段:1. 等待阶段:此时按键尚未按下,处于空闲阶段。
2. 前沿(闭合)抖动阶段:此时按键刚刚按下,但按键信号还处于抖动状态,这个时间一般为5~20ms。
为了确保按键操作不会误动作,此时必须有个前沿消抖动延时。
3. 键稳定阶段:此时抖动已经结束,一个有效的按键动作已经产生。
系统应该在此时执行按键功能;或将按键所对应的键值记录下来,待按键释放时再执行。
4. 后沿(释放)抖动阶段:一般来说,考究一点的程序应该在这里再做一次消抖延时,以防误动作。
但是,如果前面“前沿抖动阶段”的消抖延时时间取值合适的话,可以忽略此阶段。
单片机 电容触摸按键 报告

任务:MSP-EXP430G2 板上P1.0 上接了一个LED,而在配套的LaunchPad 扩展板上,将MSP430G2553 的P2.0 和P2.5 引出作为电容触摸按键。
要求按下P2.0 后LED 亮,按下P2.5 后LED 灭,程序运行过程中不阻塞CPU,并且实现低功耗运行。
硬件连接:如图所示程序代码:TouchIN.c:#include "MSP430G2553.h"#define KEY_NUM 2 /*触摸按键数目,根据需要修改*/ //=============具体触摸按键IO宏定义,根据需要添加代码===============#define KEY0_INIT P2DIR &= ~BIT0; P2SEL &= ~ BIT0; P2SEL2 |= BIT0 /*按键1开启振荡*/ #define KEY1_INIT P2DIR &= ~BIT5; P2SEL &= ~ BIT5; P2SEL2 |= BIT5 /*按键2开启振荡*/ #define ALL_OSC_OFF P2SEL2 &= ~(BIT0 + BIT5) /*关闭全部触摸振荡*/ /*门限频率的取值取决于定时扫描的时长,3300对应的是1.9ms定时情况,实际定时可取1ms~20ms*/const unsigned int FREQ_THRESHOLD[KEY_NUM]={3300,3300}; /*参考值,需用仿真器查看后调整*///-----静态局部变量----static unsigned int Freq[KEY_NUM]={0}; //当前测频值static unsigned char Key_Buff[KEY_NUM][4]={0}; // 软件FIFOstatic unsigned char Key_Num=0; //按键编号//-----全局变量,复杂程序中可以移植到Global.h统一管理-----unsigned char TouchIN=0; //相当于PxIN寄存器作用,支持8个触摸按键void Key_Measure_Freq(){Freq[Key_Num]=TAR; //当前编号按键的频率被测得ALL_OSC_OFF; //关闭所有振荡IOKey_Num++; //切换下一振荡IOif (Key_Num>=KEY_NUM) Key_Num=0; //各触摸按键循环交替switch (Key_Num){case 0 : KEY0_INIT; break; //振荡IO初始化case 1 : KEY1_INIT; break;default: break;}TA0CTL = TASSEL_3+MC_2+TACLR; //增计数清0,并开始计数}void Key_FIFO() //存储连续4次测量数据{Key_Buff[Key_Num][0]=Key_Buff[Key_Num][1];Key_Buff[Key_Num][1]=Key_Buff[Key_Num][2];Key_Buff[Key_Num][2]=Key_Buff[Key_Num][3];if( Freq[Key_Num]<FREQ_THRESHOLD[Key_Num]) //判断是否识别为按键Key_Buff[Key_Num][3]=1;elseKey_Buff[Key_Num][3]=0;}void Key_Judge() //按键仲裁,只有连续4次测量结果一致,才算数{if( (Key_Buff[Key_Num][0]==0)&&(Key_Buff[Key_Num][1]==0)&&(Key_Buff[Key_Num][2]==0)&&(Key_Buff[Key_Num][3]==0) )// TouchIN=0<<Key_Num; //按键松开(错误代码)TouchIN &=~(1<<Key_Num); //按键松开(正确代码)if( (Key_Buff[Key_Num][0]==1)&&(Key_Buff[Key_Num][1]==1)&&(Key_Buff[Key_Num][2]==1)&&(Key_Buff[Key_Num][3]==1) )// TouchIN =1<<Key_Num; //按键按下(错误代码)TouchIN |=1<<Key_Num; //按键按下}void TouchIN_Dect() //触摸输入检测{Key_Measure_Freq(); //测频Key_FIFO(); //软件FIFO缓存最近4次测量数据Key_Judge(); //仲裁按键是否按下或松开}TouchIN.h:/***** TouchIN.h******/#ifndef TOUCHIN_H_#define TOUCHIN_H_extern void TouchIN_Dect() ; //WDT中断事件extern unsigned char TouchIN; // 相当于PxIN寄存器作用,支持8个触摸按键#endif /* TOUCHIN_H_ */main.c:#include "MSP430G2553.h"#include "TouchIN.h" /*触摸按键检测库函数*/void WDT_Ontime(void);//-----对硬件相关代码进行宏定义处理-----#define LED_ON P1OUT |= BIT0 /*宏定义LED所在IO*/#define LED_OFF P1OUT &= ~BIT0 /*宏定义LED所在IO*/void main(void) {WDTCTL = WDTPW+WDTHOLD; //关狗//-----初始化GPIO-----P1DIR |= BIT0; //LED所连IO口P1.0设为输出P1OUT &= ~BIT0;//-----初始化WDT定时中断为16ms-----WDTCTL = WDT_ADLY_16; // “超级”宏定义IE1 |= WDTIE; //使能WDT中断_EINT(); // 使能总中断__bis_SR_register(LPM3_bits); //等同LPM3}#pragma vector=WDT_VECTOR // Watch dog Timer interrupt service routine__interrupt void WDT_ISR(void){WDT_Ontime();}void WDT_Ontime(void){ //-----首先必须定时扫描触摸按键检测函数-----TouchIN_Dect();if(TouchIN & BIT0) LED_ON;if(TouchIN & BIT1) LED_OFF;}调试情况:第一次调试:TouchIN_Dect函数重复定义第二次调试:正常调试结果:按下P2.0 后LED 亮,按下P2.5 后LED 灭,任务达成。
单片机电容触摸按键实践

触摸按键实践(二)前一段时间,做了一个使用 HT45R35 芯片的触摸按键项目,属于是芯片自带专门应用于触摸键功能的"专用芯片".近日,再次对触摸按键进行实践----使用 AD 转换方式.这样,就不要专门功能的芯片了.同时,调试更加简单方便,也没有了许多限制.下图是一个该实践的原理图,每一个按键包含了 10P,104 电容器,一只贴片封装的双二极管, 3 个电阻.项目里使用的按键数量没有限制.完全可以根据需要来决定.但是,需要单片机具有相同数量的 AD 输入接口.(----或者使用多路模拟开关反而成本上升,电路复杂,尽量不要这么干.)不管是哪一种测量方式,都需要有一个参考量.电容量→定时/计数方式的参考值是通过检测没有触摸按键时的计数值来实时得到,而 AD 方式的参考值就是基准电压,它无需任何手段就是天然存在的.无需追求 AD 的位数,可以使用仅仅 8 位的 AD 转换就足够了.电路工作原理是: 一个由单片机输出的 PWM 信号(没有 PWM 输出的芯片可以使用一个普通 I/O ,只要能够输出满足要求的频率就可以了.)这个信号频率与 10P 电容器有关系.频率低了,10P 电容器的容抗就会增大,造成后级二极管整流的电流下降,影响速度.加大电容量是受到人手触摸电容量的限制,这个 10P 电容量必须与人手触摸电容器有一个合适的配置.尽量让人手的触摸电容量与这个 10P 电容器的容量相同是最理想的.(可以更换 10P 电容器的大小来达到.)例如:如果使用 1K 对 1K 的电阻去分压一个 1V 的电压,这是最理想的.而如果使用一个 1Ω的电阻与一个 10MΩ的电阻去分压,那么,这个分压效果就很差很差了.由此可以知道:首先是从人手的触摸电容量出发,去决定 10P 电容器的电容量,而后,是根据这些电容量去决定信号频率的高低.这就是为什么不能直接使用 50HZ 交流电频率的原因.通常,AD 转换有一个基准电压,可以使用与系统供电相同的 +5V 作为基准电压.有些芯片的 AD 还可以改变基准电压的,则可以使用 2.5V 作为基准电压,灵敏度更高一些.不管是电容量→计数器方式还是电容量→电压方式,都要有一个参考标准,前者是实时测量得到参考值,后者就有一个天然的标准参考--基准电压.这就是使用 AD 方式的好处之一!对较高频率的信号来说,10P 电容器的容抗约为 30KΩ~50KΩ左右(取决于信号频率与电容量大小),它经过双二极管 A7 构成的倍压整流之后,可以得到约 2.2~3.5V 的直流电压.这就是没有触摸按键时的输出电压.由于有 AD 基准的约束,每只按键的读数是大致固定的.以基准=5V为例,读数就是 7FH 左右.这个电压可以比较随便的在印刷板上布线,不像电容量→计数器方式的一样麻烦,这是使用 AD 方式的第二大好处!倍压整流后由一只 104 的电容器进行滤波,得到较为平滑的直流电压.这个直流电压显然可以非常方便的传送.几乎没有什么顾忌.(电容量→定时/计数方式的则不允许乱布线).这里,需要提及与 104 电容器并联的 3M 电阻,这个电阻是给电容器放电使用的,可以根据对按键的反应速度调整其大小.(具体还得看看实际使用芯片的 AD 输入端口的阻抗大小).当不用这个电阻时(=无穷大),反应速度最慢.而且,如果取值较少,电压就会上不去.----中间如果插入一个运放跟随器就好了!还要提及的是 AD 转换的速率,尽量使用较快的速率,较高的系统时钟,因为相对于机械式按键来说,处理触摸式按键是比较麻烦的,耗费的指令也多得多.现在,关键的问题就是进行触摸调试了.试着用手触摸一个按键,使用直流电压表看看它的直流输出电压是否有变化?变化多少?时间快慢?根据实际测试,在触摸着按键时,输出电压会下降到没有触摸时的 50% 以下,但是时间会达到 2~3S .此时,可以细心调整 3M 电阻或者 104 电容器的大小.一般的,如果能够在 0.25S 之内,电压下降到原来数值的 80%~90% 就差不多了.判断哪一个按键被触摸了是很容易的事情了,就看看 AD 读数吧.它是有方向的,不用理会≥参考值,仅仅看看<参考值多少就是了.根据这个"多少"界线,还可以调整触摸灵敏度呢.灵敏度太高,测量值的波动会引起按键还没有触摸就有效了,灵敏度太小,就是摸了半天也没有反应.带 AD 的单片机现在已经很多了,例如 SN8P27XXX 系列, HT46XXXX,HT45XXX 系列,都有许多带 AD 的单片机,其中, HT45R54 自带 24 路 AD ,HT46R343 自带 16 路 AD .还有 Flash 的 HT46F25* ,自带 12 路 AD 而且可以反反复复烧写/擦除,做试验是最好的了!现在市场上有许多专门供货触摸按键芯片的,也有许多技术文章,总之,各师各法,实际处理触摸按键就像电压比较器一样,不需要知道其值的具体大小,仅仅判断有"高"电平还是"低"电平就足够了.----应该属于临界判断.根据上面所说,接下来,我会使用普通单片机来实践做触摸按键.既不使用专用芯片(电容量→定时/计数),也不使用自带 AD 芯片(电容量→电压→AD 转换),就直接使用普通单片机的端口+电压比较器来做.这样是否会让电路多放置一只比较器芯片?不!就使用自带运算放大器或者自带比较器的芯片.同样简单容易.-----也可能失败啊!欢迎各位指导!正是有了许许多多的自带 AD 的单片机,因此,那种使用外挂多路模拟开关的方法就不好用了.(多路 AD 实际芯片内部就有了多路模拟开关).在盛扬半导体(上海)的中文网站上,就有使用 HT46R47 做触摸按键的示例.需要了解更多此触摸按键的其它应用信息,欢迎浏览: .下图是我的 AD 方式试验板,只有 4 个触摸键, 3 只发光管以二进制编码指示按键号码,哪一个按键被触摸了,哪一个对应发光管就点亮 0.5S 时间.使用上,似乎比专用芯片的毫不狲色!----还有待实际应用来检验.我想:既然可以处理测量 0.1℃的温度,0.1mV 的电压,那么,不可能不能处理这种"界限"式的触摸关系.使用 AD 测量的电容触摸按键电路触摸按键实践(3)电容式感应按键以其无机械磨损、寿命长、防水防污、易清洁和时尚的特点, 近几年应用领域和数量迅速增加. 因此, 结合电容感应按键的特点, 设计了一种用A/D 口搭配简单的电路实现电容感应按键的方法. 经测试, 电路的稳定性较高, 在低成本的电路中适用性较强.触摸控制技术又可分为触摸屏(Touch Screen) 技术和触摸按键(Touch Key)技术. 在触摸按键技术方面, 目前主要可分为电阻式触摸按键与电容式感应按键. 由于电阻式的触摸按键需要在设备表面贴一张触摸电阻薄膜, 其耐用性较低, 而电容感应按键技术具有在非金属操作面板上无须开孔处理、防水防污、易清洁、无机械开关磨损而寿命长等优点. 近几年随着苹果公司将电容触摸感应技术从笔记本电脑引用到iPod 后, 电容触摸感应热浪正席卷几乎所有电子产品, 从笔记本电脑、智能电话、PDA、游戏机等手持设备, 到LCD TV、 DVD 等消费电子产品, 再到洗衣机、空调、冰箱、热水器、电磁炉以及咖啡壶等大小家电, 无不以加入电容触摸感应为新的卖点.目前, 世界知名电子元件供应商均加大了对电容触摸按键的应用研究, 并推出众多的专业芯片, 有专用电容感应按键类的全ASIC, 也有众多基于MCU集成类的IC. 但这些芯片价格较高, 在一些按键数量少、成本要求低的电路中很难得到运用. 另外, 使用这些集成类 IC, 很难做到所选资源恰好等于使用的情况, 存在资源的浪费情况. 而且对于升级成熟产品的机械式按键, 还存在变更原MCU 代码的风险. 同时, 目前, 对于电容式触摸按键的介绍大多也停留在基于电容量测量的原理上. 结合电容感应按键的原理, 设计了一种用MCU 的A/D 口实现电容触摸按键的低成本电路.1 电容式感应按键原理平行板电容器具有 2 个极板, 其间隔着1 层介质, 电容器中的大部分能量直接聚集在2 个极板之间, 1 个极板电荷数量的变化将引起另外极板电荷的增减, 从而在电容内部形成电流. 电容式感应按键的原理如图1 所示, 感应按键的金属电极, 放置于非金属面板内, 并连接交变的电信号. 如果在非金属面板另一侧与金属电极对应处放置另外1 块金属板(图2), 那么, 2 个极板就组成了平行板电容器, 非金属面板成为此平行板电容器的介质. 由于电场被封闭在2 个金属极板之间, 所以大部分能量均集中在非金属面板内. 如果在非金属面板外隔着金属, 手指触摸对其能量损失的影响就很小.图1 电容感应按键示意图图2 封闭电场示意图去除外侧的金属板, 电场的能量就会穿过非金属的密集区, 向外传播(图3).图3 电容感应电极的电力线当导体靠近操作面(即非金属面板表面)后, 电磁场即在导电介质中传播. 由于导体中存在自由电子, 这些自由电子在电场作用下就会形成传导电流, 进而产生焦耳热从而引起电磁波能量损耗. 由于人体组织中充满了传导电解质(一种有损电介质), 当手指靠近时同样会引起电磁能量损耗. 因此只要检测流经感应电极的电能变化, 就可以判断是否有手指靠近非金属操作面板.2 电容感应按键取样电路分析图 4 为电容感应按键取样电路图, 电路由5 个分离元件组成. 其脉冲信号频率为300 kHz, 幅度 12 V, 占空比为50%. 通过读取电容 C1上的电压值判别是否有手指靠近操作区域. 其原理分析如下: 二极管1N4148 正向导通电压为d V , 在脉冲信号跳变为高电平(12 V)时, 假定电容 C1上电压为 U0, 电容的充电回路根据 C1电压大小出现如下2 种情况:(1) 若, 则充电回路为图5(a), 充电时间常数电容C1的充电电压:(2) 若则充电回路为图5(b), 充电时间常数电容 C1的充电电压为:在振荡脉冲跳变为低电平时, 根据电容 C1电压大小, 出现以下2 种放电回路:(1) 当0 2 d U > V 时, 放电回路为图5(c), 放电电路的其放电时的电容电压为:图4 电容感应按键取样电路(2) 当U0≤2Vd 时, 放电回路为图5(d), 放电电路的其电容电压为:.由于电路中脉冲占空比为50%, 充放电时间在该电路中, 充放电电阻大, 流过的充放电电流小, 二极管1N4148 的导通电压也较小, 若以充电电路为图5(a)、放电电路为图5(c)来计算, 充电时间常数τ = 放电时间常数= 0.1 s, 而充放电时间为假定二极管电压在微弱电流下按0.2 V 计算根据(1)式和(2)式, 运用迭代可计算出电容电压最后稳定在5.9 V, 而以上计算不考虑由手指触摸等任何情况引起的能量损耗.电容 C1充放电如图6 所示. 在实际的充放电电路中, 电路对金属极板的充放电始终在进行. 当手指靠近金属极板时, 感应电极处存在的微弱电磁场被传导至人手指内电解质中, 同时消耗了部分能量, 电容 C1补充的电荷将减少, 因此电容 C 的电压将下降(图7). 当ΔV 变化量达到最小检测精度要求时, 系统即可通过计算识别出是否有手指或其他导电物体靠近操作区.图6 电容充电时间与电压的关系图7 手指触摸时的电平变化A/D 法电容感应按键、读键流程:将电容电压引入 MCU 通用A/D 口, 即可将电容 C1上的电压值转换为数字量并通过MCU计算出电容 C1两端电压的变化大小, 从而判断出是否有手指或其他导电物体靠近或离开触摸按键, 实现电容感应按键的识别. 软件流程如图8 所示.电路参数对感应灵敏度的影响输入脉冲影响输入脉冲的幅值决定了 C1上稳态电压, 如果脉冲幅值不稳定, 就会导致 C1上的电压波动. 如果该幅值变化引起的电容电压变化量ΔV 超过了检测的最小检测精度, 即使没有手指靠近, 也会造成读键的误判, 所以脉冲电压幅度要稳定. 此外, 输入脉冲的频率同样也会影响到 C1电容的工作状态, 如果输入脉冲的频率过低, 则 C1电压纹波会加大, 感应灵敏度下降; 反之, 输入脉冲的频率过高, 则线路损耗加大, 而且触摸容易受到干扰.充放电电阻值的影响如果同时改变 R1,R2 的阻值, 例如将阻值改为 100KΩ, 充放电时间常数减少10 倍, 因虽然 C1上电压变化不大, 但此时 C1上的充放电电流却显著增强, 使得手指触摸的灵敏度下降. 所以, 电路中 R1,R2 的阻值一定要选取恰当. 二极管的影响由于上述电容式感应按键电路工作频率高, 且流经电流小, 所以应当选择结电容小、开关速度快、正向导通电压低的二极管. 另外, 二极管的工作可靠性一定要好, D1,D2任一短路、断路都会破坏充放电回路, 从而使触摸电路失效.电容感应电极的形式电容式感应按键的感应电极有很多种, 常用的感应电极有PCB 板上的电极及弹簧金属片式电极. 电极形式可以根据外观进行任意设计, 如圆形、方形、三角形等. 但无论电极以哪种形式出现其周围都应尽量远离地: PCB 双面板电极对应的另一面铜箔应当刻蚀去除, 弹簧电极周围的PCB 铜箔也要刻蚀去除. 否则, 感应电极与金属之间将形成感应电流, 削弱了手指或外界导电物靠近电极时电路的灵敏度.同时, 电极应当与非金属面板紧贴, 如果中间有空隙, 相当于增加了感应距离, 使感应灵敏度降低. 感应电极的面积和非金属面板的厚度影响了感应的灵敏度. 实际应用中, 目前厚8mm 以下的钢化玻璃, 其圆形金属感应电极直径不小于12 mm.这种用分离元件组成触摸感应按键用的低成本电路, 在按键数量不多的情况下应用, 可根据按键数量多少进行自由组合感应电极数量和最简电路数量, 充分利用资源. 同时, 对于升级原成熟产品, 仅需选择原MCU 系列中带A/D 端口的产品, 编写读取触摸按键的程序, 可以很顺利地完成程序替换. 该电路目前成功运用于油烟机、消毒柜、微波炉、蒸箱、烤箱等一系列产品上, 顺利通过 EMC 标准的测试要求, 市场质量表现稳定可靠.。
电容式触摸感应按键技术原理及应用

电容式触摸感应按键技术原理及应用电容式触摸感应按键技术原理及应用2010-05-26 12:45:02| 分类:维修| 标签:|字号大中小订阅市场上的消费电子产品已经开始逐步采用触摸感应按键,以取代传统的机械式按键。
针对此趋势,Silicon Labs公司推出了内置微控制器(MCU)功能的电容式触摸感应按键(Capacitive Touch Sense)方案。
电容式触摸感应按键开关,内部是一个以电容器为基础的开关。
以传导性物体(例如手指)触摸电容器可改变电容,此改变会被內置于微控制器内的电路所侦测。
电容式触摸感应按键的基本原理◆Silicon Labs 现提供一种可侦测因触摸而改变的电容的方法电容式触摸感应按键的基本原理就是一个不断地充电和放电的张弛振荡器。
如果不触摸开关,张弛振荡器有一个固定的充电放电周期,频率是可以测量的。
如果我们用手指或者触摸笔接触开关,就会增加电容器的介电常数,充电放电周期就变长,频率就会相应减少。
所以,我们测量周期的变化,就可以侦测触摸动作。
具体测量的方式有二种:(一)可以测量频率,计算固定时间内张弛振荡器的周期数。
如果在固定时间内测到的周期数较原先校准的为少,则此开关便被视作为被按压。
(二)也可以测量周期,即在固定次数的张弛周期间计算系统时钟周期的总数。
如果开关被按压,则张弛振荡器的频率会减少,则在相同次数周期会测量到更多的系统时钟周期。
Silicon Labs推出的C8051F9xx微控制器(MCU)系列,可通过使用芯片上比较器和定时器实现触摸感应按键功能,连接最多23个感应按键。
而且无须外部器件,通过PCB走线/开关作为电容部分,由内部触摸感应按键电路进行测量以得知电容值的变化。
◆以Silicon Labs的MCU实现触摸感应按键利用Silicon Labs其它MCU系列,仅需搭配无源器件,即可实现电容式触摸感应按键方案。
与C8051F93x-F92x方案相比,唯一所需的外部器件是(3+N)电阻器,其中N是开关的数目,以及3个提供反馈的额外端口接点。
电容式触摸感应按键技术原理及应用

电容式触摸感应按键技术原理及应用2010-05-26 12:45:02| 分类:维修 | 标签: |字号大中小订阅市场上的消费电子产品已经开始逐步采用触摸感应按键,以取代传统的机械式按键。
针对此趋势,Silicon Labs公司推出了置微控制器(MCU)功能的电容式触摸感应按键(Capacitive Touch Sense)方案。
电容式触摸感应按键开关,部是一个以电容器为基础的开关。
以传导性物体(例如手指)触摸电容器可改变电容,此改变会被內置于微控制器的电路所侦测。
电容式触摸感应按键的基本原理◆Silicon Labs 现提供一种可侦测因触摸而改变的电容的方法电容式触摸感应按键的基本原理就是一个不断地充电和放电的弛振荡器。
如果不触摸开关,弛振荡器有一个固定的充电放电周期,频率是可以测量的。
如果我们用手指或者触摸笔接触开关,就会增加电容器的介电常数,充电放电周期就变长,频率就会相应减少。
所以,我们测量周期的变化,就可以侦测触摸动作。
具体测量的方式有二种:(一)可以测量频率,计算固定时间弛振荡器的周期数。
如果在固定时间测到的周期数较原先校准的为少,则此开关便被视作为被按压。
(二)也可以测量周期,即在固定次数的弛周期间计算系统时钟周期的总数。
如果开关被按压,则弛振荡器的频率会减少,则在相同次数周期会测量到更多的系统时钟周期。
Silicon Labs推出的C8051F9xx微控制器(MCU)系列,可通过使用芯片上比较器和定时器实现触摸感应按键功能,连接最多23个感应按键。
而且无须外部器件,通过PCB走线/开关作为电容部分,由部触摸感应按键电路进行测量以得知电容值的变化。
◆以Silicon Labs的MCU实现触摸感应按键利用Silicon Labs其它MCU系列,仅需搭配无源器件,即可实现电容式触摸感应按键方案。
与C8051F93x-F92x方案相比,唯一所需的外部器件是(3+N)电阻器,其中N是开关的数目,以及3个提供反馈的额外端口接点。
基于8位MCU的触摸按键解决方案

前言在需要用户界面的应用方案中,传统的机电开关正在被电容式触摸感应控制所替代。
Sino wealth已经开发了一套触摸感应软件,使得任意一款8位的中颖微控制器都可以作为一个电容式触摸按键控制器使用。
通过对由一个电阻和触摸电极电容组成的RC充放电时间的控制,该触摸感应软件可以检测到人手的触摸。
由于电极电容的改变,导致的RC充放电时间的改变,能够被检测出来,然后经过滤波等,最终通过专用的I/O端口,或者I2C/SPI 接口发送给主机系统。
该软件库所需的元器件BOM表,成本低廉,因为每个通道只需要两个电阻就可以实现触摸检测功能RC感应原理RC采样原理就是通过测量触摸电极电容的微小变化,来感知人体对电容式触摸感应器(按键、滚轮或者滑条)的触摸。
电极电容(C)通过一个固定的电阻(R)周期性地充放电。
电容值取决于以下几个参数:电极面积(A),绝缘体相对介电常数,空气相对湿度,以及两个电极之间的距离(d)。
电容值可由下列公式得出:图1:RC电压检测。
固定电压施加在,的电压随着电容值的变化而相应增加或者降低,如图2所示。
图2:测量充电时间。
通过计算V OUT的电压达到阀值V TH所需要的充电时间(T C),来得到电容值(C)。
在触摸感应应用中,电容值(C)由两部分组成:固定电容(电极电容,C X)和当人手接触或者靠近电极时,由人手带来的电容(感应电容,C T)。
电极电容应该尽可能的小,以保证检测到人手触摸。
因为通常人手触摸与否,带来的电容变化一般就是几个pF(通常5pF)。
利用该原理,就可以检测到手指是否触摸了电极。
图3:触摸感应。
这就是用于检测人手触摸的触摸感应软件中感应层所采用的基本原理。
硬件实现图4显示了一个实现的实例。
由R1,R2以及电容电极(C X)和手指电容(C T)并联的电容(大约5pF) 形成一个RC网络,通过对该RC网络充放电时间的测量,可以检测到人手的触摸。
所有电极共享一个“负载I/O”引脚。
单片机按键识别篇---单击---双击----长按

单⽚机按键识别篇---单击---双击----长按 最近做⼀任务需要使⽤⼀个按键实现三种功能,分别是按键单击功能,按键双击功能和按键长按功能,可能之前没有接触过这类按键复⽤情况,顶多也只是简单识别单击和长按,没有想过双击以上按键功能,也是绞尽脑汁,想了半天,⼜上⽹看了些例程,算是对于按键的识别有点⼩⼩的了解,感觉这个功能挺实⽤,在此做个随笔。
⼀、思路 1.识别长按操作思路:我们使⽤系统定时器定时,然后让系统每过⼀段时间去扫描按键I/O⼝状态,当扫描到按键按下I/O⼝状态超过设定长按时间的阀值,就判定这次按键操作为“长按”操作; 2.识别单击操作思路:当系统扫描按键按下的I/O⼝时间⼩于我们设定的长按阀值,这时就可能出现两种情况,情况1.可能是单击;情况2.可能是双击;⾸先我们来说情况1,单击操作,这时我们可以检测按键按下后,按键弹起的时间到下次按键按下的时间间隔,当按键按下弹起到下次按键按下的时间超过某个值,则我们判定这次操作为“单击”操作; 3.识别双击操作思路:上⾯刚说的情况1,这次来说情况2,:双击操作,当我们检测按键按弹起后在⼀定时间阀值内,⼜检测到按键I/O⼝有电平变化,则我们判断这次操作为“双击”操作⼆、程序部分unsigned char scan_key(){/*值key_return如下:1---------单击2---------双击3---------长按*/static unsigned char key_state=0; //按键状态static unsigned char state=0;static unsigned char time,time1,time2;static unsigned char key_up_flag=0; //按键弹起标志位static unsigned char key_return;if(Key==0) //按键按下消抖{delay(50);if(Key==0){key_state=0;}}else{delay(50); //按键松开消抖if(Key==1){key_state=1;key_up_flag=0;}}if((state==0)&&(key_state==0)&&(key_up_flag==0)) //这⾥主要防⽌,按键在识别长按后,⼜会执⾏⼀遍单击操作{state=1;time=key_time; //记录按键按下的时间为多少,做标记}if(state==1){time1=key_time;time2=time1-time; //计算按键按下时长if(time2>50) //长按判断{state=2;}if(key_state==1) //按键弹起{state=3;time=key_time; //标志什么时间按键弹起的}}if(state==2) //长按{state=0; //重置状态key_up_flag=1;key_return=3;}if((state==3)&&(key_up_flag==0)){time1=key_time;time2=time1-time; //计算按键弹起后时间if(time2>6) //判断按键弹起后的时间,超过300ms,则说明为单击 {state=0;key_return=1;}else if(key_state==0) //按键弹起后,300ms内⼜有按键按下{state=4;}}if(state==4){if(key_state==1) //按键弹起{state=0;key_return=2;}}return key_return;}void timer0() interrupt 1//定时器T0中断函数⼊⼝{TH0=0X9E; //初值重载TL0=0X57; //定时50ms=50000us; 50000/2=25000key_time++; //50MS++}。
电容式触摸感应按键技术原理及应用

电容式触摸感应按键技术原理及应用2010-05-26 12:45:02| 分类:维修 | 标签: |字号大中小订阅市场上的消费电子产品已经开始逐步采用触摸感应按键,以取代传统的机械式按键。
针对此趋势,Silicon Labs公司推出了内置微控制器(MCU)功能的电容式触摸感应按键(Capacitive Touch Sense)方案。
电容式触摸感应按键开关,内部是一个以电容器为基础的开关。
以传导性物体(例如手指)触摸电容器可改变电容,此改变会被內置于微控制器内的电路所侦测。
电容式触摸感应按键的基本原理◆Silicon Labs 现提供一种可侦测因触摸而改变的电容的方法电容式触摸感应按键的基本原理就是一个不断地充电和放电的张弛振荡器。
如果不触摸开关,张弛振荡器有一个固定的充电放电周期,频率是可以测量的。
如果我们用手指或者触摸笔接触开关,就会增加电容器的介电常数,充电放电周期就变长,频率就会相应减少。
所以,我们测量周期的变化,就可以侦测触摸动作。
具体测量的方式有二种:(一)可以测量频率,计算固定时间内张弛振荡器的周期数。
如果在固定时间内测到的周期数较原先校准的为少,则此开关便被视作为被按压。
(二)也可以测量周期,即在固定次数的张弛周期间计算系统时钟周期的总数。
如果开关被按压,则张弛振荡器的频率会减少,则在相同次数周期会测量到更多的系统时钟周期。
Silicon Labs推出的C8051F9xx微控制器(MCU)系列,可通过使用芯片上比较器和定时器实现触摸感应按键功能,连接最多23个感应按键。
而且无须外部器件,通过PCB走线/开关作为电容部分,由内部触摸感应按键电路进行测量以得知电容值的变化。
◆以Silicon Labs的MCU实现触摸感应按键利用Silicon Labs其它MCU系列,仅需搭配无源器件,即可实现电容式触摸感应按键方案。
与C8051F93x-F92x方案相比,唯一所需的外部器件是(3+N)电阻器,其中N是开关的数目,以及3个提供反馈的额外端口接点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于充放电原理的电容式触摸按键设计
发布: 2011-9-1 | 作者: —— | 来源:lidongsheng| 查看: 291次| 用户关注:
与传统的机械式按键相比,电容式触摸感应按键美观、耐用、寿命长。
电容式触摸感应按键实际只是PCB上的一小块“覆铜焊盘”,与四周“地信号”构成一个感应电容,触摸该按键会影响该电容值。
现在检测电容值的方法有很多种,如电流与电压相位差检测、由电容构成的振荡器频率检测、电容桥电荷转换检测。
而这里则是利用感应电容与电阻构成的RC回路,检测充放电时间的变化量,不需要专用检测电路,成本低廉。
1检测原
与传统的机械式按键相比,电容式触摸感应按键美观、耐用、寿命长。
电容式触摸感应按键实际只是PCB上的一小块“覆铜焊盘”,与四周“地信号”构成一个感应电容,触摸该按键会影响该电容值。
现在检测电容值的方法有很多种,如电流与电压相位差检测、由电容构成的振荡器频率检测、电容桥电荷转换检测。
而这里则是利用感应电容与电阻构成的RC回路,检测充放电时间的变化量,不需要专用检测电路,
成本低廉。
1 检测原理
电容式触摸按键电路的原理构成如图1所示,按键即是一个焊盘,与地构成一个感应电容,在周围环境不变的情况下电容值固定为微小值,具有固定的充放电时间,而当有一个导体向电极靠近时,会形成耦合电容,这样就会改变固有的充放电时间,而手指就是这样的导体。
通过测量充放电时间的改变即可检测是否有按键被按下。
充放电时间的计算公式如下:
式中,t,R,C分别为充放电时间,电阻值,电容值;V1为充放电终止电压值;V2为充放电起始电压值;Vt为充放电t时刻电容上的电压值。
首先,开关在断开的状态下该按键被下拉电阻拉低,电势为0 V,这时开关闭合开始对按键充电,等充满电稳定后再断开开关,这时按键开始放电,并用定时器记录这段放电时间
为t1,反复该过程。
当有手指触碰按键时,放电时间会改变为t2,如图2所示,由此即可判断出手指是否触摸到该按键。
2 检测电路设计
该检测电路由MSP430F1121A作为主控制器,由JTAG接口在线仿真调试,键盘分为单个触摸按键检测和矩阵触摸按键检测两部分,如图3所示。
其占用的单片机资源包括带有中断功能的GPIO口和定时计数器。