什么是好的风扇速度算法?

时间:2011-10-16 10:44:08

标签: performance

我的粉丝有24个速度步。它认为热关断是105°C。空闲温度约为75°C。是一个很好的算法,采取温度下限和温度更高的界限,并将其除以n个速度步骤?

编辑:ATM我使用2个循环和85°C的up_threshold,但那是在我知道24个速度步骤之前:

error |= ec_read(EC_RTMP, &ec_rtmp);
if ( ( ec_rtmp < FAN_UPTHRESHOLD_TEMP && sloop < 0 ) ||
    ( ec_rtmp < FAN_UPTHRESHOLD_TEMP && sloop == FAN_LOOP ) ||
         ( ec_rtmp < FAN_UPTHRESHOLD_TEMP && speed_switch == 1 )    
    )
{
    speed_switch = 1;
    sloop = FAN_LOOP;                           // 20 * 10 sec
    printk("Temp %dC: disabling fan\n", ec_rtmp);
    set_fan_disabled();
    queue_delayed_work( my_workqueue, &work_object, FAN_JIFFIES_MS*HZ );
} else 
{
    speed_switch = 0;
    printk("Temp %dC: enable fan\n", ec_rtmp);
    set_fan_enable();
    queue_delayed_work( my_workqueue, &work_object, 2*FAN_JIFFIES_MS*HZ );
}

编辑:我找到了一个很好的源代码:http://code.google.com/p/eeepc-fancontrol/wiki/Formular

1 个答案:

答案 0 :(得分:4)

您需要考虑很多因素,首先您不希望风扇在两个不同步骤之间不断反弹,因此常见的诀窍是仅在基于时间的间隔内更改风扇速度,或者如果它跨越两个高于当风扇速度上次改变时。

如果您的目标只是让笔记本电脑变得更热,那么使用速度表的表将是最合适的,但它不是理想的,并且可能让笔记本电脑变得比其他明智的需要更热是。想象一下,如果你的风扇对于当前的热量输出总是比它需要的设置慢一两个。我得到的是风扇速度应该与温度变化有关而不是与温度直接相关,但同时不要完全拒绝温度,你还需要有一个阈值表当温度超过Y时,风扇必须至少为速度X.

因此,在一段时间内,根据温度增益/损失(delta)设计您的系统,而不是在给定时间点的温度。

另外还要考虑的另一件事是风扇通常不会随着RPM的冷却而线性增加,它们通常会按照钟形曲线提高效率,然后逐渐达到峰值冷却效率(相对于RPM),然后随着转速提高它们在冷却方面效率不高。您可能会发现最后10%的风扇转速增加了几个DB,但在消除热量方面可能做得不多。

我建议使用最低风扇速度,使其低于您在正常安静条件下通常喜欢的风扇运行速度。而不是仅仅是10%,20%,30%.. 90%,100%风扇转速,我会说开始时为40%(或者对你来说最合适),然后以这个速度看看你的新怠速温度是多少,然后使用它作为增加风扇速度剩余部分的基点。

对于这个问题,没有完美的通用解决方案,与目前对噪声成本高的解释相比,您将获得基于热量输出总能得到改善的东西。因此,您应该为quietofficegaming配置文件实现不同的设置集(基于您在给定情况下的重要性和系统负载)。与具有sports modeoff road设置的汽车非常相似。