Files
stc32g128k/Docs/50_module-breakdown/mod-motor.md

41 lines
2.4 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.

# 模块拆分 - 振动马达异步驱动与反馈 (Docs/50_module-breakdown/mod-motor.md)
本模块描述振动马达引脚的开关控制、异步时间片脉冲时序生成以及针对不同防区的特定振动波形。
## 1. 模块职责说明
* **职责范围**
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 循环)。
---
## 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_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 V2 -->