Компоненты · 16 мин чтения

Как настроить понижающий модуль LM2596 на 5 V или 3,3 V

Как настроить LM2596: выставить 5 V или 3,3 V подстроечным резистором по мультиметру, питать Arduino и сервоприводы от 12 V, а также нагрев, ток и сравнение с 7805.

Настроить LM2596 — значит подать питание на вход модуля и крутить латунный винт синего подстроечного резистора, измеряя выход мультиметром, пока он не покажет нужное напряжение, например 5 V или 3,3 V. Понижающий (step-down, buck) модуль LM2596 — дешёвый и очень распространённый стабилизатор напряжения: он с высоким КПД превращает 12 V от блока питания, автомобильного аккумулятора или сборки 2S Li-ion в более низкое напряжение для Arduino, ESP32, сервоприводов и светодиодных лент. Он принимает на вход 4,5–40 V, понижает их до любого значения примерно от 1,25 V до 35 V и отдаёт до 3 A. Золотое правило умещается в одно предложение: всегда настраивай и измеряй выход до того, как подключить нагрузку.

В этом руководстве разберём, как работает понижающий преобразователь, какие у модуля выводы и детали, как пошагово выставить 5 V и 3,3 V подстроечным резистором по мультиметру и как формула Vout = 1,23 × (1 + R2 / R1) задаёт выходное напряжение. Затем посмотрим, как питать Arduino и сервоприводы от 12 V, поговорим об ограничении тока и нагреве, КПД и отличиях от 7805, о частых ошибках (переполюсовка, просадка напряжения под нагрузкой), а в конце перейдём к коду, который измеряет выход с помощью Arduino, ESP32 и Raspberry Pi Pico.

Понижающий модуль LM2596 (step-down, buck)
Понижающий модуль LM2596: на одной плате вход IN+ / IN−, выход OUT+ / OUT−, синий многооборотный подстроечный резистор, задающий выходное напряжение, большая катушка индуктивности, запасающая энергию, и конденсаторы на входе и выходе.

Что такое LM2596 и как он работает?

LM2596 — это импульсная микросхема понижающего стабилизатора; её разработала National Semiconductor, а сегодня выпускает Texas Instruments. Линейные стабилизаторы вроде 7805 избавляются от лишнего напряжения, превращая его в тепло; LM2596 же включает и выключает свой внутренний силовой транзистор примерно 150 000 раз в секунду (150 kHz). Пока транзистор открыт, ток идёт через катушку индуктивности к нагрузке, и катушка запасает энергию в магнитном поле; когда транзистор закрывается, катушка продолжает отдавать эту энергию нагрузке через диод Шоттки. Выходной конденсатор сглаживает эти импульсы. Доля времени, в течение которой транзистор открыт, называется коэффициентом заполнения (duty cycle), и он примерно равен D ≈ Vout / Vin: чтобы получить 5 V из 12 V, ключ открыт около 42% времени.

Поскольку энергия не сжигается впустую, КПД составляет около 80–90%, а ток, потребляемый от входа, меньше, чем ток, отдаваемый на выходе: модуль, выдающий 2 A при 5 V от 12 V, берёт от входа всего около 1 A. За стабильность выходного напряжения отвечает пин FB (обратная связь, feedback). Микросхема сравнивает напряжение на FB со своим внутренним опорным напряжением 1,23 V и соответственно меняет коэффициент заполнения. В готовом модуле одно плечо делителя напряжения, идущего на пин FB, — это многооборотный подстроечный резистор; поворот винта меняет коэффициент деления, а значит, и выходное напряжение. Существуют и версии LM2596 с фиксированным выходом 3,3 V, 5 V и 12 V, но в мире Arduino чаще всего встречается синий модуль на регулируемой (ADJ) версии.

ПараметрМикросхема LM2596 (даташит)Готовый модуль (типично)
Входное напряжение4,5–40 V (абсолютный максимум 45 V)4,5–40 V; минимум на 1,5–2 V выше выхода
Выходное напряжениеADJ: 1,23–37 V; фиксированные: 3,3 / 5 / 12 VПримерно 1,25–35 V подстроечным резистором
Выходной ток3 AОколо 2 A длительно без радиатора, 3 A с радиатором
Частота переключения150 kHz (127–173 kHz)150 kHz
Опорное напряжение обратной связи1,23 V1,23 V
КПД73–90% (в зависимости от напряжения и тока)Обычно 80–88% при 12 V → 5 V
Ток покояТип. 5 mA, макс. 10 mA; 80 µA при отключении через ON/OFF5–10 mA + светодиод питания (если есть)
Ограничение токаТип. 4,5 A в пике (3,6–6,9 A)Не регулируется (настройка есть только у версий CC/CV)
ЗащитаОграничение тока и тепловая защитаЗащиты от переполюсовки нет

Выводы модуля и детали на плате

