7.0 KiB
7.0 KiB
软开关机电路设计方案(长按 2 秒开机 + 自动关机)
适用于 MotherCup 整机:电池供电,按键软开关,防误触开机,无操作自动断电。
1. 需求
| 项 | 要求 |
|---|---|
| 开机 | 长按按键 2 秒才开机(防误触,短按不开机) |
| 关机 | 自动关机:无操作超时后自动断电(固件定时,超时值可配) |
| 掉电后 | 整机彻底断电(VSYS=0),待机电流仅 P-MOS 漏电流(<1µA 级) |
2. 电路设计
VBAT(电池 3.0~4.2V)
│
│ S
Q1 ─────┤ P-MOS (AO3401)
│ D
├─────────────────────── VSYS(整机电源,去 LDO/升压/制冷片)
│ G(栅极节点 G)
│
R2 100K ─────────┼────┬──────────────────┬─────────────────────┐
(接 VBAT) │ │ │ │
│ │D │D │
│ Q2(N-MOS 2N7002) Q3(N-MOS 2N7002) │
│ │G │G │
│ │ │ │
│ ├─ R3 10K ─┐ ├── C1 3.3µF ── GND │
│ │ │ │ │
│ ├─ R5 100K ┴ GND ├── R4 10M ── GND │
│ │ (PWR_HOLD 下拉,MCU 掉电时确保 Q2 关) │
│ │ │ │
│ └──── PWR_HOLD (MCU 输出) │
│ R1 1M │
│ │ │
│ SW1 ──── VBAT │
│ │ │
│ (可选) KEY_DET (MCU 输入) │
│ Q2/Q3 源极 ── GND Q2/Q3 源极 ── GND
说明:Q2 的漏极与 Q3 的漏极都并到栅极节点 G,任一路导通都能把 Q1 栅极拉低。
3. 工作原理
3.1 开机(长按 2 秒)
- 初始:
PWR_HOLD悬空(MCU 未上电),R5 把 Q2 栅极拉低 → Q2 关断; R2 把 Q1 栅极拉高到 VBAT → Q1 关断 → VSYS=0,整机断电。 - 按住 SW1:VBAT 经 SW1 → R1 给 C1 充电(τ = R1×C1 ≈ 3.3s)。
- 约 2.1 秒后 C1 电压达到 Q3(2N7002) 阈值(~2V) → Q3 导通 → 拉低 Q1 栅极 → Q1 导通 → VSYS 得电。
- MCU 上电启动,第一时间置
PWR_HOLD=高→ Q2 导通 → 持续拉低 Q1 栅极(锁存开机)。 - 松开 SW1:C1 经 R4 缓慢泄放,Q3 逐渐关断,但 Q2 已锁存,不影响供电。
- 若按的时间不足 2 秒就松手:C1 没充到阈值,Q3 不导通,Q1 不开机(防误触)。
3.2 自动关机
- MCU 运行中检测「无操作」超时(BLE 无指令 / 按键无动作,超时值可配,见 §6)。
- 超时到 → 置
PWR_HOLD=低→ Q2 关断 → R2 把 Q1 栅极拉高 → Q1 关断 → VSYS=0 → 整机断电。
4. 器件清单(BOM)
| 位号 | 器件 | 参数/型号 | 封装 | 数量 | 说明 |
|---|---|---|---|---|---|
| Q1 | P-MOSFET | AO3401(-30V/-4A,低压开启) | SOT23 | 1 | 高边主开关 |
| Q2 | N-MOSFET | 2N7002(Vth≈2V) | SOT23 | 1 | PWR_HOLD 锁存 |
| Q3 | N-MOSFET | 2N7002(Vth≈2V) | SOT23 | 1 | 长按开机触发 |
| R1 | 电阻 | 1MΩ ±5% | 0402 | 1 | C1 充电电阻(定 2s 延时) |
| R2 | 电阻 | 100KΩ | 0402 | 1 | Q1 栅极上拉(默认关机) |
| R3 | 电阻 | 10KΩ | 0402 | 1 | PWR_HOLD → Q2 栅极 |
| R4 | 电阻 | 10MΩ | 0402 | 1 | C1 泄放 |
| R5 | 电阻 | 100KΩ | 0402 | 1 | Q2 栅极下拉(MCU 掉电时确保 Q2 关) |
| C1 | 电容 | 3.3µF / 10V X7R | 0603 | 1 | 延时电容 |
| SW1 | 轻触按键 | 6×6 侧按/顶按 | — | 1 | 电源键 |
| (可选) D1 | 二极管 | BAT54 | SOT23 | 1 | 如 KEY_DET 需隔离时用 |
5. RC 延时计算
- 充电:
Vc(t) = VBAT × (1 − e^(−t/RC)),RC = R1×C1 = 1M×3.3µF = 3.3s。 - 2N7002 阈值约 2V,取 VBAT=4.2V:到达 2V 的时间
t = −RC·ln(1 − 2/4.2) = −3.3·ln(0.524) ≈ 2.13s✓(约 2 秒)。 - 若需更精确 2.0s,可调 R1=910K 或 C1=3.0µF;最终以实测为准微调 R1/C1。
6. 固件配合
6.1 GPIO
| 引脚 | 方向 | 说明 |
|---|---|---|
PWR_HOLD |
输出 | main() 最开头就置高(先于 banner/初始化),锁存开机;自动关机时置低 |
KEY_DET(可选) |
输入 | 接 C1 节点/按键节点,运行中检测按键,用于复位自动关机定时器 |
注意:
PWR_HOLD必须在 MCU 复位后立即拉高,否则用户一松键就掉电。
6.2 自动关机定时(伪代码)
// 空闲超时值(可做成 APP_DATA 参数,appset 配置)
#define AUTO_OFF_TIMEOUT_MS 120000 /* 默认 2 分钟,可配 */
void activity_heartbeat(void) { // 任何活动(BLE 指令/按键)都调
s_last_activity = xTaskGetTickCount();
}
// 在某个常驻任务里(如 BLE 调度任务)周期性检查:
if ((xTaskGetTickCount() - s_last_activity) >= pdMS_TO_TICKS(AUTO_OFF_TIMEOUT_MS)) {
display_set(0, DISP_TYPE_CELSIUS, DISP_BASE_DECIMAL); // 可先清屏/提示
vTaskDelay(pdMS_TO_TICKS(500));
PWR_HOLD_LOW(); // 断电
for(;;) {} // 等电源跌落
}
7. 注意事项
- 开机时序:
PWR_HOLD必须在 MCU 启动后立即置高,且 R5 保证 MCU 掉电时 Q2 可靠关断。 - C1 泄放:R4 取 10M 时泄放 τ≈33s;若担心「短按后快速再长按」会把上次残余电荷算进去,可把 R4 调小(如 4.7M)或加受控泄放。
- 待机功耗:关机时只有 R2(100K→VBAT) 与 P-MOS 漏电流,约 0.04µA + 漏电流,可满足低待机要求。
- VBAT 下限:Q3(2N7002) 阈值 2V,电池低到 ~2.5V 时 C1 充不到阈值会导致开不了机;若需支持更低电压,换低压开启的 N-MOS(如 SI2302,Vth<1V)并重算 RC。
- 栅极保护:Q1 栅极如需加 TVS/钳位(防静电/浪涌),可在 G 节点对 VBAT 加 4.7~6.8V 稳压管(可选)。
8. 待确认
- 自动关机超时值:本文默认 2 分钟(
AUTO_OFF_TIMEOUT_MS),你之前写的是「2 秒」——请确认用多少。 - 是否需要 KEY_DET(按键复位自动关机定时 / 手动关机)。
- 电池最低电压(决定 Q3 选型与 RC 是否需重算)。