(厦门华联电子有限公司,福建 厦门 361006)
电荷转移感应按键设计说明书
吴文勇
(厦门华联电子有限公司,福建 厦门 361006)
本文主要讲述电容电荷转移理论,并根据此理论设计电荷转移电路,最终由电荷转移电路与倍压脉冲发生器实现电荷转移感应按键功能。此感应按键可应用于玻璃、塑料等作为面板的非接触式人机操作输入。
电荷转移;电容感应;容抗;倍压
感应技术正在迅速地成为人机界面操作的媒介,人们在应用并享受这种全新的技术所带来的方便、美观、无机械寿命等好处。本文就个人研发的新型感应设计技术作详细说明。
本文设计的感应按键模块有两部分组成,一部分是共用的倍压高频脉冲发生器模块,用于给另一部分电路提供高频的脉冲信号,另一部分是感应按键能量转移电路模块。每一路按键采用一个转移电路模块,例如产品设计两个按键,那么只要采用一个脉冲发器模块和两个感应按键能量转移电路模块,再结合带ADC转换功能的MCU即可。在目前电子产品中MCU是不可缺少的一部分,所以设计人员并不需要额外增加MCU,就可以完成他的设计。
其中:XC= 1/ωC,称为容抗,单位为 Ω(欧姆),容抗的倒数称为容纳BC = ωC,单位为 S。由(式-1)可见频率和容抗成反比, 也就是频率越高,容抗越小,如图2曲线所示。
ω→0 , |XC|→∞直流开路(隔直)
ω→∞,|XC|→0高频短路(旁路作用)
ε为极板与极板之间的介电常数
S 为极板面积
d 为极板与极板之间的间距
图1
图2
图3
图4
图5
如图5所示,设刚开始PULSE电压为0V,则电源5V经过二极管D2向C4充电。经过 ( τ=RC)后,C4电压为5-VD2(VD2为二极管D1或D2 PN结的正向压降,下同)。当PULSE由0V变为5V时,三极管Q2导通,三极管Q1截止,电压VA为5V+C4两端电压,得出VA=5+5-VD2。二极管D1截止,二极管D2导通,PULSE_OUT电压为10-2*VD2。当PULSE电压由5V变为0V时,三极管Q2截止,三极管Q1导通,PULSE_OUT电压变为0V。如
此循环,可得PULSE_OUT脉冲电压为10-2*VD2,频率与PULSE相同。
电荷转移电路:如图6所示,在无手指情况下,当脉冲由低电平变高电平时,Ut经过C1,C2,D1,R1对C3进行充电;当脉冲由高电平变低电平时,C1,C2经过D2进行放电;放电后当脉冲又产生高电平时又经过C1,C2,D1,R1对C3进行充电,如此循环C3即可以得到稳定电压U0。当手指靠近电极时,如图7所示,此时人体与电极产生如图所示的电容Cx,电容容量在几PF到十几PF。此时当脉冲由低电平变高电平时,Ut除了通过C1,C2,D1,R1对C3充电外,还对Cx充电,所以Cx得到了一部分电荷。根据电路形式Ut提供给C3的电荷明显减小;当脉冲由高电平变为低电平时,Cx经过R3进行放电,所以脉冲电压Ut可以循环对Cx充电。也就是说每个脉冲周期都会转移一部分电荷到Cx,C3得到的电荷减少,电压U0降低。根据以上分析得出,当手指靠近电极时,U0电压将会降低。根据这个结论,MCU对U0进行AD采样并判断采样数据就可以知道是否有手指靠近,从而判断是否有按键按下,实现感应按键的目的。
图6
图7
本软件设计采用AVR单片机ATmega16。AVR单片机的推出,彻底打破这种旧设计格局,废除了机器周期,抛弃复杂指令计算机(CISC)追求指令完备的做法;采用精简指令集,以字作为指令长度单位,将内容丰富的操作数与操作码安排在一字之中(指令集中占大多数的单周期指令都是如此),取指周期短,又可预取指令,实现流水作业,故可高速执行指令。
AVR单片机硬件结构采取8位机与16位机的折中策略,即采用局部寄存器(32个寄存器文件)和单体高速输入/输出的方案(即输入捕获寄存器、输出比较匹配寄存器及相应控制逻辑)。提高了指令执行速度(1Mips/MHz),克服了瓶颈现象,增强了功能;同时又减少了对外设管理的开销,相对简化了硬件结构,降低了成本。故AVR单片机在软/硬件开销、速度、性能和成本诸多方面取得了优化平衡,是高性价比的单片机。
ATmega16有一个10位的逐次逼近型ADC。ADC与一个8通道的模拟多路复用器连接,能对来自端口A的8路单端输入电压进行采样。单端电压输入以0V(GND)为基准。器件还支持16路差分电压输入组合。两路差分输入(ADC1、ADC0与ADC3、ADC2)有可编程增益级,在A/D转换前给差分输入电压提供0dB(1x)、20dB(10x)或46dB(200x)的放大级。七路差分模拟输入通道共享一个通用负端(ADC1),而其他任何ADC输入可做为正输入端。如果使用1x或10x增益,可得到8位分辨率。如果使用200x增益,可得到7位分辨率。
本设计主要采用Atmega16的ADC功能,选用8位分辨率采用方式,启用ADC中断功能。部分程序如下:
主程序:
void main(void)
{
// port initialization
// Watchdog Timer initialization
// Watchdog Timer Prescaler∶ OSC/128k
#pragma optsize-
//WDTCR=0x19;
//WDTCR=0x09;
#ifdef _OPTIMIZE_ SIZE_
#pragma optsize+
#endif
ADC_init();
// Global enable interrupts
#asm("sei");
Get_sensor_standard();//大约需要1秒钟
while (1)
{
// Place your code here
}
ADC中断采样程序(采样多个感应按键):
interrupt [ADC_INT] void AD_INT(void)
{
register static unsigned char num; //采用register static 可以减少入栈及出栈时间,提高运行速度
//设置CD4051通道
PORTC &= 0x3e;
P O R T C |= A D_C D 4 0 5 1_ MUX1[Channel];
//感应按键采样
num = ADC_Sensor[Channel]. ConvertNum;
A D C_S e n s o r[C h a n n e l]. CacheValue[num] = ADCH;
if(++ADC_Sensor[Channel]. ConvertNum >= DATA_NUM)
{
ADC_Sensor[Channel].ConvertNum = 0;
for(num = 0; num < DATA_NUM; num++)
ADC_Sensor[Channel].Value[num] = ADC_Sensor[Channel].CacheValue[num]; //完成一个通道采样
setbit(ADC_Sensor[Channel].State, AD_COMPLETE_BIT);//设置当前通道完成标志
}
//ADC通道循环
if(++Channel >= CHANNEL)Channel = 0;
// Start the AD conversion
ADMUX = AD_MUX[Channel];
ADCSRA|=0x40;
}
[1]邱关源.电路[M].北京:高等教育出版社.
[2]Bruce Eckel.C++编程思想[M].北京:机械工业出版社.
[3]李火林,邓声南,甘筱青.数学模型及方法[M].江西:江西高校出版社.
[4]宁建国.AVR单片机原理及应用[M].北京:北京航空航天大学出版社.
TP21
B