Эффективное управление вентиляторами

15 июля 2007, воскресенье 13:34
для раздела Блоги
Вступление

В настоящее время собрать свою систему водяного охлаждения практически не составляет труда : есть готовые комплекты, отдельные комплектующие великое множество описаний самоделок, советов и обзоров собранных систем. Обычно схема работы системы охлаждения следующая : тепло снимается на водоблоках, переносится по шлангам помпой до радиатора где высаживается в воздух обычно с помощью принудительного обдува вентиляторами. Количество энергии (тепла) выделяемого компонентами компьютера зависит от нагрузки на них. При спокойной работе (серфинг в интернете, чтении книг, и т.п.) тепла выделяется мало а при кодировании видео, просмотре фильмов, играх энергии выделяется в несколько раз больше. Соответственно количество тепла, которое необходимо рассеять на радиаторе пропорционально нагрузке на компьютер. Чем интенсивнее радиатор обдувается тем лучше происходит отдача тепла, но от скорости вращения вентилятора зависит комфорт. Сидеть рядом с пылесосом никому не нравится, верно?
Сразу хочу оговориться, что я не хочу рассматривать полностью пассивные системы. На мой вкус они предназначены только для систем работающих без разгона в дефолте, очень дороги и не годятся для «мощных» систем.
Как я писал раньше количество тепла рассеиваемого на радиаторе зависит от нагрузки на компьютер, и от этого должна зависеть скорость вращения вентиляторов. Конечно, материнские платы имеют возможность управлять вентиляторами, по одному им известному закону, который нельзя задать внешне. Например поставить в зависимость от температуры процессора скорость вращения всех вентиляторов распаянных на плате. Этому есть объяснение: производители ориентируются на большинство, а большинству это не нужны. Сколько я не использовал материнских плат не на одной не было регулирования которое меня бы устроило.
Я сформулировал следующие требования к компьютеру : если я сижу и работаю (нагрузка на компьютер небольшая) он должен работать максимально тихо, если я играю (шум меня мало волнует) система охлаждения должна работать так чтобы эффективно охлаждать компоненты компьютера (процессор, северный мост, видеокарту).

Часть 1. Железная.

Аппаратная часть устройства разрабатывалась в программе Altium Designer версии 6.7. Большая часть УГО и посадочных мест под элементы были нарисованы вручную, хотя некоторые были взяты из стандартных библиотек, входящих в установочный дистрибутив.

1.1 Общие вещи
Многие решения и выбор комплектующих был обусловлен не необходимостью, а то что это было просто «на столе» в момент когда я проектировал устройство. Я решил назвать его AFCFaT ( Arm Freq Control Fan a Temp) (название у меня не прижилось, дальше в тексте я буду называть AFCFaT просто устройство)и сформулировал основные функции которые оно должно выполнять : отображать информацию на дисплее, управлять вентиляторами, иметь возможность подключения к компьютеру, измерять температуру в нескольких точках, иметь размеры, позволяющие установить его в стандартный 5-ти дюймовый отсек корпуса (я выбрал размеры печатной платы в 138,5 мм на 41 мм), питаться от блока питания компьютера.
По причине приведенной выше в устройство было построено на базе микроконтроллера LPC2148. Этот микроконтроллер выпускается фирмой NXP (ранее PHILIPS), построен на базе RISC ядра ARM7TDMI(R). Основные характеристики : частота ядра до 60 МГц, ОЗУ 32+8 Кб, Flash 512 Кб, набор периферии : ЦАП, АЦП, таймеры, счетчики, I2C, SPI, UART, USB и т.д. Более подробно с ним можно познакомиться на сайте фирмы разработчика (nxp.com).
Для отображения информации был использован дисплей TIC32 производства фирмы LAMPIRE. Данный дисплей построен на базе микроконтроллера PCF8531 (nxp.com), разрешение 128х34 точки, интерфейс I2C, монохромный и выпускается в нескольких цветах и вариантах исполнения : на просвет, на полу просвет, на отражение. Был выбран черно-белый дисплей с белой подсветкой.
Для управления устройством были предусмотрены 5 клавиш. Для подключения к компьютеру было решено использовать интерфейс USB.

