mothercup/hardware_design/开关机电路设计方案.md
2026-09-12 10:52:17 +08:00

145 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 软开关机电路设计方案(长按 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 秒)
1. 初始:`PWR_HOLD` 悬空(MCU 未上电),R5 把 Q2 栅极拉低 → Q2 关断;
R2 把 Q1 栅极拉高到 VBAT → Q1 关断 → VSYS=0,整机断电。
2. 按住 SW1:VBAT 经 SW1 → R1 给 C1 充电(τ = R1×C1 ≈ 3.3s)。
3. 约 **2.1 秒**后 C1 电压达到 Q3(2N7002) 阈值(~2V) → Q3 导通 → 拉低 Q1 栅极 → Q1 导通 → VSYS 得电。
4. MCU 上电启动,**第一时间置 `PWR_HOLD=高`** → Q2 导通 → 持续拉低 Q1 栅极(锁存开机)。
5. 松开 SW1:C1 经 R4 缓慢泄放,Q3 逐渐关断,但 Q2 已锁存,不影响供电。
6. 若按的时间不足 2 秒就松手:C1 没充到阈值,Q3 不导通,Q1 不开机(防误触)。
### 3.2 自动关机
1. MCU 运行中检测「无操作」超时(BLE 无指令 / 按键无动作,超时值可配,见 §6)。
2. 超时到 → 置 `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 自动关机定时(伪代码)
```c
// 空闲超时值(可做成 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. 注意事项
1. **开机时序**:`PWR_HOLD` 必须在 MCU 启动后立即置高,且 R5 保证 MCU 掉电时 Q2 可靠关断。
2. **C1 泄放**:R4 取 10M 时泄放 τ≈33s;若担心「短按后快速再长按」会把上次残余电荷算进去,可把 R4 调小(如 4.7M)或加受控泄放。
3. **待机功耗**:关机时只有 R2(100K→VBAT) 与 P-MOS 漏电流,约 0.04µA + 漏电流,可满足低待机要求。
4. **VBAT 下限**:Q3(2N7002) 阈值 2V,电池低到 ~2.5V 时 C1 充不到阈值会导致开不了机;若需支持更低电压,换低压开启的 N-MOS(如 SI2302,Vth<1V)并重算 RC。
5. **栅极保护**:Q1 栅极如需加 TVS/钳位(防静电/浪涌),可在 G 节点对 VBAT 加 4.7~6.8V 稳压管(可选)。
---
## 8. 待确认
1. **自动关机超时值**:本文默认 2 分钟(`AUTO_OFF_TIMEOUT_MS`),你之前写的是「2 秒」——请确认用多少。
2. 是否需要 **KEY_DET**(按键复位自动关机定时 / 手动关机)。
3. 电池最低电压(决定 Q3 选型与 RC 是否需重算)。