У синего модуля LM2596 четыре точки подключения: IN+ и IN− — вход, OUT+ и OUT− — выход. IN− и OUT− соединены на плате; понижающий преобразователь не развязывает вход и выход, поэтому у источника, модуля и питаемой платы общая GND. На плате стоят пятивыводная микросхема LM2596S (корпус TO-263: VIN, выход, GND, FB и ON/OFF), большая катушка индуктивности на 33–47 µH, обычно с маркировкой 330 или 470, диод Шоттки на 3 A вроде SS34, по электролитическому конденсатору на входе и выходе (обычно 100–220 µF) и многооборотный подстроечный резистор с маркировкой 103 (10 kΩ). Маркировку катушки можно расшифровать в утилите кодов катушек индуктивности. На большинстве модулей вывод ON/OFF микросхемы соединён с GND, поэтому модуль начинает работать сразу после подачи питания.

Вывод модуляНазначениеКуда подключается
IN+Плюс входа (4,5–40 V)Плюс блока питания, аккумулятора или батарейного блока
IN−Минус входа (GND)Минус источника
OUT+Плюс стабилизированного выходаПин 5V или Vin на Arduino, 5V на ESP32, VSYS на Pico, красный провод сервопривода
OUT−Минус выхода (та же GND, что и IN−)GND платы, коричневый или чёрный провод сервопривода
У модулей LM2596 нет защиты от переполюсовки. Если хоть на мгновение подключить вход наоборот, микросхема и диод обычно сразу сгорают; иногда микросхема пробивается внутри и с этого момента пропускает входное напряжение прямо на выход. Перед подключением дважды прочитай надписи IN+ и IN−, проверь полярность источника мультиметром, а в постоянных схемах поставь на вход последовательный диод Шоттки (например, SS34 или 1N5822, падение около 0,4–0,5 V). Если перепутать вход и выход и подать питание со стороны OUT, модуль тоже выйдет из строя.

Как пошагово настроить LM2596: 5 V или 3,3 V по мультиметру

  1. Ничего не подключай к выходу. Модуль настраивают без нагрузки; Arduino или ESP32 подключают только после того, как на выходе видно правильное напряжение.
  2. Подключи ко входу реальный источник, который будет в проекте (например, блок питания 12 V 2 A): плюс к IN+, минус к IN−. Если на плате есть светодиод, он загорится.
  3. Переключи мультиметр на постоянное напряжение (диапазон 20 V или автовыбор); красный щуп приложи к OUT+, чёрный — к OUT−. Первое показание может быть близко к входному напряжению: заводская настройка заранее неизвестна.
  4. Маленькой плоской отвёрткой поверни латунный винт подстроечного резистора на 2–3 оборота в одну сторону и посмотри на дисплей. Если напряжение падает, направление верное; если растёт, крути в другую сторону. Направление может отличаться от модуля к модулю — это зависит от того, как подстроечный резистор разведён на плате.
  5. У многооборотного подстроечного резистора примерно на 25 оборотов весь диапазон может занять 20 оборотов и больше. Упора у винта нет: в конце он прокручивается с едва слышным щелчком, и напряжение перестаёт меняться. В этом случае крути обратно.
  6. Ближе к цели продолжай четвертями оборота, а затем ещё мельче. Для 5 V оставь значение в пределах 5,00–5,10 V, для 3,3 V — в пределах 3,30–3,35 V. На платах с питанием 3,3 V, таких как ESP32 и Pico, ни в коем случае не превышай 3,6 V.
  7. Подключи нагрузку или проверь модуль резистором 10 Ω / 5 W, который при 5 V потребляет около 500 mA, и повтори измерение под нагрузкой. Если напряжение падает больше чем на 0,1–0,2 V, проверь источник и провода.
  8. В конце капни на винт подстроечного резистора лаком для ногтей или термоклеем: на вибрирующих роботах настройка со временем может уплыть.
Зачем такая осторожность? Если подключить выход, на котором ещё 12 V, к пину 5V на Arduino или к пину 3V3 на ESP32, плата сгорит за считаные секунды. Если измерения пока в новинку, загляни в руководство Как пользоваться мультиметром. Даже на модулях LM2596 с маленьким трёхразрядным вольтметром первую настройку подтверждай мультиметром: такие индикаторы могут ошибаться примерно на 0,1 V.

Формула выхода: Vout = 1,23 × (1 + R2 / R1)

LM2596 подстраивает выход так, чтобы на пине FB было 1,23 V. Если назвать резистор между выходом и FB R2, а резистор между FB и GND — R1, то выход равен Vout = 1,23 × (1 + R2 / R1). В модуле место R2 занимает подстроечный резистор на 10 kΩ, а R1 — небольшой постоянный резистор на плате. Из формулы следуют два важных вывода: даже если R2 близок к нулю, выход не опустится ниже 1,23 V; и как бы ни рос R2, выход не может превысить вход. Если выкрутить подстроечный резистор слишком высоко, микросхема держит ключ постоянно открытым, и выход застревает примерно на 1–2 V ниже входа. Это самая частая причина жалобы «модуль не понижает напряжение».

Если в вибрирующем или долговечном проекте нужны постоянные резисторы вместо подстроечного, следуй даташиту и выбирай R1 от 240 Ω до 1,5 kΩ. При R1 = 1 kΩ для 5 V получается R2 = 1 kΩ × (5 / 1,23 − 1) ≈ 3,07 kΩ; с резистором 3,09 kΩ точностью 1% выход будет 5,03 V. Для 3,3 V R2 ≈ 1,68 kΩ, а резистор 1,69 kΩ (1%) даёт 3,31 V. По сути это обычный делитель напряжения; соотношения можно проверить в утилите делителя напряжения.

