zslibra 发表于 2012-11-9 14:35:39

第一次用ATMEGA8最小系统做的PWM机箱风扇调速器

本帖最后由 zslibra 于 2012-11-9 14:42 编辑

去片~~




做了一个PWM机箱风扇调速器,用ATMEGA8输出PWM,原来默认的是496HZ左右的PWM频率去控制风扇的话会有“滋滋”的电子噪声,达不到静音的效果。通过改寄存器提升到31.25KHZ,去调制12V,产生12V的PWM去控制机箱风扇就听不到滋滋声,只听到风声了,呵呵。
这个调速器经试用效果还算OK,同时带动5个0.4~0.5A的风扇MOS也不发热。

第一次焊洞洞板,真的焊得想吐~~四针I2C 1602液晶输出接口和6pin编程口是后来加上的,懒得布线了,直接飞线,无视ing。

friskit 发表于 2012-11-9 17:08:14

第一次焊?比我焊的牛逼多了……

ewx_boy 发表于 2012-11-9 20:54:53

厉害!

“通过改寄存器提升到31.25KHZ”是指控制PWM的基础频率吗?怎么实现,楼主能否多讲讲~~~

zslibra 发表于 2012-11-9 23:02:12

是提高pwm的基础频率。atmega8有三路pwm T/C1可产生两路pwm . T/C2产生一路pwm
第一路寄存器是 TCCR1A TCCR1B,另一路是TCCR2.调整这些寄存器就能得到不同的pwm频率,具体看datasheet
如果你用的芯片是328的话就不用那么麻烦了,arduino playground里就有现成的函数。

wasdpkj 发表于 2012-11-10 23:29:41

来张原理图把,想看看寄存器

zslibra 发表于 2012-11-11 09:37:40

wasdpkj 发表于 2012-11-10 23:29 static/image/common/back.gif
来张原理图把,想看看寄存器

寄存器不能从原理图看出来.这东西也很简单,不用原理图的。就是arduino输出5V PWM,经三极管转成10V左右的PWM去推MOS来驱动风扇。

digital pin9,pin10 产生32K频率的寄存器设置:TCCR1A=0xA1;   TCCR1B=0x09;

nengcai0313 发表于 2012-11-11 20:29:37

zslibra 发表于 2012-11-11 09:37 static/image/common/back.gif
寄存器不能从原理图看出来.这东西也很简单,不用原理图的。就是arduino输出5V PWM,经三极管转成10V左右的 ...

想问下在Arduino中怎么设置寄存器。

zslibra 发表于 2012-11-11 21:10:42

nengcai0313 发表于 2012-11-11 20:29 static/image/common/back.gif
想问下在Arduino中怎么设置寄存器。

在setup()函数里面设置就行,寄存器名=数值;
比如说将ATMEGA8digital pin9,pin10 产生32K频率PWM就这样写:

void setup() {
TCCR1A=0xA1;   TCCR1B=0x09;}
就OK了

nengcai0313 发表于 2012-11-11 22:19:10

zslibra 发表于 2012-11-11 21:10 static/image/common/back.gif
在setup()函数里面设置就行,寄存器名=数值;
比如说将ATMEGA8digital pin9,pin10 产生32K频率PWM就这样 ...

谢谢!:)
字数补丁.exe

zslibra 发表于 2012-11-11 22:33:51

不客气,arduino是开源的,开源的精神是分享!

johnsonzzd 发表于 2012-11-14 20:17:53

楼主再加上速度检测功能就完美了。风扇自带霍尔传感器,每转一圈发出两个脉冲。

wwwtiger 发表于 2013-2-28 14:03:20

zslibra 发表于 2012-11-11 21:10 static/image/common/back.gif
在setup()函数里面设置就行,寄存器名=数值;
比如说将ATMEGA8digital pin9,pin10 产生32K频率PWM就这样 ...

以上代码相当于
WGM = 0101
0 1 0 1 --Fast PWM, 8-bit 0x00FF BOTTOM TOP

COM = 10 (Fast PWM)
1 0   --Clear OC1A/OC1B on Compare Match, set OC1A/OC1B at BOTTOM (non-inverting mode)

CS = 001 表示时钟周期等于系统时钟
0 0 1 -- clkI/O/1 (No prescaling)

输出 A 频率: 16 MHz / 255 = 62.5 KHz
输出 B 频率: 16 MHz / 255 = 62.5 KHz

难道楼主用的是8M的系统时钟?
页: [1]
查看完整版本: 第一次用ATMEGA8最小系统做的PWM机箱风扇调速器