香橙派AIPro 20T手动控制风扇转速,优化设备温度管理
收藏回复举报
香橙派AIPro 20T手动控制风扇转速,优化设备温度管理
新人帖
发表于2024-06-29 12:14:19
0 查看
  1. 在默认的Auto模式下,风扇在开机后基本不动,导致设备温度迅速升高,甚至烫手。为了解决这一问题,我们可以通过手动模式来根据不同的温度调整风扇转速,从而有效控制设备温度。

  2. 我们需要将默认的自动控制风扇速度换成手动控制(0为手动,1为自动)。

    sudo npu-smi set -t pwm-mode -d 0
  3. 以下是一个名为fan_control.sh的Bash脚本,你可以将其放置在任意位置,例如/root目录下。该脚本包含了详细的温控逻辑,并附有清晰的注释,方便你根据需要进行修改。

    #!/bin/bash
    
    get_current_temperature() {
        temperature=$(sudo npu-smi info -t temp -i 0 | grep "Temperature (C)" | awk '{print $NF}' | cut -d. -f1)
        echo "当前温度为: $temperature°C"
    }
    
    get_fan_speed() {
        fan_speed_radio=$(sudo npu-smi info -t pwm-duty-ratio -i 0 | grep "pwm-duty-ratio(%)" | awk '{print $NF}')
        echo $fan_speed_radio
    }
    
    set_fan_speed() {
        temperature=$1
        current_fan_speed=$(get_fan_speed)
        # 如果温度低于35度,设置风扇转速为35%
        if [ $temperature -lt 35 ]; then
            target_fan_speed=35
        # 如果温度在35度~50度之间,设置风扇转速为50%
        elif [ $temperature -ge 35 ] && [ $temperature -lt 50 ]; then
            target_fan_speed=50
        # 如果温度在50度~65度之间,设置风扇转速为65%
        elif [ $temperature -ge 50 ] && [ $temperature -lt 65 ]; then
            target_fan_speed=65
        # 如果温度在65度~70度之间,设置风扇转速为70%
        elif [ $temperature -ge 65 ] && [ $temperature -lt 70 ]; then
            target_fan_speed=70
        # 如果温度在70度~75度之间,设置风扇转速为75%
        elif [ $temperature -ge 70 ] && [ $temperature -lt 75 ]; then
            target_fan_speed=75
        # 如果温度在75度~80度之间,设置风扇转速为80%
        elif [ $temperature -ge 75 ] && [ $temperature -lt 80 ]; then
            target_fan_speed=80
        # 如果温度在80度以上,则设置风扇转速为100%
        else
            target_fan_speed=100
        fi
    
        if [ "$current_fan_speed" -ne "$target_fan_speed" ]; then
            sudo npu-smi set -t pwm-duty-ratio -d $target_fan_speed
            echo "设置风扇转速为 $target_fan_speed%"
        else
            echo "当前风扇转速已经是 $target_fan_speed%,无需更改。"
        fi
    }
    
    # 获取当前温度
    get_current_temperature
    
    # 获取当前温度值
    temperature=$(sudo npu-smi info -t temp -i 0 | grep "Temperature (C)" | awk '{print $NF}' | cut -d. -f1)
    
    # 根据温度设置风扇转速
    set_fan_speed $temperature
  4. 设置可执行权限,然后执行一下该文件测试一下。

    chmod +x fan_control.sh
    ./fan_control.sh
    • 示例输出结果:
      当前温度为: 58°C
              Status                         : OK
              Message                        : Set pwm duty ratio 65 success
      设置风扇转速为 65%
  5. 设置root账户定时执行(每分钟执行一次上面的脚本)

    sudo crontab -e
    • 增加两行下面的内容,/root/fan_control.sh可以换成你的文件路径,执行结果输出放在/home/HwHiAiUser/fan_control.log路径。第一行代表每分钟检查一下温度控制,第二行代表每天凌晨覆盖日志,防止文件过大。
      */1 * * * * /root/fan_control.sh >> /home/HwHiAiUser/fan_control.log
      0 0 * * * /root/fan_control.sh > /home/HwHiAiUser/fan_control.log
  6. 保险起见,重启一下任务程序。

    sudo systemctl restart cron
  7. 如果ok,可以通过cat /home/HwHiAiUser/fan_control.log查看执行结果。

  8. 也可以通过ls -lh /home/HwHiAiUser/fan_control.log查看最新执行时间。

通过以上步骤,可以有效地管理设备温度(此时外壳只是温热),确保设备运行在最佳状态。

本帖最后由 匿名用户2024/06/30 09:51:37 编辑

我要发帖子