
PWM风扇调速板
简介
使用MCU控制和测速4pin机箱风扇
简介:使用MCU控制和测速4pin机箱风扇开源协议
:GPL 3.0
描述
使用MCU测速和控制常见的4pin或3pin电脑风扇
注意!本工程USB接口规格为5V1A,总功率请勿超过5W。请勿使用大功率暴力风扇,否则将可能烧毁板上器件,乃至主板USB接口!!
工程说明
MCU:STM32F030C8T6
数码管驱动:CH455G
5V到12V升压:MT3540-F23(注意此芯片有3种规格,对应3种FB电压,本工程用的是1.23V,若使用其他电压需要修改相应的FB电阻阻值)
5V到3.3V降压:AMS1117-3.3
使用USB5V供电,一路4pin为5V直出,适合低电压小风扇,另一路为12V升压输出,适合12cm的机箱风扇。两路风扇独立控制,两个轻触按钮用以选择控制、显示哪一路风扇的转速。自复位钮子按钮用以调整PWM占空比,从而控制风扇的转速。调整转速时数码管显示当前占空比,2秒无操作之后自动切换为显示转速(RPM)。上电后风扇转速默认为50%。
由于上电时电容充电会瞬时拉低电压,所以CH455G延时1秒进行初始化,否则可能会因为电压不稳而导致初始化失败。
本工程中除了自复位钮子按钮以外,所有器件均可在立创商城找得到,单个成品成本不到10块钱。
STM32F030C8在本工程中是完全overkill的,但我为什么还是选择了这片MCU呢,因为公司里有现成的不要钱...而且ST的生态链太舒服了,底层CubeMX直接生成好,自己只要写应用层就行了,不用手动配置那么多的寄存器。整个代码编写+调试只用了半天。
如果大家想节约成本,完全可以使用引脚更少的8位MCU来替代,但强烈建议选用拥有以下规格的型号:
至少2个独立定时器,一个用于PWM精确输出,一个用于精确测速和系统滴答
至少2个支持边沿触发的GPIO口,用以检测测速信号
至少1个硬件I2C口,用以驱动CH455G数码管显示
可选1个硬件UART串口,可与上位机通信,实现上位机控制、读取转速,甚至可以使用无线模块做成无线控制
若选用5V供电的单片机,还可以节省3.3V的LDO
如果想用来控制大功率暴力风扇,请务必换用支持大电流的Type-C接口,并使用更高功率的DCDC芯片。或者直接换用DC12V或PD输入,然后降压给MCU供电用以控制,风扇直接使用DC供电。
原理
我们常见的4pin风扇引脚定义如上图,3pin则是无调速少了第四根调速线。(即便如此我们也可以通过控制2脚VDC的电压实现调速)
测速
第3脚测速线连接到风扇内部的一个霍尔开关上。大多数的风扇每当转过一圈时,霍尔开关会输出2个上升沿或下降沿(少数风扇转一圈的边沿数量不同,可以自行测试)。注意此引脚为一个开漏输出,必须有外部上拉电阻,否则MCU无法检测
通过计算两个上升沿或下降沿的间隔,我们就可以算出风扇当前的转速:
RPM(圈每分钟) = 60*1000/Δt/2
如上图代入我们可以算出当前转速大约为1764转每分钟
使用MCU的外部中断IO脚,再加上硬件定时器,我们就可以精确算出当前的转速了(其实还是有一定误差,与定时器和外部中断分辨率有关)
调速
第4脚为调速输入,通过改变输入方波的占空比,可调节风扇的转速。当此线拉低到GND时,风扇转速最小(不为0),当拉高到5V时,风扇转速最大。大部分情况下,此引脚被风扇内部上拉到5V,也就是说当此脚悬空时风扇转速默认为最高。
软件代码
本工程对应的MCU代码已开源到github,以后代码更新都会在这里。若觉得好用的请点个star,谢谢!
STM32F030C8代码
若只想直接烧录到MCU内,本页附件已经有编译好的HEX文件,用STM32 ST-LINK Utility烧录即可。
设计图

BOM


评论