STM32单片机智能温控风扇设计简介

发布时间:2023-09-13  

一、功能简介


本项目使用Proteus8仿真STM32单片机控制器,使用LCD1602液晶、按键、蜂鸣器、L298N电机驱动模块、直流电机、DS18B20温度传感器等。



系统功能:


系统运行后,LCD1602显示传感器检测的温度值;默认以自动模式运行,若按下K4键切换为手动模式,此时可以通过K1和K2控制风扇加减速,风扇档位共5档(0-5)。当再次按下K4键切换为自动模式;自动模式下,实时检测温度值,当温度高于上限且在2C范围内,以3档运行。当温度高于上限且在4C范围内,以4档运行。当温度高于上限且在6C范围内,以5挡运行。当温度高于上限且超过6C范围,以5档运行且蜂鸣器报警。若温度在上下限范围内,风扇以2档运行。若温度低于下限,风扇停止。可通过K3键进入阈值设置,K1和K2调节。


主要功能如下:


(1)温度检测与LCD显示;


(2)超上限温度越高风扇越快;


(3)低下限风扇停止;


(4)温度阈值设置;


(5)超限报警。


二、软件设计


//系统初始界面显示


void sys_open_show(void)


{


lcd1602_clear();


lcd1602_show_string(0,0,"Tp: C");


lcd1602_show_string(14,0,"Au");


lcd1602_show_string(0,1,"TL: C");


lcd1602_show_string(10,1,"TH: C");


}


//系统数据获取


void sys_data_get(void)


{


static u8 i=0;


while(1)


{


//温度获取


i++;


if(i%1==0)


{


TIM_Cmd(TIM3,DISABLE);//关闭定时器


sys_ctrl.temp=DS18B20_GetTemperture()*10;


TIM_Cmd(TIM3,ENABLE);//打开定时器


}


break;


}


}


//系统数据显示


void sys_data_show(void)


{


u8 buf[5];


while(1)


{


//温度显示


buf[0]=sys_ctrl.temp/100+0x30;


buf[1]=sys_ctrl.temp%100/10+0x30;


buf[2]='.';


buf[3]=sys_ctrl.temp%100%10+0x30;


buf[4]='�';


lcd1602_show_string(3,0,buf);


//温度阈值显示


lcd1602_show_nums(3,1,sys_ctrl.templ,2,0);


lcd1602_show_nums(13,1,sys_ctrl.temph,2,0);


//阈值闪烁指示


switch(sys_ctrl.mode)


{


case 1://温度下限


lcd1602_show_string(3,1," ");


delay_ms(50);


lcd1602_show_nums(3,1,sys_ctrl.templ,2,0);


break;

case 2://温度上限


lcd1602_show_string(13,1," ");


delay_ms(50);


lcd1602_show_nums(13,1,sys_ctrl.temph,2,0);


break;

}


//档位显示


lcd1602_show_nums(10,0,sys_ctrl.gear,1,0);


//手动状态显示


if(sys_ctrl.auto_flag)lcd1602_show_string(14,0,"SD");


else lcd1602_show_string(14,0,"Au");


break;


}


}


//系统数据设置


void sys_data_set(void)


{


u8 key=0;


key=KEY_Scan(0);


//自动手动模式设置


if(key==KEY4_PRESS)


{


sys_ctrl.auto_flag=!sys_ctrl.auto_flag;


}


//阈值模式设置


else if(key==KEY3_PRESS)


{


sys_ctrl.mode++;


if(sys_ctrl.mode>2)sys_ctrl.mode=0;


}


//阈值设置模式下,K1和K2加减


if(sys_ctrl.mode!=0)


{


//加


if(key==KEY1_PRESS)


{


switch(sys_ctrl.mode)


{


case 1://温度下限


 sys_ctrl.templ++;


 if(sys_ctrl.templ >99)sys_ctrl.templ=0;


 break;


case 2://温度上限


 sys_ctrl.temph++;


 if(sys_ctrl.temph >99)sys_ctrl.temph=0;


 break;

}


}


//减


else if(key==KEY2_PRESS)


{


switch(sys_ctrl.mode)


{


case 1://温度下限


 sys_ctrl.templ--;


 if(sys_ctrl.templ< 0)sys_ctrl.templ=99;


 break;


case 2://温度上限


 sys_ctrl.temph++;


 if(sys_ctrl.temph< 0)sys_ctrl.temph=99;


 break;

}


}


}


//手动模式下,档位调节


if(sys_ctrl.auto_flag==1)


{


//加速


if(key==KEY1_PRESS)


{


sys_ctrl.gear++;


if(sys_ctrl.gear>5)sys_ctrl.gear=5;


}


//减速


else if(key==KEY2_PRESS)


{


sys_ctrl.gear--;


if(sys_ctrl.gear<0)sys_ctrl.gear=0;


}


}


}


//系统功能控制


void sys_fun_ctrl(void)


{


//手动模式下,速度控制


if(sys_ctrl.auto_flag==1)


{


pwm_set_duty(sys_ctrl.gear*20);//占空比


}


//自动模式下,速度控制


else


{


//如果温度高于上限,温度越高,风扇越快


if(sys_ctrl.temp>=sys_ctrl.temph*10)


{


if(sys_ctrl.temp>=sys_ctrl.temph10 && sys_ctrl.temp10+20)


sys_ctrl.gear=3;

else if(sys_ctrl.temp>=sys_ctrl.temph10+20 && sys_ctrl.temp10+40)**


sys_ctrl.gear=4;

else if(sys_ctrl.temp>=sys_ctrl.temph*10+40)


{


sys_ctrl.gear=5;


//高于设定值则蜂鸣器报警


if(sys_ctrl.temp >=sys_ctrl.temph*10+60) 


{


 beep_alarm(100,20);


}

}


}


//如果温度低于下限,风扇停止


else if(sys_ctrl.temp<=sys_ctrl.templ*10)


sys_ctrl.gear=0;


//温度在阈值范围内,风扇以固定速度运行


else


sys_ctrl.gear=2;


pwm_set_duty(sys_ctrl.gear*20);//占空比


}


}


//应用控制系统


void appdemo_show(void)


{


u8 i=10;


sys_parm_init();//系统参数初始化


KEY_Init();


BEEP_Init();


DS18B20_Init();


lcd1602_init();//LCD1602初始化


//读取温度数据,等待稳定


while(i--)


{


sys_ctrl.temp=DS18B20_GetTemperture();


delay_ms(100);


}


dc_motor_init();


pwm_init(100-1,800-1);//初始时,PWM占空比为0


pwm_set_duty(0);


dc_motor_dir_ctrl(0);


sys_open_show();//系统初始界面显示


while(1)


{


sys_data_get();//系统数据获取


sys_data_show();//系统数据显示


sys_data_set();//系统数据设置


sys_fun_ctrl();//系统功能控制


}


}

三、实验现象

图片

图片

图片


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>