Jetson TX1的散热风扇问题

于是之前在Jetson TX1上玩耍的时候,发现貌似不论温度有多高,散热风扇都不会启动,也许是Nvidia对自己的微型核弹能承受的温度上限很有信心吧,不过为了能让这个微型核弹晚几年再炸,就搞了个监控CPU温度然后自动控制风扇的daemon。

整体思路就是通过读取 /sys/class/thermal/thermal_zone0/temp 判断温度,然后在 /sys/kernel/debug/tegra_fan/target_pwm 写入散热风扇的pwm值。然后本着一切从简的原则,直接用perl写了。

在perl程序里可以通过修改如下预定义的值来调节到你认为合理的状态

# Shall we allow the fan to stop
# 是否允许散热风扇停止(在温度低于你设定的下界时)
use constant fan_can_stop => 1;

# minimal fan pwm value
# 散热风扇最小的pwm值
# 这个值在我的Jetson TX1上是刚好能感受到有风的值
# 如果设定值太小的话,可能风扇无法启动,或者基本上没有任何散热效果
use constant min_pwm => 65;

# Stop or minimize the fan if temp is below than thremal_lower_bound
# 设定一个温度的下界(正常摄氏度的数值 * 1000),低于这个温度则最小或停止散热风扇
use constant thremal_lower_bound => 35000;

# maxmize the fan speed if temp exceeds
# 设定一个温度的上界(正常摄氏度的数值 * 1000),高于这个温度则最大散热风扇的pwm值
use constant thremal_upper_bound => 50000;

脚本放在了 jetson-tx1-fan

在这个脚本中,散热风扇的pwm值与温度\(t\)的关系是

$$\left\{\begin{align}pwm&=0&\text{if allow stop and }t\lt t_{min}\\
pwm&=pwm_{min}&\text{if disallow stop and }t\lt t_{min}\\
pwm&=255&\text{if } t\ge t_{max}\\
pwm&=\frac{255-pwm_{min}}{t_{max} - t_{min}}(t- t_{min})+ pwm_{min}&\text{otherwise}\end{align}\right.
$$

这一计算过程在 line 53 - 59

3 thoughts on “Jetson TX1的散热风扇问题”

Leave a Reply

Your email address will not be published. Required fields are marked *

18 + 19 =