近期本人入手了一个支持PWM四线控制的涡扇散热器(蓝色是温控线,黄色测速线可以先忽略),再加上VF2拥有两个PWM引脚(PWM0和PWM1),因此我打算通过VF2上的PWM来控制风扇转速。
准备工作:
- 一块VF2开发板,并确保你已经将官方Debian系统镜像烧录到SD卡上
- 四线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")
然后就可以看见风扇的风速自动从小到大,从大到小调整了!