1.2 Управление вентиляторами.

Подавляющее большинство вентиляторов представленных на рынке управляются напряжением. Больше напряжение быстрее он вращается, меньше напряжение, медленнее.
Я решил управлять вентиляторами при помощи ШИМ-а. Для управления был использован транзистор IRF620 (N-канальный, максимальное напряжение сток-исток 200в, максимальный ток 5А). В ходе экспериментов было определено, частота ШИМ должна быть выше чем порог слышимости у человека, т.е. более 20 кГц. Если частота была ниже было слышно, как тарахтит двигатель вентилятора.
Все вентиляторы по разному воспринимали управление ими при помощи ШИМа. Их можно разделить на три группы : 1. запускается на 80%-90% длительности периода ШИМ, при периоде ниже 80% останавливаются. 2. запускаются на примерно 20%, работают до 5-10% (изображая из себя ветряную мельницу). 3. запускаются на 1% и работают во всем диапазоне. Я использовал вентиляторы Zalman F3 (120 мм, 800-1800 rpm). Они смогли запускаться на 1% и работают во всем диапазоне изменения длительности импульсов ШИМ.
Максимальное количество каналов для управления ограничено микроконтроллером. Микроконтроллер LPC2148 имеет 5 выводов ШИМ генератора, один из которых был использован для управления подсветкой строки. Осталось четыре, все были использованы для управления вентиляторами.
Управление вентиляторами было настроено на следующее :
air_temp=Air.GetTemp(); получить температуру воздуха
out_temp=InRadiator.GetTemp(); получить температуру воды входе в радиатор

out_temp=out_temp-air_temp-4; чем выше разница воздух-вода тем эффективнее происходит теплообмен воздуха с радиатором, я специально оставил зазор чтобы система работала тише. Да, я проиграл в эффективности, но выиграл в уровне шума.

pwm_count=5+(int)(out_temp*10*1); 5% минимальная скорость вращения вентиляторов, при каждом увеличении разницы воды на входе в радиатор с воздухом мощность на вентиляторах увеличивается на 1%

В практически все вентиляторы встраивают тахометры, позволяющие вычислять частоту вращения вентилятора. Для меня, как для разработчика это выход, который нужно подтянуть к питанию через резистор. В определенные моменты времени этот выход будет замыкаться на землю, в результате я получу частоту вращения вентилятора. Но так как я управляю с помощью ШИМ-а с частотой на несколько порядков большей чем у вентиляторов то в один и тот же период вращения лопастей питание на вентиляторе появится и пропадет несколько тысяч раз. Для измерения частоты необходимо на короткий промежуток времени включать вентилятор на полную мощность (выключать ШИМ) и в этот промежуток измерять частоту вращения. В принципе это не сложно, просто не было необходимо для управления вентиляторами.

Была использована следующая схема управления вентиляторами :


Подключение вентилятора к микроконтроллеру

1.3 Измерение температуры

