引言
在单片机应用领域中,键盘输入是最常见也是最重要的人机交互方法。通常实现键盘接口的方式有:独立直接输入、矩阵结构、ADC方式、使用专用器件等。现在市面上的单片机普遍带有模数转换功能,即ADC。使用ADC方式的按键电路,具有硬件电路简单、按键电路与单片机连线少、能节省I/O口、易于修改、节省成本等优点。但在按键数比较多时,如果软硬件配合不好,很容易出现按键不可靠的问题,表现为按键没有反应、按键功能紊乱等,因此按键电路的设计以及软件和硬件的配合就显得至关重要。
1准备知识
1.1ADC器件的设计计算
ADC器件的功能是将输入的模拟电压或电流转换成相应的数字电压或电流。ADC的输入与输出有以下关系:
其中:n是ADC器件的位数(即分辨率);G是增益(一般ADC器件增益为1,美国国家半导体公司NI有其他增益的ADC器件);Vin或Iin是输入的模拟电压或电流;Vref或Iref是ADC的参考电压或参考电流。
因此,对于一个给定的ADC器件,在参考电压或电流确定后,输入的模拟值和输出的数字量就必然是一一对应的关系。而对于一个给定的ADC器件和模拟值,输出的数字量只与参考量有关,所以在应用中必须确保参考量的准确无误!这一点非常重要,笔者曾经在产品设计调试中遇到过由于参考电压的滤波电路不良,使得软件读取到的数字量比实际输入值偏大,结果软件判断错误导致了按键失灵的故障。
1.2ADC按键电路构成
ADC按键由按键电路、ADC器件和MCU组成。它们之间的信息传递如图1所示。
图1
按键电路根据按下的按键给ADC器件提供相应的电压值,MCU控制ADC器件对此电压进行模数转换,并根据得到的数字量执行相应的处理。
1.3按键电路的原理
按键电路的实质是一个电阻分压器,其基本原理如图2所示。图中,送往ADC的电压Vadc是电阻R1、R2对电压Vcc的分压值,ADC器件对Vadc进行转换得到一个对应的数字量。由于每一个数字量只对应一个模拟电压,所以只要不同的按键按下就可以取得不同的分压值,就能够通过软件对数字量的识别,进而辨别出是哪个按键按下。
图2
在理想情况下,一个n位的ADC器件,其可识别电压为2n个,即可以识别2n个不同的按键。但由于实际应用中存在电阻的自身误差、电压的波动误差、ADC器件的转换误差、软件的计算误差等,所以在设计时必须将这些都考虑进来,不能简单地使用电压值与数字量一一对应的方法来确定按键的键值。
1.4 按键中心电压与电压允许范围的设计计算
由图2有下面公式:
Vadc就是按键的中心电压。从这个公式还可以看出,送往ADC器件的电压Vadc只与Vcc、R1、R2有关。通常应用中,允许误差范围为±5%,则Vadc的设计允许范围是:
这里的Vadc就是式(1)的Vin,因此ADC器件的输出数字量也是有范围的:
要注意的是,要尽量确保软件中的按键数字量判断范围和这里的按键电压允许范围相一致,只有这样才能保证软硬件配合一致。
2按键电路的型式
按键电路的型式有多种,理论上讲每个按键都有一个对应的电压值,但实际应用中要考虑很多因素,例如电路的功耗以及防静电能力等。下面就以常见的几种按键电路进行分析比较,以设计出最适合的电路。
2.1基本并联型
由基本原理图很容易设计出第一种电路型式:并联型,如图3所示。这种形式的电路有下面几个特点:
图3
① 各个与按键连接的电阻成并联关系,电路很直观,易于理解。每个按键连接的电阻值都不一样,这样任何一个按键按下去得到的电压值都不一样。
② 多个按键同时按下时可能造成功能紊乱,在按键很多时此问题尤其容易发生。此问题发生的原因是多个按键按下后的电压值可能刚好等于另外一个按键设计的电压值。不过这一特点也可以被利用来做组合键,只要小心地设计每个按键的电压值,使各个单键和组合键的电压值没有重复就可以达到组合键的目的。
③ 没有按键按下时ADC端口被上拉至高电位,电路基本不消耗功率。
④ 某一个按键的连接电阻变值或损坏,不会影响其他单个按键的功能。
⑤ 如果按键板到ADC端口的连线很长,则ADC端口很可能会被感应的ESD电压(即静电电压)损坏。此时需要设置防静电管以便快速释放ESD电压。
⑥ 在ESD电压加到ADC端口线上时,由于每个按键支路都承受相同的ESD脉冲电压,则阻值小的支路流过的电流较大,容易损坏。此时,在增加ESD管的基础上还要增大电阻的阻值。
⑦ 这种接法的电压分配没有顺序。
2.2基本串联型
图4
图4是另一种电阻的接法——串联型。这种电路的特点有:
① 电阻串联连接,每个按键单独按下的电压值都不相同。
② 靠近ADC端口的按键具有优先权,此键按下后其下面所有的按键电阻都被屏蔽,所以这种单个线路做不了组合键。
③ 没有按键按下时基本不消耗功率。
④ 某一个按键变值或损坏,其后面远离ADC端口的所有按键功能都受影响。
⑤ 如果按键板到ADC端口的连线很长,则ADC端口很可能会被感应的ESD电压(即静电电压)损坏。此时需要设置防静电管以吸收ESD电压。
⑥ 在ESD电压加到ADC端口线上时,由于靠近ADC端口的按键电阻相对较小,所以比下面的支路更容易被ESD电压损坏。
⑦ 这种接法的电压分配从上到下是逐级增大的。
2.3改进并联型
图5
改变并联型电路的接法,得到图5所示的改进型并联接法。这种接法在没有按键按下时,ADC端口通过电阻接地,就算按键板到ADC端口连线很长,ESD电压也能通过电阻R5得到泄放,对ADC端口的保护作用比并联型电路更可靠些,但是对电阻的保护效果还是一样的。
2.4改进串联型
图6
同样,改变串联型电路的接法,得到图6所示的改进型串联接法,这种接法跟改进并联型电路一样,能对ADC端口给与更多的保护;同时,这种接法的电压分配从上到下是逐级减小的。
结合以上各种电路的特点,可以选择适合于功能要求的ADC按键电路。
3软件设计
3.1ADC采集按键数据的步骤
ADC按键是一个小型的数据采集系统。它跟其他数据采集系统一样要完成数据的采集、
图7
数据的处理、功能的执行3个步骤,其顺序如图7所示。
3.2ADC按键软件设计的重点
在程序运行时,如果ADC检测到的模拟量或者ADC输出的数字量不准确,则执行后面功能将出现误动作或不动作。所以,这里介绍软件在采集按键数据和处理按键数据这两方面的处理技巧。
机械按键抖动时间的长短由按键的机械特性诀定,一般为5~10 ms。而按键的闭合稳定时间的长短由操作人员的按键动作决定,一般为几十毫秒至数秒。软件每2 ms采样1次ADC数据并保存,共采样10次,所以采集数据约花费20 ms,能够起到消除抖动的作用。执行数字滤波舍去最大、最小值,再对剩下的8个数据求平均值。然后,逐一比较该平均值是在哪个Output_min和Output_max范围内就可以确定是哪个按键按下,再执行相应的功能函数。经过实际装机测试,该方法效果很好,按键控制灵敏而且可靠、准确无误。流程如图8所示。
图8
4小结
现在的单片机大部分带有A/D转换功能,利用ADC按键就可以实现一个I/O口扩展多个按键,在实际的电路设计中可以降低成本,是个不错的选择。本文比较了4种ADC按键电路型式,介绍了ADC按键设计的计算方法和软件程序设计流程,实现了精确、可靠的ADC按键接口。