极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 25271|回复: 12

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

[复制链接]
发表于 2012-11-9 14:35:39 | 显示全部楼层 |阅读模式
本帖最后由 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。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1 +1 收起 理由
幻生幻灭 + 1 赞一个!

查看全部评分

回复

使用道具 举报

发表于 2012-11-9 17:08:14 | 显示全部楼层
第一次焊?比我焊的牛逼多了……
回复 支持 反对

使用道具 举报

发表于 2012-11-9 20:54:53 | 显示全部楼层
厉害!

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

使用道具 举报

 楼主| 发表于 2012-11-9 23:02:12 | 显示全部楼层
是提高pwm的基础频率。atmega8有三路pwm T/C1可产生两路pwm . T/C2产生一路pwm
第一路寄存器是 TCCR1A TCCR1B,另一路是TCCR2.调整这些寄存器就能得到不同的pwm频率,具体看datasheet
如果你用的芯片是328的话就不用那么麻烦了,arduino playground里就有现成的函数。
回复 支持 反对

使用道具 举报

发表于 2012-11-10 23:29:41 | 显示全部楼层
来张原理图把,想看看寄存器
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-11-11 09:37:40 | 显示全部楼层
wasdpkj 发表于 2012-11-10 23:29
来张原理图把,想看看寄存器

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

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

使用道具 举报

发表于 2012-11-11 20:29:37 | 显示全部楼层
zslibra 发表于 2012-11-11 09:37
寄存器不能从原理图看出来.这东西也很简单,不用原理图的。就是arduino输出5V PWM,经三极管转成10V左右的 ...

想问下在Arduino中怎么设置寄存器。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-11-11 21:10:42 | 显示全部楼层
nengcai0313 发表于 2012-11-11 20:29
想问下在Arduino中怎么设置寄存器。

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

void setup() {
TCCR1A=0xA1;   TCCR1B=0x09;}
就OK了
回复 支持 反对

使用道具 举报

发表于 2012-11-11 22:19:10 | 显示全部楼层
zslibra 发表于 2012-11-11 21:10
在setup()函数里面设置就行,寄存器名=数值;
比如说将ATMEGA8  digital pin9,pin10 产生32K频率PWM就这样 ...

谢谢!
字数补丁.exe
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-11-11 22:33:51 | 显示全部楼层
不客气,arduino是开源的,开源的精神是分享!
回复 支持 反对

使用道具 举报

发表于 2012-11-14 20:17:53 | 显示全部楼层
楼主再加上速度检测功能就完美了。风扇自带霍尔传感器,每转一圈发出两个脉冲。
回复 支持 反对

使用道具 举报

发表于 2013-2-28 14:03:20 | 显示全部楼层
zslibra 发表于 2012-11-11 21:10
在setup()函数里面设置就行,寄存器名=数值;
比如说将ATMEGA8  digital 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的系统时钟?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-14 01:28 , Processed in 0.042500 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表