Что такое хороший алгоритм скорости вращения вентилятора? - PullRequest
1 голос
/ 16 октября 2011

У моего вентилятора 24 скорости. Термическое отключение составляет 105 ° С Температура холостого хода составляет около 75 ° C. Является ли хорошим алгоритмом взять нижнюю границу температуры и верхнюю границу температуры и разделить ее на n скоростных шагов?

РЕДАКТИРОВАТЬ: ATM Я использую 2 цикла и up_threshold 85 ° C, но это было до того, как я узнал о 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 Ответ

4 голосов
/ 16 октября 2011

Вам нужно будет учитывать множество факторов, во-первых, вы не хотите, чтобы вентилятор постоянно подпрыгивал между двумя разными шагами, поэтому обычная хитрость заключается в том, чтобы изменять скорость вентилятора только на интервале времени или если он пересекает две границы выше, чемкогда скорость вентилятора в последний раз изменялась.

Если ваша цель состоит в том, чтобы просто остановить ноутбук от перегрева, то использование таблицы ступеней скорости будет в основном подходящим, но не идеальным и может иметьноутбук становится горячее, чем должен быть.Представьте, что ваш вентилятор всегда был на одну или две настройки медленнее для текущей тепловой мощности, чем нужно.То, что я получаю, это скорость вентилятора должна быть связана с изменением температуры, НЕ напрямую связана с температурой , но в то же время не полностью отклонять температуру, вам также необходимо иметь таблицу пороговых значений, которая говоритвентилятор должен иметь скорость не менее X, когда температура превышает Y.

Поэтому проектируйте свою систему на основе увеличения / потери температуры (дельта) в течение определенного промежутка времени, а не температуры в данный момент времени.

Также еще одна вещь, которую следует учитывать, это то, что вентиляторы обычно не линейно увеличиваются при охлаждении с числом оборотов в минуту, они обычно следуют кривой колокольчика для эффективности, где они приближаются к пиковой эффективности охлаждения (против оборотов в минуту), а затем, когда вы повышаете обороты, онине будет столь же эффективным в охлаждении.Вы могли бы очень хорошо обнаружить, что последние 10% оборотов вентилятора увеличиваются на несколько DB, но, возможно, не будут делать намного больше в плане отвода тепла.

Я бы предложил использовать минимальную скорость вентилятора, которая чуть ниже, чем гдеВы обычно хотели бы, чтобы вентилятор работал в нормальных тихих условиях.Вместо того, чтобы просто набрать 10%, 20%, 30% .. 90%, 100% оборотов вентилятора, я бы сказал, начните с 40% (или что вам больше нравится), а затем на этой скорости посмотрите, какова ваша новая температура холостого хода,затем используйте это в качестве базовой точки для увеличения оставшейся части скорости вентилятора.

Не существует идеального общего решения для этой проблемы, вы получите что-то, что всегда можно улучшить, исходя из тепловой мощности по сравнению с вашим текущиминтерпретация того, что шум стоит дорого.Таким образом, вы должны реализовать различные наборы настроек для профилей quiet, office или gaming (примерно на основе того, какова будет ваша важность и нагрузка на систему для данной ситуации).Очень похоже на автомобили с настройками sports mode или off road.

...