Нужный выходРекомендуемый минимальный входТипичное применение
3,3 V5 VПин 3V3 на ESP32 или Pico, датчики на 3,3 V
4,0–4,1 V6 VGSM-модуль SIM800L
5,0 V7 VПин 5V на Arduino, пин 5V на ESP32, сервоприводы SG90, светодиоды WS2812B
6,0 V8 VСервоприводы MG996R (верхний предел для SG90 и MG90S)
7,5–9 V10–11 VГнездо питания (DC) или пин Vin на Arduino
12 V14–15 VВентиляторы, реле и светодиодные ленты на 12 V от системы 24 V

Минимальные входные напряжения в таблице даны для нагрузки 2–3 A: на ключе LM2596 при 3 A падает типично 1,16 V, ещё несколько сотен милливольт добавляют катушка и провода. При лёгкой нагрузке (около 1 A) разница снижается примерно до 1,5 V. Сборка 2S Li-ion на 7,4 V по мере разряда проседает примерно до 6,4 V; этого всё ещё хватает для линии 5 V на 1 A, но не для линии сервоприводов на 6 V. Как настроить питание для GSM-модуля, которому нужно 4 V, рассказано в статье SIM800L.

Питание Arduino от блока питания или аккумулятора на 12 V

Есть два правильных способа питать Arduino через LM2596. Первый — выставить на модуле 5,0 V и подключить выход прямо к пину 5V. Так стабилизатор платы остаётся в стороне, тепла почти нет, и это самый эффективный вариант; но плату уже ничто не защищает. Если подстроечный резистор уплывёт или модуль сломается и начнёт пропускать вход на выход, 12 V попадут прямо на микроконтроллер. Если при таком подключении вставить ещё и USB-кабель, питание USB компьютера и выход модуля окажутся соединены; при загрузке кода безопаснее всего отключать модуль.

Второй способ — выставить на модуле 7,5–9 V и подключить его к гнезду питания (DC) или к пину Vin. Тогда окончательную стабилизацию выполняет стабилизатор платы, а диод на входе гнезда защищает от переполюсовки. Можно подать 12 V прямо в гнездо, это тоже работает, но при нагрузке 200 mA маленький стабилизатор платы выделяет (12 − 5) × 0,2 = 1,4 W тепла; если выставить LM2596 на 7,5 V, потери падают до (7,5 − 5) × 0,2 = 0,5 W. Все варианты питания собраны в статье Как питать Arduino, а расположение пинов — в статье Распиновка Arduino Uno.

ПодключениеНастройка LM2596ПлюсВнимание
Пин 5V на Arduino5,0–5,1 VСамый «холодный» и эффективный вариантЗащиты нет; не подключай USB одновременно
Гнездо питания (DC) на Arduino7,5–9 VЗащищают диод от переполюсовки и стабилизатор платыНа диоде падает около 0,7 V
Пин Vin на Arduino7,5–9 VГнездо не нужно, защищает стабилизатор платыЗащиты от переполюсовки нет
Пин 5V (VIN) на ESP325,0 VВстроенный LDO-стабилизатор выдаёт 3,3 VНикогда не подавай 5 V на пин 3V3
Пин 3V3 на ESP323,30 VСтабилизатор платы не участвуетВыше 3,6 V ESP32 может выйти из строя
Пин VSYS на Pico5,0 VVSYS принимает 1,8–5,5 VЕсли подключён и USB, добавь диод Шоттки
Какое бы подключение ни было выбрано, OUT− модуля обязательно соединяется с GND платы; в системе с раздельной землёй сигналы теряют смысл, а датчики выдают случайные значения. Когда переносишь уже настроенный модуль в другой проект, снова измерь выход: на прошлой неделе его могли выставить под светодиодную ленту на 12 V.

Питание сервоприводов и моторов: считаем ток

Чаще всего LM2596 используют для питания сервоприводов. SG90 в движении потребляет 100–250 mA, а при старте и под нагрузкой ток подскакивает до 600–700 mA. MG996R при заторможенном валу на 6 V доходит примерно до 2,5 A. Выбирая модуль, считай не средний ток, а сумму токов всех сервоприводов, которые могут нагрузиться одновременно. От LM2596 без радиатора реально ожидать 2 A длительно: 3 сервопривода SG90 работают спокойно, а питать от одного модуля робот-манипулятор с 4–6 MG996R — верный путь к перезагрузкам и дрожанию. В таком случае ставь отдельный модуль на каждые один-два сервопривода или модуль на 5 A вроде XL4015.

Сервопривод MG996R
Сервопривод MG996R: работает от 4,8–7,2 V и под нагрузкой потребляет до 2,5 A; с LM2596, выставленным на 6 V, надёжнее сделать отдельную линию на каждые один-два MG996R.

