docs: 根据架构.odg重新设计重构手环系统的分层事件驱动APP框架设计文档
This commit is contained in:
@@ -1,40 +1,25 @@
|
||||
# 模块拆分 - 振动马达异步驱动与反馈 (Docs/50_module-breakdown/mod-motor.md)
|
||||
# 模块拆分 - 振动马达非阻塞异步驱动 (Docs/50_module-breakdown/mod-motor.md)
|
||||
|
||||
本模块描述振动马达引脚的开关控制、异步时间片脉冲时序生成以及针对不同防区的特定振动波形。
|
||||
本模块描述振动马达的异步脉冲生成及时序段控制。本模块为输出执行层,由应用在产生警报或按键反馈时调度。
|
||||
|
||||
## 1. 模块职责说明
|
||||
|
||||
* **职责范围**:
|
||||
1. 系统初始化时配置马达引脚 `P2.5` 为推挽输出模式,默认输出低电平(马达静止)。
|
||||
2. **非阻塞异步脉冲处理**:
|
||||
为防止马达振动时间(几百毫秒)阻塞 CPU 的业务循环与射频解码,本模块将马达动作拆分为多个电平交替状态段。利用 Timer 1 (1ms 中断) 异步扣减阶段计数器,实现不占用 CPU 资源的精细振动波形。
|
||||
3. 配合系统状态机,在按键点击时输出 50ms 极短触觉反馈,在防区入侵报警时根据类型输出对应的振动指征,在本地主动 SOS 状态下输出连续不断的重度警示振动。
|
||||
1. **非阻塞时间片调度**:
|
||||
传统的 `delay_ms` 震动会导致手环在震动期间无法读取按键和解调无线信号。本模块将震动过程分解为多个电平维持段,在 Timer1 定时中断里扣减剩余毫秒数。应用在发起震动请求后**立即返回**。
|
||||
2. **差异化防区震动**:根据报警传感器的类型,异步生成 7 种不同的警示震动节奏(如门磁短震、红外短震2次、主动求救持续震动)。
|
||||
3. **按键触觉反馈**:在按键被消抖确认时,提供 50ms 的极短微振动物理触觉反馈。
|
||||
|
||||
---
|
||||
|
||||
## 2. 振动模式设计 (周期 5 秒)
|
||||
## 2. 接口与函数说明
|
||||
|
||||
* **按键操作反馈**:1 次极短振动 50ms。
|
||||
* **门磁/窗磁 (PORTE)**:1 次短振 300ms。
|
||||
* **PIR 红外 (PIR)**:2 次短振 300ms (间隔 200ms)。
|
||||
* **烟雾传感器 (FUMEE)**:3 次短振 200ms (间隔 150ms)。
|
||||
* **紧急按钮 (URGENCE)**:1 次长振 800ms。
|
||||
* **气体泄漏 (GAZ)**:4 次短振 200ms (间隔 100ms)。
|
||||
* **水浸传感器 (INOND.)**:2 次长振 600ms (间隔 300ms)。
|
||||
* **振动传感器 (VIBRA.)**:连续 3 次极短振动 150ms (间隔 100ms)。
|
||||
* **本地主动 SOS**:持续间歇重度长振(振 1000ms,停 200ms 循环)。
|
||||
|
||||
---
|
||||
|
||||
## 3. 接口与函数说明
|
||||
|
||||
* `void Motor_Init(void)`:配置引脚 `P2.5` 的 `P2M1=0x00`, `P2M0=0x20`(推挽输出),默认输出 `MOTOR = 0`。
|
||||
* `void Motor_Set_State(bit state)`:硬开关控制引脚 `P2.5` 的电平。
|
||||
* `void Motor_Start_Pattern(u8 pattern_type)`:装载对应类型的马达振动计数器,开启异步振动状态机。
|
||||
* `void Motor_Init(void)`:配置 Pin 25 (`P2.4` / MOTOR_PWM) 为推挽输出,默认输出 `MOTOR_PWM = 0`。
|
||||
* `void Motor_Start_Pattern(u8 pattern_type)`:传入震动节奏类型(按键微振/各防区警报震动/主动SOS循环震),装载维持时间片,开启异步状态机。
|
||||
* `void Motor_Pulse_Process(void)`:
|
||||
在 Timer 1 的 10ms 中断分频中被调用:
|
||||
* 根据装载的波形,扣减当前阶段维持的毫秒数。
|
||||
* 当计数器归零时,切换 `MOTOR` 引脚电平并转入下一个电平维持段。
|
||||
* `void Motor_Stop(void)`:清空所有计数器,拉低 `MOTOR = 0`,强行中止当前振动。
|
||||
在 Timer1 的 10ms 中断分频中被调度调用。
|
||||
* 如果当前处于震动维持段,扣减 `motor_timer_ms` 计数器。
|
||||
* 计数归零时,反转物理引脚 `MOTOR_PWM` 的电平,并装填下一阶段所需维持的毫秒数。
|
||||
* `void Motor_Stop(void)`:强行清空所有震动计数器,并拉低引脚电平使其停止震动。
|
||||
|
||||
<!-- Checked and verified with SGM3833 boost/inverting PMIC removal and LCD_PWR_CTRL update changes V2 -->
|
||||
|
||||
Reference in New Issue
Block a user