С недавнего времени из-за постоянной жары у меня стал перегреваться ноутбук. Конечно, первым желанием было найти прохладное место и работать там, но увы, такого места не было. Так как улучшить встроенное охлаждение ноутбука не представлялось возможным, я обратил внимание на охлаждающие подставки. Но и тут подходящих вариантов не было: либо кулер был один, да ещё и маломощный, либо два и больше, что в лучшую сторону сказывается на охлаждении и в худшую на цене. Тогда было решено собирать охлаждающую подставку самостоятельно.
Для устройства были «выдвинуты» такие требования:
- недорогой микроконтроллер
- светодиодная индикация работы
- не менее 3-х кулеров
- питание от USB порта ноутбука
Из микроконтроллеров, которые были у меня в наличии, поставленным требованиям отвечал лишь PIC12F683. Его я и использовал. Но потому что у семейства PIC12 всего 6 свободных пинов (5, если не считать «reset»), то пришлось использовать сдвиговый регистр 74HC595. Так что, кроме управления 3-мя кулерами, осталось место и для светодиодов. Схема устройства показана ниже:
Микроконтроллер работает на частоте 4МГц. В качестве датчиков температуры используются два термистора. Выбор пал именно на термисторы, а не на DS18B20, по причине значительной разницы в цене, а так же скорости измерения. Конечно, точность будет не очень высокой, но для определения перегрева ноутбука вполне достаточная. Кроме того, 2-х датчиков более чем достаточно, для корректного измерения температуры. Конечно, можно было взять всего один датчик, разместить его в зоне наибольшей нагреваемости, и при определенной температуре включать 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
Сдвиговый регистрCD74HC5951
smdU5
МК PIC 8-битPIC12F6831
DIPQ1-Q3
Биполярный транзисторКТ315А3
С любым индексомD1-D3
СветодиодСиний3
3-5 ммD4
СветодиодКрасный1
3-5 ммD5
СветодиодЗеленый1
3-5 ммRT1, RT2
Термистор10 кОм2
0805R2-R6
Резистор220 Ом5
0805R7-R9
Резистор4.7 кОм3
0805R10, R11
Резистор10 кОм2
0805J1-J4
РазъемPBS40. PLS401
Любой подходящийДобавить все
Скачать список элементов (PDF)
Прикрепленные файлы:
- PicNoteFan(683)(1).rar (93 Кб)