Стоит посчитать и входной ток: если блок питания не справляется, выход проседает, каким бы хорошим ни был модуль. Формула: Iin = (Vout × Iout) / (Vin × η). Для 2 A при 5 V от 12 V с КПД 85% получается Iin = 10 W / (12 V × 0,85) ≈ 0,98 A, так что блока питания 12 V 2 A достаточно. Та же нагрузка от батарейного блока 2S на 7,4 V берёт около 1,6 A. Электролитический конденсатор на 470–1000 µF рядом с линией сервоприводов берёт пусковые токи на себя вместо модуля. Все способы победить перезагрузки из-за сервоприводов собраны в статье Arduino постоянно перезагружается, а о подключении сервоприводов — в статьях Что такое сервопривод и Сервопривод MG996R.

Ограничение тока, нагрев и радиаторы

Понижающий преобразователь эффективен, но не без потерь. Теряемая мощность примерно равна Pпотерь = Pвых × (1/η − 1) и делится между микросхемой, диодом Шоттки и катушкой. При выходе 5 V 2 A (10 W) и КПД 85% выделяется около 1,8 W тепла. LM2596S на модуле — это корпус TO-263, припаянный к небольшой медной площадке; по даташиту его тепловое сопротивление к воздуху составляет 30–50 °C/W в зависимости от площади меди. Поэтому при 2 A микросхема нагревается так, что палец долго не удержать, а при 3 A без маленького клеящегося алюминиевого радиатора и обдува не обойтись. Внутри закрытого корпуса эти пределы ещё ниже.

Нагрузка (12 V → 5 V)Выходная мощностьОценка потерьСостояние
0,5 A2,5 W~0,4 WТёплый, радиатор не нужен
1 A5 W~0,8 WГорячий, но терпимо
2 A10 W~1,8 WОчень горячий, нужен обдув
3 A15 W~3,5 WОбязательны радиатор и вентилятор

Ограничение тока LM2596 пользователь настроить не может. Когда пиковый ток ключа достигает примерно 4,5 A (3,6–6,9 A с учётом производственного разброса), микросхема укорачивает импульсы, при перегрузке снижает частоту, а при перегреве отключается. Эти защиты обычно спасают модуль при коротком замыкании, но предохранитель они не заменяют. Для задач, где нужно задавать ток, например для питания мощного светодиода или лабораторного источника с ограничением тока, есть модули LM2596 CC/CV (постоянный ток / постоянное напряжение) со вторым подстроечным резистором для тока. Если нужна линия, устойчивая к коротким замыканиям, поставь на вход ещё и предохранитель подходящего номинала.

В части дешёвых модулей на рынке стоят поддельные или перемаркированные микросхемы. Некоторые из них работают на частоте гораздо ниже 150 kHz, дают больше пульсаций, а греются и просаживают напряжение задолго до 3 A. Не доверяй цифре 3 A на этикетке: рассчитывай схему на 2 A длительно, а если нужно больше, раздели нагрузку между двумя модулями или перейди на более мощный модуль вроде XL4015.

КПД и сравнение с 7805

Если сравнить с стабилизатором напряжения 7805, который делает ту же работу, масштаб разницы становится очевиден. Отдавая 1 A при 5 V от 12 V, 7805 и от входа берёт 1 A, превращая в тепло (12 − 5) × 1 = 7 W; его КПД всего 42%, и ему нужен большой радиатор. LM2596 при той же нагрузке берёт от входа около 0,49 A и теряет меньше 1 W. В проектах с батарейным питанием эта разница напрямую превращается во время работы: если КПД удваивается, батарея служит примерно вдвое дольше.

Плата за импульсный преобразователь — шум. По даташиту пилообразные пульсации на выходе обычно составляют 0,5–3% выходного напряжения, то есть 25–150 mV при 5 V, а сверху добавляется шум переключения на 150 kHz. Для Arduino, сервоприводов, реле и светодиодов это не проблема, но заметно, если питать точные аналоговые измерения, микрофон или усилитель звука. В таких случаях сочетай оба варианта: сначала понизь напряжение до 7–8 V с LM2596, затем получи чистые 5 V с 7805 или LDO-стабилизатором — так выигрываешь и в КПД, и в тишине. Для небольших опытов с малым током на макетной плате удобен готовый модуль питания MB102 для макетной платы.

ПараметрLM2596 (импульсный)7805 (линейный)AMS1117-3.3 (LDO)
Принцип работыПереключение на 150 kHz, энергия запасается в катушкеПревращает лишнее напряжение в теплоПревращает лишнее напряжение в тепло
КПД от 12 V80–90%~42% при выходе 5 V~27% при выходе 3,3 V (вход макс. 15 V)
Максимальный ток3 A (на практике 2 A длительно)1–1,5 A0,8–1 A
Минимальная разница вход–выход~1,5–2 V~2 V~1,1–1,3 V
Шум на выходеПульсации в десятки mVОчень низкийОчень низкий
Настройка выхода1,25–35 V подстроечным резисторомФиксированные 5 VФиксированные 3,3 V
Ток покоя5–10 mA3–8 mA~5 mA
Лучше всего подходит дляБольшой разницы напряжений, большого тока, батарейМалой разницы, малого тока, тихого питания3,3 V от 5 V, несколько сотен mA
Понижающий модуль LM2596
Понижающий модуль LM2596
Стабилизатор LM7805
Стабилизатор LM7805
Стабилизатор AMS1117-3.3
Стабилизатор AMS1117-3.3
Модуль питания MB102
Модуль питания MB102

