fanspeed

技术

树莓派风扇测速 update

标签(空格分隔): 技术


经过整整一天的折腾,也总算弄明白了风扇测速线的大概工作原理。首先第一个错误就是风扇并非一个i2c设备(这个被喷了),而是标准的pwm设备。测速线输出速度的方法是,通过调整输出脉冲的宽幅(大概就是方波的波长吧),来输出占空比(有波的长度和输出周期的比值),然后占空比和转速是成正比的,查表就可以得到风扇的转速了。还有一种是转一圈输出一个脉冲,但是根据我的测试,手头上的风扇明显不是这种。
所以要检测速度也是比较简单,参考了下单片机检测风扇速度的方法,检测测速线输出的下降沿就好了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import RPi.GPIO as gpio
import timeit
import time
gpio.setmode(gpio.BOARD) #设置模式为board
gpio.setup(7,gpio.OUT)
gpio.output(7,0)
time.sleep(1)
gpio.output(7,1) #无论如何先这样操作一下
gpio.setup(7,gpio.IN)
def timer1() :
while True :
if gpio.input(7) == 0 : #检测下降沿
gpio.setup(7,gpio.OUT)
gpio.output(7,1)
gpio.setup(7,gpio.IN)
if gpio.input(7) == 0:
break
def load1() :
gpio.setup(7,gpio.OUT) #排除掉设置的时间
gpio.setup(7,gpio.IN)
if __name__=='__main__':
from timeit import Timer
import RPi.GPIO as gpio
t1=Timer("timer1()","from __main__ import timer1") #计算两次下降沿的时间
t2=Timer("load1()","from __main__ import load1")
t1=t1.timeit(1)-t2.timeit(1)
t1=t1/0.00004 #计算占空比
print t1

代码效果