PWM风扇调速问题

PWM风扇调速问题,第1张

#include <reg52.h>

sbit FAN = P1^3 //要控制的风扇

sbit SW1 = P1^5//按键 - 转速

sbit SW2 = P1^6 //按键 + 转速

unsigned char timer1,time=50

void system_Ini()

{

TMOD = 0x10

TH1 = 0xfe

TL1 = 0x33

TR1 = 1

IE = 0x8A

}

/**************************************************

void delay_us()

/**************************************************/

void delay_us(unsigned int x)

{

unsigned int i=0

for(i=0i<xi++)

}

main()

{

system_Ini()

while(1)

{

if(SW1 == 0)

{

delay_us(200)

if(SW1 == 0)

{

time++

if(time >100) time = 100

delay_us(30000)

}

}

if(SW2 == 0)

{

delay_us(200)

if(SW2 == 0)

{

time--

if(time >250) time = 0

delay_us(30000)

}

}

}

}

/*************************************

中断

*************************************/

void T1zd(void) interrupt 3//定时器1

{

TH1 = 0xfe

TL1 = 0x33

timer1++

if(timer1 >= 100) timer1 = 0

if(timer1<time) FAN=0

else FAN=1

}

你试试上面的程序,看看能不能看到调速的过程,如果还快,就把delay_us(30000)修改成

delay_us(65535)

至于你说的由低速到调速,直流电机抱死,那个程序上不好处理,这是直流电机的问题,你只能是通过加大直流电机电压(不能超过最大电压),或者改变电机结构减少扭矩来处理.

1、不同版本的驱动程序,触发PWM风扇提速的条件是不一样的。

有些版本的驱动程序,会根据显卡GPU的温度(根据显卡BIOS中的风扇转速临界温度不同,一般阈值温度为90度或95度)来判断是否提高风扇转速;有些版本驱动会根据显卡负载(分为待机、轻负载即高清视频加速、重负载即3D游戏)来判断是否提高风扇转速。

因此,显卡满载温度80度,在某些版本的驱动程序中,并不会触发PWM风扇提速动作也是很正常的。毕竟NVIDIA给定的显卡安全温度是108度,厂商出厂标准是55度恒温箱内72小时满载老化测试GPU温度不超过95度,80度对于9600GSO而言是安全温度。

2、可以尝试更换不同版本的驱动程序,有些版本驱动的PWM风扇提速控制模块是不一样的,可能会有不同的效果(当然,也需要显卡BIOS的配合)。

3、也可以使用Rivatuner等软件手动控制风扇转速,这样更直观、也更精确一些。

电源+12V接风扇+,电源负接风扇负,单片机地接电源负,单片机的1个IO设置推挽输出模式接风扇PWM引脚,风扇测速线接到单片机某IO.,此IO设置为输入模式,且加上拉电阻到VCC.硬件大概就这样了。至于软件,如果单片机自带PWM输出功能得话就很简单了,设置一下相应寄存器即可有PWM输出,没有PWM功能得话可以用定时器模拟实现。测速得话可以数一定时间内测速线上的上升沿或下降沿的个数,然后计算一下即可得到转速数据。一般风扇每转一圈会有3次霍尔信号输出,所以脉冲数要除以3才是转速。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/yw/11459144.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-16
下一篇2023-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存