標題: 基于stm32的智能節能風扇設計 [打印本頁]
作者: atao12138 時間: 2018-5-14 09:50
標題: 基于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初始化。
函數如下:
void Init_DS1302(char year,char month,charday,char hour,char minute,char second,char flag);
注意:年year輸入后兩位;最后一個flag指的是:如果ds1302沒有外接鋰電池,程序每次都初始化,那么flag=0;如果有外接鋰電池,程序只需第一次上電初始化,那么flag=1;
比如Init_DS1302(15,2,12,17,4,34,0);
則表示初始化時間為:15年2月12日17點4分34秒,程序每次上電都將ds1302時間初始化。
2.獲取時間
char year, 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
函數使用說明:
flaot Temperature;
Temperature= DS18B20_GetTemp();//獲取溫度
參考程序見附件
現象如下:
串口說明:
采用串口2
STM32CubeMx配置如下:
只需要將Nucleo板子通過usb插在電腦上即可,無需其他硬件。
本程序實現:電腦串口助手將字符串(固定長,如需改變長度,可在程序中更改)發給STM32F411板子,然后STM32F411板子將接收到的字符串發給定腦的串口助手。
測試程序如下:
uint8_t Rdata[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初始化代碼如下:
/* TIM10 init function */
void MX_TIM10_Init(void)
{
TIM_OC_InitTypeDef sConfigOC;
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初始化函數,修改如下:
修改此函數之后,前面的函數聲明也要改。改為:static void MX_TIM10_Init(int period,intpulse);
要想PWM工作,需要啟動PWM。查看頭文件stm32f4xx_hal_tim.h,可以看到如下函數:
這是PWM啟動與停止的函數。
最后看看按鍵,只需要把按鍵配置為上拉模式就好。
在按鍵初始化中,將
GPIO_InitStruct.Pull= GPIO_NOPULL;
改為
GPIO_InitStruct.Pull= GPIO_PULLUP;
接下來便可以寫主函數。
int main(void)
{
/* USER CODE BEGIN 1 */
int i=100;
/* USER CODE END 1 */
/* MCU Configuration----------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* System interrupt init*/
/* Sets the priority grouping field */
HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_0);
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_TIM10_Init(1000,100);//PWM初始化
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim10,TIM_CHANNEL_1);//啟動PWM
/* USER CODE END 2 */
/* USER CODE BEGIN 3 */
/* Infinite loop */
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));//等待按鍵釋放
}
}
/* USER CODE END 3 */
}
編譯程序,下載程序,可以看到現象:
作者: eastwin 時間: 2018-5-16 15:31
厲害了,準備做一個試試
作者: 竹楊樹 時間: 2018-9-21 10:39
有材料清單嗎
作者: Brave~ 時間: 2020-1-9 20:56
引腳PB13-15連接的是風扇嗎,還需要繼電器嗎
作者: 傾聽一分鐘 時間: 2020-5-11 21:25
不錯,請問樓主有原理圖繼續分享一下嗎?
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
日韩av黄色
|
91婷婷韩国欧美一区二区
|
成人1区|
国产福利在线免费观看
|
亚洲免费精品
|
在线黄av
|
国产精品久久久久久吹潮
|
日韩一区二区三区在线播放
|
欧美日韩一
|
久久九七
|
久久国产精品网站
|
羞羞视频网站在线观看
|
国产精品久久久久久婷婷天堂
|
中文字幕日韩一区
|
亚洲精品久久久久久久久久吃药
|
九一在线观看
|
久久久久久国模大尺度人体
|
国产一级片av|
久久视频精品
|
欧美男人亚洲天堂
|
天天干干
|
久久久片
|
91精品国产色综合久久不卡98
|
亚洲一二三在线观看
|
精品欧美一区二区三区久久久
|
免费在线观看h片
|
男女免费在线观看视频
|
观看av
|
久久99精品久久久久久国产越南
|
亚洲网站免费看
|
中文字幕亚洲一区二区va在线
|
成人午夜精品
|
亚洲黄色网址视频
|
久久久精品久久久
|
欧美一区二区三区在线看
|
精品一二区
|
欧美 日韩 国产 成人 在线
|
亚洲综合视频一区
|
日韩欧美网
|
一级高清视频
|
av免费网站在线观看
|