3076|3

2945

帖子

0

TA的资源

五彩晶圆(中级)

楼主
 

【BIGTREETECH CB1】制作温控风扇和CPU负载指示灯 [复制链接]

 

BIGTREETECH CB1开发板的CPU在空闲的时候温度在58℃左右,CPU在高负荷时温度会快速上升,因此有必要安装散热片或风扇,开发板已经附带一个散热片我没有使用,我这里就制作一个CPU散热风扇加一个CPU负载指示灯。风扇功能是在CPU高于某个温度开启,低于某个温度关闭,三个LED指示CPU不同的负载率。
成品图:

散热风扇品牌:ADDA协禧
规格参数:
型号:AD0205MX-K50
类型:DC直流风扇
电压:DC5V
规格: 2506
尺寸:25*25*06 mm
转速:12000转
电流:0.13A
风压:4.70mmAq
风量:0.07CMM
轴承:双滚珠轴承
寿命:70000hr

CPU负载指示灯由绿色,黄色,红色三个发光二极管组成,指示CPU不同的负载率。
红黄绿灯亮---表示CPU负载过高,CPU(70%---100%)
黄绿灯亮-----表示CPU在正常负载区间,CPU(20%---70%)
绿灯亮-------表示CPU空闲,CPU(0%---20%)

硬件电路:
电路中使用了4个GPIO,分别控制3个LED和一路风扇,5V电压风扇转速太快,这里将风扇电压降到3.3V,风扇转速和噪音都有所降低,控制风扇的IO连接1K电阻后连接PNP三极管B级,三极管E级连接3.3V,三极管C级连接风扇正极,风扇负极连接GND,3个LED通过1K电阻后连到3.3V,4个GPIO都是低电平有效。
PIN21(gpio232)-----红色LED
PIN23(gpio230)-----黄色LED
PIN19(gpio231)-----绿色LED
PIN37(gpio79)------三极管B级

程序流程图:

程序功能:
程序使用Linux的Shell脚本语言,优点是简单易学,通用性强,在其他Linux开发板或树莓派上可以直接使用,缺点是执行速度较慢。
程序里设定CPU温度高于65℃开启风扇,CPU温度低于55℃关闭风扇。
CPU负载<20%绿灯亮,CPU负载在20%-70%绿黄灯亮,CPU负载>70%绿黄红灯亮。
程序每1秒轮询一次。

程序代码:1.sh 
#!/bin/bash
sudo chmod -R 777 /sys/class/gpio
#cd /sys/class/gpio

if [ ! -d "/sys/class/gpio/gpio232" ]; 
  then
    echo 232  > /sys/class/gpio/export
    sudo chmod -R 777 /sys/class/gpio/gpio232
fi
if [ ! -d "/sys/class/gpio/gpio230" ]; 
  then
    echo 230  > /sys/class/gpio/export
    sudo chmod -R 777 /sys/class/gpio/gpio230
fi
if [ ! -d "/sys/class/gpio/gpio231" ]; 
  then
    echo 231  > /sys/class/gpio/export
    sudo chmod -R 777 /sys/class/gpio/gpio231
fi
if [ ! -d "/sys/class/gpio/gpio79" ]; 
  then
    echo 79  > /sys/class/gpio/export
    sudo chmod -R 777 /sys/class/gpio/gpio79
fi

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


echo 1 > /sys/class/gpio/gpio232/value
echo out > /sys/class/gpio/gpio230/direction


echo 1 > /sys/class/gpio/gpio230/value
echo out > /sys/class/gpio/gpio231/direction


echo 1 > /sys/class/gpio/gpio231/value
echo out > /sys/class/gpio/gpio79/direction


echo 1 > /sys/class/gpio/gpio79/value
#--------------------  --------------------
declare -i cpu_temp=0
declare -i cpu_high=65
declare -i cpu_low=55

while [ ture ]
do
#---------------------------FAN-------------------------------
  temp1=`cat /sys/class/thermal/thermal_zone0/temp | sed 's/...$//'`
  cpu_temp=$((temp1))
#  echo $cpu_temp
  if [ $cpu_temp -gt $cpu_high ];
    then
      echo 0 > /sys/class/gpio/gpio79/value
    elif [ $cpu_temp -lt $cpu_low ];
      then
        echo 1 > /sys/class/gpio/gpio79/value
  fi
#---------------------------LED-------------------------------
declare -i cpu_load=0
declare -i led_red=70
declare -i led_yellow=20
declare -i led_green=0
temp2=`top -b -n1 | grep 'Cpu(s)' | awk '{print $2 + $4}'`
temp2=$(printf "%.0f" $temp2)
cpu_load=$((temp2))
#echo $cpu_load
  if [ $cpu_load -gt $led_red ];
    then
      echo 0 > /sys/class/gpio/gpio232/value
      echo 0 > /sys/class/gpio/gpio230/value
      echo 0 > /sys/class/gpio/gpio231/value
    elif [ $cpu_load -lt $led_yellow ];
      then
        echo 1 > /sys/class/gpio/gpio232/value
        echo 1 > /sys/class/gpio/gpio230/value
        echo 0 > /sys/class/gpio/gpio231/value
      else
        echo 1 > /sys/class/gpio/gpio232/value
        echo 0 > /sys/class/gpio/gpio230/value
        echo 0 > /sys/class/gpio/gpio231/value
  fi
  sleep 1s
done
程序如果在Windows下编写,在传到Linux下运行时别忘记用dos2unix更改一下格式,否则语法报错。

测试方法:
这里测试用到一条命令
dd if=/dev/zero of=/dev/null &
这条指令是在后台运行dd命令,输出到/dev/null, 实际上仅仅占用CPU算力,没有IO操作。
执行1条此指令会使一个核心的CPU满载,因为此开发板的H616是四核心,也就是达到总的CPU占用率25%(黄灯亮),执行2条就会达到50%,执行3条就会达到75%(红灯亮)。当执行完3条dd指令后CPU温度也会快速上升,当CPU温度超过65℃就会开启风扇,风扇转一小会儿后,当CPU温度低于55℃风扇停止。
使用 pkill dd 命令杀死dd进程,观察LED灯的变化。

测试视频:
视频在24秒开启风扇,1分38秒关闭风扇。

测试

 

最新回复

我这里就制作一个CPU散热风扇加一个CPU负载指示灯。风扇功能是在CPU高于某个温度开启,低于某个温度关闭,三个LED指示CPU不同的负载率。 非常好的教学帖!   详情 回复 发表于 2023-1-22 08:00
点赞 关注
 
 

回复
举报

6593

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

看效果风扇控制的开启和关闭精确度挺好

点评

谢谢回复,是的,控制精度是挺好的。  详情 回复 发表于 2023-1-20 21:02
 
 
 

回复

2945

帖子

0

TA的资源

五彩晶圆(中级)

板凳
 
Jacktang 发表于 2023-1-20 18:47 看效果风扇控制的开启和关闭精确度挺好

谢谢回复,是的,控制精度是挺好的。

 
 
 

回复

6841

帖子

11

TA的资源

版主

4
 

我这里就制作一个CPU散热风扇加一个CPU负载指示灯。风扇功能是在CPU高于某个温度开启,低于某个温度关闭,三个LED指示CPU不同的负载率。

非常好的教学帖!

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表