之前几篇完成OLED驱动、INA219采集电路功率信息、电机过流自锁、串口控制电机功能。
【Let'sdo2025年第1期】功率监测与控制系统DIY活动开箱帖和单片机时基准确性检测
【Let'sdo2025年第1期】功率监测与控制系统DIY活动基础任务——OLED屏幕显示信息
【Let'sdo2025年第1期】功率监测与控制系统DIY活动基础任务——INA219读取功率信息
【Let'sdo2025年第1期】功率监测与控制系统DIY活动进阶任务,串口控制电机工作
在此基础上,通过添加额外的过流后计时检测功能,实现电机的打嗝功能,即在电机过流后,等待一段时间重新启动电机。
# 打嗝模式实现
在电机过载后,获取当前MCU的Tick时钟信息,作为计时参考,并设定计时检测标记,开始计时。
if(CTR_Mode == Hiccup_Mode) { if(Power_Info.current >=Power_Info.Cur_Threshold) { HAL_GPIO_WritePin(Relay_GPIO_Port,Relay_Pin,GPIO_PIN_RESET); OverCurrent_Flag = 1; Hiccup_Signal=Hiccup_Start; Hiccup_Time = HAL_GetTick(); printf("Hiccup_Mode Current Overflow!\r\n"); } }
后续检测计时是否完成,设置相应的标志变量。
while(1) { if((HAL_GetTick()-Hiccup_Time)>=3000 && Hiccup_Signal==Hiccup_Start && CTR_Mode==Hiccup_Mode) { Hiccup_Signal = Hiccup_Finish; Hiccup_Time = HAL_GetTick(); } ...//其余控制代码 }
当计时超过设定值时,重新接通电路运转电机。
if(CTR_Mode == Hiccup_Mode) { ... if(Hiccup_Signal == Hiccup_Finish && OverCurrent_Flag ==1) { Hiccup_Signal=Hiccup_Start; OverCurrent_Flag=0; if(Can_Run_Status==1) { HAL_GPIO_WritePin(Relay_GPIO_Port,Relay_Pin,GPIO_PIN_SET); HAL_Delay(1000); } printf("Hiccup Overflow Release!\r\n"); } }
通过对电机过流后的时间计时即可完成打嗝功能。
打嗝效果演示视频如下
https://www.bilibili.com/video/BV1PzTezgEjj/?vd_source=c3c72f263ba4f17695f3ce613d1d0024
# 总结
这次DIY使用STM32F411RE搭配OLED、INA219实现对电机功率的检测和过流控制,项目对系统的响应要求高,对代码的执行效率的要求高,在开发过程中,使用现有的u8g2显示库和INA219驱动库虽然方便,但在代码执行效率上有延迟,对于电机类的应用,实时性的要求更高,这或许也是电机类的产品开发的难点。
通过这次活动,搭建电机功率检测的模型,对电机过流的应用原理有了解,是一期很不错的活动,期待下一期活动能带来更多的惊喜。