物理按键的机械回弹同样会产生连击,需要软件消抖
别名: 机械回弹 · 按键消抖 · 硬件连击
概念解释
金属触点或锅仔片在闭合和断开时会在毫秒级里多次通断,示波器上是一串毛刺,固件若对每次边沿都计数,一次按压会变成多次键码。这是机械回弹(switch bounce),和指腹在玻璃上的二次贴合同属“一次意图、多次电事件”,但物理源是开关而不是皮肤。音量键、电源键、电容屏旁边的实体确认键,以及外接键盘,都要把消抖做成软件或固件步骤,不能指望机械结构一次就干净。
机制
触点表面微观上不平整,闭合时弹跳、微动、再闭合,时间尺度通常比皮肤回弹更短,也更密。硬件可以加 RC 滤波,多数消费设备仍把干净边沿的责任留给 MCU:读到第一次闭合后,在窗口内忽略后续跳变,窗口结束时再采样一次确认。窗口太短,毛刺穿过滤波变成双字符、双拍照、飞行模式被连拨;窗口太长,用户感到键“粘”。电源键还涉及长按关机,消抖窗口必须短于长按阈值,否则短按会被拖成一次可疑的长按候选。触摸按钮的防抖和机械消抖不要共用一个计时器:两种毛刺的时间尺度和误杀对象都不同。
怎么研究
用示波器看键的通断毛刺宽度和次数,再在固件里打键码时间戳,对比消抖开/关。自变量是按压力、按键老化(新键 vs 磨损)、温度、以及消抖窗口。因变量是一次按压产生的键码数、短按被升成长按的比例、连按两个不同键时是否被同一窗口误伤。把触摸连击实验和机械消抖实验分开写方法:前者要高速摄影皮肤,后者要电信号。老化键的毛刺会变宽,用新样机定的窗口在寿命末期可能不够。
边界
霍尔、光学和电容式电源键没有金属触点回弹,毛刺来自阈值抖动,窗口策略不同。机械键盘的 NKRO 和全键无冲讨论的是同时键数,不是回弹。车规按键有自己的 EMI 和温度谱,消费电子的 5–20 ms 窗口不能直接搬。触摸屏上画出来的“按键”没有机械回弹,套用开关消抖只会让虚拟键变钝。
怎么落地
- 为音量、电源、快门等实体键在固件里单独设消抖窗口,并用示波器加键码日志验收“一次按一下码”。
- 消抖窗口上限低于长按阈值,短按不得被拖进长按状态机。
- 老化样机和高温样机各测一轮;窗口只在新室温键上合格不算通过。