基于FreeRTOS和STM32的微波炉

一、项目简介

使用STM32F103C8T6、舵机、继电器、加热片、蜂鸣器、两个按键、LCD及DHT11传感器等硬件。进一步,结合FreeRTOS和状态机等软件实现了一个微波炉系统;实现的功能包含:人机交互、时间及功率设置、异常情况处理及固件升级等。

二、功能需求

(一)、初始状态

1、当STM32初始化后,LCD显示LCD屏幕显示欢迎界面(例如"Microwave Demo V1.1"),持续2秒后进入待机模式;

2、LED状态:腔体内部LED灯常亮(模拟门未关闭时的照明);

3、舵机状态:SG90舵机处于"开门"位置(角度0°,门锁未闭合)。

(二)、用户操作流程

1、用户手动关闭门,第一次按下按键KEY1关门,舵机旋转90°代表关闭,此时LED灯灭;

2、LCD显示默认时间和加热功率挡位:倒计时为0s;功率挡位为Medium;

3、用户短按KEY2开始设置倒计时,此时LCD打印"time setting",然后通过再次短按

KEY2循环切换倒计时打印在LCD屏幕上,短按一次加20s,最大为60s;设置好时间后长按 KEY2切换功率设置,此时LCD打印"Power setting",然后通过短按KEY2循环切换加热挡位 打印在LCD屏上(low/medium/high可选择),之后继续长按KEY2,又切换到"time setting"。

4、选择好时间及挡位后启动加热:

(1)长按KEY1启动加热,此时PWM开始控制加热片;

(2)转盘(用360°sg90舵机模拟)以恒定速度旋转;

(3)蜂鸣器短鸣两声"滴滴"代表开始运行;

(4)倒计时启动打印在LCD上;

(5)用DHT11实时显示温度在LCD上;

(6)LCD显示状态"Heating"表示正在加热。

5、加热完成

(1)倒计时归零,PTC加热片断电;

(2)转盘停止旋转;

(3)蜂鸣器短鸣三声"滴滴滴"代表结束;

(4)打印时间及温度在LCD上;

(5)打印"completed"状态在LCD上。

6、当第5步加热完成之后,门自动打开,此时LED灯亮;LCD显示默认时间设置及挡位设置。

(三)、异常情况处理流程

1、加热过程中断情况:

(1)当加热过程中,用户按下KEY1开门,此时加热片断电,转盘停止,LED灯亮起;

(2)倒计时暂停在LCD屏上,并且显示"Heating stopped!";

2、恢复加热:

(1)用户按下KEY1关闭门,LED灯熄灭,需再次长按KEY1才能启动加热操作并且继续倒计时。

3、温度过高:

(1)DHT11监测温度超过设定阈值,此时加热片断电,转盘停止,LED灯亮起,门自动打开;

(2)蜂鸣器短鸣四声"滴滴滴滴";

(3)LCD打印"Heating stopped!"。

4、门未关闭时启动:

(1)蜂鸣器短鸣一声,加热片和转盘不工作;

(2)LCD屏打印"Close door first"。

(四)、固件更新功能

(1)通过串口加DMA接收APP升级程序;

(2)编写Bootloader任务,将APP程序从RAM写到Flash上;

(3)设置SP及PC寄存器,重定向中断向量表;

(4)跳转到APP程序执行。

三、软件架构

四、硬件接线图

五、硬件设计

1、180°舵机驱动

舵机的控制通常要求约20ms的参考脉冲,其高电平区间通常为0.5-2.5毫秒,其总间距为2ms。而1.5ms转90度,因此也就是需要百分之五的占空比转90度,其舵机转动角度与脉冲宽度关系如图所示:

2、360°舵机驱动

其他硬件比较简单,不再过多叙述。

六、软件设计

设计亮点如下:

(1)使用面向对象思想编写BSP,方便移植以及维护,使用户仅关心接口而无需在意底层实现细节。

(2)使用状态机来实现两个按键的多功能切换需求。

(3)移植FreeRTOS源码并进行内核裁剪以适应STM32F103C8T6单片机。

(4)使用二值信号量完成多任务之间同步与通信。

(5)使用串口加DMA接收APP程序,减轻CPU负担。

(6)编写Bootloader任务,跳转到APP程序后实现固件升级。

(7)编写按键检测算法来识别长按/短按。

七、源代码

以下仅展示内核裁剪的程序,完整源程序请查看笔者其他帖子进行获取**。**

八、调试记录

1、程序下载进去时发生HardFault,调试一看是进入定时器中断了,说明TIM_Cmd(TIM2,DISABLE)函数不能关闭中断,仅能将定时器的计数器关闭,只能关闭中断自动触发功能,但未完全关闭中断,需要调用TIM_ITConfig(TIM2,TIM_IT_Update,DISABLE)函数才能完全关闭掉。重新启用时也需要再次调用该函数打开中断。

2、当倒计时归零正常结束烹饪时,此时门会自动弹开,但是如果你现在再次短按KEY1,不会发生关门响应,这是因为没有对门状态复位。

3、由于我使用了TIM2的中断以及两路PWM,但是我设置TIM2中断频率与TIM2的PWM频率不一致,这导致PWM无法工作,造成冲突;因此,将TIM2中断换成TIM4中断,问题解决!

九、实物演示

IAP

基于FreeRTOS的微波炉

相关推荐
△曉風殘月〆5 小时前
C#串口通信
嵌入式硬件·c#·串口
我不是帅戈9 小时前
STM32+安信可Ai-WB2-12F连接阿里云物联网平台
stm32·物联网·阿里云·云计算·安信可
教练、我想打篮球9 小时前
04 基于 STM32 的时钟展示程序
stm32·单片机·嵌入式硬件
大鱼YY9 小时前
STM32系统定时器以及微秒延时函数分析
stm32·滴答定时器
芯岭技术10 小时前
普冉MS32C001单片机,国产32位单片机,芯片特性和功能介绍
单片机·嵌入式硬件
吃货界的硬件攻城狮12 小时前
【STM32 学习笔记】ADC数模转换器
笔记·stm32·单片机·学习
小昭dedug15 小时前
功能安全的关键——MCU锁步核技术全解析(含真实应用方案)
单片机·嵌入式硬件
负里5516 小时前
STM32-模电
嵌入式硬件
BW.SU16 小时前
单片机 + 图像处理芯片 + TFT彩屏 指示灯控件
单片机·嵌入式硬件·人机交互·控件·触摸屏设计·指示灯·液晶屏
newtonltr17 小时前
CANopen TPDO 配置详解:对象 1800h、1A00h 与实践指南
stm32·canopen