基于STM32的多功能温控风扇设计
2021-10-25杨秀秀晏菁
杨秀秀,晏菁
(安徽师范大学,安徽芜湖,241000)
0 引言
1880 年,第一台电风扇诞生。为适应更加人性化的要求,以及科技发展的支持,电风扇已经进行了多次改进,目前市场上最常见的一种风扇可通过按键或遥控器手动进行不同风速的选择,此种风扇在使用者处于睡眠状态时,不能根据温度的变化及时进行调速,不能使用户处于最舒适的状态;且当温度下降时,转速依旧处于固定设置值,造成电能资源的浪费。为解决这一问题,本系统设计了一种可根据环境温度及时改变风扇转速的温控调速程序,同时为风扇添加显示模块,实时显示环境温度、日期、时间、转速高低等信息,方便用户使用[1]-[2]。
1 整体系统设计
基于STM32的多功能温控风扇,其系统结构框图如图1所示。其主要由微控制器、温度检测模块、人机交互模块、执行模块和电源构成;整个系统采用5V 电源进行供电。微控制器从温度检测模块读取温度,用户可通过人机交互模块对执行模块的状态进行了解和控制。
图1 硬件系统结构图
2 硬件系统设计
2.1 微控制器
本系统使用以Cortex-M4 为内核的STM32F407ZGT6 芯片作为微控制器,该芯片具有1MB的FLASH 容量、112 个通用IO 口、1 个可变静态存储控制器FSMC(Flexible Static Memory Controller)接口、1 个实时时钟(RTC)等众多资源。其中FSMC 接口为STM32 系列采用的新型的存储器扩展技术,能够满足不同类型的静态存储扩展[3]。STM32的RTC 可自动进行月份天数和夏令时的补偿,为时间的显示提供了极大的方便[4]。根据本设计需要实现的功能,核心板电路包括供电接口、复位电路、后备电池接口、IO 扩展接口、JTAG/SWD 接口等外围电路。供电接口为整个核心板提供电源;复位电路包括上电复位和按键复位;后备电池使用CR1220 纽扣电池,在核心板断电时为实时时钟提供电源;IO 扩展接口方便使用杜邦线接入外部设备;JTAG/SWD 接口支持仿真器接入进行调试和程序下载到开发板。
2.2 温度检测模块
温度检测使用DS18B20 数字化温度传感器,具有“一线总线”接口,抗干扰能力强,其测量范围从-55℃至+125℃,精度可达±0.5℃,工作电压在3V 至5.5V 范围内。本设计选择直插型封装,3 个引脚分别为GND、DQ 和VCC,硬件电路设计如图2 所示,VCC 和GND 两脚给器件提供电源回路,供电端接入0.1uf 电容进行滤波,DQ 为数据通信引脚,串联一电阻到VCC,为DQ 管脚提供静态偏置,再连接到单片机的PG9 引脚,使用PG9 对器件进行写入或读取操作[5]。
图2 DS18B20 硬件电路
2.3 人机交互模块
人工交互模块主要由独立按键和TFT_LCD 彩屏液晶屏构成。4 个独立按键key0,key1,key2,key3 一端分别连接到单片机的PE4,PE3,PE2,PA0 上,一端接地,故而独立按键属于低电平有效。独立按键未接上拉电阻,采用MCU 配置相应IO 口为上拉模式,简化硬件电路设计。人机界面采用ST7735S 驱动的1.8 寸TFT_LCD 显示屏,3.3V 供电;屏幕分辨率为128RGB*160,采用4 线SPI 接口。模块共有8 个管脚,分别连接到STM32的FSMC 接口[6],各引脚说明如表1 所示。
2.4 执行模块
本设计的执行模块为L9110 驱动的电机风扇模块。由于STM32 引脚输出的驱动电流不足以驱动电机转动,为达到使用引脚输出的PWM 波驱动电机转动的目的,外加两通道推挽式功率放大专用集成电路器件L9110,其每个通道能通过的持续电流可达800mA,峰值电流高达1.5A,两路输出可直接驱动电机正转或反转。芯片内置箝位二极管,可释放感性负载(电机)的反向冲击电流,防止损坏微控制器。由于本设计不必区分正转与反转,L9110的两路控制信号一路接低电平,一路接STM32的PE6 引脚,通过改变此脚输出PWM 波的占空比控制风扇风速。此模块的供电电压为5V。
3 软件系统设计
软件系统设计使用uVision5 IDE 集成开发环境,代码编写使用C 语言,程序搭建采用库函数版本。主函数流程图如图3 所示,包括系统和各硬件模块的初始化、LCD 显示、按键扫描、电机转速控制等函数功能。
图3 主程序流程图
3.1 RTC 时钟显示程序
时间和日期的显示通过读取STM32的内部实时时钟来完成,RTC 模块和时钟的配置是在后备寄存器,在保证后备供电不断电的情况下,不受复位影响,数据不丢失。本设计配置时间为24 小时制,选择32.768Khz的外部时钟源LSE 作为RTC 时钟源,RTC 要求提供1Hz的时钟,程序中需配置RTC的可编程预分配器来实现,包括对一个7 位异步分频器和一个15 位同步预分频器的配置,RTC 时钟的计算由公式(1)求得:
式中Fck_spre 为RTC 时钟频率;PREDIV_A 为RTC的异步分频器;PREDIV_S 为RTC的异步分频器。由式(1)可知对两个分频器的配置并不唯一,考虑到最大程度降低功耗,本设计选择配置异步预分频器为最大值,即PREDIV_A=0X7F,则PREDIV_S=0XFF。时间和日期数据以BCD 码的形式存储在寄存器中,为得到正确数据需进行BCD 码到十进制的转换。
3.2 温控调速程序
温控调速的具体实现流程框图如图4 所示,使用循环结构,对DS18B20 读取的温度不断进行判断选择输出占空比不同的PWM 波,其中阈值1的优先级高于阈值2的优先级高于阈值3的优先级,在数值上满足:阈值1>阈值2>阈值3。
图4 温控调速流程图
PWM(Pulse Width Modulation),即脉冲宽度调制,利用数字输出对模拟电路进行控制。STM32F4 具有12 个16 位定时器和2 个32 位定时器,其中除了TIM6 和TIM7,其他均可产生PWM[7-9]。本设计配置PE6 脚复用为定时器功能,使用TIM9 产生调速信号。PWM的频率由自动重装载寄存器TIM9_ARR 和预分频器寄存器TIM9_PSC的数值确定,边沿对齐模式下,PWM的具体频率计算由式(2)求得:
式中,TIM_CLK 为定时器时钟,PSC 为定时器的预分频系数,ARR 为自动重装载值。计数器时钟源选择为内部时钟,TIM9的时钟来自APB2,内部时钟为APB2 倍频所得,为168MHz,PSC 设置为167,ARR 设置为499,由公式(2)可计算得PWM 波的频率为2KHz。本设计使用TIM9的通道2 产生PWM 信号,PWM 模式设置为模式一,计数模式选择向上计数,有效输出极性设为高,其占空比由比较/捕获寄存器TIM9_CCR2的值确定,当计数器寄存器TIM9_CNT 中的值小于TIM9_CCR2 中的值时,IO 输出高电平。PWM 原理的示意图如图5:
4 设计结果
经过具体的实物验证,基于STM32的多功能温控风扇最终可实现以下功能:
(1)在LCD 上实时显示温度、风扇转速高低、时间、日期等信息;
(2)按键选择风扇的四种工作模式:
风扇工作模式一:按键key0 控制风扇低速转动;
风扇工作模式二:按键key1 控制风扇高速转动;
风扇工作模式三:按键key2 使风扇工作在温控状态:当温度超过设定阈值1 时,风扇自动以高速转动,当温度超过设定阈值2 时,风扇自动以低速运动,当温度低于设置阈值3时,风扇自动停止转动;
风扇工作模式四:按键key3 控制风扇停止转动。
本系统使用器件成本较低,操作简单,可根据环境温度改变风速,有效节约电能,同时加入温度和时间显示功能,改善用户体验。根据本设计的技术,可进一步完善风扇的功能,如添加更多风速设置、在时钟显示的基础上添加定时和闹钟功能等,从生活需求和社会经济看,具有一定的发展优势。