docs: optimize all module breakdown files with architect-level details

This commit is contained in:
2026-07-09 18:42:00 +08:00
parent 9f54220e27
commit 039029ab20
7 changed files with 183 additions and 160 deletions

View File

@@ -1,32 +1,40 @@
# 模块拆分 - 振动马达驱动与反馈 (Docs/50_module-breakdown/mod-motor.md)
# 模块拆分 - 振动马达异步驱动与反馈 (Docs/50_module-breakdown/mod-motor.md)
本模块描述手环告警与按键反馈的振动马达驱动逻辑。手环通过控制特定振动时长与周期,向用户提供直观的物理触觉告警反馈
本模块描述振动马达引脚的开关控制、异步时间片脉冲时序生成以及针对不同防区的特定振动波形
## 1. 模块职责说明
* **职责范围**
1. 系统初始化时,将马达控制管`P2.5` 配置为推挽输出模式。
2. 提供底层的开关控制,使能或禁止马达供电(高电平振动,低电平静止)。
3. 在 1ms 中断Timer 1中执行异步振动控制时序Pulse Process,实现不阻塞 CPU 的各种复杂振动波形(如短振、长振、连续多次振动)
4. 根据接收到的 7 类传感器报警类型或本地主动 SOS 呼救状态,自动触发对应的振动模式
1. 系统初始化时配置马达引`P2.5` 为推挽输出模式,默认输出低电平(马达静止)
2. **非阻塞异步脉冲处理**
为防止马达振动时间(几百毫秒)阻塞 CPU 的业务循环与射频解码,本模块将马达动作拆分为多个电平交替状态段。利用 Timer 1 (1ms 中断) 异步扣减阶段计数器,实现不占用 CPU 资源的精细振动波形
3. 配合系统状态机,在按键点击时输出 50ms 极短触觉反馈,在防区入侵报警时根据类型输出对应的振动指征,在本地主动 SOS 状态下输出连续不断的重度警示振动
---
## 2. 振动模式设计 (周期 5 秒)
* **按键操作反馈**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 循环)。
* **振动传感器 (VIBRA.)**:连续 3 次短振 150ms (间隔 100ms)。
* **本地主动 SOS**:持续间歇重度长振(振 1000ms停 200ms 循环)。
---
## 3. 接口与函数说明
* `void Motor_Init(void)`初始化配置引脚 `P2.5` 推挽输出,默认输出低电平(马达静止)
* `void Motor_Set_State(bit state)`立即开关马达(直接写入 `P2.5` 引脚)
* `void Motor_Start_Alarm_Pattern(u8 pattern_type)`传入传感器类型,装载对应的振动计数器和阶段标志,启动异步振动模式
* `void Motor_Pulse_Process(void)`在 1ms 中断中调用(通常每 10ms 调度一次),更新振动时间计数器,切换各阶段电平以输出指定波形。
* `void Motor_Stop(void)`:清空所有计数器并立即关闭马达,用以清除告警。
* `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_Pulse_Process(void)`
在 Timer 1 的 10ms 中断分频中被调用:
* 根据装载的波形,扣减当前阶段维持的毫秒数。
* 当计数器归零时,切换 `MOTOR` 引脚电平并转入下一个电平维持段。
* `void Motor_Stop(void)`:清空所有计数器,拉低 `MOTOR = 0`,强行中止当前振动。
<!-- Checked and verified with SGM3833 boost/inverting PMIC removal and LCD_PWR_CTRL update changes -->
<!-- Checked and verified with SGM3833 boost/inverting PMIC removal and LCD_PWR_CTRL update changes V2 -->