Измеряем выход LM2596 под нагрузкой с Arduino

Лучший способ понять, насколько проседает напряжение под нагрузкой, — измерить просадку, пока нагрузка работает. Код ниже непрерывно поворачивает сервопривод туда и обратно между 0 и 180 градусами и выводит в монитор порта наименьшее и наибольшее напряжение на выходе LM2596. Подключение такое: красный провод сервопривода идёт на OUT+, коричневый — на OUT−, сигнальный — на D9; между OUT+ и GND собирается делитель напряжения из резисторов 47 kΩ и 10 kΩ, а его средняя точка подключается к A0. Arduino питается по USB, а OUT− обязательно соединяется с GND на Arduino.

C++ (Arduino IDE)
1// LM2596 yük testi: servo dönerken çıkış gerilimini izle / LM2596 load test: watch the output while a servo moves
2// Kart: Arduino Uno / Nano (ATmega328P) / Board: Arduino Uno / Nano (ATmega328P)
3#include <Servo.h>
4
5const int SENSE_PIN = A0;          // OUT+ -> 47k -> A0 -> 10k -> GND
6const int SERVO_PIN = 9;           // servo sinyal kablosu / servo signal wire
7const float R_TOP = 47000.0;       // bölücü üst direnç / divider top resistor
8const float R_BOTTOM = 10000.0;    // bölücü alt direnç / divider bottom resistor
9const float AREF_V = 1.1;          // dahili referans, multimetreyle düzelt / internal reference, calibrate with a multimeter
10const float LOW_LIMIT = 4.6;       // 5 V hat için uyarı sınırı / warning limit for a 5 V rail
11
12Servo servo;
13float vMin, vMax;
14
15float readOutput() {
16  long sum = 0;
17  for (int i = 0; i < 8; i++) {
18    sum += analogRead(SENSE_PIN);  // 8 örneğin toplamı / sum of 8 samples
19  }
20  float vPin = (sum / 8.0) * AREF_V / 1023.0;
21  return vPin * (R_TOP + R_BOTTOM) / R_BOTTOM;  // bölücüyü geri hesapla / undo the divider
22}
23
24void track() {
25  float v = readOutput();
26  if (v < vMin) vMin = v;          // en düşük değer / lowest value
27  if (v > vMax) vMax = v;          // en yüksek değer / highest value
28}
29
30void setup() {
31  Serial.begin(9600);
32  analogReference(INTERNAL);       // 1,1 V referans, beslemeden bağımsız / 1.1 V reference, independent of the supply
33  for (int i = 0; i < 10; i++) {   // referans otursun, ilk okumaları at / let the reference settle, drop first readings
34    analogRead(SENSE_PIN);
35    delay(5);
36  }
37  servo.attach(SERVO_PIN);
38}
39
40void loop() {
41  vMin = 99.0;
42  vMax = 0.0;
43  for (int a = 0; a <= 180; a += 2) {     // 0 -> 180 derece / 0 -> 180 degrees
44    servo.write(a);
45    for (int k = 0; k < 5; k++) { track(); delay(2); }
46  }
47  for (int a = 180; a >= 0; a -= 2) {     // 180 -> 0 derece / 180 -> 0 degrees
48    servo.write(a);
49    for (int k = 0; k < 5; k++) { track(); delay(2); }
50  }
51  Serial.print(F("Min: "));
52  Serial.print(vMin, 2);
53  Serial.print(F(" V  Max: "));
54  Serial.print(vMax, 2);
55  Serial.print(F(" V  Dusus / Drop: "));
56  Serial.print(vMax - vMin, 2);
57  Serial.println(F(" V"));
58  if (vMin < LOW_LIMIT) {
59    Serial.println(F("UYARI: gerilim cok dusuyor / WARNING: voltage sags too much"));
60  }
61  delay(1000);
62}

Вместо собственного напряжения питания Arduino код использует внутреннее опорное напряжение ATmega328P 1,1 V (analogReference(INTERNAL)), поэтому результат не зависит от того, даёт USB 4,7 V или 5,1 V. С делителем 47k/10k можно измерить максимум около 6,2 V; на линии сервоприводов 6 V, чтобы учесть допуск опорного напряжения, поставь верхний резистор на 56 kΩ и измени константу R_TOP. Внутреннее опорное напряжение может отличаться от микросхемы к микросхеме примерно на ±10%, поэтому один раз измерь выход мультиметром и подправь AREF_V (например, 1.08), пока результаты не совпадут. Если при движении сервопривода просадка превышает 0,3 V, укороти провода, возьми провод потолще и добавь 470 µF на линию сервоприводов; если она меньше 0,1 V, питание в порядке.

ESP32: питание от аккумулятора 12 V и контроль его заряда

