如何使用PWM控制风扇转速

近期本人入手了一个支持PWM四线控制的涡扇散热器(蓝色是温控线,黄色测速线可以先忽略),再加上VF2拥有两个PWM引脚(PWM0和PWM1),因此我打算通过VF2上的PWM来控制风扇转速。

准备工作:

  1. 一块VF2开发板,并确保你已经将官方Debian系统镜像烧录到SD卡上
  2. 四线PWM风扇(涡轮或者风扇都可以,只要支持四线PWM控制就行,我的是从鹏达蓝图里购买的涡轮风扇)

请注意:

  • 在接杜邦线和风扇线之前,请确保板子已经断电。

步骤1:链接硬件:


通过上面这张因脚图,我们可以看上上面有两个pwm引脚(pwm0和pwm1)。
将风扇的供电先接到风扇供电接口上,并且将温控线接到pwm0(32号引脚)上(测速线可以先不接),如图所示:

步骤2:启用并初始化pwm
进入系统后,执行以下命令(需要在root账户下执行,如果不是在root账户下可以复制此段代码封装成shell执行文件并使用sudo执行该shell执行文件)

echo 0 > /sys/class/pwm/pwmchip0/export
echo 1000000 > /sys/class/pwm/pwmchip0/pwm0/period
echo 0 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle
echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable

我们可以看到duty_cycle和period,period可以固定(个人建议1000000,当然如果你有更好的值可以回复我,我这边直接设置成1000000以方便参考)
如果要修搞period可以执行以下命令(需要在root账号下执行)

echo 1000000 > /sys/class/pwm/pwmchip0/pwm1/period

接下来我们只要改duty_cycle即可
步骤3:编写代码
先新建一个测试用的python脚本,python代码如下:

import os
import time
# change delay here
delay=0.5
# change delay_main here
delay_main = 5

for i in range(30,101):
    duty_cycle = 10000*i
    print(str(i)+"%")
    os.system("echo "+str(duty_cycle)+" > /sys/class/pwm/pwmchip0/pwm0/duty_cycle")
    time.sleep(delay)
print("UP: OK, DOWN TEST STARTS IN "+str(delay_main)+" SECONDS")
time.sleep(delay_main)
for i in range(100,29,-1):
    duty_cycle = 10000*i
    print(str(i)+"%")
    os.system("echo "+str(duty_cycle)+" > /sys/class/pwm/pwmchip0/pwm0/duty_cycle")
    time.sleep(delay)
print("DOWN: OK")

然后就可以看见风扇的风速自动从小到大,从大到小调整了!

2 Likes

非常棒!

1 Like