На этой картинке неверные замеры, реальные пульсации далеко не такие большие. Я просто выставил полосу пропускания на 100 МГц при измерении, а если поставить 20 МГц, пульсации составляют порядка нескольких сотен мВ.
Цифровой источник питания Buck-Boost с синхронным выпрямлением на базе STM32 — открытый исходный код
Привет, ТС! Посмотрел твою принципиальную схему и осциллограммы, твоя проблема очень типична для разработки импульсных источников питания. Отвечаю на твои 4 вопроса по очереди:
- Высокочастотный выброс (звон 115 МГц): Это типичный паразитный звон (Ringing), вызванный моментом переключения ключа. То, что он появляется 4 раза за период, связано с тем, что в твоей H-мостовой топологии в моменты включения и выключения верхнего и нижнего ключей секций Buck и Boost паразитная индуктивность и паразитная емкость МОП-транзистора (C_{oss}) создают высокочастотный резонанс.
- Способ устранения: Сначала убедись, что для щупа осциллографа ты не используешь длинный зажим массы, а измеряешь с помощью пружины заземления (ground spring), иначе длинный провод массы будет работать как антенна и усиливать этот выброс (это может быть просто измерительная «иллюзия»). Если выброс действительно существует, необходимо подключить параллельно стоку-истоку (D-S) МОП-транзистора RC-снаббер (Snubber), или последовательно с затворным резистором добавить небольшой резистор для замедления скорости включения.
- Причина частого сгорания АЦП: Судя по твоей схеме выборки, операционный усилитель OPA2188 использует питание +5 В. Хотя ты и добавил стабилитрон D7 (BAT54C), ты нарисовал его подключение неправильно! BAT54C — это диод с общим катодом, ты подключил катод к сигнальной линии, а два анода — к земле, это защищает только от отрицательного напряжения и совершенно не мешает выходному сигналу превышать прямое напряжение 3,3 В. Когда выход ОУ из-за какого-то переходного процесса (например, скачка напряжения от добавленного конденсатора) напрямую подтягивается к 5 В, вывод АЦП STM32 (не толерантный к 5 В) моментально сгорает. Твоего добавленного резистора 1 кОм (R12) для ограничения тока может быть недостаточно, чтобы противостоять переходному импульсу.
- Рекомендации по защите выводов АЦП:
- Измени питание ОУ напрямую на 3,3 В (от того же источника, что и MCU), что принципиально ограничит максимальное выходное напряжение ОУ значением не выше 3,3 В.
- Если необходимо использовать ОУ с питанием 5 В, замени D7 на BAT54S (один диод на землю, другой на шину питания 3,3 В MCU), таким образом, когда напряжение превысит 3,3 В + 0,3 В, он откроется в сторону шины 3,3 В для защиты.
- Принципы разводки (Layout): В приоритете — сделать две «горячие» петли (Hot Loops) минимальными. Скорость изменения высокочастотного тока (di/dt) во входной цепи (Cin → верхний МОП → нижний МОП → GND) и выходной цепи (Cout → верхний МОП → нижний МОП → GND) очень велика, и если эти петли разведены плохо, высокочастотные помехи на твоей осциллограмме зашкалят. Большая петля (от общего входа к общему выходу) в основном несет постоянный и низкочастотный ток, поэтому достаточно обеспечить пропускную способность по току и адекватную емкость фильтрующих конденсаторов.
Глянул вашу ситуацию. Сжечь два МК подряд — конечно, очень больно, но главное — найти причину.
Что касается высокочастотных выбросов: приглядитесь, частота, которую показывает осциллограф, составляет целых 115 МГц. На таких частотах это с большой вероятностью наводка пространственного излучения, которую вносит крокодил заземления осциллографического щупа. Попробуйте использовать идущую в комплекте со щупом черную пружинку заземления, подсоединив ее прямо к выводам выходного конденсатора при измерении — пики однозначно станут намного меньше.
А насчет того, почему АЦП в STM32 совсем умерли:
Если посмотреть на ваш 3-й рисунок, операционный усилитель питается от 5 В. Выводы STM32 в режиме входа АЦП не являются 5V-толерантными (абсолютный максимум обычно около V_{DDA} + 0.3V). После добавления конденсатора и повторной подачи питания, из-за переходного процесса на выходе мог возникнуть выброс, ОУ ушел в насыщение и выдал напряжение, близкое к 5 В, что и спалило ваш STM32.
И еще один нюанс: у вас на схеме D7 указан как BAT54C, а эта модель идет с общим катодом. Судя по рисунку, вы подключили выводы к земле? Тогда он сможет ограничивать только отрицательное напряжение, а при положительном напряжении выше 3.3 В он вообще не работает. Советую просто заменить на BAT54S, подключив катод одного из диодов к шине питания 3.3 В, так вы обеспечите двустороннее ограничение.
Что касается Layout (трассировки): необязательно искусственно гнаться за минимальным размером большой петли, ключевое — две коммутационные «горячие» петли (Hot Loops) должны быть сведены максимально плотно. Входные и выходные конденсаторы нужно располагать вплотную к соответствующим выводам MOSFET, а земля нужно залить обширным медным полигоном. Желаю автору при следующем включении обойтись без дыма!
Ой! Выпустить магический дым из двух чипов STM32 — болезненный способ научиться, но мы все через это проходили.
Прежде всего: исправьте методику подключения щупа осциллографа. Этот звон на 115 МГц выглядит в точности так, как когда кто-то использует стандартный 6-дюймовый заземляющий провод с крокодилом на коммутационном узле. Он ловит высокочастотные электромагнитные помехи прямо из воздуха. Используйте пружинный наконечник заземления, установив его прямо на выходном конденсаторе.
Теперь давайте поговорим о том, почему сгорают ваши АЦП. Посмотрите на вашу цепь измерения VOUT. Ваш операционный усилитель питается от шины 5В. Когда вы добавили дополнительные выходные конденсаторы, вы изменили переходные характеристики. Во время включения ОУ, вероятно, уперся прямо в шину 5В. Даже с этим резистором на 1 кОм он пускает слишком большой ток в ESD-диоды STM32, сжигая внутренний мультиплексор АЦП. Также проверьте маркировку диода: у BAT54C общий катод. У вас оба оставшихся вывода подключены к земле. Это значит, что он защищает только от отрицательных выбросов. Против положительного перенапряжения он абсолютно бесполезен!
Быстрые решения для спасения вашего третьего микроконтроллера:
- Замените BAT54C на BAT54S. Подключите ограничивающий вывод к вашей шине 3.3В.
- Если вам не нужно измерять вплоть до 5В, просто запитайте OPA2188 от 3.3В. Это операционный усилитель rail-to-rail, поэтому он отлично подойдёт для вашего сигнала с полным размахом 2.72В.
Что касается разводки: просто уменьшите две горячие петли (от конденсатора Vin до ключей Buck и от конденсатора Vout до ключей Boost). Делайте их максимально компактными, используйте сплошной земляной полигон, и всё будет как надо.
То, что ты описываешь, очень похоже на перенапряжение на входе АЦП. RC-фильтр нижних частот фильтрует только среднее значение, от наносекундных выбросов он не спасёт. Особенно учитывая, что после добавления нескольких выходных конденсаторов проблемы начинаются при подаче питания — это значит, что пусковой бросок и звон, скорее всего, стали ещё сильнее. У входов АЦП STM32 есть встроенные защитные диоды, но они не предназначены для постоянного поглощения импульсных токов: при превышении допустимого инжекционного тока вход всё равно сгорит. Рекомендую поставить перед АЦП последовательный резистор на 1–10 кОм и ограничительный диод примерно на 3.6 В, либо сразу использовать для защиты TVS-диод или маломощный диод Шоттки. Что касается разводки: силовой контур с высоким di/dt должен быть максимально компактным, а дорожки опроса не должны идти вплотную к узлу SW.
- Входная емкость Ciss выбранного тобой MOSFET-а немного великовата, он не очень подходит для высокочастотной коммутации. Какую частоту переключения ты задал?
- На вывод ADC можно добавить TVS/ESD-диод на 3.3 В для ограничения напряжения, либо поставить диод Шоттки на шину питания 3.3 В, чтобы ограничить напряжение на уровне 3.3 В.
- Обеспечь минимальную площадь входных и выходных контуров, крупные контуры тоже должны быть минимальными.
Частота коммутации 100 кГц, я ранее считал потери на коммутацию, при моем номинальном выходе получается где-то около 1 Вт, схема у меня на 15-60В → 30В 5А
Привет, гуру! Хочу спросить, почему моё устройство при входе 12В работает только на понижение? То есть при подаче 12В без нагрузки на экране выход 0.5–12В отображается нормально, но как только выкручиваешь до примерно 13В, то больше не выдаёт — как дальше ни крути, на выходе остаётся 12В
Я делал всё в точности как у автора, принципиальную схему и плату (PCB) не менял. Гуру, очень прошу, помогите разобраться ![]()
Проверь, нет ли холодной пайки.
Хочу спросить знатоков: сталкивался ли кто-нибудь с коротким замыканием/пробоем между всеми тремя выводами MOSFET (G, D, S)? Чем это может быть вызвано? На что нужно опираться при диагностике?
В данный момент способ управления у меня такой: используется только прямая связь по напряжению, на основе входного напряжения и целевого выходного напряжения вычисляется целевое значение коэффициента заполнения для обеих сторон, затем, в соответствии с целевым коэффициентом заполнения, запускается плавный пуск. Прерывания вызываются с частотой 500 Гц, и при каждом прерывании коэффициент заполнения MOSFET изменяется на 0,02. Ниже приведена хронология подачи питания.
-
При входном напряжении 58 В, выходном напряжении 30 В, входном конденсаторе 220 мкФ и выходном конденсаторе 470 мкФ схема нормально работает как на холостом ходу, так и с резистивной нагрузкой 20 Ом. После этого я добавил несколько выходных конденсаторов.
-
При входном напряжении 58 В, выходном напряжении 30 В, входном конденсаторе 220 мкФ, выходных конденсаторах: два зелено-золотых электролитических по 470 мкФ, один твердотельный на 100 мкФ и один пленочный на 600 нФ, а также дросселе на 100 мкГн (заявленный продавцом ток насыщения 12 А). При подаче питания на схему в этих условиях я обнаружил, что между всеми тремя выводами (G, D, S) двух MOSFET на стороне buck имеется короткое замыкание/пробой, а на стороне boost всё в порядке. Поломка MOSFET, скорее всего, произошла в процессе подачи питания.
-
ИИ подсказывает, что после увеличения емкости выходных конденсаторов возросший зарядный ток мог привести к выходу MOSFET из строя. Но почему тогда повредилась только сторона buck, а сторона boost осталась целой?
Судя по твоим словам, он может только понижать напряжение, но не повышать, так? Проверь, нормально ли открывается и закрывается MOSFET на стороне boost? В норме ли сигнал драйвера?
В качестве МОП используется CSD19534Q5A
Какой тип дросселя? Формованный? Тороидальный? Какой сердечник? Сендаст? Какая частота коммутации?
Температуру MOSFET измеряли? Может, он взорвался от перегрева из-за слишком больших потерь?
Полное короткое замыкание всех трех выводов MOSFET GDS (затвор, сток, исток), в народе называемое «пробоем транзистора», действительно является огромной головной болью. При разработке источников питания такой крайне разрушительный отказ обычно означает, что внутри кремниевого кристалла произошел катастрофический тепловой пробой (прямое расплавление), в результате чего физические изолирующие слои между тремя электродами полностью выгорели и сплавились вместе.
Наблюдаемое вами явление весьма типично. ИИ сказал, что «увеличение выходной емкости приводит к увеличению зарядного тока» — это правильное направление, но оно объясняет лишь поверхностную причину. Объединив вашу логику управления и аппаратные параметры, мы можем глубоко проанализировать коренную причину этой «аварии» и почему она «предвзято» выводит из строя только сторону Buck.
I. Почему пробивает только сторону Buck, а сторона Boost остается невредимой?
При входном напряжении 58 В и выходном 30 В ваша схема работает в понижающем режиме (Buck).
В этом режиме:
- MOSFET-транзисторы стороны Buck (входная сторона): Выполняют высокочастотное жесткое переключение, отвечая за «нарезку» высокого напряжения 58 В. Верхний транзистор выдерживает огромные коммутационные нагрузки, а нижний транзистор (синхронный выпрямитель) также должен часто переключаться в такт.
- MOSFET-транзисторы стороны Boost (выходная сторона): Находятся в состоянии «прямого прохода» (или верхний транзистор постоянно открыт, а нижний постоянно закрыт). Они не выполняют высокочастотного переключения и лишь отвечают за проведение тока.
Когда возникает скачок перегрузки по току, энергия поступает от входа 58 В. Верхний транзистор стороны Buck — это «первые ворота», соединяющие источник питания и дроссель. Когда система выходит из-под контроля и ток мгновенно взлетает, именно высокочастотно переключающиеся транзисторы стороны Buck первыми принимают на себя огромный ударный ток (тепловые потери I^2R). Поскольку транзисторы Boost постоянно открыты, они несут только потери на проведение, и у них нет динамических потерь и скачков напряжения от переключения, поэтому обычно они выдерживают.
II. «Серийный убийца», приводящий к полному короткому замыканию GDS (анализ причин)
В вашем методе управления кроется фатальная скрытая угроза: разомкнутое управление с чистой прямой связью по напряжению (без токового контура) в сочетании с огромной выходной емкостью.
Ниже приведена полная цепочка событий, приводящая к разрушению MOSFET:
1. Фатальная логика управления: отсутствие обратной связи по току
Ваше текущее управление заключается в «вычислении целевого коэффициента заполнения → пошаговом плавном пуске». Это означает, что микроконтроллер слеп, он вообще не знает, какой ток в данный момент протекает через дроссель.
Согласно формуле заряда конденсатора I = C \frac{dV}{dt}, когда вы увеличиваете выходную емкость с 470 мкФ почти до 1100 мкФ, количество заряда, необходимое для зарядки до 30 В, удваивается. Поскольку скорость шага коэффициента заполнения при плавном пуске фиксирована (увеличение на 2% каждые 2 мс), принудительное повышение коэффициента заполнения заставляет LC-фильтр создавать напряжение, что требует огромного переходного тока.
2. Мгновенное насыщение дросселя (главный виновник)
Номинальный ток насыщения вашего дросселя составляет 12 А, индуктивность — 100 мкГн.
При чистой прямой связи по напряжению скачок коэффициента заполнения (на 2% за раз) приводит к мгновенному дисбалансу вольт-секундного произведения, приложенного к дросселю. Для батареи конденсаторов общей емкостью более 1000 мкФ при начальном напряжении 0 В это эквивалентно короткому замыканию.
Когда скачок тока превышает 12 А, дроссель переходит в магнитное насыщение. Как только дроссель насыщается, его индуктивность мгновенно резко падает (стремится к нулю), и в этот момент дроссель перестает быть накопителем энергии, а превращается в провод с очень малым сопротивлением!
3. Сквозной ток и термическое разрушение (окончательный вердикт полного короткого замыкания GDS)
Как только дроссель теряет свою токоограничивающую роль, входное напряжение 58 В почти напрямую прикладывается к R_{ds(on)} верхнего транзистора стороны Buck и крошечному паразитному сопротивлению.
- Ток может мгновенно взлететь до десятков или даже сотен ампер.
- Ложное включение Миллера: Чрезвычайно высокий di/dt вызывает сильные колебания на паразитных индуктивностях дросселя и дорожек ( V = L \frac{di/dt}{dt} ). Эти высокочастотные и высоковольтные всплески связываются с затвором (Gate) через емкость Миллера ( C_{gd} ) MOSFET. Если способность драйвера затвора недостаточна или сопротивление выключения слишком велико, напряжение принудительно возрастает, что приводит к одновременному открытию верхнего и нижнего MOSFET-транзисторов стороны Buck (сквозной ток — Shoot-through).
- 58 В замыкаются напрямую на землю, и в сопровождении огромного тока короткого замыкания кремниевая пластина внутри MOSFET мгновенно достигает нескольких сотен или даже тысяч градусов, подзатворный оксид (очень тонкий изолирующий слой диоксида кремния) разрушается, а металлические выводы G, D и S физически плавятся и замыкаются накоротко.
III. По каким критериям судить и проверять?
Чтобы подтвердить вышеизложенные рассуждения, вы можете произвести посмертный анализ в следующих аспектах:
- Проверьте состояние дросселя: Посмотрите, не изменился ли цвет сердечника дросселя 100 мкГн из-за перегрева, или есть ли следы обгорания на обмотке. Хотя ток возникает лишь на мгновение, серьезный перегрузочный ток из-за насыщения иногда оставляет физические следы.
- Проверьте драйвер затвора (Gate Driver): Поскольку произошло полное короткое замыкание GDS, высокое напряжение 58 В наверняка прошло обратно через вывод Gate в ваш драйвер (например, IR2104, EG8010 и т. д.), и драйвер, скорее всего, также сгорел, возможно, даже повредив вывод PWM микроконтроллера.
- Рассчитайте скорость нарастания плавного пуска: Прерывание 500 Гц = период 2 мс. Изменение за шаг 0,02 (2%). Увеличение от 0% до предполагаемых 50% коэффициента заполнения занимает всего 50 мс. Без ограничения тока, чтобы зарядить 1000 мкФ до 30 В за 50 мс, вы можете оценить средний зарядный ток; пиковый ток абсолютно точно далеко превышает 12 А вашего дросселя.
IV. Фундаментальные предложения по улучшению
Чтобы полностью решить эту проблему и избежать повторного «пробоя» транзисторов, вам необходимо провести следующие обновления системы:
- Необходимо ввести аппаратную защиту от перегрузки по току (OCP): Это базовая мера безопасности. Осуществляйте выборку тока на нижнем транзисторе стороны Buck или на шине; как только ток превысит 10 А (оставьте небольшой запас для предотвращения насыщения), немедленно блокируйте сигнал PWM с помощью аппаратной схемы, ни в коем случае не полагайтесь полностью на программные прерывания для спасения ситуации.
- Добавьте внутренний токовый контур (замкнутое управление): Не используйте «вычисленный» коэффициент заполнения, чтобы управлять схемой в лоб. Зрелый DC-DC должен иметь двойной замкнутый контур (внешний контур управляет напряжением, внутренний — током). Пусть ошибка по напряжению генерирует заданное значение тока, ограничьте это заданное значение максимумом не более 10 А, а затем позвольте токовому контуру динамически регулировать коэффициент заполнения.
- Максимально замедлите плавный пуск в разомкнутом контуре: Если вы пока не можете написать алгоритм с двойным замкнутым контуром, вы должны сделать шаг 0,02 очень маленьким (например, 0,001) или снизить частоту прерываний, чтобы у конденсатора было достаточно времени для плавной зарядки, и одновременно используйте осциллограф для фиксации тока дросселя, чтобы гарантировать, что максимальный пиковый ток на этапе пуска останется < 10 А.
Дроссель, скорее всего, из сендаста, тороидальный дроссель, частота коммутации 100 кГц, температуру MOSFET не замерял, потому что через несколько секунд после подачи питания пошёл запах гари, и я сразу же обесточил, да и приборов для измерения температуры у меня нет.
Похоже, на катушке индуктивности действительно есть следы подгорания, но я не уверен, то ли это от подачи питания, то ли я ее обжег при пайке, микросхема драйвера затвора работает нормально,
Есть ли осциллограф? Можно подключить токоизмерительный резистор последовательно с дросселем и с помощью осциллографа измерить изменение напряжения на его выводах, чтобы определить пиковый ток дросселя.
В файле уже указана последовательность ламинации, импеданс не требуется.