Питать ESP32 от аккумулятора на 12 V — частый сценарий для садовой станции датчиков или автомобильного трекера. Выставь LM2596 на 5,0 V и подключи к пину 5V (VIN) платы ESP32; 3,3 V выдаст собственный LDO-стабилизатор платы. Короткие всплески тока, которые ESP32 потребляет при передаче по Wi-Fi, LM2596 покрывает без труда; симптомы слабого питания подробно описаны в статье Ошибка brownout на ESP32. Код ниже читает напряжение аккумулятора на GPIO34 через делитель 100 kΩ / 22 kΩ и, когда напряжение опускается до безопасного нижнего предела свинцово-кислотного аккумулятора, отправляет ESP32 в глубокий сон на 10 минут.

C++ (Arduino IDE)
1// ESP32: LM2596 ile 12 V aküden beslen, aküyü izle / ESP32: run from a 12 V battery via an LM2596, monitor the battery
2#include <Arduino.h>
3#include "esp_sleep.h"
4
5const int BAT_PIN = 34;                           // GPIO34: yalnız giriş, ADC1 / input-only, ADC1
6const float RATIO = (100.0 + 22.0) / 22.0;        // 100k / 22k bölücü (~5,55) / divider (~5.55)
7const float LOW_V = 11.8;                         // kurşun asit akü alt sınırı / lead-acid low limit
8const uint64_t SLEEP_US = 10ULL * 60 * 1000000;   // 10 dakika (mikrosaniye) / 10 minutes (microseconds)
9
10float batteryVolts() {
11  uint32_t mv = 0;
12  for (int i = 0; i < 16; i++) {
13    mv += analogReadMilliVolts(BAT_PIN);          // kalibre edilmiş mV / calibrated mV
14  }
15  return mv / 16.0 / 1000.0 * RATIO;              // bölücüyü geri hesapla / undo the divider
16}
17
18void setup() {
19  Serial.begin(115200);
20  delay(200);
21}
22
23void loop() {
24  float v = batteryVolts();
25  Serial.printf("Aku / Battery: %.2f V\n", v);
26  if (v < LOW_V) {
27    Serial.println("Aku zayif, 10 dk uyku / Battery low, sleeping 10 min");
28    Serial.flush();
29    esp_sleep_enable_timer_wakeup(SLEEP_US);      // zamanlayıcıyla uyan / wake up by timer
30    esp_deep_sleep_start();                       // derin uyku / deep sleep
31  }
32  delay(5000);
33}

Делитель понижает даже зарядное напряжение 14,4 V примерно до 2,6 V, так что значение остаётся в пределах диапазона АЦП ESP32. Свинцово-кислотный аккумулятор в покое полностью заряжен примерно при 12,6–12,8 V; падение ниже 11,8 V приближает его к глубокому разряду и сокращает срок службы. Есть одна загвоздка: сам LM2596 даже без нагрузки потребляет 5–10 mA. Пока ESP32 в глубоком сне тратит лишь микроамперы, модуль расходует 120–240 mAh в сутки, и аккумулятор на 7 Ah только из-за этого садится за 1–2 месяца. Посчитать со своими значениями можно в калькуляторе времени работы от батареи. Для проектов, которые будут спать месяцами, нужен модуль с выведенным пином EN (ON/OFF), чтобы полностью отключать питание, или понижающий преобразователь с очень малым током покоя; техники сна подробно разобраны в статье Глубокий сон ESP32.

Помощник для настройки на Raspberry Pi Pico (MicroPython)

Если хочется следить за настройкой на экране компьютера, Pico можно использовать как простой вольтметр. АЦП Pico читает максимум 3,3 V, поэтому подключи выход LM2596 к GP26 через делитель 100 kΩ и 10 kΩ; при таком соотношении можно безопасно измерять до 36 V, так что Pico не пострадает, даже если ещё не настроенный модуль выдаёт напряжение, близкое ко входному. Pico питается по USB, земли соединены. В зависимости от цели код выводит «high» (выше) или «low» (ниже) и зажигает встроенный светодиод, когда выход попадает в пределы ±1%. Если Pico в новинку, начни со статьи Что такое Raspberry Pi Pico?.

MicroPython
1# Pico: LM2596 ayar yardımcısı / Pico: LM2596 adjustment helper
2from machine import ADC, Pin
3import time
4
5adc = ADC(26)                  # GP26 (ADC0): OUT+ -> 100k -> GP26 -> 10k -> GND
6led = Pin("LED", Pin.OUT)      # dahili LED (Pico ve Pico W) / onboard LED (Pico and Pico W)
7RATIO = (100 + 10) / 10        # bölücü oranı 11, en fazla ~36 V / divider ratio 11, up to ~36 V
8VREF = 3.3                     # ADC referansı (V) / ADC reference (V)
9CAL = 1.000                    # multimetreyle düzeltme katsayısı / multimeter correction factor
10TARGET = 5.00                  # hedef: 5.00 ya da 3.30 / target: 5.00 or 3.30
11
12def read_volts(n=64):
13    total = 0
14    for _ in range(n):
15        total += adc.read_u16()                    # 0-65535 ham değer / raw value
16    return total / n / 65535 * VREF * RATIO * CAL
17
18while True:
19    v = read_volts()
20    err = (v - TARGET) / TARGET * 100              # hedeften sapma (%) / deviation from target (%)
21    led.value(abs(err) <= 1.0)                     # ±%1 içinde LED yanar / LED on within ±1%
22    if err > 1.0:
23        hint = "yuksek, dusur / high, lower it"
24    elif err < -1.0:
25        hint = "dusuk, artir / low, raise it"
26    else:
27        hint = "tamam / OK"
28    print("{:.2f} V  {:+.1f} %  {}".format(v, err, hint))
29    time.sleep(0.3)

