打印
[信息]

【实战经验】ADC 键盘读键不准

[复制链接]
2588|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 香水城 于 2017-8-17 14:30 编辑

ADC 键盘读键不准

问题:

该问题由某客户提出,发生在 STM32F103VBT6 器件上。据其工程师讲述:在其产品设计中,使用了 STM32 的 ADC 扫描按键。为了能在低功耗模式下通过按键唤醒 STM32,按键信号在送给 ADC 的同时,也送给一路外部中断,如图(一)所示。在待机状态下,有按键被按下时外部中断输入引脚上的电平会向下降跳变,从而唤醒 STM32。之后,STM32 通过 ADC 采样来判断是哪一个按键被按下,如果是电源键,则做开机处理,否则回到待机状态。在实测中,发现这种情况下对按键的误判率很高,造成开 机困难。调整各个按键的分压电阻的阻值,没有改善。

调研:
通过观察其产品在各种情况下按键的操纵效果,发现只有在开机的时候才会发生按键失灵的现象。使 用示波器观察按键信号,确认该信号已送到外部中断输入管脚及 ADC 输入管脚。进一步观察发现,按键信号在 ADC 管脚上会有比较强烈的抖动。检查软件代码,发现其对开机按键的判断是放在外部中断,没有做消抖处理。

结论:
ADC 对按采样时,输入信号未及进入稳定状态,造成采样不准确,进而发生误判。

处理:
在软件中加入一段延时,待ADC 输入信号稳定以后再对其采样、判断。

建议:
消抖处理是 ADC 按键扫描中不可缺少的一环。消抖的方法有很多,例如加一个延时来避 开抖动区间,即可以在一定程度上消除信号抖动所产生的影响。这里推荐一种简单有效的方法:以固定的采样率对按键信号采样,根据按键的属性恰当的选择采样率来跨过抖 动区间,并使用一阶递归滤波算法进行平滑,当平滑后的采样值进入稳定阶段再进行按 键判定。在应这种方法时,在采样率的选择上,要保证采样周期Ts 大于抖动区间时长Tw,如图(二)所示:

一阶递归滤波器可按如下公式实现:


该滤波器的频谱为:

幅频特性曲线如图(三)所示:

根据实际需求,调整参数 N 的值,以便获得最佳的滤波效果。

对应的PDF: ADC 键盘读键不准
更多实战经验请看:【ST MCU实战经验汇总贴】

沙发
mark0668| | 2015-7-27 11:07 | 只看该作者
好贴,感谢分享.

使用特权

评论回复
板凳
捉虫天师| | 2015-7-27 12:24 | 只看该作者
读不准是方法不对头啊。

使用特权

评论回复
地板
捉虫天师| | 2015-7-27 12:25 | 只看该作者
以前我做过,还是很准的。

使用特权

评论回复
5
mmuuss586| | 2015-7-27 12:36 | 只看该作者

我一般是延时消抖;

使用特权

评论回复
6
dragon_hn| | 2015-7-28 10:04 | 只看该作者
ADC按键最好不用.年深月久之后,想哭都会哭不出来的.

使用特权

评论回复
7
lanjackg2003| | 2015-7-28 10:14 | 只看该作者
adc按键如果PCB材料不好的话,用了一段时间,真的要命....
不过是好帖,好高深..
mark

使用特权

评论回复
8
tototm| | 2015-7-28 16:36 | 只看该作者
感谢分享!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:意法半导体(中国)投资有限公司
简介:STM32技术专家

596

主题

17097

帖子

287

粉丝