С недавнего времени из-за постоянной жары у меня стал перегреваться ноутбук. Конечно, первым желанием было найти прохладное место и работать там, но увы, такого места не было. Так как улучшить встроенное охлаждение ноутбука не представлялось возможным, я обратил внимание на охлаждающие подставки. Но и тут подходящих вариантов не было: либо кулер был один, да еще и маломощный, либо два и больше, что в лучшую сторону сказывается на охлаждении и в худшую на цене. Тогда было решено собирать охлаждающую подставку самостоятельно.
Для устройства были «выдвинуты» такие требования:
- недорогой микроконтроллер
- светодиодная индикация работы
- не менее трех кулеров
- питание от USB порта ноутбука
Из микроконтроллеров, которые были у меня в наличии, поставленным требованиям отвечал лишь PIC12F683. Его я и использовал. Но так как у семейства PIC12 всего 6 свободных пинов (5, если не считать «reset»), то пришлось использовать сдвиговый регистр 74HC595. Так что, кроме управления 3-мя кулерами, осталось место и для светодиодов. Схема устройства показана ниже:
Микроконтроллер работает на частоте 4МГц. В качестве датчиков температуры используются два термистора. Выбор пал именно на термисторы, а не на DS18B20, по причине значительной разницы в цене, а так же скорости измерения. Конечно, точность будет не очень высокой, но для определения перегрева ноутбука вполне достаточная. Кроме того, двух датчиков более чем достаточно, для корректного измерения температуры. Конечно, можно было взять всего один датчик, разместить его в зоне наибольшей нагреваемости, и при определенной температуре включать 1, 2 и 3 кулера. Но так как у моего ноутбука эта зона может кардинально отличаться месторасположением от других моделей, было решено использовать два датчика. На схеме указаны транзисторы BD139, но их ставить нет смысла. Подойдут и "старички" кт315 (макс. ток нагрузки 100мА). На схеме они лишь для разводки платы - ставил первые попавшиеся с подходящей цоколевкой для кт315. Так же, больше 500 мА ноут на USB не выдаст.
Алгоритм работы устройства прост:
- T1 < T1у , T2 < T2у - кулера выключены
- T1 > T1у , Т2 < T2у - включен 1 кулер (аналогично и для 2 кулера)
- T1 > T1y , T2 >T2y - включены 1 и 2 кулера
- Если же Т1 > Т1к и Т2 > T2к, включается и 3 кулер
*Т1, Т2 - измеряемые температуры, Т1у, Т2у - установленные температуры, Т1к, Т2к - критические температуры.
После краткого алгоритма работы, собственно программа для микроконтроллера:
program NotePicFan_v2; const a = 0.001129148; // Константы для измерения температуры const b = 0.000234125; // const k = 0.0000000876741; // var registry: byte at GPIO; // i, t: byte; // reg: array [0..7] of byte; // Массив для конфигурации сдвигового регистра function RTemp(pin: byte): integer; // Функция чтения температуры var d, e: integer; begin d := ADC_Read(pin); d := log((10240000/d) - 10000); d := 1 / (a + (b * d) + (k * d * d * d)); e := d - 273.15; result := e; end; procedure RegOut; // Процедура записи в сдвиговый регистр var i: byte; begin for i := 0 to 7 do begin t := 16; // Промежуточная переменная t введена так t.5 := reg[i]; // как mP не хотел менять одиночные биты в порте. registry := t; delay_us(100); t.2 := 1; registry := t; delay_us(100); registry := 16; delay_us(100); end; registry := 0; delay_us(100); registry := 16; end; procedure Verify; // Процедура проверки соответствия температуры заданным значениям var a, b: integer; i: byte; begin a := RTemp(0); b := RTemp(1); /////////////////////////////////////////////////////////////////////////// for i := 0 to 2 do reg[i] := 1; for i := 3 to 5 do reg[i] := 0; reg[6] := 0; reg[7] := 1; /////////////////////////////////////////////////////////////////////////// if (a > 55) and (b > 55) then begin for i := 0 to 2 do reg[i] := 0; for i := 3 to 5 do reg[i] := 1; end else if (a > 40) and (a < 55) and (b > 40) and (b < 55) then begin reg[0] := 0; reg[1] := 0; reg[3] := 1; reg[4] := 1; end else if (a > 40) and (b < 40) then begin reg[0] := 0; reg[3] := 1; end else if (a < 40) and (b > 40) then begin reg[1] := 0; reg[4] := 1; end; RegOut; end; begin GPIO := $0; TRISIO := $3; // Первые два пина - на вход (аналоговый) ADC_Init; While TRUE do begin Verify; delay_ms(100); end; end.
Программа написана в среде mikroPascal for PIC. Я не стал использовать прерывания, так как в них особой необходимости нет. Если бы требовалось измерение через точно заданные промежутки времени и при этом осуществлялась связь по UART, то тогда без прерываний уже никак.
Самое сложное пожалуй даже не опрос датчиков, а управление сдвиговым регистром. Для этого был выделен массив (reg). В него и записывается информация
end else if (a > 40) and (a < 55) and (b > 40) and (b < 55) then begin reg[0] := 0; reg[1] := 0; reg[3] := 1; reg[4] := 1; end else if (a > 40) and (b < 40) then begin
(соответственно, нулевой элемент массива равен старшему биту, который передавался в сдвиговый регистр),
Которая после последовательно записывается в регистр.
for i := 0 to 7 do begin t := 16; // Промежуточная переменная t введена так t.5 := reg[i]; // как mP не хотел менять одиночные биты в порте. registry := t; delay_us(100); t.2 := 1; registry := t; delay_us(100); registry := 16; delay_us(100); end; registry := 0; delay_us(100); registry := 16;
Эта процедура несколько замороченная, немного разберем ее.
Допустим, reg[i] в данный момент равен 1. Значит, нам нужно установить в "1" в переменной t бит, с помощью которого будем передавать данные в регистр сдвига. Это бит 5.
Установив его, можно отправлять переменную в регистр GPIO. Далее, "подхватывания" регистром сдвиг данных нужен тактовый импульс, что мы и делаем:
- бит 2 в t = 1
Потом, отсылаем импульс для защелкивания данных и проходим этот цикл еще 7 раз.
Ниже представлен скриншот из Proteus'a:
Программа работает по следующему алгоритму:
- Инициализация АЦП
- Запуск преобразования АЦП
- Чтение АЦП
- Конвертация в значение температуры
- Если температура выше/ниже критической то ... (действие)
- Запись последовательности битов в регистр сдвига (управление кулерами, светодиодами)
- Пауза (100..1000 мс)
- Повтор, начиная с 1 - го пункта
Как видите, ничего сложного. Единственное неудобное место - это использование промежуточной переменной. Но с этим ничего сделать не получилось,так как mP, при установке определенного бита порта, остальные биты просто сбрасывал на "0".
Что касается чтения значения АЦП с последующим преобразованием, то это типовая процедура и ее можно свободно найти в интернете.
По - началу, я хотел развести плату на одностороннем текстолите, но позже все же пришлось малую часть дорожек перенести на лицевую сторону платы. Но не смотря на это, плата получилась достаточно простой, что бы ее повторил даже начинающий радиолюбитель (при условии, что у него был опыт работы с smd компонентами). В любом случае, смотрите сами:
Синий слой - обратная сторона платы, а красный - лицевая (сторона деталей).
К слову говоря, это уже вторая версия платы. Первоначально, светодиоды были расположены вне платы, и соединялись с ней проводами. Но позже, было решено, что уменьшение количества проводов положительно скажется на конструкции в целом. и действительно, стало несколько проще. Я пока что еще не подобрал подходящую основу для подставки, но все же думаю, что можно расположить плату управления в отдельном небольшом корпусе. В таком случае, монтаж светодиодов прямо на плате значительно ускорит подбор корпуса).
Перед изготовлением платы, решил просмотреть 3D модель в Proteus'e. Вышла вот такая картина:
А вот, что получилось в итоге в реальности:
Как видите, я плату делал дедовским методом - с помощью обычного лака для ногтей.
Так что отсутствие лазерного принтера или других материалов и устройств (например, утюга) не ставит большую жирную точку.
Ниже представлены фото изготовления электронной начинки.
Кулер для проверки я использовал от процессора (Pentium 3, кажется). Единственное, что было не очень удобно - третий провод (судя по всему ШИМ) мешал. Пришлось отпаять.
Так же хочу извинится за не очень эстетичный вид платы (не отмыта от флюса), на момент фотографирования как-то забыл про это.
Вот фотографии работающего устройства:
(плохо видно, но горят все светодиоды и соответственно должны работать все кулера (у меня только 1 был)).
Вот более удачное фото.
Что касается конструкции, то тут у меня пока что только размышления. Скорее всего, самым удачным вариантом будет этот (не ругайтесь, рисовал в пайнте :) :
Два кулера должны располагаться под наиболее нагревающимися частями ноутбука. Чаще всего это процессор, видеокарта или жесткий диск. Исходя из наиболее распространенных вариантов расположения жесткого диска, расположим один из кулеров посередине подставки, ближе к лицевой панели. Оставшиеся два кулера можно расположить несколько дальше. Это позволит покрыть наиболее нагреваемые зоны ноутбука (конечно, лучше разрабатывать геометрию подставки, исходя из данных конкретной модели).
Красным же помечены датчики. Как видите, они расположены так же возле зон нагрева. Сама плата управления показана серой контурной линией. Но, как я уже говорил, можно ее заключить в отдельный корпус.
Теперь о деталях:
К сожалению, микроконтроллер заменить нельзя. Тот же PIC12F675, который подходит по распиновке и так же располагает встроенным АЦП, не подходит по причине нехватки памяти по программный код. В этом плане mP все еще не оптимален. Регистр сдвига, как вы понимаете замене тоже не подлежит. А вот светодиоды можно взять практически любые (главное, что бы по току подходили). Резисторы, образующие делители напряжения с термисторами нужно брать по возможности презиционные. Так как от них довольно сильно зависит точность измерений. Остальные резисторы не критичны, и допускают разброс +/- 10% от исходного значения. Транзисторы так же не критичны в подборе. Можно использовать любые из серии КТ315 (или аналогичные, смотрите по характеристикам).
И еще хотелось бы напоследок напомнить, что для своевременного реагирования устройства, термисторы должны надежно контактировать с днищем ноутбука.
Удачи вам в сборке! С вопросами, замечаниями и пожеланиями обращайтесь в комментариях.
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот |
---|---|---|---|---|---|---|
U4 | Сдвиговый регистр | CD74HC595 | 1 | smd | Поиск в магазине Отрон | |
U5 | МК PIC 8-бит | PIC12F683 | 1 | DIP | Поиск в магазине Отрон | |
Q1-Q3 | Биполярный транзистор | КТ315А | 3 | С любым индексом | Поиск в магазине Отрон | |
D1-D3 | Светодиод | Синий | 3 | 3-5 мм | Поиск в магазине Отрон | |
D4 | Светодиод | Красный | 1 | 3-5 мм | Поиск в магазине Отрон | |
D5 | Светодиод | Зеленый | 1 | 3-5 мм | Поиск в магазине Отрон | |
RT1, RT2 | Термистор | 10 кОм | 2 | 0805 | Поиск в магазине Отрон | |
R2-R6 | Резистор | 220 Ом | 5 | 0805 | Поиск в магазине Отрон | |
R7-R9 | Резистор | 4.7 кОм | 3 | 0805 | Поиск в магазине Отрон | |
R10, R11 | Резистор | 10 кОм | 2 | 0805 | Поиск в магазине Отрон | |
J1-J4 | Разъем | PBS40. PLS40 | 1 | Любой подходящий | Поиск в магазине Отрон | |
Скачать список элементов (PDF)
Прикрепленные файлы:
- PicNoteFan(683)(1).rar (93 Кб)
Комментарии (17) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация
[Автор]
1. Если у вас греется ноут на холостом ходу, то проблема наверное в ноутбуке, или ему пора на чистку или на свалку (я склоняюсь к первому варианту)
2. БП с переключателем это просто экономически целесообразно, при условии что розетка рядом
3. Вашу примочку теперь можно использовать с любой подставкой
[Автор]
1 - У меня довольно старый чипсет AMD. Держу для прошивок - COM + LPT и для тестов, но от этого греется не меньше (1Гб, 64Мб, 20Гб, 1,8ГГц).
Транзисторы... Если вам хочется, собирайте на транзисторах, мне более удобен МК.
2 - ... Зачем вешать БП, если можно взять + 5В от USB?!
3 - Можно (причем в исходном варианте), кто против? В принципе, с любой китайской подставкой, где >= 2-х кулеров стоит, можно впихнуть.
З.Ы. Как я понял, вы хотите доказать, что моя схема бесполезна. Ну так флаг вам в руки, разработайте схему, которая будет лучше данной. Тогда и поспорим, что лучше. До тех пор, считаю что ваши слова не обоснованы.
Если вам нравиться использовать МК для простых конструкций, используйте никто ведь не запрещает, инициативу проявили, устройство работает.
Про три транзистора: это была шутка, достаточно линейного регулятора на LM317
[Автор]
[Автор]
Кроме того, если летом на улице +40, думаю вам штатное охлаждение не сильно поможет.
[Автор]
Повторюсь: я всего лишь предложил альтернативу существующим устройствам. Если считаете, что бесполезная железка, никто же не заставляет собирать.
[Автор]
З.Ы. фирма Yakumo
Автор, у вас программа сильно раздута, поэтому и на хватает 12Ф675. Например - вот такое число 273.15 жрёт немало памяти и главное, в данном случае абсолютно не нужно здесь. Применяйте целочисленную арифметику, её с головой хватит и памяти сэкономите.
[Автор]