АЦП Pico может ошибаться примерно на 1–2%, поэтому один раз подправь коэффициент CAL, сравнив показания с мультиметром; окончательную настройку всё равно лучше подтвердить мультиметром. Если потом захочется питать от LM2596 и саму Pico, подключи выход 5,0 V к пину VSYS через диод Шоттки 1N5819; диод не даёт двум источникам работать друг против друга, когда подключён USB. Никогда не подключай выход модуля к пину 3V3 на Pico.

Идеи проектов с LM2596

  • Робот-машинка: сборка 2S из 18650 (7,4 V) питает моторы напрямую через L298N, а LM2596, выставленный на 5 V, — Arduino и датчики. Шаги описаны в статье Как собрать робот-машинку на Arduino.
  • Робот-манипулятор: с LM2596, выставленным на 6 V, сделай для сервоприводов MG996R мощную линию питания, независимую от Arduino; подробности — в руководстве Робот-манипулятор на Arduino.
  • Умная теплица на 12 V: один блок питания 12 V питает вентилятор и насос, а LM2596 от той же линии выдаёт 5 V для Arduino, реле и LCD; смотри проект умной теплицы.
  • Регулируемый лабораторный блок питания: собери небольшой источник из LM2596, старого блока питания от ноутбука и цифрового вольтметра на Arduino, который показывает выходное напряжение на дисплее.
  • Светодиодная лента WS2812B: 60 светодиодов на полном белом могут потреблять до 3,6 A; ограничь яркость и держись ниже 2 A с LM2596 на 5 V. Расчёт тока — в статье WS2812B NeoPixel.
  • Устройство на ESP32 для автомобиля: понизь напряжение бортовой сети 12–14,4 V до 5 V; поставь на вход предохранитель, а от выбросов напряжения в машине — TVS-диод.

Частые ошибки и как их исправить

СимптомВероятная причинаРешение
Выход почти равен входу (например, 11 V при 12 V)Подстроечный резистор в крайнем верхнем положении или цель выше входного напряженияБез нагрузки, измеряя, поверни на 10–20 оборотов в сторону уменьшения
Значение не меняется при вращении подстроечного резистораМногооборотный подстроечный резистор прокручивается в крайнем положенииПоверни на 5–10 оборотов в обратную сторону; если ничего не меняется, модуль, возможно, неисправен
5 V падают до 4,3 V при подключении нагрузкиБлок питания не тянет ток, мала разница вход–выход или провода слишком тонкиеИзмерь вход под нагрузкой, оставь запас не меньше 2 V, используй короткие толстые провода
Arduino перезагружается, когда двигается сервоприводСервопривод и Arduino питаются от одной слабой линииОтдельный модуль для сервоприводов, конденсатор 470–1000 µF и общая GND
Модуль через несколько минут отключается и снова включаетсяСрабатывает тепловая защитаСнизь нагрузку, добавь радиатор и обдув или перейди на модуль на 5 A
После переполюсовки на выходе 0 V или то же, что на входеСгорели микросхема и диодЗамени модуль и поставь на вход последовательный диод Шоттки
Шум в аналоговых измерениях или в звукеПульсации переключения на 150 kHzПоставь на выход LC-фильтр или используй связку «импульсный + LDO», делай путь GND коротким
Настройка со временем уплываетВибрация провернула подстроечный резисторЗафиксируй подстроечный резистор лаком для ногтей или силиконом либо используй постоянные резисторы
При поиске неисправности сделай три измерения: вход под нагрузкой, выход под нагрузкой и разницу между ними. Если разница меньше 2 V, проблема в источнике; если вход в порядке, а выход низкий, виноваты модуль или провода. Суммарное сопротивление проводов и контактов макетной платы 0,1–0,2 Ω при 2 A даёт просадку 0,2–0,4 V; это легко увидеть в калькуляторе закона Ома. Не пропускай больше 1 A через шины макетной платы. Если есть подозрение, что плата повреждена, пройди проверки из статьи Сгорела ли Arduino?.

Если LM2596 правильно настроен, разница между входом и выходом достаточна, а предел 2 A соблюдается, это одна из самых практичных деталей, чтобы питать проект от одного блока питания или аккумулятора. Запомни порядок: сначала настройка без нагрузки, затем измерение под нагрузкой и только в конце подключение платы. В приложении BlueGrays есть проекты, которым нужно отдельное питание, — «Машинка на L298N с управлением по Bluetooth», «Робот, объезжающий препятствия», проекты с сервоприводами, «Хореография сервоприводов по кругу — анимации на 32 сервоприводах», «Работа со светодиодной лентой WS2812B», «Цифровой вольтметр с LCD-дисплеем» и «Умная станция полива» — с пошаговыми схемами подключения и кодом.

Частые вопросы

Как настроить LM2596?

