利用 IO 中断实现低功耗下使用 ADC 按键

1. 概述

IO 不够,几个按键挤到一根 ADC 线上。产品还要低功耗。休眠时 ADC 关着,这根线扫不了。

模拟看门狗能盯电压,ADC 子系统得挂着,电流下不来,这条丢掉。剩下 IO 中断:休眠只留一个 GPIO 看按键节点。键一按,电压掉到能打下降沿的位置,中断把人叫醒。起来再开 ADC,扫一眼是哪颗键。

一般 MCU 的 ADC 脚同时挂着数字输入。同一根线可以一边开着 ADC,一边配下降沿中断,不用再拆脚。

2. 原理图

ADC 按键原理图

2.4k 上拉到 3.3V,五颗键各自串电阻落地:180Ω390Ω620Ω820Ω。按下之后分压大约 0V0.23V0.46V0.68V0.84V

这几档都低到能当低电平。随便按哪颗,ADC 节点都从 3.3V 掉下去,打出下降沿,IO 中断就能从休眠里把人拉起来。

醒来后 ADC 认的是这几个分压点隔得开。休眠认的是任意一颗键都能打出下降沿。键少、分压又压得够低,一根脚就够了。

3. 工作流程

低功耗休眠,IO 中断唤醒,再扫描 ADC 按键

休眠阶段 ADC 关掉,GPIO 盯着按键节点。下降沿中断进来之后再开 ADC,采一次电压,按区间认键。消个抖就行。

4. 独立中断信号

分压档位一多,相邻电压挤太近,ADC 容易认错键。换成双回路轻触开关(DPST)。

双回路轻触开关:一路分压认键,一路并成公共中断

一颗键里两路独立常开触点。刀 A 进原来的 ADC 分压网络,电阻按认键来排,档位可以拉开。刀 B 全部并到一根中断线上,按下直接落地。休眠盯这根公共中断线,谁按都打下降沿;醒来再去 ADC 上看是哪颗。

多占一根 GPIO,分压能铺开整段量程,相邻档不容易糊在一起。