Для измерения температуры был использован чувствительный элемент платина 1000. Этот элемент имеет сопротивление при нуле градусов в 1000 Ом, и коэффициент изменения сопротивления 3.851 Ом\Гр. то есть при температуре в 10 градусов он будет иметь сопротивление 1038.51 Ома. Коэффициент изменения сопротивления зависит от температуры, что можно учесть при вычислении. Но в диапазоне от -10 градусов до +100 градусов можно предположить что он не меняется. Это вносит ошибку при измерении температуры, но вносимая погрешность меня устраивала.
Чувствительный элемент всем хорош, если бы не одно но : через него нельзя пропускать ток более 300 мкА, иначе его саморазогрев будет вносить большую погрешность в измерения. В LPC2148 есть два 7-ми канальных 10-ти разрядных АЦП, опорное напряжения для которых вырабатывается внешней микросхемой REF192 (2,5 В), следовательно шаг измерения АЦП = 2.5 В \ 1024 = 2,441 мВ. При токе в 300 мкА через чувствительный элемент при изменении его сопротивления на 10 ом (что соответствует изменению температуры на 10\3.851 = 2.6 градуса) 0.3*1010-0.3*1000=3мв. то есть при таком изменении температуры получается слишком малое изменение напряжения.
Для усиления сигнала с чувствительного элемента был использован прецензионный операционный усилитель OP291GS. Для измерения температуры для расширения диапазона измерения нужно было напряжения «нуля», соответствующее минимальной измеряемой температуре. Изначально была идея использовать ЦАП LPC2148 но он показал нестабильность в 1мВ, что приводило к изменению напряжения на входе АЦП в 10 мВ (примерно 3м значениям, что соответствовало «прыжкам» температуры на 0.2 градуса.). От ЦАП пришлось отказаться в пользу делителя напряжения на сопротивлениях и усиления напряжения нуля на операционном усилителе.

Для измерения использовалась следующая схема :


Измерение температуры

Вычисление температуры производилось по формуле :

Rpl=Vz/((Vref-Vz)/R_1+(StepADC*(*Vin)-Vz)/R_2);
Temp=(Rpl-Rz)/K;

Где :
#define R1 15000
#define R2 47000
#define Vz 0.195 напряжение нуля
#define Vref 2.492 опорное напряжение
#define K 3.851 коэффициент изменения сопротивления чувствительного элемента
#define Rz 998.8-6 сопротивление чувствительного элемента при нуле градусов
#define StepADC Vref/1024 шаг работы АЦП

Rpl — сопротивление чувствительного элемента.
R1 и R2 для каждого канала вычислялись отдельно при калибровке.


1.4 Питание

В компьютерных блоках питания предусмотрен дежурный маломощный источник примерно на 10 Ватт, который работает при выключенном компьютере. Если устройство подключено к USB оно может получать питание с шины с дежурного источника . С помощью диодов шотки 1N5819 питание микроконтроллер может получать питание либо с шины USB либо с блока питания.

1.5 Принципиальная электрическая схема устройства

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

При разработке устройства были допущены следующие ошибки :

    1.Пин P1.26 нужно подтянуть к земле через резистор. Иначе не работает JTAG.

    2.Нельзя использовать в качестве напряжения нуля выход ЦАП. Нужно допаивать делитель напряжения и усиливать его на операционном усилителе.
    3.На выход операционного усилителя, который усиливает опорное напряжение (DD5A) нужно добавить емкость.

    4.Нужно сменить разъем USB с USBB 1-J с углового на прямой.



Я не стал переделывать принципиальную электрическую схему, т.к. она полностью соответствует разведенной печатной плате. Если я буду делать следующую версию устройства, то я исправлю ошибки.


1.6 Разводка печатной платы

Плата была разведена в программе Altium Designer версии 6.7. Было изготовлено в «Резонит»-е 4-ре платы. Платы 2х слойные, с маской(зеленая) и шелкографией снизу (с одной стороны). Одна плата была полностью запаяна и сейчас стоит у меня в компьютере, вторая пошла на эксперименты, еще две остались в запасе. Плата была запаяна вручную, благо минимальный шаг всего 0.25 мм.



(кликните по картинке для увеличения)

Разводка -верх



(кликните по картинке для увеличения)

разводка - низ


Запаянная плата


(кликните по картинке для увеличения)

устройство - верх


(кликните по картинке для увеличения)

устройство - низ

Часть 2. Программная

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

2.1 Среда разработки