Подключи источник ко входу и, ничего не подключая к выходу, приложи щупы мультиметра к OUT+ и OUT−. Вращай винт синего подстроечного резистора маленькой отвёрткой и остановись, когда увидишь нужное значение (например, 5,00 V). В конце подключи нагрузку и повтори измерение под нагрузкой.

Какой ток может отдать LM2596?

Микросхема LM2596 рассчитана на 3 A, а её внутреннее ограничение тока срабатывает при пиковом токе около 4,5 A. Готовые модули спокойно работают примерно на 2 A длительно без радиатора; для 3 A нужны радиатор и обдув. Поддельные микросхемы на дешёвых модулях могут выдавать меньше, поэтому надёжнее всего рассчитывать на 2 A.

В какую сторону крутить подстроечный резистор LM2596, чтобы поднять напряжение?

Направление может отличаться от модуля к модулю — это зависит от того, как подстроечный резистор разведён на плате, поэтому не полагайся на память. Поверни винт на 2–3 оборота в одну сторону и посмотри на мультиметр; если напряжение падает, это направление его уменьшает. У подстроечного резистора около 25 оборотов и нет упора, поэтому в конце он просто прокручивается со щелчком.

Почему выходное напряжение LM2596 не понижается?

Чаще всего подстроечный резистор стоит в крайнем верхнем положении; у многооборотного резистора может понадобиться 10–20 оборотов, прежде чем напряжение начнёт меняться. Если выставленное значение выше входного, выход застревает на 1–2 V ниже входа. Если никакое вращение ничего не меняет, а выход равен входу, микросхема пробита внутри; замени модуль.

Как питать Arduino через LM2596?

Можно выставить на модуле 5,0 V и подключить выход к пину 5V на Arduino; это самый «холодный» способ, но плату тогда ничто не защищает. Безопаснее выставить на модуле 7,5–9 V и подключить его к гнезду питания (DC) или к пину Vin. В обоих случаях OUT− модуля обязательно соединяется с GND на Arduino.

LM2596 или 7805: что лучше?

Когда разница между входом и выходом велика, а ток большой, LM2596 намного лучше: при понижении с 12 V до 5 V на токе 1 A 7805 выделяет 7 W тепла, а потери LM2596 меньше 1 W. Если разница маленькая, ток малый и нужно тихое питание, 7805 проще. В чувствительных аналоговых схемах их можно ставить друг за другом.

Все проекты
Цифровой вольтметр с LCD-дисплеем
#56Средний
Premium

Цифровой вольтметр с LCD-дисплеем

Узнай, какое напряжение даёт батарейка или блок питания, с помощью измерителя, собранного своими руками. Делитель из двух резисторов понижает высокое напряжение до уровня, который может прочитать плат

4.5(27)
36
Работа с сервоприводом
#35Новичок
Premium

Работа с сервоприводом

Рычаг маленького сервопривода по очереди поворачивается в три положения: до упора в начало, ровно на середину и до упора в конец, задерживаясь на каждой остановке на две секунды. Arduino сообщает мото

4.7(48)
67
Машинка на L298N с управлением по Bluetooth
#80Продвинутый
Premium

Машинка на L298N с управлением по Bluetooth

Преврати телефон в пульт и управляй своей машинкой-роботом. Arduino получает команды из приложения-пульта на телефоне через Bluetooth-модуль и вращает колёса через драйвер моторов; машинка едет вперёд

5.0(38)
65
Робот, объезжающий препятствия
#81Продвинутый
Premium

Робот, объезжающий препятствия

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

5.0(38)
49
Хореография сервоприводов по кругу — анимации на 32 сервоприводах
#102Продвинутый
Premium

Хореография сервоприводов по кругу — анимации на 32 сервоприводах

Визуальный анимационный проект на Arduino Mega с 32 сервоприводами, расставленными по кругу. Сервоприводы собраны в один массив и подключены к пинам 22–53 Mega; они показывают четыре движения: хаотичное дрожание на случайных углах, синхронный взмах всех сразу, плавную волну по кругу и, наконец, стрелку компаса, качающуюся влево и вправо. Эффект бегущей волны создаётся поворотом каждого сервопривода в зависимости от его расстояния до активного.

4.5(40)
62
Управление лентой WS2812B NeoPixel на ESP32
#126Средний
Premium

Управление лентой WS2812B NeoPixel на ESP32

Адресуемые светодиоды WS2812B (NeoPixel) — умные RGB-светодиоды, которыми управляют цепочкой через один пин данных. В этом проекте лента WS2812B из 8 светодиодов управляется библиотекой Adafruit_NeoPixel и показывает плавную радужную анимацию. Логика 3,3V у ESP32 работает с большинством WS2812B, но на случай нестабильности показано решение с последовательным резистором 470Ω и конденсатором 1000µF. Анимация получается сдвигом значения оттенка.

4.9(19)
30
Умная станция полива
#83Продвинутый
Premium

Умная станция полива

Садовник, который сам поливает растения, чтобы они не засохли, пока ты в отпуске. Датчик влажности почвы измеряет, насколько влажная земля; когда она сохнет, Arduino на несколько секунд включает водян

5.0(42)
57