145 lines
7.0 KiB
Markdown
145 lines
7.0 KiB
Markdown
# 软开关机电路设计方案(长按 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 是否需重算)。
|