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

2.4 KiB
Raw Blame History

模块拆分 - 振动马达异步驱动与反馈 (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.5P2M1=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,强行中止当前振动。