前言
最近做了一个电动窗帘的控制工程。简单点说就是实现电动窗帘的校准模式,窗帘移动到任意位置。
说明:
本文档为原创,转载请注明出处,要进行商业合作请联系本人1151313194@qq.com。
软件架构
软件架构如图:
软件编程思想参考硬件框图,由以下软件模块构成:
2.1 驱动模块
程序:DC_Motor_driver.c
功能:电机正反转,调速
<1> 4路MOS桥电路
<2> 1路MOS+1路单刀双置开关
2.2 Sensor单元:
程序:DC_Motor_hall.c
功能:电机测速、正反转判断、距离测量
2.3 安全监测
程序:DC_Motor_Security.c
功能:电流监测(目前未完成)、堵转监测
2.4 正反转堵转监测库
程序:DC_Motor_stall_lib.c
功能:正转卡死检测,反转卡死检测,任意位置卡死检测。
2.5窗帘
程序:Curtain.c
功能:窗帘工作模式的 具体实现,所有窗帘都具有的功能。实现窗帘校对功能,窗帘开关,指定长度开(0-100)
2.6杜亚窗帘
程序:Curtain_duya.c
功能:杜亚窗帘的功能接口
2.7用户指令接口
程序:bsp_usart.c
功能:解析串口指令,执行窗帘动作。
MCU软件资源需求
MCU软件资源需求:
<1 >外部中断的边沿触发(HALL信号)要能被快速执行,原因是HALL做位置检测,要保证实时性。
<2> 大while循环里面的窗帘任务循环在待机模式下可以1s执行一次,但是在窗帘动作的时候,由于要做位置检测,要保证至少10ms执行一次。
目前该demo基于STM32G431,是基于STM32CubeMX软件生成的标准工程,占用的ram大概1.7K,flask 24.3K,实际窗帘电机的资源小于该数值。