你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】基于STM32的pwm温度风扇(带人体检测)

[复制链接]
STMCU小助手 发布时间:2022-5-12 11:04
一.硬件方案
本次设计采用STM32单片机做主控芯片,通过DS18B20采集温度,将温度显示在 LCD1602上。通过人体传感器检测周围是否有人存在,并根据温度的不同,利用STM32对风扇进行调速。
主要由STM32单片机+LCD1602液晶显示+DS18B20温度采集+按键设置电路+PWM风扇+人体红外检测;如图:

A0)JG2BC]BH7]L4DS`3DFSO.png

二.设计功能
(1)LCD1602液晶显示当前温度,风扇等级,自动手动模式。
(2)按键可以设置自动和手动2种模式切换,按键设置温度上限。
(3)手动模式下可以自由开启风扇,调整档位等级。
(4)自动模式下,人体红外检测到人并且当前温度大于我们设置温度上限值风扇开启。
(5)每大于一度风扇档位pwm加一,最大上限为10档。

三.设计原理图
(1)原理图主要采用AD软件进行设计,如图:

]AU~`2KX6EAWYNU)(C4CDH5.png

(2)PCB图如下:

H066}FFXOON$FG@XI1)RVUS.png

四.软件设计
(1)程序流程图

2]}KQ0VN%(E413DC8JUJQDR.png

(2)主程序源码

  1. int main(void)
  2. {               
  3.           u8 count = 0;
  4.         
  5.           Motor = 0;
  6.                 delay_init();                     //延时函数初始化         
  7.                 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  8.                 delay_ms(500);
  9.           LCD_Init();//1602初始化
  10.           KEY_Init();//按键初始化
  11.                 while(DS18B20_Init())//温度初始化
  12.                 {
  13.                                 LCD_Write_String(0,0,"  DS18B20 Erro  ");
  14.                                 LCD_Write_String(0,1,"                ");
  15.                 }
  16.                 DS18B20_Get_Temp();//温度初始化
  17.                 LCD_Write_String(0,0," DS18B20 Init...");
  18.                 delay_ms(1000);
  19.                 LCD_Write_String(0,0,"Temp:   C  M:  C");
  20.           LCD_Write_String(0,1,"Auto:    Gear:  ");
  21.                 TIM3_Int_Init(1,7199);//10kh频率计数,定时100us
  22.                 if(Auto_flag == 1)
  23.                         LCD_Write_String(5,1,"on ");
  24.                 else
  25.                         LCD_Write_String(5,1,"off");
  26.                 display_Max();
  27.                
  28.                 while(1)
  29.                 {
  30.                           keyscan();//按键扫描
  31.                           if(count++ >= 200)//延时一段时间读取温度
  32.                                 {
  33.                                                 count = 0;
  34.                                                 temperature = DS18B20_Get_Temp();//获取温度
  35.                                                 if(temperature<0)
  36.                                                 {
  37.                                                         LCD_Write_Char(5,0,'-');                        //显示负号
  38.                                                         temperature=-temperature;                                        //转为正数
  39.                                                 }else LCD_Write_Char(5,0,' ');                        //去掉负号
  40.                                                 
  41.                                                 //显示温度
  42.                                                 LCD_Write_Char(6,0,temperature/100+'0');
  43.                                                 LCD_Write_Char(7,0,temperature%100/10+'0');
  44.                                                 
  45.                                                 if(Auto_flag == 1)//在开启模式下,感应到有人,并且温度超过上限开启风扇
  46.                                                 {
  47.                                                           if(RTHW == 1)//感应到有人
  48.                                                                 {
  49.                                                                                 temp_dispose(temperature/10);//根据温度进行pwm调节
  50.                                                                 }
  51.                                                                 else//没感应到有人,关闭风扇
  52.                                                                 {
  53.                                                                           PWM_Val = 100;
  54.                                                                                 Motor = 0;
  55.                                                                           LCD_Write_String(14,1,"--");
  56.                                                                 }
  57.                                                 }
  58.                                                 else//关闭风扇
  59.                                                 {
  60.                                                           PWM_Val = 100;
  61.                                                                 Motor = 0;
  62.                                                                 LCD_Write_String(14,1,"--");
  63.                                                 }
  64.                                 }
  65.                                 delay_ms(1);
  66.                 }
  67. }
复制代码



收藏 评论0 发布时间:2022-5-12 11:04

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版