1回答

1收藏

[原创] 树莓派温控风扇改进版2-shell模拟PWM实现风扇转速随温度变化

Raspberry Pi Raspberry Pi 16018 人阅读 | 1 人回复 | 2015-08-03

本帖最后由 blueanima 于 2015-8-3 22:43 编辑

上次做了一个树莓派2温控风扇,使用的是继电器,随后我发现继电器还是太大了,影响散热,于是改用了L239D作为控制芯片。连接图附后。

之前的代码中,我设定是超过某一个特定温度,比如45度,风扇启动,但是这个2.5CM的风扇噪音巨大,于是想到了PWM,网上查资料树莓派2已经没有硬件PWM了,都是soft pwm,也就是软件模拟,我理解的思路是在一个周期,比如0.1秒内,控制GPIO端口在0.03秒输出电压,0.07秒停止输出,则可以输出全功率的30%,其他以此类推。网上的都是python的代码,我自己喜欢用shell脚本,于是自己用shell脚本编写了一个。代码简陋,大家指正哈。

其中由于shell脚本只能做整数运算,而我发现要使用毫秒级的控制才能使风扇转速流畅,于是我使用了bc进行浮点运算。
为了控制输出,我的笨办法是,我想实现41-49度的风扇转速随温度变化,50度以上则全功率运行,笨办法就是49减去温度除以100得出不输出的时间,精确到小数点后3位;然后0.1-不输出时间就是输出时间。工作得还可以,呵呵。

代码

#!/bin/bash

cpu_tmp=`/opt/vc/bin/vcgencmd measure_temp | awk -F '=' '{print $2}'| awk -F '.' '{print $1}'`

#echo $cpu_tmp

echo 26 > /sys/class/gpio/export

echo out > /sys/class/gpio/gpio26/direction

while (($cpu_tmp>=41));do
        i=0
        x=`echo "scale=3;(49-$cpu_tmp)/100" | bc`
        y=`echo "scale=3;0.1-$x" | bc`

        while (($i<50));do
                echo 1 > /sys/class/gpio/gpio26/value
                sleep $y
                echo 0 > /sys/class/gpio/gpio26/value
                sleep $x
                i=$(($i+1))
#               echo $i,$x,$y,$cpu_tmp
                cpu_tmp=`/opt/vc/bin/vcgencmd measure_temp | awk -F '=' '{print $2}'| awk -F '.' '{print $1}'`

                        while (($cpu_tmp>=49));do
                                echo 1 > /sys/class/gpio/gpio26/value
                                sleep 10
                                cpu_tmp=`/opt/vc/bin/vcgencmd measure_temp | awk -F '=' '{print $2}'| awk -F '.' '{print $1}'`
                        done
        done

done


之前使用继电器的照片,有点大

自己焊接一个简单的电路板

我自己加上注释的电路图,L239D的

评分

参与人数 1与非币 +5 收起 理由
loveeeboard + 5 三周年铜板双倍!

查看全部评分

分享到:
回复

使用道具 举报

回答|共 1 个

倒序浏览

沙发

EEboardMM

发表于 2015-8-13 14:35:22 | 只看该作者

写的不错感谢分享,相互加个QQ吧方便以后的联系2716493599
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条