采用STM32的智能节能风扇设计.docx

上传人:b****6 文档编号:2987449 上传时间:2022-11-16 格式:DOCX 页数:6 大小:141.99KB
下载 相关 举报
采用STM32的智能节能风扇设计.docx_第1页
第1页 / 共6页
采用STM32的智能节能风扇设计.docx_第2页
第2页 / 共6页
采用STM32的智能节能风扇设计.docx_第3页
第3页 / 共6页
采用STM32的智能节能风扇设计.docx_第4页
第4页 / 共6页
采用STM32的智能节能风扇设计.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

采用STM32的智能节能风扇设计.docx

《采用STM32的智能节能风扇设计.docx》由会员分享,可在线阅读,更多相关《采用STM32的智能节能风扇设计.docx(6页珍藏版)》请在冰豆网上搜索。

采用STM32的智能节能风扇设计.docx

采用STM32的智能节能风扇设计

节能风扇可实现的功能

(1)智能风扇可通过温度检测到即时室温,然后根据室温的高低以及设定的温度对扇叶的转速进行自我调节。

比如设定的温度为20度,则室温为21度时,风扇转速慢,室温为22度时,风扇转速变快,室温为23度时,风扇转速更快,以此类推。

(2)智能风扇可通过红外传感器感受人的存在,无人时可自动关闭,节省能源。

(3)通过设定时间,定时关闭风扇

(4)风扇有普通模式,可以设置为快档,中档,慢档,跟普通风扇一样,不受温度影响。

(5)本系统装配安卓客户端,可以进行一些相关功能的控制,简单方便。

方案框图如下:

蓝牙采用HC-06,如下图:

温度传感器DS18B20与时钟芯片DS1302如下:

 

智能模式下,没人的时候,液晶显示nobody,风扇不转。

智能模式下:

当count计时达到00:

10:

00时,风扇停止转动。

普通模式下:

快档,中档,停止档

  

DS18B20和DS1302说明:

工程采用STM32CubeMx软件产生,引脚配置如下:

其他配置默认。

DS1302接线说明:

SCLK-----------------------PC0

DATA-----------------------PC1

RST-------------------------PC2

函数使用方法说明:

1.ds1302初始化。

函数如下:

voidInit_DS1302(charyear,charmonth,charday,charhour,charminute,charsecond,charflag);

注意:

年year输入后两位;最后一个flag指的是:

如果ds1302没有外接锂电池,程序每次都初始化,那么flag=0;如果有外接锂电池,程序只需第一次上电初始化,那么flag=1;

比如Init_DS1302(15,2,12,17,4,34,0);

则表示初始化时间为:

15年2月12日17点4分34秒,程序每次上电都将ds1302时间初始化。

2.获取时间

charyear,month,day,hour,minute,second;

year=getDS1302_year();//获取年的后两位

month=getDS1302_month();//获取月

day=getDS1302_day();//获取日

hour=getDS1302_hour();//获取小时

minute=getDS1302_minute();//获取分钟

second=getDS1302_second();//获取秒

DS18B20说明:

DATA---------------------PC3

函数使用说明:

flaotTemperature;

Temperature=DS18B20_GetTemp();//获取温度

参考程序见附件

现象如下:

 

串口说明:

采用串口2

STM32CubeMx配置如下:

只需要将Nucleo板子通过usb插在电脑上即可,无需其他硬件。

本程序实现:

电脑串口助手将字符串(固定长,如需改变长度,可在程序中更改)发给STM32F411板子,然后STM32F411板子将接收到的字符串发给定脑的串口助手。

测试程序如下:

uint8_tRdata[20];

while

(1)

{

if(HAL_UART_Receive(&huart2,Rdata,13,1000)==HAL_OK)

{

HAL_UART_Transmit(&huart2,Rdata,13,1000);

}

}

函数的说明可以查看头文件stm32f4xx_hal_uart.h中的函数声明。

结果如下:

 

参考程序见附件

风扇转速控制采用PWM调速。

有关PWM部分示例代码:

以按键控制PWM占空比为例:

首先用STM32CubeMx软件配置定时器PWM模式与按键输入IO口。

定时器PWM模式配置

 

按键IO配置

然后生成Keil工程。

用Keil打开。

首先修改有关PWM方面的代码。

PWM初始化代码如下:

/*TIM10initfunction*/

voidMX_TIM10_Init(void)

{

TIM_OC_InitTypeDefsConfigOC;

htim10.Instance=TIM10;

htim10.Init.Prescaler=0;

htim10.Init.CounterMode=TIM_COUNTERMODE_UP;

htim10.Init.Period=0;

htim10.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;

HAL_TIM_Base_Init(&htim10);

HAL_TIM_PWM_Init(&htim10);

sConfigOC.OCMode=TIM_OCMODE_PWM1;

sConfigOC.Pulse=0;

sConfigOC.OCPolarity=TIM_OCPOLARITY_HIGH;

sConfigOC.OCFastMode=TIM_OCFAST_DISABLE;

HAL_TIM_PWM_ConfigChannel(&htim10,&sConfigOC,TIM_CHANNEL_1);

}

 

查看头文件stm32f4xx_hal_tim.h,可以知道定时器初始化参数的含义如下:

 

 

从头文件中可以看出,要想简单配置PWM很简单,只要改变PWM周期的值与脉冲值就好。

比如将改变一下两个语句:

htim10.Init.Period=1000;

sConfigOC.Pulse=200;

便将PWM配置为周期为1000个定时器周期,高电平持续时间为200个定时器时钟周期,占空比为200/1000=20%。

要想用按键控制PWM占空比,我们只需要修改一下PWM初始化函数,修改如下:

 

修改此函数之后,前面的函数声明也要改。

改为:

staticvoidMX_TIM10_Init(intperiod,intpulse);

要想PWM工作,需要启动PWM。

查看头文件stm32f4xx_hal_tim.h,可以看到如下函数:

 

这是PWM启动与停止的函数。

最后看看按键,只需要把按键配置为上拉模式就好。

在按键初始化中,将

GPIO_InitStruct.Pull=GPIO_NOPULL;

改为

GPIO_InitStruct.Pull=GPIO_PULLUP;

接下来便可以写主函数。

intmain(void)

{

/*USERCODEBEGIN1*/

inti=100;

/*USERCODEEND1*/

/*MCUConfiguration----------------------------------------------------------*/

/*Resetofallperipherals,InitializestheFlashinterfaceandtheSystick.*/

HAL_Init();

/*Configurethesystemclock*/

SystemClock_Config();

/*Systeminterruptinit*/

/*Setstheprioritygroupingfield*/

HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_0);

HAL_NVIC_SetPriority(SysTick_IRQn,0,0);

/*Initializeallconfiguredperipherals*/

MX_GPIO_Init();

MX_TIM10_Init(1000,100);//PWM初始化

/*USERCODEBEGIN2*/

HAL_TIM_PWM_Start(&htim10,TIM_CHANNEL_1);//启动PWM

/*USERCODEEND2*/

/*USERCODEBEGIN3*/

/*Infiniteloop*/

while

(1)

{

if(!

HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13))//如果按键按下

{

i=i+100;

if(i==1000)i=100;

HAL_TIM_PWM_Stop(&htim10,TIM_CHANNEL_1);//停止PWM

MX_TIM10_Init(1000,i);//PWM重新配置,周期为1000,高电平持续时间为i

HAL_TIM_PWM_Start(&htim10,TIM_CHANNEL_1);//启动PWM

while(!

HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13));//等待按键释放

}

}

/*USERCODEEND3*/

}

编译程序,下载程序,可以看到现象:

 

参考程序见附件

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1