ADC 按键可以用阻值阵列兼顾低功耗唤醒和采样识别

ADC 按键经常被认为不适合低功耗场景,原因是 MCU 休眠后 ADC 通常关闭,不能持续轮询按键电压。这个判断只看到了采样动作,没有看完整个按键链路。
实际设计可以把 ADC 按键拆成两个阶段:
- 休眠阶段:关闭 ADC,只保留一个 WAKE/IRQ GPIO 监听 ADKEY 节点。
- 按下阶段:阻值阵列把 ADKEY 电压拉到可触发中断的区间。
- 唤醒阶段:MCU 被下降沿唤醒后打开 ADC,再采样电压识别具体按键。
这样 ADC 不需要一直工作,按键仍然能作为唤醒源。关键点是阻值阵列同时服务两个目标:让每个按键在 ADC 上能分得开,也让每个按键在休眠时都能触发唤醒。
阻值阵列承担两层职责
图中的 ADKEY 节点由 22kΩ 上拉到 3.3V。每个按键按下后,会通过不同的下拉电阻接地:
| 按键 | 下拉电阻 |
|---|---|
| SW1 | 0Ω |
| SW2 | 9.1kΩ |
| SW3 | 15kΩ |
| SW4 | 24kΩ |
这组阻值的选择要同时满足两件事:
- 分压点之间拉开距离,方便 ADC 在唤醒后识别按键。
- 分压后的电压足够低,按键按下时能跨过 WAKE/IRQ 的触发门限。
因此,ADC 按键用于低功耗应用时,核心设计对象是这组阻值阵列的电压分布。
休眠时不扫描,唤醒后再采样
低功耗按键的工作流程可以压缩成四步:
- MCU 进入休眠,ADC 关闭。
- WAKE/IRQ GPIO 通过高阻电阻连接到 ADKEY,只负责检测下降沿。
- 任意按键按下后,ADKEY 从上拉电平下降到对应分压点,触发中断唤醒。
- MCU 醒来后打开 ADC,读取 ADKEY 电压区间,映射为具体按键。
这个流程省电的原因很直接:等待阶段没有 ADC 连续采样,也没有软件轮询。系统只保留中断唤醒路径,真正需要识别按键时才打开 ADC。
图中的 R7 = 220kΩ 用于把 ADKEY 接到 WAKE/IRQ。它的作用是做高阻耦合,让 GPIO 能看到唤醒电平变化,同时尽量不改变原来的 ADC 分压关系。
分压值可以复算
按键按下后的 ADKEY 电压按电阻分压计算:
V_ADKEY = VCC * Rkey / (22k + Rkey)当 VCC = 3.3V 时,图中的分压值为:
| 按键电阻 | 计算结果 | 图中标注 |
|---|---|---|
0Ω |
0V |
0V |
9.1kΩ |
0.966V |
≈ 0.97V |
15kΩ |
1.338V |
≈ 1.34V |
24kΩ |
1.722V |
≈ 1.72V |
这些数值与图中标注一致。作为 ADC 识别点,它们之间有足够的间隔,后续可以按电压区间判定 0Ω、9.1kΩ、15kΩ、24kΩ 四类按键。
唤醒门限决定最高分压点能不能用
阻值阵列能让 ADC 按键进入低功耗应用,但最终还要受目标芯片的 WAKE/IRQ 输入门限约束。所有有效按键的分压点都要能触发下降沿。
如果芯片低电平输入阈值按常见的 VIL <= 0.3 * VDD 估算,在 3.3V 下大约是 0.99V。此时 15kΩ 和 24kΩ 的分压点会高于这个估算值,可能无法作为可靠低电平。若芯片的唤醒触发门限更高,或 WAKE/IRQ 使用独立比较器阈值,则需要按手册重新判断。
所以这张图的分压计算是正确的,但产品设计还要补一个确认动作:
- 查 WAKE/IRQ 输入阈值,确认最高分压点
24kΩ ≈ 1.72V能触发唤醒。 - 按 VCC 范围、电阻精度、GPIO 输入漏电计算最坏情况。
- 留出 ADC 判定区间,避免电阻误差和按键抖动导致相邻按键混淆。
- 唤醒后先做消抖,再打开 ADC 采样。
适用结论
ADC 按键可以用于低功耗应用。省电路径是用阻值阵列把按键动作转换成可唤醒的电平变化,再在 MCU 醒来后短时间采样识别。
这个设计的价值在于复用同一个 ADKEY 节点:
- 平时作为中断唤醒源。
- 醒来后作为 ADC 识别输入。
- 多个按键仍然只占用一个 ADC 通道。
图中的示例可以作为这种思路的说明图使用。使用前需要结合芯片手册确认 WAKE/IRQ 阈值,避免最高电压档只能被 ADC 识别,却不能稳定唤醒系统。
本文由 AI 辅助生成,可能存在错误或遗漏,请以实际资料和官方文档为准。