基于STM32的智能风扇设计

1、设计目的

    我所设计的基于STM32的PWM温控风扇的设计旨在实现一个智能的风扇控制系统,能够根据环境温度自动调节风扇转速,以保持稳定的温度。通过STM32微控制器的高性能和PWM输出功能,可以精确控制风扇的转速,提高系统的能效和稳定性。此设计旨在提供一个可靠的解决方案,以确保设备在高温环境下能够有效散热,并在低温环境下节约能源。通过温度传感器实时监测环境温度并与预设的温度阈值比较,系统可以自动调节PWM信号,实现风扇转速的动态控制。这个设计旨在结合硬件和软件的优势,实现高效、智能的风扇温控系统。

这个基于STM32的PWM温控风扇设计的好处包括:

1. 节能环保:风扇能根据实际需求调节转速,避免不必要的能耗,提高能效,降低能源消耗,有利于节能环保。

2. 温度稳定:通过智能温控系统,能够及时调节风扇转速,保持设备在合适的温度范围内工作,延长设备寿命,提高稳定性。

3. 自动化控制:系统能够实时监测环境温度并自动调节风扇转速,无需人工干预,提高了系统的自动化程度,减轻了用户负担。

4. 精准控制:借助STM32微控制器的高性能和PWM输出功能,能够实现对风扇转速的精准控制,提高系统的响应速度和稳定性。

5. 提升用户体验:设计合理的温控风扇系统能够提升用户体验,使设备在各种环境下都能保持良好的工作状态,减少故障风险,提高用户满意度。

2、设计任务

(1)LCD1602液晶显示当前温度,风扇等级,自动手动模式。

(2)按键可以设置自动和手动2种模式切换,按键设置温度上限。

(3)手动模式下可以自由开启风扇,调整档位等级。

(4)自动模式下,人体红外检测到人并且当前温度大于我们设置温度上限值风扇开启。

(5)每大于一度风扇档位pwm加一,最大上限为10档。

3、原理框图及说明

该设计采用stm32F103C8T6核心板进行设计,共有按键模块、温度感应模块(ds18b20)、红外感应模块(DYP-ME003)、lcd1602驱动模块、以及pwm脉冲电机模块组成。

 本次设计采用STM32单片机做主控芯片,通过DS18B20采集温度,将温度显示在 LCD1602上。通过人体传感器检测周围是否有人存在,并根据温度的不同,利用STM32对风扇进行调速。LCD1602液晶显示当前温度,风扇等级,自动手动模式。按键可以设置自动和手动2种模式切换,按键设置温度上限。手动模式下可以自由开启风扇,调整档位等级。自动模式下,人体红外检测到人并且当前温度大于我们设置温度上限值风扇开启。每大于一度风扇档位pwm加一,最大上限为4档。

硬件部分设计思路:

  1. 按键部分

按键部分代码主要包括了按键的初始化函数`KEY_Init()`和按键的处理函数`KEY_Scan()`。

按键初始化函数 `KEY_Init()`思路如下:

1. 配置`PA15`和`PC5`为输入模式。

2. 启用`PORTA`和`PORTC`的时钟。

3. 关闭`JTAG`,启用`SWD`模式调试。

4. 配置`PB12`、`PB13`和`PB14`为上拉输入。

5. 配置`PA11`为下拉输入。

6. 配置`PB8`和`PB9`为推挽输出,并初始化为低电平。

按键处理函数 `KEY_Scan(mode)`思路如下:

1. 检测按键是否按下,并进行去抖动处理

2. 根据按键的状态返回相应的值:

   - 如果`KEY0`被按下,返回1;

   - 如果`KEY1`被按下,返回2;

   - 如果`KEY2`被按下,返回3。

3. 如果不支持连续按键或者按键已经松开,则返回0表示没有按键按下。

  1. LCD1602部分

LCD1602部分的代码是针对LCD1602液晶显示屏的驱动程序,包括了一些基本的功能函数和初始化函数。下面是对其中几个函数的简要解释:

1. `LCD_Check_Busy()`: 检查LCD是否忙碌的函数。

2. `LCD_Write_Com(unsigned char com)`: 向LCD写入命令的函数。