При написании программного обеспечения была использована среда разработки Rowley Cross Works for ARM v1.6 build 2. Данная среда использует компилятор GCC, поддерживает несколько видов JTAG-ов, имеет встроенный эмулятор и набор библиотек для организации многопоточности, позволяет программировать на C,C++,assembler.
Отдельно хочу остановиться на многопоточности. CTL (CrossWoks Tasking Libary) предоставляет поддержку потоков, планировщик, средства синхронизации потоков. Планировщик это процедура, вызываемая по таймеру и осуществляющая переключение потоков. Возможна настройка работы в режиме вытесняющей и невытесняющей многозадачности. Поток это бесконечная процедура с собственным стеком, которая вызывается периодически планировщиком, если она завершается, то считается что поток прекратил свое существование. С помощью средств синхронизации можно осуществлять следующие действия : поток может ждать определенного события, между потоками можно пересылать сообщения, можно синхронизировать работу потоков.
Я выделил два потока : опрос клавиш и основной цикл работы устройства. В потоке «опрос клавиш» я опрашиваю клавиатуру и если были нажатия клавиш посылаю их на обработку в поток «основной цикл». Поток «основной цикл» обрабатывает нажатия на клавиши, отображает информацию на дисплее, регулирует скорость вращения вентиляторов и яркость дисплея. По хорошему регулирование скорости вращения вентиляторов нужно было вынести в отдельный поток, возможно это будет сделано в следующей версии прошивки.

2.2 Настройка микроконтроллера

При старте микроконтроллера нужно выполнить ряд действий по инициализации : настроить PLL( частота работы ядра и системной шины), MAM (memory accel. module), контроллер прерываний, функциональность выводов, настройка периферии ( АЦП, ШИМ, I2C). Более подробно с этим можно познакомиться из документации на микроконтроллер и примером прошивки которая сейчас у меня используется.

2.3 Загрузка и отладка программного обеспечения

Загрузка написанной программы, ровно как и ее отладка осуществляется с помощью устройства JTAG. Я использовал сравнительно дорогой J-Link, на рынке есть в продаже его аналог Wigler, имеющий один недостаток : он подключается к компьютеру через порт LPT. Вообще на рыке есть 5-6 модификаций JTAG, примерно равных по функциональности.
Чем хороши последние микроконтроллеры — это возможностью выполнять программу по шагам в микроконтроллере. Т.е. пишем программу, шьем ее в микроконтроллер и начинаем процесс отладки, в течении которого можно посмотреть и изменить состояние памяти и регистров процессора. Также в LPC2148 есть возможность программирования через УАПП ( универсальный приемо-передатчик или UART) но с двумя минусами : для подключения к компьютеру на плате должна стоять микросхема преобразования TTL уровней в уровни COM порта, а второе что на плате должен стоять джампер, по которому происходит запуск программы прошивающей микроконтроллер.


2.4 Связь с компьютером

