使用PWM
进行风扇控制的特点就不说了,坛里有很多方案,几年前我刚开始时也做了一个:http://bbs.mydigit.cn/read.php?tid=355034但不好调参,就放弃了。 实际应用来看,对PWM
的控制频率选择是个重要问题,可能有性能、噪音、振动等多个方面的考虑,但进行小风扇的控制,比如电脑机箱散热风扇,只有噪音问题最难处理,网上查了一些资料,推荐pwm
控制频率根据电机功能及功率,从几KHZ
到更高都有,但实际效果都不知道,下面是我做的小实验,寻找小风扇pwm
频率的影响。 1
、使用我的旧12cm
电源风扇,只有2
个针,DC12V
电压/0.18A
电流,照片如下: 2
、N
沟道mos
管做开关,电路如下: 由于电压低,电流小,管子没有任何负担。 3
、单片机用attiny45
进行PWM
控制,PB1
做pwm
输出,可在线任意调整PWM
频率和占空比,程序如下: /*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Professional
Automatic Program Generator
Project : t45_pwm_test_cv
Version :
Date : 2014/3/29
Author : seaman
Company :
Comments:
Chip type : ATtiny45
AVR Core Clock frequency: 8.000000 MHz
Memory model : Tiny
External RAM size : 0
Data Stack size : 64
*****************************************************/
#include <tiny45.h>
#define uchar unsigned char
#define uint unsigned int
// Declare your global variables here
void main(void)
{
// Declare your local variables here
uchar pwm_rate=5; //
频率kHz
,占空比%
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
// Input/Output Ports initialization
// Port B initialization
// Func5=In Func4=In Func3=In Func2=InFunc1=Out Func0=In
// State5=T State4=T State3=T State2=TState1=0 State0=T
PORTB=0x00;
DDRB=0x02;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 1000.000 kHz
// Mode: Fast PWM top=OCR0A
// OC0A output: Disconnected
// OC0B output: Inverted PWM
TCCR0A=0x23;
TCCR0B=0x0b; //0A:1000K 0B:125K 0C:31.25k
时钟TCNT0=0x00;
OCR0A=0x20; //
与TCCR0B
结合进行频率调整OCR0B=(OCR0A/10)*pwm_rate;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 1000.000 kHz
// Mode: Normal top=0xFF
// OC1A output: Disconnected
// OC1B output: Disconnected
// Timer1 Overflow Interrupt: On
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
PLLCSR=0x00;
TCCR1=0x04;
GTCCR=0x00;
TCNT1=0x40;
OCR1A=0x00;
OCR1B=0x00;
OCR1C=0x00;
// External Interrupt(s) initialization
// INT0: Off
// Interrupt on any change on pinsPCINT0-5: On
GIMSK=0x20;
MCUCR=0x00;
PCMSK=0x08;
GIFR=0x20;
// Timer(s)/Counter(s) Interrupt(s)initialization
TIMSK=0x04;
// Universal Serial Interfaceinitialization
// Mode: Disabled
// Clock source: Register & Counter=noclk.
// USI Counter Overflow Interrupt: Off
USICR=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
ACSR=0x80;
ADCSRB=0x00;
DIDR0=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// Global enable interrupts
#asm("sei")
while (1)
{
// Place your code here
}
}
4
、噪声没办法测,不可能去找个噪声仪,只能凭主观评判,晚上安静时大致估算吧,使用50%
占空比,对多个频率进行了实测;对噪声较高的频率,调整10-90%
占空比进行实验,结果如下: 5
、为增强主观感觉,录制了一小段视频,选了噪声较高的2
个频率进行对照:
http://v.youku.com/v_show/id_XNjkyMjI4MTI4.html
6、实验表明,大约1000-3000Hz是啸叫声主要频段,随频率升高,叫声加强,非常刺耳;1000Hz以下低频段噪音相对较低,但部分频率有低强度的“翁”声振动,长时间听不舒服;4000Hz以上高频段,几乎无啸叫声,只有风扇的风声,频率到10kHz以上时已没有啸叫声音。占空比影响小,在20%以下和80%以上时,相对声音略有下降。
7、建议pwm调节频率选择在5KHz以上,可以避免啸叫声音影响。
8、实验只在这一只风扇上做的,肯定对不同风扇结果会不一样,但考虑人耳朵的听觉范围,其它风扇大致也是近似的结果吧。
抛砖引玉了。