ESP32 FanControl: реобас с функцией управления LED-лентой своими руками
реклама
Привет Друзья!
Сегодня я хотел бы показать вам вот такие интересные устройства, которые я соорудил на досуге. Возможно, кто-то захочет повторить
реклама
Это, что ни на есть самодельные реобасы с функцией управления подсветкой. Для тех кто не знает, реобас - это такое устройство, которое занимается управлением корпусными вентиляторами, в данном же случае у меня получился целый корпусный комбайн. Данные устройства умеют:
-Управлять оборотами 4-пин вентиляторов с возможностью подключения вразрез
-Управлять оборотами 3-пин вентиляторов (управление 3-пинами отличается от 4-пиновых)
-Плавно менять обороты вентиляторов
-Управлять адресной светодиодной лентой
реклама
Что касается ленты, реализовано:
-Статическая подсветка
-Режим цветовой индикации температур
-Режим цветовых эффектов
Видео-версия данной статьи:
А теперь, давайте обо всём по-порядку.
Началось всё с покупки нового корпуса, который оказался достаточно душным для моего горячего железа. С покупкой нового корпуса пришлось так же озадачиться вопросом покупки корпусных вентиляторов и вопросами продуваемости.
реклама
Помучавшись с этим немного я заметил интересный эффект - при одинаковой загрузке в разных играх температура ГПУ достигала разных значений, причём, если можно сказать, что разные движки задействуют разные возможности ГПУ, и отсюда вытекает такой результат, то в случае с Battlefield 1 и Battlefield 4 такое оправдание подходит слабо. Обе игры построены на движке Frostbyte, и хотя версии Фростбайта разные - дело тут не в движке. Обе игры без проблем пользуются возможностями моего ГПУ и процессор не становится помехой, но температура GPU в Battlefield 1 стабилизируется на 73 градусах, а в Battlefield 4 - и 78 не предел. Так в чём же тут дело? А дело тут вот в чём - Battlefiel 1 в отличии от "четвёрки" крайне активно использует и разогревает процессор, корпусные вентиляторы повышают свои обороты, улучшается продув, и как следствие ГПУ чувствует себя комфортнее.
Разобравшись с причинами я принялся искать решение, а именно инструмент, который позволял бы управлять корпусными вентиляторами опираясь не только на температуры ЦПУ, но и на температуру ГПУ. Софт от матплаты, а у меня на тот момент была матплата MSI Z87 G45-GAMING, делать такое не позволял, и единственное, что приходило на ум - утилита SpeedFan. Поковырявшись с ней в очередной раз (а я уже предпринимал попытки в прошлом), я понял, что или она не работает с моей конкретной матплатой, или я в очередной раз не разобрался с настройками (больно уж путанный у неё интерфейс), и отложив SpeedFan в сторону снова, я вспомнил ещё один случай: зеоносборку на e5 1660 которую я недавно собирал своему другу. Китайские матплаты конструктивно не умеют управлять корпусными вентиляторами, а часть нестандартных прошивок лишает пользователей даже возможности управления процессорным вентилятором. Волею случая, на руках у меня были микроконтроллеры ESP8266, которые я закупил для постройки умного дома, и я решил попобовать собрать универсальное устройство для управления корпусными вентиляторами, причём с сохранением возможности управления от штатных PWM-линий.
реклама
Тогда я ещё не был до конца знаком с возможностями ESP8266 и не знал как правильно управлять вентиляторами, потому самой первой идеей было подключить вентиляторы через реле - в нормально-разомкнутом состоянии подавая на него PWM сигнал с матплаты, а в нормально-замкнутом - нужное напряжение для нужных оборотов или высокий уровень на линию PWM.
Идея примитивная, и от неё я быстро отказался познакомившись с PWM-регулировкой. Возможности ESP8266 к PWM регулировке крайне ограничены, ESPшка имеет всего одну софтовую линию с ограничением в 1кГц, потому мне она в целом не подходила, но не имея на тот момент ей замены и не зная о возможных вариантах, первую версию проекта я решил строить именно на ней. По стандарту для управления вентиляторами используется частота 20-21кГц во избежании свиста обмоток двигателя. Соответственно, 1кГц абсолютно недостаточно для управления 3-пин вентиляторами через транзистор, но вполне достаточно для управления 4-пин вентиляторами, т.к. мы не управляем двигателем напрямую, а отправляем сигнал во встроенный контроллер вентилятора. В общем, сделал первую версию скрипта для ESP, написал программу для десктопа, и придумал аппаратную реализацю. Ну, как придумал, на самом деле как электронщик я не очень, потому элементы для реализации мне любезно подсказал один человек с одного анонимного форума, за что выражаю ему огромную благодарность. И да, буду рад любым подсказкам и исправлениям по-поводу аппаратных моментов с вашей стороны. Так вот аппаратная часть представляла собой микроконтроллер ESP8266, элемент логическое И и элемент логическое ИЛИ. PWM сигнал с матплаты поступал на логический элемент И, и в случае, если на него подавался разрешающий сигнал с ESP8266 - передавался далее на логическое ИЛИ, откуда устремлялся уже на выход, а когда необходимо было перехватить управление - останавливалась подача разрешающего сигнала на логическое И, и генерировался PWM сигнал с ESP8266 на логическое ИЛИ, отправляясь оттуда на выход.
Что касается софтовой части, её я написал на языке Python. Первая версия программы была написана абсолютно на скорую руку и представляла из себя набор функций, часть из которых были закольцованы в фоновые циклы в отдельных тредах. Я изучал новые возможности языка, и особо не заморачиваясь закидывал их в виде отдельных функций в основную программу. Концепция программы получилаь следующая: вентиляторы реагируют на температуру не плавно, но ступенями. Часть программы, запускаемая на ПК получает данные о температурах из MSI Afterburner и опираясь на эти данные отправляет через USB на ESP сигнал о необходимых оборотах вентиляторов. На выходе получился вполне себе работоспособный продукт, который я успешно тестировал в своём ПК примерно месяц.
Во время разработки я узнал о более современной ESP32, которая уже имела 4 аппаратные PWM-линии, и когда я закончил с ESP8266, ESP32 уже ждала меня в филиале почты России. Немного отдохнув - я принялся за неё. Прежде всего модернизации подверглась основная программа которая теперь стала называться ESP32 FanControl и получила версию 2.0. Я постарался сделать максимально понятный интерфейс, поработал над нормальным масштабированием. Функционал был расширен, добавлены дополнительные линии PWM и возможность управления подсветкой. Что касается кода: для удобста я выделил несколько классов, и поместил в них функции, к которым теперь стало проще обращаться, однако стиль написания всё-ещё неправильный, и в будущем, когда будет свободное время, я или пепрепишу программу под ООП на Python, или вовсе перенесу проект на C#. Кстати говоря, я не профессиональный программист, и не отказался бы от помощи или подсказок, если будут желающие. В данный же момент в программе остались небольшие мини-баги, которые можно отловить, но в целом программа работает прекрасно, абсолютно не влияя на производительность ПК: потребляет в фоновом режиме минимум процессорного времени и всего в районе 4-16мб оперативной памяти.
Сам скрипт ESP32 так же был переписан с нуля, во-первых пришлось осваивать потоки т.к. теперь появились параллельно выполняемые задачи. Во-вторых пришлось осваивать управление LED-лентой, реализовывать функции плавного изменения оборотов и цвета, возможность холодного старта для 3-pin вентилятора (для того, чтобы 3-pin стартанул на минимальных оборотах на него необходимо кратковременно подать полное напряжение). С самим MicroPython так же возникли проблемы. Всё дело в том, что официальный билд микропайтона унифицирован и не поддерживает аппаратные возможности ESP32 к управлению 4мя PWM линиями. Однако, есть замечательный билд MicroPython для ESP32 от LoBoris, за основу изначально был взят именно он, но как показало время, этот билд просто ужасающе нестабилен. В общем, потратив кучу времени, пришлось собирать билд MicroPythonа вручную. За основу был взят официальный билд, в который был интегрирован pwm-модуль от Loboris, на выходе вышел стабильный официальный MicroPython с 4-мя PWM линиями.
Аппаратную реализацию так же пришлось немного переработать. Все дело в том, что когда я начал управлять 3-pin вентиляторами через транзистор, я сразу столкнулся с нюансом, который я не учёл в первой реализации. При включении 3-пин вентилятора остальные вентиляторы начинали свистеть обмотками, появлялись наводки на управляющих линиях. Питание микроконтроллера и вентиляторов пришлось гальванически развязывать. Вот на этом моменте я достаточно долго "буксовал".
И да, как вы уже наверное поняли, программа получает данные из MSI Afterburner посредством .net библиотеки MSIAfterburner.NET.dll, потому для работы требуется, собственно, сам MSI Afterburner и библиотеки .NET Framework. Почему MSI Afterburner? Потому что в моём представлении эта программа должна болтаться в фоне у любого любителя железа, потому, что бы не плодить сущности я решил подключаться именно к ней. Да и, признаться честно, других универсальных способов выудить информацию о температурах CPU и GPU на Python я не нашёл, хотя и нельзя сказать что я очень активно их искал (И да, сразу скажу что я рассматривал WMI, и, не понял, имеется ли там нужная информация).
Чтож, кому может быть интересен данный проект?
-Прежде всего тем, кто хочет интересно и с пользой провести время, поковыться с микроконтроллерами, получив на выходе полезный универсальный инструмент
-Обладателям сборок, в которых не предусмотрена регулировка оборотов вентиляторов. Это винтажные сборки или зеоносборки.
Весь код проекта открыт, написан на простом к пониманию Python, и максимально задокументирован - вы можете запросто менять его под себя и дописывать необходимые функции, например можно без проблем реализовать работу по термопаре в отсутствии сигнала с ПК.
В данном дневничке я рассмотрю 2 реализации данного устройства. Все схемы и чертежи вы сможете найти на страничке проекта на github.
Самый простой комплект для исполнения устройства раньше обходился в районе 500 рублей. К сожалению, всвязи с последними событиями, цены на различные комплектующие выросли. Можно немного сэкономить заказывая компоненты с самой дешевой доставкой, однако я рекомендую использовать AliExpress Standart Shiping, т.к. более дешевая доставка может идти и по пол года, а может и вовсе не дойти.
Давайте сразу рассмотрим ограничение на выбор самого микроконтроллера. Реализаций ESP32 существует целая масса. Нас интересуют инженерные модули WROOM, в которых применяется USB-UART конвертор CP2102, нам НЕ подойдут модули на CH340. У меня есть две реализации ESP32, одна простенькая, и USB-UART конвертор в ней продолговатый - это CH340, и другая реализация, в ней USB-UART маленький, квадратненький - это то, что нам нужно.
Так выходит потому, что CP2102 умеет дёргать аппаратный ресет, а CH340 - не умеет. Иногда для успешного подключения к устройству ресет просто необходим.
Первый вариант реализации на готовых модулях с AliExpress:
Данная схема вполне жизнеспособна, хотя и обладает некоторыми существенными недостатками. Данная схема подразумевает только управление вентиляторами и подсветкой, и не позволяет подключаться вразрез, не подразумевает возможности измерения оборотов вентиляторов, хотя вы можете вручную прокинуть сигнал тахометра от вентилятора к матплате. Несмотря на то, что используются готовые модули, минимальный навык пайки для сборки всё-же необходим.
Нам потребуются:
ESP32, стоит в данный момент в районе 370 рублей с доставкой Standart Shiping
Модуль развязки на оптопарах PC817 и транзисторный модуль, комплект в одном магазине (При заказе в одном магазине доставку заказываем только для одного товара) обойдется в 370 рублей
Модуль реле, который может вам пригодится, обойдётся в дополнительные 70 рублей
Итого, выходит что-то в районе 850 рублей. Так же потребуются копеечные резисторы в 200-300оМ, 1кОм.
Свою реализацию я собрал на попавшемся под руку кусочке МДФ, и разместил это всё в пластиковых салазках 3.5 дюймового жёсткого диска. Собственно в корзину жёсткого диска я и буду помещать финальное устройство. Я использовал длинные провода т.к. разрезать их не очень то и хотелось - они ещё пригодятся в будущих проектах, по факту же можно использовать коротенькие провода без коннекторов, просто подпаиваясь в нужных местах.
Подключается всё это по следующей схеме:
PWM-выводы ESP32 подключаются на входы модуля развязки, туда же подаётся земля с ESP32. На выходную часть модуля развязки подаётся +5v от источника питания, и берутся уже отвязанные от ESP32 PWM-линии. Для управления 4-pin вентиляторами, эти отвязанные линии подаются напрямую на PWM контакты вентиляторов и дополнительно шунтируются на землю через резисторы в 1кОм, на плюсовой и минусовой контакты вентилятора подаются плюс и минус от источника питания. На каждую PWM линию можно вешать по несколько вентиляторов одного типа через двойники или тройники, сколько вентиляторов подключать безопасно я не знаю, потому я бы ограничился парой. Для управления 3-pin вентиляторами PWM сигнал с развязки подаётся на транзисторный модуль, который устанавливается в разрез минусового контакта 3-pin вентилятора, на плюсовой контакт вентилятора подаётся питание. Двигатели трёхпиновых вентиляторов создают шумы по линии питания, потому на вход от источника питания (блока питания) вешаем конденсатор на 16v, и хотябы 1500 микрофарад (я использую на 2200), который неплохо так сглаживает шум. В качестве разъёмов для подключения вентиляторов можно использовать гребёнки пинов, однако они имеют слишком маленькую толщину пинов, поэтому разъёмы вентиляторов держатся на них плохо, желательно их фиксировать при помощи, например, стяжек.
Модуль оптической развязки необходимо немного доработать, и есть два способа это сделать. На входах и выходах модуля стоят резисторы на 3кОм, помеченные как 302, на входе последовательно с резистором стоит светодиод. От этих сопротивлений необходимо избавиться, и есть два способа, которые вы можете видеть в моей реализации:
Первый способ - заменить резистор на выходе на 300оМ, и навесить резистор на 300оМ в обход штатного резистора и светодиода, при этом на входы и на выходы можно будет подключать провода безо всяких резисторов.
Второй способ - выпаять выходной резистор и кинуть на его место сполю, зачистить землю рядом со вторых резистором со стороны оптопары, и соединить соплёй выход резистора с землёй. Выполнить эти действия немного проще, но в таком случае на входы и выходы придётся подавать провода с впаяными вразрез резисторами. Джамперы с модуля необходимо поснимать.
Ах да, для выхода с оптопары на транзистор для управления 3-пин рекомендую ставить резистор на 200оМ.
Что касается светодиодной ленты, есть два способа подключения.
Первый способ - запитать ленту от USB порта, для этого вешаем плюс адресной ленты на 5v контакт ESP, минус на земляной контакт ESP, а управляющий контакт ленты на контакт указанный в прошивке FanControl через резистор в 200-300 Ом. Данный способ имеет некоторые ограничения. Во-первых, такой способ подойдёт ТОЛЬКО при поключении к USB 3.0, т.к. USB2.0 позволяет передавать ток в 0.5А, USB3.0 же по спецификации разрешает передавать ток 0.9 ампер, а по факту и чуть больше переварит. Максимальный ток одного адресного светодиода составляет 60мА, делим 0.9 на 0.06, и получаем 15 светодиодов. В своём корпусе я использую как раз ленту на 15 светодиодов, и этого достаточно для неплохого равномерного освещения. В тестовой же сборке у меня от ESP32 запитан 21 светодиод и на максимальной яркости каких-либо проблем я пока не заметил (и да, это конечно же на свой страх и риск). По-мимо ограничения на колличество светодиодов, в данном случае имеются следующие ограничения:
-Тип ленты - применять можно только 5-вольтовую WS2812b
-USB порт должен выключаться вместе с ПК, иначе лента не будет тухнуть (Постараюсь исправить чуть позже)
Плотность ленты в данном случае стоит выбирать исходя из длины поверхности, на которую планируется установка, и количества светодиодов, питание которых потянет USB-порт.
Второй способ - подключить ленту к внешнему источнику питания через модуль реле. Причём под внешним источником питания в данном случае я подразумеваю не блок питания компьютера (в этом случае пришлось бы так же плясать с развязками), а внешний, отдельный адаптер на 5 или 12v взависимости от типа ленты. Для этого землю с источника питания подаём на LED-ленту и объединяем с землёй ESP32. Питание с источника питания подаём на вход реле, а с выхода реле отдаём питание на led-ленту. На управляющие контаты реле подаём +5v и землю от ESP, а так же управляющий сигнал с пина, который прописан в прошивке через резистор в 300оМ. Управляющий сигнал LED-ленты прописанный в прошивке подаём на LED-ленту через резистор в 200-300оМ. В данном случае нет ограничения на тип светодиодной ленты (можно использовать как WS2812b так и WS2811), так же нет ограничения на количество светодиодов (оно будет зависеть от источника питания, выбирать который следует исходя из того, что один светодиод потребляет 60mA).
В данном случае чем больше плотность ленты - тем лучше.
В дополнение: помимо модуля опторазвязки я опробовал готовый модуль, который представляет из себя связку N-канального транзистора и оптопары, который вы сможете увидеть на фото ниже. Так вот, нормальной его работы, что называется малой кровью, мне достичь не удалось, нам он не подходит:
На самом деле, покупать модуль оптической развязки и транзисторный модуль совершенно не обязательно, вы можете безо всяких проблем собрать их самостоятельно на макетной плате и немного сэкономить. Оптопары PC817 можно отпаять из старых блоков питания или купить за копейки в местом радиомагазине, можно даже использовать микросхему PC847 (LTV847), представляющую из себя 4 оптопары PC817 в одном корпусе. N-канальный транзистор без проблем найдёте в радиодеталях или отпаяете, например, со старой матплаты. С выбором транзистора чуть сложнее - можете посмотреть гайд о подключении транзистора к ардуино у Алекса Гайвера на канале. В готовом китайском модуле используется IRF520N, по даташиту он подходит плохо, а по факту оказался очень крутым и без проблем управляется и от 2.5v, чего не скажешь о других транзисторах которые я испробовал.
Основной проблемой данной реализации являются медленные оптопары PC817, которые, во-первых, плохо переносят высокие чатоты сигнала, во-вторых даже на низких частотах искажают ширину импульса, рисуют не совсем ровный меандр, что вы можете видеть на этой фотографии:
В результате, диапазон регулировки существенно сужается, и уже при 50-60% заполнения PWM сигнала на выходе с оптопары получаем практически полное заполнение. Так для примера через PC817 минимальные обороты моего тестового 3-pin вентилятора начинаются на 5% заполнения, а при нормальном подключении - при 15%. Чем всё это черевато? Я думаю, ничем. Но для небольшой компенсации данных проблем стоит выбрать максимально низкие рабочие частоты: для 4-pin вентиляторов на своём тестовом стенде я использую 5кГц. Как я уже говорил - 4pin вентиляторы и от 100 герц работают, но поскольку частоты "по-паспорту" на PWM линии должны быть в районе 21кГц - я решил использовать сигнал в 5кГц, максимальная частота на которой PC817 минимально искажает меандр. Для 3-pin вентиляторов же следует выбрать минимальную частоту, при которой вентилятор не свистит обмотками - в моём случае это 12кГц.
Ну и второй вариант реализации данного проекта - самодельная вытравленная плата.
Я пользовался способом который описывал Алекс Гайвер в соответствующем видео, лазерно-утюжным методом. Я использовал фото-бумагу, отклеивал фотобумагу от платы на горячую, без размачивания в воде.
Для данного проекта я травил платы впервые, ничего сложного в этом нет, первые две платы вытравились идеально. Третья, финальная версия, у меня вышла проблемной, но даже это не проблема.
Первая версия платы, как вы уже могли понять, была вытравленна для одноканальной ESP8266. Вторая версия платы была тестовой для ESP32, в ней я попытался применять P-канальные транзисторы, с целью сохранить возможность использования тахометра для 3pin вентиляторов, однако, с управлением по P-каналу я встретил ряд проблем, и пока от этой затеи отказался. Так же там были некоторые другие недочёты.
В третьей версии платы я немного уменьшил толщину дорожек и диаметры колечек, плюс немного передержал её в растворе, потому на выходе получил достаточно хлипкую плату, медное покрытие которой держится крайне плохо, многие колечки оборвались при сверлении. Но поскольку переделывать было лень, я как мог залудил и пропаял то что вышло, залил суперклеем места где впаяны пины, дабы они не отрывались от текстолита. Данная плата несёт на себе реле для подключения светодиодной ленты, конденсатор, логические элементы И/ИЛИ, а так же микросхему развязки ADUM1400 которая развязывает сигнал без искажения (Кстати микросхема очень нежная, очень боится статики, руками во время работы лучше не трогать, а если кто знает как её можно защитить - прошу подсказать). Разъёмы для подключения вентиляторов я спаял со старых матплат.Соответственно, плата поддерживает светодиодные ленты WS2812b на 5v и WS2811 на 12v, плата поддерживает подключение четырёх 4-pin вентиляторов напрямую или вразрез штатных линий, две 4-pin линии можно джамперами переключить в 3-pin режим без возможности подключения вразрез и измерения оборотов.Основная идея возможности подключения вразрез штатных линий состоит в возможности сохранения их функциональности. Тоесть, при подключении вразрез, FanControl перехватывает управление только тогда, когда это необходимо. В BIOS, до загрузки операционной системы, или во время нагрузки исключительно на CPU, корпусные вентиляторы будут работать от штатной системы управления (Или не будут, зависит от того, как вы настроите FanControl).
Внимание! Схема подключения вразрез нуждается в доработке! Так же, следует понимать, что это может быть опасно для вашей матплаты!
Как вы можете видеть, в моей последней реализации всё-ещё есть неучтённые элементы, которые пришлось напаять навенсым монтажём, потому будет как минимум ещё одна версия платы, изготовление которой я уже закажу фабричным методом на заводе в китае. Собственно, чертёж платы, который уже немного видоизменён от той версии что имеется у меня на руках, можно найти в папке \scheme. И да, я его ещё не заказывал и не травил, возможны ошибки, советую за мной перепроверять, а информация о том, что чертёж уже испробован будет в приложеном файлике readme.
Что тут ещё можно добавить - я незнаю. Все желающие могут взять готовые схемы, вытравить/заказать и спаять. Так же я оставлю список компонентов. Можете так же придумать свою плату под другую версию доски ESP32, или под использование развязок HCPL2630/2631 вместо ADUM1400.
Пара слов о прошивке ESP32. Программы необходимые для прошивки:
Драйвер CP2102, необходим, если со штатным драйвером ESPшка отказывается прошиваться. Использовать драйвер 6.7.6 для Windows 7/8.1.
Утилита Flash Download Tools для прошивки ESP32
Утилита Espy для работы с файловой системой ESP32:
Качаем с гитахаба архив репозитория ESP32 Fan Control
Для прошивки нам потребуется утилита Flash Download Tools от Espressif. Прошивка firmware.bin находится в папке /ESP32 репозитория. Утилиту и прошивку помещаем в корень диска C:\, т.к. это как раз тот случай, когда программа действительно не переваривает кирилицу. Подключаем ESP32 к USB-порту. Запускаем утилиту, выбираем ESP32 Download Tool. Вверху программы оставляем чекбокс только на одной строке, в которой выбираем путь до прошивки, и чуть правее вбиваем адрес: 0x1000. Внизу справа выбираем нужный COM-порт и жмём ERASE. Ждём завершения очистки, и после жмём кнопку START.
После завершения прошивки нам потребуется утилита Espy. Во вкладке Device выбираем нужный COM-порт, после чего на панели инструментов жмём кнопочку Connect. Следом жмём кнопку File Manager и заливаем в устройство boot.py из папки /ESP32 репозитория.
boot.py можно и нужно предварительно отредактировать при помощи Notepad++ или любого другого редактора (Не пользуйтесь обычным Блокнотом). В самом начале файла идут пользовательскиеи переменные, часть из которых я бы трогать не рекомендовал. А вот те, которые можно и нужно исправить:-boost_zone: как я уже говорил, если собирать схему на PC817 диапазон регулировки немного сужается. boost_zone - граница оборотов, в процентах, до которой на 3-pin вентилятор подаются бустовые импульсы при старте с нуля. Допустим минимальные обороты для вашего вентилятора = 5% заполнения. Без буста 3-pin на этих 5% просто не стартанёт. Можно попробовать сдвинуть эту планку вниз, если, допустим, ваш вентилятор без проблем стартует с нуля до 30% без буста. Чтобы это выявить можно попробовать запускать 3-pin вентилятор в режиме 4-pin (Без галочки 3-pin), в таком случае бустовый импульс подаваться не будет.
-as_pin: пин автостарта, для запуска программы данный пин должен быть замкнут на землю. В тех ЕСПшках, которые есть у меня на руках, этот пин соседствует с землёй, соответственно, просто замыкается джампером на землю. Список доступных пинов можно найти перед модулем переменных в файлике boot.py. Расположение пинов смотрим на распиновке конкретно вашей реализации ESP32 (Найти без проблем можно в Яндекс-картинках по запросу "Распиновка ESP32")
-PWM-Pins: здесь указываем пины, к которым у вас подключены PWM-линии. Выбирать из списка доступных к подключению пинов.
-EXT_Pins: используются для подключения вразрез. В случае, если PWM линия отключена (установлена в 0), через EXT_Pins подаётся питание на логический элемент И, к которому так же подключён сигнал PWM матплаты. Если используются - по расположению в списке должны соответствовать линиям PWM из разводки платы.
-led_pin: пин подключения LED-ленты. Выбирать так же из списка доступных к подключению пинов.
-led_relay: пин подключения реле питания LED-ленты. Выбирать так же из списка доступных к подключению пинов.
Убедитесь в отсутствии дублирующихся пинов!
После того как ESPшка прошита и на неё закачан файл boot.py, можно устанавливать джампер между as_pin и землёй, и она готова к работе.
Перейдем к обзору программы.
Скомпиллированую в .exe программу найдетё в папочке /compilled репозитория. Для запуска программы в фоне должен работать MSI Afterburner. Для запуска может потребоваться зайти в свойства библиотеки MSIAfterburner.NET.dll и, если внизу присутствует предупреждение безопасности, поставить галочку "Разблокировать". Кстати данную библиотеку можете взять из комплекта MSI Afterburner Remote Server, но та её версия не работает, если в системе установлено более одного GPU, или скачать c guru3d.com оригинал от автора, ссылку без проблем найдёте в яндексе.
Сама программа выглядит так:
Основное окно, вкладка с мониторингом температур. В данном режиме происходит контроль за температурами и управление вентиляторами. В свёрнутом состоянии окно не обновляется.
При переходе на вкладку настроек мониторинг прекращается. Тут мы можем выбрать и проверить COM-порт, выбрать язык, включить/выключить подсветку, и перейти в расширенные настройки.
В окне расширенных настроек, во вкладке вентиляторы, вверху есть комбо-бокс выбора линии, и элементы управления выбранной линией: чекбокс включения и выключения данной линии, чекбокс 3-пин, при включении которого на вентилятор будет подаваться BOOST-импульс, можно выбрать элемент за которым будет вести наблюдение данная линия - CPU и/или GPU, можно выбрать рабочую частоту (для реализации на травленной плате с нормальной развязкой лучше оставлять дефолтные 21кГц, а о частотах для сборки на модулях я уже говорил выше). Тут же находится ползунок выбора оборотов. Выбрав обороты, можно запустить вентилятор и посмотриеть, что эти обороты из себя представляют, после чего задать их соответствующей кнопкой выбраной зоны. Соответственно ниже есть кнопки установки оборотов для зон и температур для зон.Минимальные обороты для 3-pin стоит выбирать путём снижения оборотов с более высоких: например, мы знаем что при 50% оборотов наш 3-pin вентилятор стартует, и работает. Снижаем обороты до тех пор, пока не найдём обороты на которых он глохнет - в моём случае это 10%, тоесть 15% - это его минимальные рабочие обороты. Убеждаемся что вентилятор может стартануть с нуля до этих оборотов, если нет - можно попробовать подправить accel_speed на 0.01 в прошивке.
Во вкладку подсветка стоит перейти прежде чем пытаться включить подсветку: она не заработает, если не вбить колличество светодиодов в вашей ленте. Тут же можно выбрать яркость, цвет. Вместо статического цвета можно использовать несколько LED-эффектов: "Волна", "Бегущая строка", "Появление" и "Замыкание". Да-да, я написал всего 4 эффекта, если кому-то будет не лень, буду рад если этот список будет пополнен. Для LED-эффектов доступна настройка скорости. Для режима статической подсветки доступен режим цветовой индикации температур, элементы управления которым расположены ниже: выбираем линию PWM, по которой будет вестись индикация, и зоны с их цветами.
К сожалению, с работой LED ленты есть некоторые проблемы, во время работы переодически возникают артефакты, побороть которые я не в состоянии. Для управления адресной светодиодной лентой микроконтроллеры ESP используют RMT-драйвер, который имеет свойство ловить различные наводки. Как я понимаю, в данном случае он ловит наводки от других компонентов микрочипа, которые параллельно занимаются различными вычислениями. Впрочем, эта проблема проявляет себя не очень часто и не особо мешает работе подсветки.
Как работает данное устройство на практике (работа с LED-лентой, подключение вразрез, плавное изменение оборотов по осциллографу) вы можете посмотреть в конце видео, ссылка на которое дана в начале статьи.
Я же, на последок, хотел бы при помощи осциллографа показать шумы, которые генерируют 3-pin вентиляторы по линии питания (Кстати за осциллограф огромное спасибо моему другу Виталию, который мне его подарил, в реализации данного проекта он мне ОЧЕНЬ сильно помог):
Разрешение сигнала установлено в 0.02v на деление, шум не превышает 0.1v (По линии в 12v), я считаю что это абсолютно безопасный показатель, однако, если кто-то знает как избавиться от этих шумов вовсе, и почему 4-pin вентиляторы не шумят: буду рад вашим комментариям.
Я думаю, на сегодня, на этом у меня всё. Я хотел бы отдельно отметить, что никаких гарантий на работу данного софта и аппаратных реализаций я не даю, я просто делюсь своими наработками, и был бы рад, если бы они кому-то пригодились, кроме меня самого конечно же. Тестировалось всё описаное выше на Windows 10 LTSC. Так же хотел бы понапутсововать: работайте с электроникой аккуратнее. Я был не совсем аккуратен, потому во время разработки потерял одну ESP32, парочку микросхем ADUM, пару микросхем логики, пару уставших 4-pin вентиляторов вентиляторов марки TITAN, и даже одну матплату MSI Z87-G45 GAMING, которая пала смертью храбрых приняв на хаб замыкание 12v на оголённую оплётку USB-кабеля, и за которую, особенно обидно.
Буду рад комментариям, вопросам, замечаниям, и исправлениям с вашей стороны. Данная же статья, возможно, будет переодически обновляться, если будут выявлены неточности с моей стороны.
реклама
Теги
Лента материалов
Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!
Комментарии, содержащие оскорбления, нецензурные выражения (в т.ч. замаскированный мат), экстремистские высказывания, рекламу и спам, удаляются независимо от содержимого, а к их авторам могут применяться меры вплоть до запрета написания комментариев и, в случае написания комментария через социальные сети, жалобы в администрацию данной сети.
Комментарии Правила