Для связи с компьютером был предусмотрен интерфейс USB. В LPC2148 есть встроенный USB Device 2.0 High Speed. Это значит что устройство поддерживает 32 конечные точки, максимальная скорость передачи составляет 12 Mbit. Была взята прошивка от Keil (http://www.keil.com/download/files/lpc2148_usbhid.zip) реализующая USB устройство класса HID и переработана для компилятора GCC. Чем удобно устройство HID (Human Inteface Device)? Тем что для него в операционной системе не требуется драйвера и к нему можно обращаться стандартными вызовами операционной системы (Windows). Данная прошивка реализовала две конечные точки и позволяла микроконтроллеру отвечать на запросы GetReport и SetReport. Основная трудность при реализации была в выравнивании структур дескрипторов. LPC2148 32x разрядный RISC процессор (он может работать и 16-ти разрядном режиме что позволяет экономить место в памяти и замедляет выполнение программы но мной такой режим не использовался) а дескрипторы включают в себя поля размером с байт. Основная проблема была указать компилятору что структуры нужно упаковывать. Функция связи с компьютером была не основной и требовала больших временных затрат поэтому от нее решено было отказаться на данном этапе.


Часть 3. Сборка системы

Все началось с покупки мной GeForce 8800 GTS. Практически во всех обзорах обозреватели хвалят ее систему охлаждения и особо подчеркивают что она выбрасывает горячий воздух за пределы системы. Отчасти это так, но не совсем. в окончании системы есть прорези, через которые горячий воздух выдувается обратно в системный блок.


(кликните по картинке для увеличения)

прорези на радиаторе 8800

Да и нагрев нельзя назвать «слабым», плата при работе разогревается до 60-70 градусов. Но у нас в продаже найти водоблок на 8800 нереально даже сейчас, так бы и сидел пока не наткнулся на форуме www.overclockers.ru упоминание о http://silentchill.ru/ где я заказал водоблок на 8800 GTS Innovatek Cool-Matic G80-GTS / GPU+RAM+SPG


(кликните по картинке для увеличения)

ватер 8800 низ


(кликните по картинке для увеличения)

ватер 8800 верх

, на процессор Alphacool NexXxoS HP Pro 775, помпу Eheim 600 литров и радиатор BlackICE-GTS 360. Чтобы комфортно поместить все в системный блок был прикуплен корпус Full Tower Chieftec CA-01B-B-SL-500 , который мне доработали болгаркой.


(кликните по картинке для увеличения)

исходный корпус

Со старых времен у меня был Reserator 1 (к сожалению оно может эффективно рассеять примерно 90 ватт тепла) от Zalman со встроенной помпой на 300 литров. При некоторой натяжке новая помпа встала на место старой. Также от Rezerator-а у меня осталось некоторое количество силиконовых шлангов и фитингов, что сильно облегчило сборку системы. Оказалось что шланги из ПВХ практически не гнутся, с удовольствием перегибаются а в месте перегиба «запоминают» что их здесь сломали.
Чувствительные элементы я примотал изолентой прямо на фитинги.


(кликните по картинке для увеличения)

датчик температуры выхода из радиатора


(кликните по картинке для увеличения)

датчик температуры входа в радиатор


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

Часть 4. Результат

Главный результат, это, конечно, тишина.
Собранная система :


(кликните по картинке для увеличения)

устройство в работе


собранная система

В темноте :


(кликните по картинке для увеличения)

устройство в работе


процессор : Core 2 Duo E6600 2,4 Ггц @ 3,3 Ггц Vcore=1.350В процессор берет 3,6 Ггц при Vcore=1.45В, но в TAT без нагрузки температура 60 градусов на оба ядра. Я решил пожетвовать 270 МГц ради более благоприятного температурного режима.
видео карта : GeForce 8800 GTS 513:1800 @ 648:1900 видео можно разогнать и
сильнее, но нет смысла, упирается в производительность центрального процессора

материнская плата : Gigabyte GA-965P-DS3 на северном мосте материнской платы установлен водоблок от Zalman
память : 2х1Gb Samsung original 667 МГц @ 740 5-5-5-15 2.1V

Нагрев 3DMark 2006



(кликните по картинке для увеличения)

GPU нагрев 3Dmark 2006

Проверка TAT


(кликните по картинке для увеличения)

Нагрев в ТАТ

Заключение
Главная цель добиться тишины и прохлады в системном блоке была достигнута. Да, в разработанном устройстве есть ошибки и недоработки. Как путь развития это новая печатная плата, возможно управление вентиляторами напряжением, измерение частоты работы вентиляторов, более аккуратное вырезание заглушки для 5-ти дюймового отсека, подключение к компьютеру через USB, программа для компьютера позволяющая через USB менять настройки микроконтроллера, сохранение параметров в flash и т.д.

Разработанное устройство можно использовать не толко для управления системой охлаждения, но и для вывод информации на дисплей (например строки из WinAmp) и совершение простых действий по управлению компьютером.

Главное это не построить, а определиться что строить. Можно добавить функциональность например датчик потока жидкости, датчик шума, реле для включения помпы или компьютера. Если есть идеи что можно добавить, я буду рад хорошим идеям.


есть что сказать? осуждение
Оценитe материал

Возможно вас заинтересует

Популярные новости

Сейчас обсуждают