如何开启主板CPU风扇的pwm智能温控功能?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何开启主板CPU风扇的pwm智能温控功能?相关的知识,希望对你有一定的参考价值。
我的电脑的主板是铭瑄-ms-a55el的,主板上有4线风扇的接口,风扇也支持pwm智能温控,可风扇一直高转速,噪音也很大,请问哪位知道怎样从主板设置里开启风扇的控速功能呀?
首先要确定风扇线必须4线,主板CPU风扇插座要是4针,这样才能满足智能温控的先决条件。
不过有些主板是默认关闭了调速功能的,这样的话,需要手动设置开启。
笼统可概括为:进去Bios设置一下就可以了,一般带有fan、q-fan、pwm、smart、K8等等字样的,设置成auto或者enable或者pwm。
如果遇到主板不支持调速功能或者不会设置的话,就用降速线(当作延长线直接插在风扇上,即可被动静音。这个降速线就需要另外购买了。)。
对于主板bios的温控开关设置,各款主板型号都不一样,我们不能全部罗列出来。太旧式的主板可能没有这个功能的。但是amd-C61以上,intel-G31以上的主板全部都支持了调速功能。
首先确定你的CPU散热器正确地插在了主板上标注为“CPU FAN”的4pin插座上(如图)。
开机进入主板BIOS(开机的时候按DEL或者F2,开机的时候有提示的),寻找一项叫做PC Health Monitor的选项(不同主板可能写法不同,但一般都有Health字样)。
设置完成之后记得按F10保存,选择Yes,然后回车,重启电脑。
不同主板不同的BIOS设置,下面详细说明:
第一类:smart fan control--mode设置 CPU smart fan contrl 先设置为auto或者enable(即先开启设置)CPU smart fan mode设置为pwm(开启pwm脉冲调速功能)
常见主板,如技嘉BIOS(技嘉主板一般默认为开启设置,参数为AUTO自动)
第二类 CPU Q-FAN control设置
CPU Q-FAN control先设置为 enable(开启设置)
下面会出现cpu fan profile mode里面有3种模式可以供选择
最佳化(optimal)模式可让系统依照温度的变化自动调节风扇转速;
宁静(silent)模式则会将风扇运作转速降至最低;
效能(performance)模式则会提高风扇转速以得到最佳得系统冷却效果。
建议玩家根据自身情况进行选择即可
Q-FAN是华硕主板的专利,当然是用在华硕主板上,早期10年之前的主板BIOS默认CPU Q-FAN control功能关闭的,现在11年之后的主板华硕默认BIOS下是开启状态。
第三类 CPU Quiet Fan设置
此类主板BIOS中没有PWM选项,可以设置成中速或者慢速
1、先将 CPU Quiet Fan设置成enable(开启功能)2、下面的 Target CPU Temperature 设置在50-65为佳。3、最后 Target CPU Speed 设置转速级别
类似的也有下面的,Target CPU Speed 转速级别为百分比,可根据自身情况调节!如微星主板
类似的也有下面的,Target CPU Speed 转速级别等级,可根据自身情况调节!如华擎主板
第四类 Cool,N,Quiet又叫“冷又静”(AMD)
选择打开,这个功能是电脑根据需要,自动调节CPU的频率,达到省电静音的效果.如图中有enable以及auto选项的话,请2个分别测试,选择正确的。
第五类:CPU FAN Mode Setting的选项(部分主板BIOS中写作SmartFan)
这就是我们用来调节CPU风扇转速的选项。
它有Manual Mode(手动设置)、Thermal Cruise Mode(热巡航)、Speed Cruise Mode(速度巡航)三种模式——其实热巡航模式就是自动模式。
Manual Mode:在这个模式下,你可以手动设置风扇的转速(0~255级),就是将风扇转速分为256个级别进行线性调节——要它全速运转,设置为255即可。
Thermal Cruise Mode:在这个模式下,需要设置4个值告诉系统要如何去自动调速。
CPUFAN TargetTemp Value(风扇转速开始控制的温度)当CPU的温度小于这个目标值时风扇会以一个比较低的转速转动,当CPU的温度大于这个温度时风扇的转速就会以一个所设定的值增加至全速);
CPUFAN Tolerance Value(风扇转速变化的速率,数值越大,变化越快);
CPUFAN StartUp Value(CPU温度达到TargetTemp Value设定温度时,风扇转速会以这个值开始增加);
CPUFAN Stop Value(风扇转速低于目标值时递减至此值的设定);
CPUFAN StopTime Value(风扇转速从起始值变到最终值的时间)
例如,你设定CPUFAN TARGETTEMP VALUE为55度,CPUFAN TOLERANCE VALUE为10,CPUFAN STARTUP VALUE为200,CPU STOP VALUE为150,那么当CPU温度达到55度时,风扇以200的相对速度运转,按照10的线性速率上升直到全速为止,当温度低于55时,风扇以200的相对速度运转,按照10的线性速率下降,直到降为150的相对速度为止,然后以150的速度运转下去。
Speed Cruise Mode(速度巡航模式,与手动模式比较类似,即设定一个线性变化速率,然后按这个速率去达到你所设定的转速。):
CPUFAN Targetspeed Value(目标转速);
CPUFAN Tolerance Value(风扇转速变化的速率,数值越大,变化越快)
类似也有映泰和升技的部分主板BIO设置,增加了风扇接线的选项,其他都差不多一样
以上列举了部分电脑的BIOS设置方法,每款主板都可能有点区别,不过都大同小异,如果跟您的有区别,请查阅主板说明书。
参考技术A 转速高说明温度高。低的话,烧cpu,尽量不要动,有钱换散热器吧,玄冰400肯定适合你 超频都没事追问
温度不高,才20度左右,可风扇达到了5000多转。就是主板没开启智能温控的功能。可主板设
置里的英文我看不懂。
把电池扣下来,放电,5分钟在装上
参考技术B 这个你要自己去的我因为我也没用过,我一般接到我也不会去摸这些,就是直接最早的是办公软件做一做。 参考技术C 不相配吧 得找维修专家追问pwm温控技术没有不相配的,我的主板和风扇都没问题。
毕业设计 - 题目:基于stm32的智能温控风扇设计与实现
文章目录
1 简介
Hi,大家好,这里是丹成学长,今天向大家介绍一个 单片机项目
基于stm32的智能温控风扇设计与实现
大家可用于 课程设计 或 毕业设计
技术解答、毕设帮助、开题指导
print("Q 746876041")
2 绪论
2.1 课题背景
随着科技的日新月异,智能家居逐渐走入普通家庭,风扇作为基本的家用电器也将成为智能家居的一部分。这里介绍的是以STM32单片机为控制单元并结合嵌入式技术设计的一款具有温控调速、液晶显示温度等信息的智能电风扇。经过前期设计、制作和最终的测试得出,该风扇电源稳定性好,操作方便,运行可靠,功能强大,价格低廉,节约能耗,能够满足用户多元化的需求。该风扇具有的人性化设计和低廉的价格很适合普通用户家庭使用。
3 系统设计
3.1 系统架构
设计采用STM32单片机做主控芯片,通过DS18B20采集温度,将温度显示在LCD1602上。根据温度的不同,利用STM32对风扇进行调速,总体硬件设计如下图所示
3.2 硬件部分
3.2.1 DS18B20 简介
DS18B20 是美国 DALLAS 半导体公司继 DS1820 之后最新推出的一种改进型智能温度传感器。 与传统的热敏电阻相比, 它能够直接读出被测温度并且可根据实际要求通过简单的编程实现 9~12 位的数字值读数方式。
3.2.2 LCD1602 液晶屏简介
1602 液晶也叫 1602 字符型液晶, 它是一种专门用来显示字母、 数字、 符号等的点阵型液晶模块。 它由若干个 5X7 或者 5X11 等点阵字符位组成, 每个点阵字符位都可以显示一个字符, 每位之间有一个点距的间隔, 每行之间也有间隔, 起到了字符间距和行间距的作用, 正因为如此所以它不能很好地显示图形
3.3 软件部分
3.3.1 整体软件流程
控制系统软件使用 C 语言编程。
使用模块化设计, 除主程序外, 还有各功能子程序, 分别执行直流电机驱动调速及温度采集、 显示等功能, 编辑环境采用集成开发环环境 Keil。
程序总体运行流程图如下:
3.3.2 初始化
系统初始化包括 STM32 系统定时器初始化, GPIO 口初始化以及 LCD1602 初始化等。
3.3.3 温度采集与显示
DS18B20 温度传感器进行温度采集时, 要依次进行初始化, ROM 操作指令, 存储器操作指令, 数据传输等操作
3.4 实现效果
3.5 部分相关代码
/************************************************
作者:丹成学长,Q746876041
************************************************/
1.主函数
#include "stm32f10x.h"
#include "bsp_SysTick.h"
#include <LCD1602.h>
#include "bsp_ds18b20.h"
int main()
{ int PWM,low,zhouqi;
float wendu;
int wendu1;
zhouqi=500;
low=zhouqi-PWM;
SysTick_Init();
init1602();
lcdpos(1,0);
writestring("TEM: 00.0");
GPIO_SetBits(GPIOB,GPIO_Pin_0);
while( DS18B20_Init())
{
lcdpos(0,0);
writestring(" no ds18b20 exit");
}
lcdpos(0,0);
writestring("ds18b20 exit");
for(;;)
{
DS18B20_Get_Temp(wendu);
if (wendu<0)
{ lcdpos(1,4);
writestring("-");
}
wendu1=wendu*100;
lcdpos(1,5);
write_dat(wendu1/10000+0x30);
lcdpos(1,6);
write_dat(wendu1%10000/1000+0x30);
lcdpos(1,7);
write_dat(wendu1%1000/100+0x30);
lcdpos(1,9);
write_dat(wendu1%100/10+0x30);
lcdpos(1,10);
write_dat(wendu1%10+0x30);
Delay_ms(2000);
if(wendu1>30)
{ low=500;
GPIO_SetBits(GPIOB,GPIO_Pin_0);
Delay_ms(PWM);
}
if(wendu1<15)
{ low=0;
GPIO_SetBits(GPIOB,GPIO_Pin_0);
Delay_ms(PWM);
}
if(wendu1>=15&wendu1<20)
{ low=100;
GPIO_SetBits(GPIOB,GPIO_Pin_0);
Delay_ms(PWM);
GPIO_ResetBits(GPIOB,GPIO_Pin_0);
Delay_ms(low);
}
if(wendu1>=20&wendu1<25)
{
low=200;
GPIO_SetBits(GPIOB,GPIO_Pin_0);
Delay_ms(PWM);
GPIO_ResetBits(GPIOB,GPIO_Pin_0);
Delay_ms(low);
}
if(wendu1>=25&wendu1<30)
{ low=300;
GPIO_SetBits(GPIOB,GPIO_Pin_0);
Delay_ms(PWM);
GPIO_ResetBits(GPIOB,GPIO_Pin_0);
Delay_ms(low);
}
}
}
2.DS18B20 子程序
#include "bsp_ds18b20.h"
/*
* 函数名: DS18B20_GPIO_Config
* 描述 : 配置 DS18B20 用到的 I/O 口
* 输入 : 无
* 输出 : 无
*/
static void DS18B20_GPIO_Config(void)
{
/*定义一个 GPIO_InitTypeDef类型的结构体*/
GPIO_InitTypeDef GPIO_InitStructure;
/*开启 DS18B20_PORT 的外设时钟*/
RCC_APB2PeriphClockCmd(DS18B20_CLK, ENABLE);
/*选择要控制的 DS18B20_PORT 引脚*/
GPIO_InitStructure.GPIO_Pin = DS18B20_PIN;
/*设置引脚模式为通用推挽输出*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
/*设置引脚速率为 50MHz */
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
/*调用库函数, 初始化 DS18B20_PORT*/
GPIO_Init(DS18B20_PORT, &GPIO_InitStructure);
GPIO_SetBits(DS18B20_PORT, DS18B20_PIN);
}
/*
* 函数名: DS18B20_Mode_IPU
* 描述 : 使 DS18B20-DATA 引脚变为输入模式
* 输入 : 无
* 输出 : 无
*/
static void DS18B20_Mode_IPU(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/*选择要控制的 DS18B20_PORT 引脚*/
GPIO_InitStructure.GPIO_Pin = DS18B20_PIN;
/*设置引脚模式为浮空输入模式*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
/*调用库函数, 初始化 DS18B20_PORT*/
GPIO_Init(DS18B20_PORT, &GPIO_InitStructure);
}
/*
* 函数名: DS18B20_Mode_Out_PP
* 描述 : 使 DS18B20-DATA 引脚变为输出模式
* 输入 : 无
* 输出 : 无
*/
static void DS18B20_Mode_Out_PP(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/*选择要控制的 DS18B20_PORT 引脚*/
GPIO_InitStructure.GPIO_Pin = DS18B20_PIN;
/*设置引脚模式为通用推挽输出*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
/*设置引脚速率为 50MHz */
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
/*调用库函数, 初始化 DS18B20_PORT*/
GPIO_Init(DS18B20_PORT, &GPIO_InitStructure);
}
/*
*主机给从机发送复位脉冲
*/
static void DS18B20_Rst(void)
{
/* 主机设置为推挽输出 */
DS18B20_Mode_Out_PP();
DS18B20_DATA_OUT(LOW);
/* 主机至少产生 480us 的低电平复位信号 */
Delay_us(750);
/* 主机在产生复位信号后, 需将总线拉高 */
DS18B20_DATA_OUT(HIGH);
Delay_us(15);
}
/*
* 检测从机给主机返回的存在脉冲
* 0: 成功
* 1: 失败
*/
static uint8_t DS18B20_Presence(void)
{
uint8_t pulse_time = 0;
/* 主机设置为上拉输入 */
DS18B20_Mode_IPU();
while( DS18B20_DATA_IN() && pulse_time<100 )
{
pulse_time++;
Delay_us(1);
}
/ * 经过 100us 后, 存在脉冲都还没有到来*/
if( pulse_time >=100 )
return 1;
else
pulse_time = 0;
/* 存在脉冲到来, 且存在的时间不能超过 240us */
while( !DS18B20_DATA_IN() && pulse_time<240 )
{
pulse_time++;
Delay_us(1);
}
if( pulse_time >=240 )
return 1;
else
return 0;
}
/*
* 从 DS18B20 读取一个 bit
*/
static uint8_t DS18B20_Read_Bit(void)
{
uint8_t dat; /* 读 0 和读 1 的时间至少要大于 60us */
DS18B20_Mode_Out_PP();
/* 读时间的起始: 必须由主机产生 >1us <15us 的低电平信号 */
DS18B20_DATA_OUT(LOW);
Delay_us(10);
/ * 设置成输入, 释放总线, 由外部上拉电阻将总线拉高 */
DS18B20_Mode_IPU();
//Delay_us(2);
if( DS18B20_DATA_IN() == SET )
dat = 1;
else
dat = 0;
/* 这个延时参数请参考时序图 */
Delay_us(45);
return dat;
}
/*
* 从 DS18B20 读一个字节, 低位先行
*/
uint8_t DS18B20_Read_Byte(void)
{
uint8_t i, j, dat = 0;
for(i=0; i<8; i++)
{
j = DS18B20_Read_Bit();
dat = (dat) | (j<<i);
}
return dat;
}
/*
* 写一个字节到 DS18B20, 低位先行
*/
void DS18B20_Write_Byte(uint8_t dat)
{
uint8_t i, testb;
DS18B20_Mode_Out_PP();
for( i=0; i<8; i++ )
{
testb = dat&0x01;
dat = dat>>1;
/* 写 0 和写 1 的时间至少要大于 60us */
if (testb)
{
DS18B20_DATA_OUT(LOW);
/* 1us < 这个延时 < 15us */
Delay_us(8);
DS18B20_DATA_OUT(HIGH);
Delay_us(58);
}
else
{
DS18B20_DATA_OUT(LOW);
/* 60us < Tx 0 < 120us */
Delay_us(70);
DS18B20_DATA_OUT(HIGH);
/* 1us < Trec(恢复时间) < 无穷大*/
Delay_us(2);
}
}
}
void DS18B20_Start(void)
{
DS18B20_Rst();
DS18B20_Presence();
DS18B20_Write_Byte(0XCC); /* 跳过 ROM */
DS18B20_Write_Byte(0X44); /* 开始转换 */
}
uint8_t DS18B20_Init(void)
{
DS18B20_GPIO_Config();
DS18B20_Rst();
return DS18B20_Presence();
}
float DS18B20_Get_Temp(float f_tem)
{
uint8_t tpmsb, tplsb;
short s_tem;
DS18B20_Rst();
DS18B20_Presence();
DS18B20_Write_Byte(0XCC); /* 跳过 ROM */
DS18B20_Write_Byte(0X44); /* 开始转换 */
DS18B20_Rst();
DS18B20_Presence();
DS18B20_Write_Byte(0XCC); /* 跳过 ROM */
DS18B20_Write_Byte(0XBE); /* 读温度值 */
tplsb = DS18B20_Read_Byte();
tpmsb = DS18B20_Read_Byte();
s_tem = tpmsb<<8;
s_tem = s_tem | tplsb;
I f( s_tem < 0 ) /* 负温度 */
f_tem = (~s_tem+1) * 0.0625;
else
f_tem = s_tem * 0.0625;
return f_tem;
}
/*******************************************************************
篇幅有限,只展示部分代码
作者:丹成学长,Q746876041
********************************************************************/
4 最后
技术解答、毕设帮助、开题指导
print("Q 746876041")
单片机毕设项目大全:
https://blog.csdn.net/huawei123444/article/details/119822845
以上是关于如何开启主板CPU风扇的pwm智能温控功能?的主要内容,如果未能解决你的问题,请参考以下文章