3. `LCD_Write_Data(unsigned char Data)`: 向LCD写入数据的函数。

4. `LCD_Write_String(unsigned char x, unsigned char y, unsigned char *s)`: 向LCD写入字符串的函数,根据`x`和`y`定位光标位置。

5. `LCD_Write_Char(unsigned char x, unsigned char y, unsigned char Data)`: 向LCD写入字符的函数,根据`x`和`y`定位光标位置。

6. `LCD1602_write_long(unsigned char x, unsigned char y, u32 data, unsigned char num)`: 向LCD写入长整型数据的函数。

7. `LCD_Clear()`: 清屏函数,清除LCD上的内容。

8. `LCD_Init()`: LCD初始化函数,包括一系列初始化命令的发送。

具体的代码在附录中。

  1. ds18b20部分

ds18b20部分的代码是针对DS18B20温度传感器的驱动程序,包括了一些基本的功能函数和初始化函数。下面是对其中几个函数的简要解释:

1. `DS18B20_Rst()`: 复位DS18B20传感器。

2. `DS18B20_Check()`: 检测DS18B20传感器是否存在。

3. `DS18B20_Read_Bit()`: 从DS18B20传感器读取一个位。

4. `DS18B20_Read_Byte()`: 从DS18B20传感器读取一个字节。

5. `DS18B20_Write_Byte(u8 dat)`: 向DS18B20传感器写入一个字节。

6. `DS18B20_Start()`: 开始温度转换。

7. `DS18B20_Init()`: 初始化DS18B20传感器的IO口,并检测传感器是否存在。

8. `DS18B20_Get_Temp()`: 从DS18B20传感器获取温度值,精度为0.1摄氏度,返回一个短整型温度值。

主程序部分设计思路:

    主程序部分分为一下几个步骤:

1. 宏定义:

   定义了不同档位的风扇转速,以及初始的温度上限值、PWM值和自动控制标志位。

2. display_Max() 函数:

   用于在LCD上显示当前的温度上限值。

3. keyscan() 函数:

   通过按键扫描获取按键值,实现打开/关闭风扇、调整温度上限值的功能,并在LCD上显示相应信息。

4. temp_dispose() 函数:

   根据当前温度值和设定的温度上限值,调整风扇的转速档位,并在LCD上显示当前档位信息。

5. main() 函数:

   初始化各模块(延时、LCD、按键、温度传感器、定时器等)。

   进入主循环,其中:

     通过按键扫描更新温度上限值和风扇状态。

     定时读取温度传感器的温度值,根据温度值控制风扇的转速。

     在自动模式下,根据温度值和人体感应状态控制风扇的转速。

     在手动模式下,保持风扇关闭状态。

运行起来大致流程如下:

首先进行初始化操作。在初始化阶段,会依次执行以下步骤:

1. DS18B20 初始化:

   在LCD上显示"DS18B20 Init...",用于提示初始化过程。

   初始化 DS18B20 温度传感器,确保能够正确读取温度数值。

2. LCD 显示初始化:

   在LCD上显示初始信息,包括当前温度值、人体感应状态、自动控制标志位和风扇档位。

 

3. 定时器初始化:

   初始化定时器 TIM3,设置定时器中断频率为10kHz,定时器计数周期为100us。这个定时器用于控制延时和定时操作。

4. 自动控制标志位初始化:

   根据自动控制标志位 `Auto_flag` 的状态,在LCD上显示风扇是否处于开启状态。

初始化完成后,程序进入主循环。主循环中的操作如下:

1. 按键扫描:

   检测是否有按键按下,根据按键的不同操作更新相应的状态(如风扇状态、温度上限值等)。

2. 温度读取和显示:

   通过 DS18B20 温度传感器读取当前温度值。

   在LCD上显示当前温度值的百位和十位数字,包括负号处理。

 

3. 风扇控制:

   根据自动控制标志位 `Auto_flag` 的状态,进行不同的风扇控制操作:

     若为开启状态,根据人体感应状态 `RTHW` 和温度值调节风扇转速。

     若为关闭状态,将风扇转速设为最低档位。

4. 延时操作:

   每次循环结束后进行1ms的延时操作,确保主循环的稳定运行。

  • 19
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rose不调零

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值