STM32PWM控制智能风扇

news/2025/2/12 23:25:43/

设计思路:

这个是一个STM32通过定时器产生PWM波控制小风扇的设计,首先STM32驱动ds18b20温度传感器采集环境温度,然后通过按键设置温度的阈值,不同的温度范围定时器产生的PWM波不同,相应的小风扇的转速也会不一样,温度越高,小风扇的转速越大。LCD1602显示屏显示当前温度,和设置的阈值,同时按键支持连按,也支持掉电数据保存。希望能够帮助到需要的朋友。需要参考的朋友可以在文章底部点击下载源码和原理图。

下面是main.c文件的代码

#include "stm32f10x.h"
#include "lcd.h"
#include <stdio.h>
#include "led.h"
#include "deputy.h"
#include "sys.h"
#include "delay.h"
#include "stmflash.h"
#include "ds18b20.h"
#include "LCD1602.h"void KEY_Scan(void);
u8   KEY_scan(u8 mode);
void display_tem(void);
unsigned char Uart1_Buff[1024];   //串口1缓冲数组
unsigned char Uart1_Count=0;      //串口1累加变量
u8 right=0,Tim_ms=0,state=0,s0=0,sec1=0,sec2=0,memory_flag=0;
float result=0.0000;
float table = 0.70;
int pm25Value;
float High,Low;u8 Tem_L[20]={0};
u8 Tem_H[20]={0};
u8 showBuffer[20] = {0};
uint8_t key1_flag=0,key2_flag=0,key3_flag=0;int main(void)
{delay_init();	GPIO_init();LCD1602_Init();TIM2_Int_Init(350,7199);	//10Khz,计数到5000是500msds18b20_init_x();GPIO_ResetBits(GPIOB,GPIO_Pin_10);GPIO_SetBits(GPIOB,GPIO_Pin_11);LCD1602_ClearScreen();
//	Test_Write(0x08009100,(float)30.1);
//	Test_Write(0x08009104,(float)19.2);High=STMFLASH_ReadHalfWord(0x08009100)/16.;Low=STMFLASH_ReadHalfWord(0x08009104)/16.;		while(1){	display_tem();if(memory_flag){memory_flag=0;Test_Write(0x08009100,High*16.);//float类型扩大十倍,方便存储数据Test_Write(0x08009104,Low*16.);}}	
}void display_tem(void)
{float tem;u16 z = 0;z	= ds18b20_read(); 	tem = z/16. ;LCD1602_Show_Str(0, 0, (unsigned char *)showBuffer);snprintf((char *)showBuffer, sizeof(showBuffer), "Cur_Tem:  %2.1f", tem);LCD1602_Write_Dat(0xDF);LCD1602_Write_Dat(0x43);snprintf((char *)Tem_H, sizeof(Tem_H), "H:%2.1f   L:%2.1f", High,Low);LCD1602_Show_Str(0, 1, (unsigned char *)Tem_H);	LCD1602_Write_Dat(0xDF);LCD1602_Write_Dat(0x43);if(tem>High){TIM3_PWM_Config(9999);}else if(tem>=Low&&tem<High){TIM3_PWM_Config(4000);}else if(tem<Low){TIM3_PWM_Config(2600);}	
}void KEY_Scan(void)
{if(KEY1==0){			state=(state+1)%3;}while(!KEY1);	if(KEY2==0){if(key2_flag==1){key2_flag=0;if(state==1){if((High>0)&&(High>=Low)) High+=0.1;elseHigh=Low+0.1;}else if(state==2){if((Low>0)&&(Low<=High))Low+=0.1;else Low=High-0.1;}}if(sec1==0){if(state==1){if((High>0)&&(High>=Low)) High+=0.1;elseHigh=Low+0.1;}else if(state==2){if((Low>0)&&(Low<=High))Low+=0.1;else Low=High-0.1;}}}else{sec1=7;if(key2_flag==0){key2_flag=1;memory_flag=1;			}			}if(KEY3==0){if(key3_flag==1){key3_flag=0;if(state==1){if((High>0)&&(High>=Low)) High-=0.1;elseHigh=Low+0.1;}else if(state==2){if((Low>0)&&(Low<=High))Low-=0.1;else Low=High-0.1;}		}if(sec2==0){if(state==1){if((High>0)&&(High>=Low)) High-=0.1;elseHigh=Low+0.1;}else if(state==2){if((Low>0)&&(Low<=High))Low-=0.1;else Low=High-0.1;}}}else{sec2=7;if(key3_flag==0){key3_flag=1;memory_flag=1;			}				}
}void TIM2_IRQHandler(void)   //TIM2中断
{if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)  //检查TIM2更新中断发生与否{TIM_ClearITPendingBit(TIM2, TIM_IT_Update);  //清除TIM2更新中断标志	Tim_ms++;if(Tim_ms%6==0){if(s0==1) s0=0;else s0=1;}KEY_Scan();if(state==1&&s0){snprintf((char *)Tem_H, sizeof(Tem_H), "H:      L:%2.1f", Low);LCD1602_Show_Str(0, 1, (unsigned char *)Tem_H);	LCD1602_Write_Dat(0xDF);LCD1602_Write_Dat(0x43);}else if(state==2&&s0){snprintf((char *)Tem_H, sizeof(Tem_H), "H:%2.1f  L:    ",High);LCD1602_Show_Str(0, 1, (unsigned char *)Tem_H);	LCD1602_Write_Dat(0xDF);LCD1602_Write_Dat(0x43);}else{snprintf((char *)Tem_H, sizeof(Tem_H), "H:%2.1f  L:%2.1f", High,Low);LCD1602_Show_Str(0, 1, (unsigned char *)Tem_H);	LCD1602_Write_Dat(0xDF);LCD1602_Write_Dat(0x43);			}}if(sec1!=0) sec1--;if(sec2!=0) sec2--;
}

需要原理图和全部源码的朋友可以通过下面的链接下载:
源码和原理图


http://www.ppmy.cn/news/496715.html

相关文章

四线直流风扇PWM调速探研

最近拿到个9cm风扇&#xff0c;试了下可以使用&#xff0c;这个风扇是常见的用于机柜或机箱的工业扇&#xff08;高转速高电流&#xff09;&#xff0c;因此在接通典型12V后非常暴力&#xff0c;怠速电压在4v左右。 这篇文章将说明电脑风扇如何调速&#xff0c;为自制控制器预研…

NanoPC-T4 上实现pwm风扇自动调速

友善之臂推出的 NanoPC-T4 是一款采用 瑞芯微 RK3399 方案的嵌入式开发板&#xff0c;性能强大。发热量也杠杠的。 其板载PWM调速风扇接口采用GH1.25 插头&#xff0c;支持PWM调速。但查看了下 dts 并没有配置自动根据温度调节的选项。(注:pwm-fan, thermal_zone, cooling_devi…

树莓派4 PWM控制风扇转速

5V风扇是笔记本拆下来的&#xff0c;接了个ss8550 NPNPNP三极管。 接线&#xff1a; pi 5V --- 风扇5V 风扇GND --- 三接管C极 pi BCM 18 --- 三极管B极 pi GND --- 三极管E极 效果图&#xff1a; 代码&#xff1a; #!/usr/bin/python3 # encoding: utf-8import RPi.GPIO…

树莓派 linux pwm,树莓派使用pwm控制风扇

使用gpio readall查看针脚名称 $ gpio readall -------------------------------Pi 4B------------------------------ | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM | ---------------------------------------------------------------- | | | 3…

Linux pwm_fan 风扇驱动

前言 本文分析风扇驱动&#xff0c;驱动主要功能是控制以及计算风扇转速&#xff0c;添加进Linux Thermal 核心层&#xff1b; 设备树 常用设备树如下&#xff1a; pwm-fan {compatible "pwm-fan";cooling-min-state <0>;cooling-max-state <3>;#c…

【小伟哥AI之路】Jetson Nano之4针PWM风扇转速控制

刚拆封的Jetson Nano 配置是PWM4脚风扇&#xff0c;发现开机不转&#xff0c;感觉风扇安装问题…… jetson-nano-sd-card-image.zip 发现3脚和4脚有区别&#xff0c;4脚能控制风速&#xff0c;这个高级了。 硬件连接 FAN注意对好方向&#xff0c;将风扇接入 Jetson Nano 的风…

Ubuntu系统下主板GPU温控pwm风扇

要求主板、风扇均可pwm调速 sudo apt instlal lm-sensorssudo sensors-detectsudo apt install fancontrol配置一服务存放nvidia-smi读取的GPU温度在/tmp/nvidia-temp/temp文件中&#xff1a; [Unit] DescriptionNVidia GPU temperaturee reader Requiresfancontrol.service Be…

51单片机声控语音PWM风扇可自动温控定时调速风扇转速显示

实践制作DIY- GC0017-声控语音PWM风扇 一、功能说明&#xff1a; 基于51单片机设计-声控语音PWM风扇 功能介绍&#xff1a; 1.基于51&#xff08;AT89C52、STC89C52&#xff09;单片机&#xff0c;DS18B20温度传感器&#xff0c;LCD1602显示器&#xff0c;语音识别播报模块…