采用STM32的智能节能风扇设计Word文档下载推荐.docx
《采用STM32的智能节能风扇设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《采用STM32的智能节能风扇设计Word文档下载推荐.docx(6页珍藏版)》请在冰豆网上搜索。
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(&
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
while(!
HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13));
//等待按键释放
/*USERCODEEND3*/
编译程序,下载程序,可以看到现象: