raspberry pi风扇控制pwm intel

2024-05-20 19:36:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我真的希望你能帮助我,我现在有点绝望:D 我目前正试图用Linux ubuntu 5.4.0-1038-raspi上的rpi 4控制一个库存intel风扇(intel e97379-001)。(富士康的粉丝)

问题是,风扇似乎只能在2400-2700 rpm之间控制。至少改变占空比只会改变该范围内的转速。然而,英特尔表示pwm可以控制在1000-3700之间。 我正在用外部12v电源为风扇供电。风扇接地针脚连接至针脚6,pwm连接至gpio 18,以及 转速计到gpio 24。 我的问题是pyhton/c中风扇的控制(我尝试了两者)。pwm的频率为25khz(转速计的脉冲为2)。 我基本上是从https://blog.driftking.tw/en/2019/11/Using-Raspberry-Pi-to-Control-a-PWM-Fan-and-Monitor-its-Speed/获得脚本基础的

我用提供的脚本测量风扇速度,目前还没有发现错误:

import RPi.GPIO as GPIO
import time

# Pin configuration
TACH = 24       # Fan's tachometer output pin
PULSE = 2       # Noctua fans puts out two pluses per revolution
WAIT_TIME = 1   # [s] Time to wait between each refresh

# Setup GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(TACH, GPIO.IN, pull_up_down=GPIO.PUD_UP) # Pull up to 3.3V

# Setup variables
t = time.time()
rpm = 0

# Caculate pulse frequency and RPM
def fell(n):
    global t
    global rpm

    dt = time.time() - t
    if dt < 0.005: return # Reject spuriously short pulses

    freq = 1 / dt
    rpm = (freq / PULSE) * 60
    t = time.time()

# Add event to detect
GPIO.add_event_detect(TACH, GPIO.FALLING, fell)

try:
    while True:
        print "%.f RPM" % rpm
        rpm = 0
        time.sleep(1)   # Detect every second

except KeyboardInterrupt: # trap a CTRL+C keyboard interrupt
    GPIO.cleanup() # resets all GPIO ports used by this function

再现我的问题的基本python脚本是:

import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)

p = GPIO.PWM(18, 25) 
p.start(0)
try:
    while 1:
        pass

这应将风扇设置为可能的最低转速。在我的例子中,rpm输出在2370-2400之间。我还尝试将PWM从25更改为25000(如果以hz为单位),但它产生相同的输出

尝试相反操作时(即,将占空比设置为可能的最高值,更改p.start(0)->;p.start(100)),转速输出在2800-2830之间

我真的不明白问题出在哪里,我认为rpm度量是正确的,因为在执行脚本后进行比较时,我只能听到/看到转速略有下降

我希望有人能帮助我,因为我在数小时的研究后找不到解决办法:(


Tags: toimport脚本gpiotimedtstart风扇