DC/AC инвертор: принцип работы, схемотехника, встроенное ПО

Импульсные преобразователи и силовая электроника в целом, всегда оставались чем-то сакральным для большинства любителей и профессионалов в области разработки электроники. В статье освещается пожалуй самая интересная тема в среде DIY-щиков и фанатов альтернативной энергетики — формирование синусоидального напряжения/тока из постоянного.

Думаю многие из вас наверняка видели рекламу, либо читали статьи, где была фраза «чистый синус». Вот именно о нем и пойдет речь, но не о маркетинговой составляющей, а о исключительно технической реализации. Я постараюсь максимально понятно рассказать о самих принципах работы, о стандартных (и не очень) схемотехнических решениях и самое главное — напишем и разберем ПО для микроконтроллера STM32, которое и сформирует нам необходимые сигналы.

Почему STM32? Да потому, что сейчас это самый популярный МК в СНГ: по ним много обучающей русскоязычной информации, есть куча примеров, а главное эти МК и средства отладки для них — очень дешевые. Скажу прямо — в коммерческом проекте я бы поставил только TMS320F28035 или подобный DSP из серии Piccolo от TI, но это уже совсем другая история.

Важно одно — STM32 позволяет стабильно управлять простыми «бытовыми» силовыми преобразователями от которых не зависит судьба мира работа какой-нибудь АЭС или ЦОДа.



Вот такую картину управляющих сигналов необходимо получить, чтобы превратить ток постоянный в переменный. И да — тут именно синус! Как в том фильме: «Видишь суслика? — Нет. — А он есть...»

Интересно узнать каким образом формируется синус? Хочется узнать как все-таки качают нефть киловатты энергии? Тогда добро пожаловать под кат!

1. Топологии для формирования синусоидального сигнала


Если спросить у толпы электронщиков: «Как можно сформировать синусоидальный сигнал?», то посыпятся предложения с десятком различных методов, но какой нужен нам? Давайте оттолкнемся от изначальной задачи — нам нужно превратить, например, 380В 10А в переменное напряжение 230В. В общем это «классический» случай, его мы можете увидеть в любом хорошем on-line UPS или инверторе. Получается нам надо преобразовать мощность около 4 кВт да еще и с хорошим КПД, не слабо, да? Я думаю подобное условие поубавит количество вариантов «рисования» синуса. Так что же нам остается?

В силовых преобразователях до 6-10 кВт применяется две основные топологии: полный мост и «полумост» со сквозной нейтралью. Выглядят они следующим образом:

1) Топология со сквозной нейтралью



Данная топология очень чаще всего встречается в бюджетных ИБП с синусом на выходе, хотя и такие авторитеты как APC и GE не брезгуют применять ее даже на достаточно больших мощностях. Что же их побуждает к этому? Давайте рассмотрим достоинства и недостатки данной топологии.

Плюсы:


  • Минимально возможное количество силовых транзисторов, а значит потери в 2 раза меньши и стоимость устройства тоже ниже
  • Сквозной ноль. Это упрощает процесс сертификации, особенно CE и ATEX. Связано это с тем, что сквозной ноль позволяет системам защиты по входу (например, УЗО) срабатывать так же при возникновение аварии в выходных цепях после преобразователя
  • Простая топология, что позволяем максимально уменьшить стоимость изделия при мелко-
    и средне серийном производстве

Минусы:


  • Необходимость двухполярного источника питания. Как видите на схему инвертора надо подавать ±380В и еще ноль
  • Удвоенное количество высоковольтных конденсаторов. Высоковольтные конденсаторы большой емкости и с малым ESR на мощностях от 3-4 кВт начинают составлять от 20 до 40%
    стоимости компонентов
  • Применение электролитических конденсаторов в «делителе». Они сохнут, подобрать конденсаторы с одинаковыми параметрами практически нереально, а если учесть, что параметры электролитов меняются в процессе эксплуатации, то и бессмысленно. Заменить на пленку можно, но дорого

Основные плюсы и минусы определены, так когда необходима это топология? Мое субъективное мнение: на мощностях до 500-1000 Вт, когда основополагающим требованием является стоимость, а не надежность. Явный представитель такого ширпотреба — это стабилизаторы от «А-электроника»: дешево, кое-как работает да и ладно. Для 60% потребителей в нашей стране этого достаточно и доступно по цене. Делаем выводы.

2) Мостовая топология



Мостовая топология… наверное самая понятная и самая распространенная топология в силовых преобразователях, а главное доступная разработчикам даже с небольшим опытом. После 10 кВт вы не встретите ничего другого кроме моста одно- или трехфазного. За что же его так любят?

Плюсы:


  • Очень высокая надежность. Она в основном обусловлена качеством системы управления силовыми транзисторами и не зависит от деградации компонентов
  • Входная емкость требуется в разы, а то и на порядок меньше. Необходимо лишь обеспечить расчетное значение ESR. Это позволяет использовать пленочные конденсаторы при сохранение себестоимости. Пленочные конденсаторы — не сохнут, лучше ведут в суровых температурах, рабочий ресурс на порядок выше, чем у электролитов
  • Минимальные пульсации напряжения на транзисторах, а значит можно применить транзисторы на меньшее напряжение
  • Простота и понятность алгоритмов работы. Это приводит к значительному уменьшению времени на разработку изделия, а также на его пуско-наладочные работы

Минусы:


  • Увеличенное количество силовых транзисторов, а значит необходимо более серьезное охлаждение. Увеличение цены на транзисторах, но за счет меньшего количества конденсаторов это скорее даже плюс
  • Повышенная сложность драйвера, особенно при требованиях к наличию гальванической развязки

Как видите из реальных минусов мостовой топологии лишь повышенное требование к охлаждению транзисторов. Многие подумают: «Тепла выделяетсябольше — значит КПД ниже!». Не совсем так… За счет уменьшенных выбросов ЭДС и более «жесткой» системы управления КПД у двух приведенных топологий примерно равный.

В 70% случаев мне приходится применять мостовую схему не только в DC/AC инверторах, но и в других преобразователях. Это связано с тем, что проектирую в основном промышленные решения и все чаще для европейских заказчиков, а там принято на дорогие промышленные устройства давать гарантию 5-15 лет. Классическое требование: «Хотим железку, чтобы можно было давать гарантию 10 лет», тут уже выбирать не приходится. Конечно, когда люди хотят устройство с минимальной ценой, то тут необходимо уже отталкиваться от конкретной задачи при выборе топологии.

Небольшой итог: в данной статье будет приведено ПО для работы мостового преобразователя (Н-мост или Full Bridge), но сам принцип формирования синуса одинаковый для всех топологий. Код можно будет также адаптировать и под 1-ю топологию, но это вы уже сами.

2. Формирование переменного тока с помощью мостового преобразователя


Для начала давайте разберем как вообще работает мостовой преобразователь. Смотрим на схемку и видим транзисторы VT1-VT4. Они позволяют нам подавать на нашу абстрактную нагрузку (резистор, например) тот или иной потенциал. Если мы откроем транзисторы VT1 и VT4, то получится следующее: VT4 один конец нагрузки подключит к минусу (GND), а транзистор VT1 подключит к +380В, на нагрузке появится разность потенциалов «380В — 0В», которая не равна нулю, а значит через нагрузку начнет протекать ток. Я думаю все помнят, что ученые договорились — ток протекает «от плюса к минусу». Получаем такую картину:



Что мы получили открыв VT1 и VT4? Мы подключили нашу нагрузку к сети! Если резистор заменить на лампочку, то он она бы просто загорелась. И еще мы не просто включили нагрузку, а определили направление тока, протекающего через нее. Это очень важно! А что было в это время с VT2 и VT3? Они были закрыты… совсем… намертво… Что будет если все таки VT2 или VT3 были так же открыты? Смотрим:



Предположим, что открылись транзисторы VT1, VT4 и VT2. Вспоминаем закон Ома, смотрим сопротивление канала у высоковольтных транзисторов, например, IPP60R099P7XKSA1 и видим 0.1 Ом, у нас их 2 последовательно — значит сопротивление цепи VT1 и VT2 у нас около 0.2 Ом. Теперь посчитаем ток, которые пойдет через эту цепь: 380В / 0.2 Ом = 1900А. Думаю всем понятно, что это КЗ? Так же думаю всем понятно почему VT2 и VT3 должны быть закрыты?

Данный «феномен» называется — сквозной ток. И именно с ним идет большая война в силовой электронике. Как его избежать? Создать систему управления, алгоритм которой будет жестко запрещать одновременной открытие лишнего транзистора.

Зачем же нужны тогда транзисторы VT2 и VT3? Помните я писал, что очень важно направление тока? Давайте вспомнит что такое переменные ток. Собственно это ток, который имеет что-то переменное, в данном случае направление тока. У нас в розетке протекает ток, который меняет свое направление 100 раз в секунду. Давайте теперь закроем VT1 и VT4, а затем откроем транзисторы VT2 и VT3 и получим такую картину:



Как видите направление тока (обозначено стрелками) изменилось на противоположное. Использование моста позволило нам менять направление тока, о чем это говорит? Да, мы получили переменный ток!

Прошу обратить внимание, что у моста есть как бы 2 диагонали: первая диагональ образована VT1+VT4, а вторая диагональ образована с помощью VT2+VT3. Данные диагонали работают по очереди, коммутирую ток сначала в одну сторону, а потом в другую.

Вот мы получили переменный ток, скажите вы, но не все так просто… У нас есть стандарт — сетевое напряжение. Оно нормируется двумя основными параметрами: напряжение и частота. Давайте пока разберемся с частотой, ибо вопрос напряжения простой и чисто схемотехнический.

И так частота… что о ней известно — она 50 Гц (бывает 60Гц в Штатах). Период сигнала равен 20 мс. Синусоида штука симметричная в данном случае, а значит наши 2 полуволны (положительная и отрицательная) имеют одинаковую длительность, то есть 10 мс + 10 мс. Надеюсь тут все понятно.

Что это значит в физическом смысле? Да то, что нам нужно менять направление тока в нагрузке каждые 10 мс. Получаем, что сначала у нас открыта 10 мс диагональ VT1+VT4, а затем она закрывается и на следующие 10 мс открывается диагональ VT2+VT3.

Что значит открыть транзистор и какой сигнал на него подавать
Давайте отвлечемся немного на принцип управления транзисторами. Я использую полевые N-канальные транзисторы с изолированным затвором (Mosfet).

«Открытый транзистор» — это транзистор, на затвор (G) которого подали положительный потенциал (+10..18В) относительно истока (S) и транзистор изменил сопротивление канала (S-D) с бесконечно большого (2-100 МОм) на малое (обычно 0.1 — 1 Ом). То есть транзистор начал проводить ток.

«Закрытый транзистор» — это транзистор, затвор (G) которого подтянули к истоку (S) и его сопротивление изменилось с маленького до бесконечно большого. То есть транзистор перестал проводить ток.

Для лучше ознакомления с принципом работы полевого транзистора или IGBT — советую вам прочитать пару глав в книге Семенова «Основы силовой электроники» или другой источник, можно и википедию для начала.

Для управления мы подаем сигнал с Широтно-Импульсной Модуляцией или более привычная аббревиатура — ШИМ. Особенность данного сигнала в том, что у него есть 2 состояния: нижнее напряжение (GND) и верхнее напряжение (VCC), то есть подавая его на затвор транзистора мы или открываем его или закрываем — иного не дано. Про ШИМ тоже советую почитать дополнительно, ибо я вам описал для ленивых поверхностно.

И так, для того, чтобы у нас мост менял направление тока каждые 10 мс нам нужно подать на него ШИМ сигнал, период которого равен 20 мс, а скважность 50%. Это значит, что у нас из 20 мс плечо половину времени (10 мс) открыто и проводит ток, а другую половину закрыто. Подавать такой ШИМ нам надо на все ключи, но с одним условием — на диагональ VT1+VT4 мы подаем прямой ШИМ, а на диагональ VT2+VT3 уже инверсный. Если говорить более по-умному, то сигнал, подаваемый на диагонали должен иметь сдвиг 1800. Я думаю в этот момент у вас голова закипела в попытках понять текст, поэтому смотрим на его визуальное представление:



Теперь все понятно? Нет? Тогда подробнее… Как видите я отметил специально моменты открытия и закрытия транзисторов: открываются на «плюсе» и закрываются на «минусе». Также сигналы противоположны, то есть инверсные: когда синий сигнал «плюс», то зеленый сигнал «минус». Синий сигнал мы подаем на один на одну диагональ, а зеленый сигнал на другую — как видно на осциллограмме, наши диагонали никогда не открываются одновременно. Переменный ток готов!

Смотри на период. Специально показал осциллограмму с выходов контроллера, чтобы мои слова не были абстракцией. Период сигнала составляет 20 мс, одна диагональ открыта 10 мс и создает положительную полуволну, другая диагональ так же открывается на 10 мс и создает уже отрицательную полуволну. Теперь надеюсь всем понятно, а кто и сейчас не понял — пишите в ЛС, проведу для вас индивидуальное занятие на пальцах. В подтверждение моих слов осциллограмма показывает наши заветные 50 Гц! Только расслабляться рано…

Мы получили переменный ток с частотой 50 Гц, но в розетке у нас синусода, а тут меандр — не дело. Формально можно подавать меандр на выход и питать им большинство нагрузок, например, импульсному блоку питанию все равно: синус или меандр. То есть для включения ноутбуков, телефонов, телевизоров, телефонов и прочего вам уже хватит, но если вы подключите двигатель переменного тока, то все будет очень плохо — он начнет греться и КПД его ощутимо меньше, а в итоге скорее всего сгорит. Вы думаете у вас нет двигателей дома? А компрессор холодильника? А циркулярный насос отопления? Последние вообще горят как будто из дерева сделаны. Такая же ситуация с глубинными насосами для скважин, да и вообще много с чем. Получается, что синусоидальный сигнал на выходе инвертора, стабилизатора или ИБП все таки бывает важен. Что же — надо его создать! Сейчас начнется совсем взрыв мозга…

3. Формирование синусоидальной формы сигнала с помощью ШИМ


Если говорить откровенно, то я не знаю как данный раздел преподнести на доступном языке. Вдруг кто не поймет, то прошу вас или погуглить дополнительно, или написать в комментарии или ЛС — попытаюсь персонально вам объяснить. Глаза боятся, а руки делают…

Давайте посмотрим как выглядит обычный график синуса:



Видим 2 оси: одна ось с периодом пи, пи/2 и далее, вторая с амплитудой от -1 до +1. В нашей задаче период измеряется в секундах и составляет 20 мс или 10 мс на каждую полуволну. Тут все просто и понятно, а вот с амплитудой веселее — просто примите как аксиому, что амплитуда у нас от 0 до 1000. Это значение скважности, которую устанавливает микроконтроллер, то есть 100 — это 10%, 500 — 50%, 900 — 90%. Логика думаю понятна. В следующей главе вы поймете почему от 0 до 1000, а пока перестроим наш график под наши значения:



Вот так выглядит график синуса курильщика, который соответствует нашей задачи. Как видите отрицательный полупериод я не обозначил, т.к. у нас он реализуется не с помощью синусоидального сигнала, а с помощью изменения направления тока переключением диагоналей моста.

По оси Х у нас время, а по оси Y скважность нашего ШИМ-сигнала. Нам нужно нарисовать синус с помощью ШИМа. Вспоминаем геометрию в школе, как мы строили графики? Правильно, по точкам! А сколько точек? Давайте построим синус по нескольким точкам О1(0,0) + О2(5,1000) + О3(10,0) + О4(15, -1000) + О5(20, 0) и получаем такой синус:



Построили и видим, что в принципе данный сигнал больше похож на синус чем обычный меандр, но это все равно не синус пока что. Давайте увеличим количество точек. Это кстати называется «дискретность сигнала» или в данном случае «дискретность ШИМа». А как узнать координаты этих точек? С крайними то просто было…

Расчет значений для формирования синуса


Как выше я говорил — синус у нас вполне себе симметричный. Если мы построим 1/4 периода, то есть от 0 до 5 мс, то дублируя этот кусок дальше — мы можем строить синус бесконечно долго. И так формула:

И так по порядку:

  • n — значение скважности в данной дискретной точке
  • A — амплитуда сигнала, то есть максимальное значение скважности. У нас это 1000
  • pi/2 — 1/4 периода синуса попадает в pi/2, если считаем 1/2 периода, то pi
  • x — номер шага
  • N — количество точек

Давайте для примера сделаем удобно условие, что у нас 5 точек. Получается у нас 1 шаг = 1 мс, это позволит легко график построить. Шаг дискретизации считается просто: период в котором строим график (5 мс) делим на количество точек. Давайте приведем формулу к человеческому виду:


Получаем шаг дискретизации 1 мс. Формулу для вычисления скважности оформим, например, в excel и получим следующую таблицу:



Теперь вернется к нашему графику синуса и построим его снова, но уже для большего количества точек и посмотрим как он изменится:



Как видим сигнал куда больше похож на синус, даже с учетом моего мастерства в рисовании, а точнее в уровне лени)) Я думаю результат не требует объяснений? По результатам построения выведем аксиому:

Чем больше точек, чем выше дискретизация сигнала, тем идеальнее форма синусоидального сигнала


И так, сколько же точек будем использовать… Понятно, что чем больше, тем лучше. Как посчитать:

  1. Использую для статьи старенький микроконтроллер STM32F100RBT6 (отладка STM32VL-Discovery), его частота 24 МГц.
  2. Считаем сколько тактов будет длиться период 20 мс: 24 000 000 Гц / 50 Гц = 480 000 тиков
  3. Значит половина периода длится 240 000 тиков, что соответствует частоте 24 кГц. Хотите повысить несущую частоту — берите камень шустрее. 24 кГц наши уши все таки услышат, но для тестов или железки, стоящей в подвале пойдет. Чуть позже я планирую перенести на F103C8T6, а там уже 72 МГц.
  4. 240 000 тиков… Тут логично напрашивается 240 точек на половину периода. Таймер будет обновлять значение скважности каждые 1000 тиков или каждые 41,6 мкс

С дискретностью ШИМа определились, 240 точек на пол периода с запасом хватит, чтобы получить форму сигнала как минимум не хуже, чем в сети. Теперь считаем таблицу, так же в excel как самый простой вариант. Получаем такой график:



Исходник таблицы и значений можно взять по ссылке — тут.

4. Управление мостовым преобразователем для формирования синуса


Мы получили таблицу синуса и что с ней делать? Нужно передавать эти значения с определенным шагом дискретизации, который у нас известен. Все начинается с того, что таймер инициализировался — время 0, скважность ноль. Далее мы отсчитываем шаг дискретизации 41,66 мкс и записываем в таймер значение ШИМа из таблицы 13 (0,13%), отсчитываем еще 41,66 мкс и записываем 26 (0,26%) и так далее все 240 значений. Почему 240? У нас 120 шагов на 1/4 периода, а нам надо нарисовать 1/2 периода. Значения скважности те же, только после того как они достигли 1000 мы записываем ее в обратной последовательность и получаем спад синуса. На выходе мы будем иметь вот такую осциллограмму:



Как видите мы получили кучу значений ШИМа в четко заданном периоде и его длительность составляет: 240 шагов х 41,66(!) мкс = 9998,4 мкс = 9,9984 мс ~ 10 мс. Мы получили половину периода для частоты сети 50 Гц. Сигнала как видите опять два и они в противофазе, как раз то, что нужно для управления диагоналями моста. Но позвольте, где же синус спросите вы? Настал момент истины! Давайте теперь сигнал с выхода микроконтроллера подадим на ФНЧ, я сделал простой ФНЧ на RC-цепочки с номиналами 1,5 кОм и 0,33 мкФ (под рукой просто были) и получил такой результат:



Вуаля! Вот он наш долгожданный синус! Красный луч осциллографа — это сигнал до ФНЧ, а желтый луч — сигнал уже после фильтрации. ФНЧ обрезал все частоты выше 321 Гц. У нас остался основной сигнал 50 Гц, ну и конечно его гармоники с небольшой амплитудой. Если хотите идеально очистить сигнал, то сделайте ФНЧ с частотой среза около 55-60 Гц, но пока это не важно, нам надо было лишь проверить получился ли у нас синус или нет. Кстати… у меня синхронизация осциллографа включена по желтому лучу (стрелка справа экрана) и мы видим внизу экрана его частоту — идеальные 50 Гц. Что еще можно пожелать? Пожалуй все, осталось определиться какой сигнал и куда подавать. Давайте рассмотрим такую картинку:



Если вы обратите на саааамую первую осциллограмму в статье, то увидите, что сигнал в желтом и синем лучше имеют одинаковую фазу, то есть они в одно время становятся положительными и открывают транзисторы. Эти 2 сигнала открывают диагональ VT1+VT4. Соответственно 2 других сигнала так же имеют одинаковую фазу и открывают другую диагональ. Теперь мы не просто меняем направление тока, но и задаем амплитуду с помощью ШИМ таким образом, чтобы она изменялась по синусоидальному закону. Теперь рассмотрим эту же схемку, но уже с токами:



Как видим ток через нагрузку протекает в противоположную сторону, меняя направление с частотой 50 Гц, а модулированный ШИМ, подаваемый на транзисторы VT1 и VT2 позволяет нарисовать синусоидальную форму сигнала на полуволнах.

ФНЧ (фильтр низкой частоты) выполнен на индуктивности L1 и конденсаторе C2. Частоту среза для данного фильтра советую считать менее 100 Гц, это позволит минимизировать пульсации напряжения по выходу.

На десерт покажу часть схемы реального устройства с подобной топологией и фильтром, она большая, поэтому скачиваем PDF-ку тут.

5. Борьба со сквозными токами


Я думаю не для кого не секрет, что нет ничего идеального? Тоже самое и с Mosfet-ами, у них есть ряд недостатков и мы рассмотрим один из них — большая емкость затвора. То есть, чтобы нам открыть транзистор надо не просто подать напряжение, но и этим самым напряжением зарядить конденсатор, поэтому фронт и спад сигнала затягивается. Это приводит к тому, что на границе сигналов может возникать момент времени, когда один транзистор еще полностью не закрылся, а другой уже начал открываться.

Подробнее о данном явление советую почитать, например, в этой статье. Я лишь расскажу как с ним бороться. Чтобы транзисторы успели нормально закрыться до открытия следующего плеча между управляющими сигналами вводят dead-time или проще говоря — временную задержку. У нас такая задержка будет введена между управляющими сигналами на транзисторах VT3 и VT4, т.к. именно они обеспечивают коммутацию полуволн. На транзисторах с модулируемым ШИМом (VT1 и VT2) такие задержки уже есть — синус начинается со скважности 0% и заканчивается тоже 0%. Эта задержка длиной в 1 шаг дискретизации, то есть 41.6 мкс.

И так — надо реализовать мертвое время между синим и зеленым лучом/сигналом. На любом контроллере такую задержку можно сделать программным способом, но это не есть хорошо — программа подвиснет или задержится и пыщ-пыщ ваше устройство и квартира уже объяты огнем. Поэтому в силовой электронике стоит применять только аппаратные средства. На всех специализированных motor control аппаратный deadtime предусмотрен на всех выходах ШИМа и каналах, но STM32 это все таки МК общего назначения, поэтому тут все проще, но нашу функцию он выполнит.

Нам понадобится таймер TIM1, только он умеет вставлять аппаратную задержку между сигналами, в разделе про написание ПО я расскажу как это сделать, а сейчас смотрим на результат и на то, что вообще должно быть:



Чтобы увидеть задержку «растягиваем» сигнал на осциллографе, т.к. он имеет небольшую длительность около 300 нс. Необходимое время длительности deadtime необходимо рассчитывать для каждой конкретной задачи, чтобы защитить транзисторы от сквозных токов. Длительность задержки настраивается при иннициализации (настройке) таймера TIM1. Данная задержка присутствует и на фронте и на спаде сигнала.

6. Написание встроенного ПО для микроконтроллера STM32


Вот мы и подошли наверное к самой важной и интересной части. Физику процесса мы разобрали, принцип работы вроде понятен, необходимый минимум защит тоже определен — осталось только все это реализовать в реальном железе. Для этого я использую платку STM32VL-Discovery, получил ее кстати еще в 2011 году во времена, когда ST раздавали отладки бесплатно на своих конференциях и с тех пор она лежала запакованная — открыл упаковку всего пару месяцев назад, вроде срок годности не прошел))) Выглядит мой «стенд» для написание кода вот так:



Теперь пройдемся по подключению. Так как мне необходимо формировать два сигнала с разной частотой, то пришлось задействовать выходы ШИМ на разных таймерах. TIM1 формирует сигнал, который задает основную частоту 50 Гц и подает их на транзисторы VT3 и VT4. Используется канал ШИМа №3 + его комплементарный выход. Да да, в STM32 аппаратный deadtime можно настроить только между обычным и комплементарным выходом одного канала, что мне сильно не понравилось. Сам процесс формированию синуса передан таймеру TIM2, тут уже не нужна задержка (ранее писал почему) и он вполне сгодится для формирование модулированного сигнала на VT1 и VT2.

Используемые выходы:


  • PA10 — обычный выход ШИМ, канал №3 таймера TIM1, который генерирует 50 Гц на транзистор VT3
  • PB15 — комплементарный выход канала №3 таймера TIM1, который подается на транзистор VT4
  • PA0 — выход ШИМ канала №1 таймера TIM2. Подает модулированный сигнал на VT1
  • PA1 — выход ШИМ канала №2 таймера TIM2. Подает модулированный сигнал на VT2

Проект реализован в среде Keil 5, он будет в конце статьи прикреплен к архивом. Рассказывать как создавать проект и подобные очевидные вещи надеюсь не стоит, если такие вопросы возникают, то советую посмотреть как это делать в гугле или на youtube. Весь код написан на CMSIS (регистры), т.к. использовать в системе управления преобразователем какие-либо дополнительные уровни абстракции просто грех! У ST это библиотеки SPL и более актуальные HAL. Для интереса поработал и с теми и с теми, вывод — хлам полный. HAL так вообще безумно тормознутый и для приложений с жестким реал-таймом просто не подходит от слова совсем. В некоторых критичных моментах регистры были в разы быстрее, об этом кстати нашел не одну статью на просторах интернета.

Некоторые наверняка спросят: «А почему не задействовать DMA?» Сделать это можно и нужно, но данная статья носит скорее ознакомительный характер, да и сам МК не делает ничего сложного в плане вычислений, поэтому в производительность ядра тут точно не упереться. DMA — это хорошо, но без DMA можно обойтись без каких-либо потенциальных проблем. Давайте уточним, что нам нужно сделать в программе:

  1. Создать массив с нашими 240 точками синуса
  2. Настроить цепи тактирования на частоту 24 МГц, выбрав источник внешний кварцевый резонатор
  3. Настроить таймер TIM1 на генерацию ШИМ 50 Гц с включенным deadtime
  4. Настроить TIM2 на генерацию ШИМ с несущей частотой 24 кГц
  5. Настроить таймер TIM6, который генерирует прерывания с частотой 24 кГц. В нем мы будем отправлять следующее значение скважности из таблицы в таймер TIM2, а также чередовать генерацию полуволн

Ничего сложного, правда? Тогда поехали…

6.1. Создание таблицы синуса


Тут все просто, обычный массив. Единственное, что стоит помнить — у нас 120 точек от 0 до 1000. Нам нужно добавить в таблицу еще 120 точек, но в обратной последовательности:

uint16_t sin_data[240] = 
{13,26,39,52,65,78,91,104,117,130,143,156,169,182,195,207,220,233,246,258,
271,284,296,309,321,333,346,358,370,382,394,406,418,430,442,453,465,477,488,500,
511,522,533,544,555,566,577,587,598,608,619,629,639,649,659,669,678,688,697,707,
716,725,734,743,751,760,768,777,785,793,801,809,816,824,831,838,845,852,859,866,
872,878,884,891,896,902,908,913,918,923,928,933,938,942,946,951,955,958,962,965,
969,972,975,978,980,983,985,987,989,991,993,994,995,996,997,998,999,999,999,1000,
999,999,999,998,997,996,995,994,993,991,989,987,985,983,980,978,975,972,969,965,
962,958,955,951,946,942,938,933,928,923,918,913,908,902,896,891,884,878,872,866,
859,852,845,838,831,824,816,809,801,793,785,777,768,760,751,743,734,725,716,707,
697,688,678,669,659,649,639,629,619,608,598,587,577,566,555,544,533,522,511,500,
488,477,465,453,442,430,418,406,394,382,370,358,346,333,321,309,296,284,271,258,
246,233,220,207,195,182,169,156,143,130,117,104,91,78,65,52,39,26,13};

6.2. Настройка системы тактирования


Настройка тактирования в STM32 весьма гибкая и удобная, но есть несколько нюансов. Сама последовательность выглядит следующим образом:

1) Переключаемся на тактирование от встроенной RC-цепочки (HSI) на внешний кварц (HSE), дальше ждем флага о готовности

RCC->CR |= ((uint32_t)RCC_CR_HSEON); 	// Enable HSE
while (!(RCC->CR & RCC_CR_HSERDY));	// Ready start HSE 

2) Flash память контроллера работает несколько медленнее, чем ядро для этого настраиваем тактирование флеши. Если этого не сделать, то программа запустится, но будет периодически падать: пара кВт и нестабильное ПО — вещи несовместимые.

FLASH->ACR = FLASH_ACR_PRFTBE | FLASH_ACR_LATENCY;  // Cloclk Flash memory

3) Выставляем делители для системной шины тактирования (AHB) и для шин периферии, коих аж две штуки: APB1 и APB2. Нам нужна максимальная частота, поэтому ничего не делим и коэффициенты деления делаем равными 1.

RCC->CFGR |= RCC_CFGR_HPRE_DIV1;	// AHB = SYSCLK/1
RCC->CFGR |= RCC_CFGR_PPRE1_DIV1;	// APB1 = HCLK/1
RCC->CFGR |= RCC_CFGR_PPRE2_DIV1;	// APB2 = HCLK/1

4) Настраиваем множитель частоты (PLL) предделитель, который стоит перед ним и делит частоту кварца на 2. Получаем, что 8 МГц поделили на 2 и получили 4 МГц. Теперь надо их умножить на 6, чтобы на выходе были 24 МГц. Перед записью регистров предварительно сотрем их содержимое на всякий случай.

RCC->CFGR &= ~RCC_CFGR_PLLMULL; // clear PLLMULL bits
RCC->CFGR &= ~RCC_CFGR_PLLSRC;	// clearn PLLSRC bits
RCC->CFGR &= ~RCC_CFGR_PLLXTPRE; // clearn PLLXTPRE bits

RCC->CFGR |= RCC_CFGR_PLLSRC_PREDIV1;  // source HSE
RCC->CFGR |= RCC_CFGR_PLLXTPRE_PREDIV1_Div2; // source HSE/2 = 4 MHz
RCC->CFGR |= RCC_CFGR_PLLMULL6; // PLL x6: clock = 4 MHz * 6 = 24 MHz

5) Теперь надо включить множитель частоты (PLL) и дождаться флага о готовности:

RCC->CR |= RCC_CR_PLLON; // enable PLL                      	
while((RCC->CR & RCC_CR_PLLRDY) == 0) {} // wait till PLL is ready 

6) И наконец-то настраиваем источник тактирования для системной шины (AHB) выход нашего множителя частоты, на котором заветные 24 МГц. Предварительно содержимое регистра чистим, устанавливаем нужный бит и ждем флага готовности:

RCC->CFGR &= ~RCC_CFGR_SW; // clear SW bits
RCC->CFGR |= RCC_CFGR_SW_PLL; // select source SYSCLK = PLL
while((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_1) {} // wait till PLL is used 

В итоге у нас получается вот такая функция настройки тактирования:

void RCC_Init (void){

RCC->CR |= ((uint32_t)RCC_CR_HSEON); // Enable HSE
while (!(RCC->CR & RCC_CR_HSERDY));   // Ready start HSE

FLASH->ACR = FLASH_ACR_PRFTBE | FLASH_ACR_LATENCY; // Cloclk Flash memory

RCC->CFGR |= RCC_CFGR_HPRE_DIV1; // AHB = SYSCLK/1
RCC->CFGR |= RCC_CFGR_PPRE1_DIV1; // APB1 = HCLK/1
RCC->CFGR |= RCC_CFGR_PPRE2_DIV1; // APB2 = HCLK/1

RCC->CFGR &= ~RCC_CFGR_PLLMULL; // clear PLLMULL bits
RCC->CFGR &= ~RCC_CFGR_PLLSRC; // clearn PLLSRC bits
RCC->CFGR &= ~RCC_CFGR_PLLXTPRE; // clearn PLLXTPRE bits

RCC->CFGR |= RCC_CFGR_PLLSRC_PREDIV1; // source HSE
RCC->CFGR |= RCC_CFGR_PLLXTPRE_PREDIV1_Div2; // source HSE/2 = 4 MHz
RCC->CFGR |= RCC_CFGR_PLLMULL6; // PLL x6: clock = 4 MHz * 6 = 24 MHz

RCC->CR |= RCC_CR_PLLON; // enable PLL
while((RCC->CR & RCC_CR_PLLRDY) == 0) {} // wait till PLL is ready
RCC->CFGR &= ~RCC_CFGR_SW; // clear SW bits
RCC->CFGR |= RCC_CFGR_SW_PLL; // select source SYSCLK = PLL
while((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_1) {} // wait till PLL is used
}

6.3. Настройка таймера TIM1 и «мертвого времени»


Я приведу общую настройку таймера, она подробно описана в reference manual — назначение каждого регистра советую почитать. Да и базовые статьи по работе с ШИМ в интернете есть. Сам код у меня весьма неплохо прокомментирован, поэтому привожу сразу код функции инициализации таймера TIM1, а самые интересные моменты разберем:

void PWM_50Hz_Init (void){

RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; // enable clock for TIM1
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // enable clock for port A
RCC->APB2ENR |= RCC_APB2ENR_IOPBEN; // enable clock for port B
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN; // enable clock for alternative gpio
	
/****************************** Setting PA10 **************************************/

GPIOA->CRH 	&= ~GPIO_CRH_CNF10; // setting out alternative push-pull for PWM
GPIOA->CRH 	|= GPIO_CRH_CNF10_1;

GPIOA->CRH	&= ~GPIO_CRH_MODE10;
GPIOA->CRH	|= GPIO_CRH_MODE10; // gpio speed 50 MHz
		
/***************************** Setting PB15 ***************************************/

GPIOB->CRH 	&= ~GPIO_CRH_CNF15; // setting complementary for CH3N
GPIOB->CRH 	|= GPIO_CRH_CNF15_1;

GPIOB->CRH	&= ~GPIO_CRH_MODE15;
GPIOB->CRH	|= GPIO_CRH_MODE15; // gpio speed 50 MHz

/************************** Config PWM channel ************************************/

TIM1->PSC = 480-1; // div for clock: F = SYSCLK / [PSC + 1]
TIM1->ARR = 1000; // count to 1000
TIM1->CR1 &= ~TIM_CR1_CKD; // div for dead-time: Tdts = 1/Fosc = 41.6 ns
TIM1->CCR3 = 500; // duty cycle 50%

TIM1->CCER |= TIM_CCER_CC3E | TIM_CCER_CC3NE; // enable PWM complementary out
TIM1->CCER &= ~TIM_CCER_CC3NP; // active high level: 0 - high, 1 - low

TIM1->CCMR2 &= ~TIM_CCMR2_OC3M;
TIM1->CCMR2 |= TIM_CCMR2_OC3M_2 | TIM_CCMR2_OC3M_1; // positiv PWM

TIM1->BDTR &= ~TIM_BDTR_DTG; // clear register
TIM1->BDTR |= TIM_BDTR_DTG_2 | TIM_BDTR_DTG_1 | TIM_BDTR_DTG_0;	 // value dead-time
TIM1->BDTR |= TIM_BDTR_MOE | TIM_BDTR_AOE; // enable generation output
	
/*******************************************************************************/

TIM1->CR1 &= ~TIM_CR1_DIR; // count up: 0 - up, 1 - down
TIM1->CR1 &= ~TIM_CR1_CMS; // aligned on the front signal	
TIM1->CR1 |= TIM_CR1_CEN; // start count
	
}

Скважность у нас фиксированная и никогда не изменяется, как и частота. Именно этот таймер задает время и последовательность работы диагоналей:

TIM1->CCR3 = 500; // duty cycle 50%

Длительность паузы «мертвого времени» зависит сильно от временной параметра TDTS, которое настраивается тут:

TIM1->CR1 &= ~TIM_CR1_CKD; // div for dead-time: Tdts = 1/Fosc = 41.6 ns

Его длительность составляет 1 тик тактовой частоты. Если посмотреть в reference manual, то можно увидеть, что биты CKD могут, например, сделать Tdts равным 2, 8 тикам и прочее.

Самое же время паузы устанавливается тут:

TIM1->BDTR |= TIM_BDTR_DTG_2 | TIM_BDTR_DTG_1 | TIM_BDTR_DTG_0;

Если отроете reference manual RM0041, то увидите вот такие формулы для расчета DT. Как видите параметр Tdts там основнополагающий:



6.4. Настройка таймера TIM2, формирующий синус


Тут все еще проще, объяснять что-то в настройке наверно нет смысла, ибо комментарии и так избыточны. Если будут вопросы — жду их в комментариях.

void PWM_Sinus_Init (void){
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; // enable clock for TIM2
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // enable clock for port A
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN; // enable clock for alternative gpio

/****************************** Setting PA0 ***************************************/

GPIOA->CRL 	&= ~GPIO_CRL_CNF0; // setting out alternative push-pull for PWM1_CH1
GPIOA->CRL 	|= GPIO_CRL_CNF0_1;

GPIOA->CRL	&= ~GPIO_CRL_MODE0;
GPIOA->CRL	|= GPIO_CRL_MODE0; // gpio speed 50 MHz
/****************************** Setting PA1 ***************************************/

GPIOA->CRL 	&= ~GPIO_CRL_CNF1; // setting out alternative push-pull for PWM1_CH1
GPIOA->CRL 	|= GPIO_CRL_CNF1_1;

GPIOA->CRL	&= ~GPIO_CRL_MODE1;
GPIOA->CRL	|= GPIO_CRL_MODE1; // gpio speed 50 MHz

/*************************** Config PWM channel ***********************************/

TIM2->PSC = 0; // div for clock: F = SYSCLK / [PSC + 1]
TIM2->ARR = 1000; // count to 1000
TIM2->CCR1 = 0; // duty cycle 0%
TIM2->CCR2 = 0; // duty cycle 0%

TIM2->CCER |= TIM_CCER_CC1E; // enable PWM out to PA8
TIM2->CCER &= ~TIM_CCER_CC1P; // active high level: 0 - high, 1 - low

TIM2->CCER |= TIM_CCER_CC2E; // enable PWM complementary out to PA9
TIM2->CCER &= ~TIM_CCER_CC1P; // active high level: 0 - high, 1 - low

TIM2->CCMR1 &= ~(TIM_CCMR1_OC1M | TIM_CCMR1_OC2M);
TIM2->CCMR1 |= TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 |
 TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2M_1; // positiv PWM1_CH1 and PWM1_CH2  

/*******************************************************************************/

TIM2->CR1 &= ~TIM_CR1_DIR; // count up: 0 - up, 1 - down
TIM2->CR1 &= ~TIM_CR1_CMS; // aligned on the front signal: 00 - front; 01, 10, 11 - center
TIM2->CR1 |= TIM_CR1_CEN; // start count
	
}

6.5. Настройка прерываний от таймера TIM6


Настраиваем сам таймер на частоту 24 кГц:

void TIM6_step_init (void){

RCC->APB1ENR |= RCC_APB1ENR_TIM6EN; // enable clock for basic TIM6

TIM6->PSC = 1-1; // div, frequency 24 kHz
TIM6->ARR = 1000; // count to 1000
TIM6->DIER |= TIM_DIER_UIE; // enable interrupt for timer
TIM6->CR1 |= TIM_CR1_CEN; // start count

NVIC_EnableIRQ(TIM6_DAC_IRQn); // enable interrupt TIM6_DAC_IRQn
	
}

6.6. Реализация основного алгоритма управления


Основные события происходят в генерируемом таймером TIM6 прерывании. Прерывание генерируется каждые 41,66 мкс, если помните это наш шаг дискретизации. Соответственно в прерывании записывается значение скважности из таблицы в регистр CCRx. Также в данном прерывании определяется какая диагональ в данный момент времени отрисовывается, путем инверсии флага sin_status после каждого полупериода. Мы выводим 240 точек, инвертируем флаг, что вызывает переход управления к другому каналу, когда уже и он отрисовал, то флаг опять инвертируется и все повторяется. Код основного алгоритма:

void TIM6_DAC_IRQHandler(void){

TIM6->SR &= ~TIM_SR_UIF; 	

if(sin_status == 0){TIM2->CCR1 = sin_data[sin_step];}
if(sin_status == 1){TIM2->CCR2 = sin_data[sin_step];}

sin_step++;

if(sin_step >= 240){
         sin_step=0;
         sin_status = sin_status ? 0 : 1;
         }
}

Итоги


Скачиваем проект, компилируем и заливаем в ваш микроконтроллер и получаем рабочий инвертор. Вам остается только сделать мост и подавать на него сигналы:



Одну из своих схем моста я чуть ранее выложил в PDF-ке можете пользоваться сколько угодно, надеюсь она вам поможет в освоение силовой электроники.

Также в проект я натянул FreeRTOS. Конечно средствами RTOS нельзя реализовывать подобные задачи по управлению, т.к. простое переключение между задачами длится от 4 до 18 мкс и это если код хорошо написан и работе планировщика ничто не помешает. Это не позволяет получить систему управления, работающую в жестком реал-тайме. FreeRTOS я поставил для другого: интерфейсы связи (RS-485 Modbus RTU), регулировка выходной амплитуды напряжения, пересчет таблицы, синхронизация с сетью 230В и прочее. Все эти плюшки я тоже попробую реализовать на STM32, а возможно и напишу продолжение тематики статьи, если получатся интересные результаты и будет чем поделиться.

Надеюсь статья вам понравилась. Если у вас возникли вопросы по применению данного кода в реальном железе, то буду рад ответить на них. Также прошу не воспринимать данный код как что-то готовое, это ядро преобразователя, которое реализует основную функцию. Все «плюшки» и прочую избыточность вы можете добавить сами. Голое ядро проекта позволит вам понять как оно работает и не тратить кучу времени на разборку кода.

Материалы
1) Проект в Keil 5 скачиваем — тут
Структура такая:
а) start_init — настройка частоты, выхода MCO для тестов, GPIO общего назначения (светодиоды/кнопки)
б) PWM — настройка ШИМа, таймеров и всего, что было задействовано при работе по управлению мостом
в) main.c — основной код

2) Reference manual для STM32F10x — тут


UPD1: хотелось бы поблагодарить пользователя sleip за ряд найденных ошибок, в основном в таблице синуса — она изменена. Те, кто использовали код или саму таблицу прошу скопировать ее снова, в статье уже исправленный вариант.
Поделиться публикацией
Никаких подозрительных скриптов, только релевантные баннеры. Не релевантные? Пиши на: adv@tmtm.ru с темой «Полундра»

Зачем оно вам?
Реклама
Комментарии 252
  • +5
    Спасибо. Очень хорошо разжевано, осталось только проглотить и пойти жечь транзисторы ;).
    • 0
      Очень точно сказано, если сразу 380 подавать. Можно с 24 начать и не очень мощным БП. Автору большое спасибо!!! Если ли понимание можно ли использовать индуктивную нагрузку, дрель например, китайские поделки с подобной схемотехникой горят…
      • +8
        Мастерство в силовой электронике — пропорционально количеству спаленных транзисторов, поэтому без этого не обойтись))
        • 0
          … И драйверов. Причём, драйвера иной раз и подороже будут.

          ЗЫ. Не упомянуты ещё основы разводки силовых плат. У меня с этим были проблемы. Вот вроде всё хорошо и работает, рисует красивые осциллограммы, а стоит подключить реальную нагрузку и напряжение как «бах».
          • 0
            Проектирование ПП не упомянуты в название статьи поэтому о платах ничего и не сказано. Вообще конструировать адекватно платы под СВЧ и силовуху учатся годами, умеют не многие, а делиться опытом и наработками — это себе конкурентов растить только))
      • 0
        Таблицу синусов можно сократить вдвое, она симметричная. Хотя в нынешних МК памяти уже не жалко.
        • +5
          Конечно можно и нужно. В статье об этом несколько раз упоминалось, что таблицы для 1/4 периода достаточно, т.к. синус сигнал симметричный. Таблицу на половину периода я сделал лишь с целью сделать код понятным. Если сделать таблицу на 120 значений, то несколько усложнится алгоритм записи данных в прерывании, а так таблица просто пишется линейно. И есть несколько моментов, во-первых, усложнение алгоритма вывода значений увеличит время нахождения в прерывании, что не есть хорошо и во-вторых, может запутать совсем начинающего электронщика.
          • +4
            Отдельно спасибо за работу на регистрах.
            • +2
              Да, это прямо в душу запало. Я-то думал что один такой и что-то со мной не так, когда плевался на стандартные либы от ST…

              Там внутри реальный трэш и угар творится.
              • +5

                Вы не один такой)) SPL ещё более менее, а вот HAL это просто ад. Ощущение, что его 3 пьяных индуса за вечер написали. Да и скорость разработки он не увеличивает, если что-то ломается, то можно пару дней искать косяк в библиотеках. У меня много знакомых, кто с регистров ушли на HAL, а через пол года вернулись

                • +1
                  Аналогично, залогинился специально, чтобы поставить плюс за работу на регистрах. :)

                  Если говорить откровенно, то я не знаю как данный раздел преподнести на доступном языке.


                  Я бы просто сказал, что, чтобы получить синус, ШИМ надо проинтегрировать. Что такое интегрирование здешняя аудитория точно знает. :)

                  Или можно сказать, что мы выделяем нижнюю гармонику, которая будет соответствовать модулирующему сигналу.
                  • 0

                    Кстати да, интегрирование — отличная интерпретация. В следующий раз в таком виде и буду описывать. Спасибо за хорошую мысль!)

            • 0
              Плюсы/минусы сквозной нейтрали/моста местами сильно надуманы, местами противоречат сами себе.
              Сквозная нейтраль почти всегда будет дороже моста в основном из-за необходимости двуполярного питания.
              Про надежность опять же ИМХО опять же сильно надумано.
              Ну и все эти заморочки с УЗО, заземлением и прочая не на пустом месте появились, а для больших мощностей намного актуальнее.
              • +3
                Все, что написано в статья является исключительно моим субъективным мнением и я надеюсь это все понимают. Четкого разделения на «плюс» и «минус» не возможно в принципе, это тоже думаю понятно. Именно поэтому плюс и минусы пересекаются и противоречат частично)) Данные выводы по «плюсам/минусам» сделаны из моего опыта разработки силовых преобразователей + информация из достаточно компетентных статей и прочих источников. У кого-то этот опыт может быть иным как и мнение, это нормальное явление.

                Про основную сложность с двухполярным питанием вы абсолютно правы. Если речь идет, например, о ИБП, то у нас и выход инвертора должен быть двухполярным, и выход PFC тоже двухполярным, а это сложнее и дороже.

                Заморочки со сквозной нейтралью в ряде стран описаны на уровне стандартов, например, в Норвегии без сквозной нейтрали нельзя установить ИБП от слова совсем. В России таких требований пока нет. На больших мощностях обычно (из того, что сам видел) и ДО и ПОСЛЕ преобразователя ставят защиту, т.к. если пыхнет, то ущерб будет сильно дороже, чем стоимость даже хорошего автомата от того же ABB.
              • 0

                Очень странное предположение, что гладкий интерпретированный график в экселе означает такой же сигнал… ВЧ-гармоник в нем будет очень много

                • +2
                  А где вы это увидели? И зачем смотреть на график, когда есть осциллограмма сигнала, которая по той же таблице генерируется? В месте про ФНЧ так же указано, что гармоники уменьшаются по амплитуде, но не исчезают полностью. Прошу не читать между строк.
                • 0
                  А вправду говорят, что нонешние частотные преобразователи обходятся без DC-преобразования? Вроде как заправские джедай-самураи- рубят входную синусоиду на куски, и тут же её склеивают в выходную?
                  • 0
                    Не совсем так. Есть решения, когда сеть все таки выпрямляют, но не сглаживают. Получается однополярная синусоида с удвоенной частотой, как в выпрямителе без конденсатора и уже ее нарезают. На мощностях больше 2.2 кВт такое на практике не встречал, но сказать, что сильно много с промышленными частотниками сталкиваюсь, тоже не могу.
                  • +1
                    несколько лет назад стояла задачка получить синус на 400 Гц и 36 В и три фазы для включения авиационного прибора. Так как мощность была не очень большая( 2А по ТЗ по постоянному питанию, по факту разумеется меньше), то решил немного упростить себе жизнь и отказаться от LC фильтра на выходе. В итоге получилась связка ШИМ от МК подается на фильтр Баттерворта 2 порядка на ОУ, а полученная синусоида раскачивается на TDA7294
                    • 0
                      Хитрое решение)) Пульсации были так понимаю меньше чем с LC-фильтром? И КПД не измеряли случаем? Мне кажется, что на паре сотен ватт это уже наверное печка будет.
                      • 0
                        печка неплохая, все же синусоида не самый лучший сигнал для усиления))
                        в цифрах уже не скажу, давно дело было и в серию в итоге плата не пошла. Прибор заработал и на меандре)
                      • 0
                        Круто!!! еще-бы на лампах, каких-нить 6С19… непомню… короче мощняцкие триоды, 1.5Ампера анодного току… запаралелить их 100500, и был-бы реально теплый-ламповый инвертор!!! Вы-бы стали звездой Ютюба!)
                        без сарказма есличе)
                        • 0
                          составить конкуренцию для Kreosan?:)
                          На светлане генераторные лампы до сих пор клепают на пару кВт штука)
                          • 0
                            Ухты. Откуда такая инфа? У них репортажи были, про обычные лампочки. А про генераторные? есть где поглядеть?
                            • 0
                              лет 5 назад ездили на производство от универа. У нас со светланы пару преподов было. С репортажами без понятия, где могли засветиться.
                              Хотя производство мелких ламп там тоже интересое
                      • 0

                        А разве если писать на ходу в CCRx не возникает глюков у ШИМа?
                        или этот вопрос в контроллерах больше не актуален?
                        на атмеловском контроллере простеньком чего-то делал, дак там рекомендовали перед сменой скважности деинициализировать ШИМ.
                        И мне кажется что дискретность ШИМа 0-1000 избыточна, и 250 достаточно, и частоту можно будет поднять.
                        Можно также порекомендовать для преобразователей покупать контроллеры у которых эта функция аппаратно заложена, обычно три фазы для питания двигателей.
                        Ну и не забываем про микросхемы — драйверы ключей, в них сейчас и защита и мертвое время аппаратно заложены.


                        ЗЫ: статью в закладки, плюс в карму

                        • 0
                          C AVR и PIC16 не работал никогда, что там не скажу, но вот в STM32, TMS320, LPC, MSP432 такой проблемы точно нет. Собственно периферийный блок ШИМ и создан для этого. Нужно только помнить, что не у всех МК значение загружается в ШИМ за 1 такт системный, но у меня ни разу не возникало необходимости делать несущую частоту сигнала сопоставимую частоте работы ядра и периферии.

                          0-1000 это лишь значение скважности, чем больше эта цифра, тем точнее считается значение. Если сделать, например, 0-250, то точность упадет в 4 раза. Это не очень сильно помешает конечно, но если есть возможность сделать лучше — надо делать лучше.
                          Про использование motor control нормальных я написал во втором абзаце, просто они не сильно популярны, ибо специфичны. Хотелось показать именно на чем-то доступном любому человеку. В планах написать аналогичную статью, но для трехфазного ШИМа и на TMS320F28027, тоже дешевый камень, но уже специализированный как раз под силовуху.

                          Про драйвера верно подмечено, но иногда ее не хватает. Например, у меня есть железка, где сигнальные линии около 320 мм и сделать короче нельзя — одно из решений было как раз увеличить задержку с помощью DSP, чтобы компенсировать затяжные фронты.
                          • 0
                            Но от затяжного фронта же сам мосфет будет греться сильнее? Не было возможности драйвер перенести к самому ключу?
                            • 0
                              Конечно будет, но +3 Вт динамических потерь на каждом транзисторе (их 12 штук) были не существенны при мощности 8000 Вт. Возможности не было, т.к. надо было обязательно в 2 слоя и токи большие, поэтому все сожрали полигоны медные. Таким образом нашли просто «золотое сечение» между стоимость/КПД
                            • –3
                              Влезу сюда, раз про скважность речь идет.
                              Это значение скважности, которую устанавливает микроконтроллер, то есть 100 — это 10%, 500 — 50%, 900 — 90%.
                              Простите за занудство, но скважность и коэффициент заполнения у вас сопоставлены неправильно.
                              image
                              image
                              Таким образом, 50% это скважность 2, а 500 — это 0.2%.
                              • 0

                                Скважность это отношение времени открытого состояния к периоду. Период счета 1000, время открытого состояния 500. Скважность 500/1000 = 0.5. Значение скважности всегда от 0 до 1. Получаем, что 0.5 — это 50%

                                • 0
                                  Скважность (S) это отношение периода импульса (T) к его длительности (т). А от 0 до 1 это коэфициент заполнения (D — duty cycle), который есть отношение единицы к скважности. Но их постоянно путают.
                                  • 0
                                    Ох… какая разница? Зависимость то линейная, просто в -1 степени. На физический смысл в контексте статьи это никак не влияет, а слово «скважность» привычнее для большинства ушей.
                                    • +1
                                      В том-то и дело, что не линейная, да еще и в обратную сторону (чем больше скважность, тем короче импульс) — разница принципиальная.

                                      Я вот не могу понять, вы, вроде, нормальный специалист, написали орошую статью, но вместо просвещения занимаетесь оправданием ошибок в терминологии под предлогом «многим так привычно». Не надо так.
                                      • 0
                                        Принципиальная для вас — да. Для меня нет, т.к. для понимания происходящего — это не критично, тем более цифру «50%» интерпретировать как-то иначе надо постараться. Хотите академичности — добро пожаловать в учебники, тут же даже отметки «туториал» нет, поэтому написано так, как мне показалось более доступным.
                                        • 0
                                          Для любого человека с профильным образованием или хотя бы читавшего википедию.

                                          Leerooooy, я тебе не чувак, парень. Есть некоторая разница между ошибкой в орфографии и осознанной подменой терминологии.
                                          • 0
                                            Для людей с профильным образованием — эта статья не принесет ничего нового. Это или 1й семестр спец глав электротехники или 2й семестр схемотехники же. Статья больше для людей «самоучек» у которых огромная пропасть между их знаниями и учебником. Я открою секрет наверное, но 95% студентов не способны осилить учебник в чистом виде, т.к. нужна прослойка и даже не одна. Собственно поэтому учебники все забывают через неделю, а статьи расписанные «на пальцах» уходят в закладки на долгое время.
                                            • 0
                                              Это все довольно очевидно, но никак не противоречит сказанному мной.
                                              • 0
                                                Вы все правильно написали. Я когда-то делал подобную штуку… на****ся с алогритмом управления ключами. Поначалу синус все время кривым получался, хотя на РЦ-цепочке все идеально было. Подсказали на одном очень умном форуме(форум Валентина Володина), очень умные люди, что в диагонали, оба конца фильтра всегда должны быть «пришпилены» к питалову и земле. Т.е. например левая половина Н-моста работает комплементарно, а в правой, конец даагонали или к земле, или к питанию. Потом поменялись. Я честно говоря не вдался в подробности, у вас так-же, или нет, но у меня без этой хитрости все кривое выходило. Как только доработал- сразу все пошло как в книжке на картинке.

                                                Хорошо, что вы все разжевали. Тому, кому понятно, нет нужды читать, пролистать мышкой вниз не составит труда.

                                                Отдельный + за код работы с регистрами и разжевывание. Присоединяюсь к заянию библиотек типа HAL. Можно привыкнуть ими пользоваться, но это все равно, что зазубрить, сдать, забыть. Нужно каждый раз лезть в библиотеку и смотреть, а как-жее собственно использовать, как там индусы придумали…

                                                Короче ставлю вам жирный + в карму)))
                                                • 0
                                                  Ага, Володина знаю)) Не знаю как сейчас, но обитал там в году 2008-2011-м, публика там очень адекватная была, особенно по сварочникам.

                                                  Я про такое явления кратко упомянул, что ключами надо управлять так, чтобы модулированный ШИМ сигнал всегда перед нагрузкой прошел через индуктивность. Бывает, что не парятся и ставят дроссель и на фазу и на ноль, но лишний дроссель — это закопанные деньги. И если его не поставить, то действительно форма будет сильно искажаться. Тоже с таким сталкивался еще в универе, когда диплом делал.
                                        • 0
                                          Автор, не парься, чувак просто дунул. Когда начинают докапываться до терминологии так глубоко, либо до орфографии — значит по делу человеку сказать нечего. Не обращай на них внимание.
                                  • 0
                                    Спасибо за статью, (почти) все понятно. К сожалению, не владею темой, но неужели нет готовых аппаратных решений (имею ввиду переменный ШИМ для будущего синусоидального сигнала)? Одно дело проекты более 10 кВт, где могут быть специальные требования, другое — запитать насос на 300 Вт? Заранее благодарен.
                                    • 0
                                      «МК + программа» как раз и есть это аппаратное решение. Конечно можно сделать тоже самое, на дискретной цифровой логике, но это громоздко и без каких любо плюсов. Есть готовые решения, например, EG8010, но у них лишь базовый функционал. Если захотите синхронизировать вход и выход, либо выход и городскую сеть, то не обнаружите такой возможности, поэтому сделать свое решение — самый простой путь.
                                  • 0
                                    У Атмела есть буферизация (Double Buffered Output Compare Registers даже у Тини13).
                                    The OCR0x Registers are double buffered when using any of the Pulse Width Modulation (PWM) modes. For the normal and Clear Timer on Compare (CTC) modes of operation, the double buffering is disabled. The double buffering synchronizes the update of the OCR0x Compare Registers to either top or bottom of the counting sequence. The synchronization prevents the occurrence of odd-length, non-symmetrical PWM pulses, thereby making the output glitch-free.
                                  • 0
                                    Не понял, а в мостовой топологии можно сделать сквозную нейтраль? Например, для питания фазозависимых газовых котлов?
                                    • 0
                                      В мостовой нейтраль не сквозная. А что значит фазозависимый? Тут не совсем понял. Делал знакомым для котла на 300 Вт ИБП мелкий и там было требование лишь к форме сигнала и частоте.
                                      • 0
                                        Во время установки газовой горелки, монтажники зафиксировали ее подключение к сети дома, так что определенный провод подключен к нейтрали, а другой к фазе. Объяснили, что если подключить наоборот, то не будет работать датчик пламени (ионизационный).
                                        • +1
                                          Аааа, понял о чем вы. Да, соблюдать «фазировку» нужно. Мост тоже создает полноценный ноль. Если обратите внимание на схему, то получается, что один полумост (VT3-VT4) не имеет дросселя, а только коммутирует нейтраль. Второй полумост уже относительно этой нейтрали и рисует синус.
                                          Если преобразователь мостовой, то у него на выходе так же четко фаза и ноль обозначены, просто ноль выходной напрямую не связан с нулем на входе. В хорошем ИБП вход и выход должны быть синхронизированы по фазе, для нагрузке (котла) это создает условия как будто он просто в сеть включен и позволяет объединить ноль на входе и на выходе. Соединяют иногда прям внутри, а иногда снаружи.
                                          • 0
                                            У газовых котлов все несколько сложнее.
                                            Они пропускают небольшой ток (микроамперы, чтоб УЗО не сработало) между фазой и заземлением для контроля пламени. Соответственно если нет честной фазы (относительно заземления), то котел уходит в ошибку.
                                            • 0
                                              Тогда для 100% надежности фазу входную и выходную проводом соединяем и готово. Я собственно так и делал, в самом щитке где стоял ИБП все имело общий ноль на колодке. Проблем не наблюдалось. К сожалению про котлы знаю достаточно мало, сказать как и что внутри будет не могу уже.
                                              • 0
                                                А КЗ не получим в итоге? Или я что-то не понял…

                                                Собственно на многих импульниках с трансформатором на выходе один из выводов транса соединен с заземлением через резистор. Но тут трансформатор развязывает…
                                                • 0
                                                  В ИБП между входом и выходом развязки нет. PFC обычно однотактный step-up преобразователь с дросселем и потом сразу мост. Да и не нужна развязка эта. А вот трансформатором развязывают DC/DC, например, 12->380В который, чтобы в случае чего АКБ не погибли.
                                                  КЗ не будет, если вход и выход синхронизированы. Этот момент надо уточнять, но в последние годы даже китайцы делают синхронизацию.
                                          • 0
                                            В моём случае котёл не только фазозависимый, но и дофига умный. Его сообразительность заключается в том, что вилку в розетку можно включить любой стороной, а он сам догадается, где фаза, а где ноль. Но если его подключить к ИБП с изолированной нейтралью, то «чистого» нуля у него не оказывается ни на одном из проводов, и он падает в ошибку. В случае с ИБП проблема решилась соединением нулевого провода на входе и выходе ИБП.
                                            • 0
                                              «настоящий ноль» как раз в данной статье и реализован. Получается транзисторы VT3 и VT4 коммутируют ноль, а VT1 и VT2 коммутируют фазу. Так просто управлять сложнее, вернее схемотехника сложнее, поэтому всякие китайцы подаю синус обычно на нижнии ключи, то есть VT1 и VT2 и рулят ими относительно земли. Получается на выводе нейтрали то синус рисуется, то ноль коммутируется.
                                      • 0

                                        Интересно, а вы знаете, что можно в вашем мосте вместо мосфетов поставить IGBT на 3300В/1200А а сами мосты соединить последовательно (N предыдущего моста с L следующего и т.д.), чтобы повысить напряжение и взять таких мостов штук 3000 и получится HVDC VSC — DC/AC конвертор, качающий гигаватты?
                                        Принцип тот же, только контроллер немного сложнее :-)

                                        • 0
                                          IGBT медленные, я стараюсь от них уходить по возможности и ставить SiC. Есть кстати IGBT сборки на 10 кВ для частотников и если раскурочить модуль, то видно, что внутри как рас последовательное включение транзисторов. Мне кажется в предложенном варианте 3300В/1200А тоже ключики соединены последовательно, например, 3 по 1200В
                                        • –4
                                          Я три раза перечитал и все равно не понял вот этого:
                                          Давайте оттолкнемся от изначальной задачи — нам нужно превратить, например, 380В 10А в переменное напряжение 230В. В общем это «классический» случай, его мы можете увидеть в любом хорошем on-line UPS или инверторе.

                                          С чего это вдруг эта задача изначальная? Инверторы обычно питаются от 12В батареи, при чем тут 380В 10А? Откуда вообще берется DC 380В? Ну и далее по тексту — куча вопросов. Разжевывать что такое полный мост людям, имеющим ответы на эти вопросы — странно.
                                          • 0

                                            От 12В работает китайчина, хороший инвертор хотя бы от 24/48В работает. Статья вот только не про dc/dc, это аж в названии указано. 380В — это пример, там может быть любое постоянное напряжение. 380В — это стандартное напряжение в dc шину у инверторов и online UPS

                                            • 0
                                              Было бы здорово об этом (устройстве таких систем) тоже статью аналогичного уровня.
                                              • +1
                                                Видимо речь о каких-то всем известных принципах построения датацентров. Я ни разу про такое не слышал. Т.е. с батарей снимается 380В?
                                                Я к тому что в статье сильный перекос. В части микроконтроллеров и синуса разжевывается все до мелочей, а в части упса — «изначальная задача».
                                                • +1
                                                  UPS целиком не был изначальной задачей, читаем названием) UPS — это всем известная железка, где такая топология применяется. Кому совсем интересно пойдет читать дальше. Что касается напряжений… Что есть «стандарт» не могу сказать на 100%, но в большинстве случаев в совсем мощных ИБП (10 и более кВт) DC-шина образуется последовательным включением 10, 20 или 30 АКБ. Получаем 120, 240 или 360В напряжение шины. До 10 кВт бывает 24, 48, 96, 120, 240, 360В — это и лично встреченного мною. В решениях для ЦОД в основном шина все таки 360В, это позволяет минимизировать ток в проводниках и транзисторах, что повышает КПД.

                                                  Будет статья по инвертору 24->380В, там постараюсь осветить вопрос с АКБ более подробно.
                                              • +2

                                                DC 380В — это изначально просто выпрямленное напряжение из сети. DC/AC инвертор в этом случае — это базовый силовой блок, позволяющий из этого напряжения получить синусоидальное напряжение или ток любой частоты и амплитуды, например для плавного регулирования частоты вращения асинхронного электродвигателя, или питания устройств, которые чувствительны к частоте или гармоникам в питающем напряжении.
                                                При этом, если генерировать не простую синусоиду, а подмешивать 3-ю гармонику, то на выходе можно получать напряжения выше действующего входного.

                                              • –4
                                                Если хотите идеально очистить сигнал, то сделайте ФНЧ с частотой среза около 55-60 Гц

                                                С таким фильтром и чистый меандр в синусоиду превратится.
                                                • 0

                                                  Вот только этим контуром тогда можно обогревать квартиру

                                                • 0
                                                  Посоветуйте занимательного чтива по силовой электронике, а?
                                                  • +2
                                                    Семенов «Основы силовой электроники», там 2 тома, это для старта и Reference Design на сайте Texas Instruments и у Infineon. Или хотите на русском?
                                                    • 0

                                                      Семёнова читала, спасибо. С английским проблем нет. Референсы все подряд смотреть, или посоветуете что-нибудь конкретное, как специалист?

                                                      • 0
                                                        Референсы там идут по конкретным топологиям, например, для пуш-пула есть вот такая статейка с описанием работы + методы расчетов: скачать

                                                        Для пополнения знаний как-то масштабно могу еще посоветовать журнал: «Практическая силовая электроника». Это научное издание, выходит 4 раза в год. Оооочень хороший журнал, но стоит понимать — источник академический, а значит базовые знания математики и физики просто обязательны.
                                                    • 0
                                                      Опередили))))
                                                    • 0

                                                      Зиновьев "Основы силовой электроники". Есть несколько редакций, профессор активно борется с интернетом за удаление учебника со всяких там ресурсов, но найти и скачать можно. Ну или купить в НГТУ :)
                                                      В книге из приятного есть блок-схема для выбора силовой схемы под разные задачи (мощность, фазы, выходные токи-напряжения). Ну и хорошая теория по расчёту цепей (интегралы есть, но их можно не пугаться).

                                                      • 0

                                                        Ок, до НГТУ только далеко. А как материал, современный?

                                                        • 0
                                                          Если учесть, что в силовой электронике за последние лет 10 появились только новомодные импульсные схемы (типа резонансных схем с переключениями при нулевых токах и напряжениях, типа матричных преобразователей) + способы управления различные, то весьма актуальный.
                                                          Всё, что есть в промышленности сейчас — найдётся там, материал на момент 2005-2010 года современный.
                                                          Потому что почти всё новые схемы даже до этапа опытного образца не доходят, добрая половина только для статей и моделей доживает, не более того.

                                                          Вот если хочется что-то более современное, то тут только статьи IEEE искать или иностранные учебники. У китайцев/индийцев неплохая школа силовой электроники, если судить по статьям.
                                                      • +1
                                                        На coursera есть курс «Power Electornics». По этому же курсу книжка «Fundamentals of Power Electronics» by Robert W. Erickson.
                                                        • 0
                                                          Я пробовал пройти этот курс. Не прошел. На третьем экзамене не смог «собрать» какую-то из формул.
                                                          При этом всем я ИИП занимаюсь по работе последние 4.5 года, именно разработкой.
                                                          Курс очень серьезный, очень серьезный, с разбегу не запрыгнуть.
                                                      • 0
                                                        Не понял, как LC-фильтр на выходе совместим с dead-time. Ведь если через индуктивность в данный момент протекает ненулевой ток, то одновременно закрыть VT1 и VT2 просто не получится — один из них будет вынужден пропустить ток (и нагреться) из-за ЭДС самоиндукции.
                                                        • 0
                                                          VT1 и VT2 работают поочередно, то есть один из них всегда проводит ток.
                                                          • +1

                                                            Вы заметили, что параллельно каждому транзистору стоит такой маленький и незаметный обратный flywheel диод? Так вот автор не показал путь протекания тока индуктивности, когда оба транзистора закрыты, а на самом деле ток никуда не девается, а начинает течь через эти диоды на соответственно плюс и минус DC шины.

                                                            • 0

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

                                                          • 0
                                                            <музыкант-зануда>
                                                            «24 кГц наши уши всё-таки услышат»
                                                            Нет, не услышат.
                                                            </музыкант-зануда>

                                                            За статью большое спасибо, весьма познавательно.
                                                            • 0
                                                              Я часто в импульсниках на низкую частоту слышу писк, связываю это с частотой низкой. В данном преобразователе тоже еле еле, но слышно. Есть догадки с чем это связано?
                                                              • 0
                                                                Нельнейные искажения?
                                                              • 0
                                                                Это скорей из-за процессов происходящих в схеме в целом, импульсник работая на 100кГц может затыкаться с частотой 10кГц и вы будете слышать писк.
                                                                Но вообще, услышать 24кГц можно. Слышим же эхолокатор летучих мышей(недавно убедился от залетевшей на балкон мышки), там частоты повыше. Весь вопрос в мощности излучения, которую мы сможем услышать из-за сильного завала АЧХ ушей. А у всех этот завал индивидуальный…
                                                                • 0
                                                                  С большой частотой понятнее, затык например при КЗ или при насыщение, когда ОС отрабатывает слышно часто. Но вот когда частота меньше 30 кГц всегда казалось, что слышу именно свист транса или дросселя, т.к. он не пропадает даже в номинальном режиме работы. Наверное дело в ушах, либо глюки))
                                                                  • 0
                                                                    остается только проанализировать спектр «писка»
                                                                  • 0
                                                                    у мыши очень широкий диапазон, одним «смотри», другим — глушит
                                                                  • 0
                                                                    Есть догадки с чем это связано?


                                                                    Дроссель гудит на субгармониках?
                                                                    • 0

                                                                      Гармоники имеют частоту больше чем коммутация. Мне аж захотелось уже озадачить считать этим вопросом и в железке отловить его))

                                                                      • 0
                                                                        Субгармоники. Их частота ниже, чем основная.
                                                                • +1
                                                                  Шикарно! Спасибо! Ждем статью про DC-DC (48-380(400))
                                                                  • 0
                                                                    Если интересует инвертор, то можете у меня на канале глянуть видео по инвертору www.youtube.com/NordicEnergy
                                                                    У меня там небольшой open source, сейчас подъезжают оставшиеся комплектующие и видео по данной тематике продолжатся + по итогам работы будет статья на GT.
                                                                    • 0
                                                                      Спасибо. Подписался даже. Интересно.
                                                                  • +2
                                                                    Отличная статья! Особенно по «силе». + в карму и статья в закладки.
                                                                    • 0

                                                                      Долго разбирался чем Ti МК лучше то же stm32f334, вроде только у stm есть таймер с псевдо 4.6ггц таймером. Для силовухи выбрали 334ый, отлично работает и разрядность шима радует.

                                                                      • 0
                                                                        334-й дороже, чем TMS320F28027, хотя у последнего уже есть скоростные каналы ШИМа и пара других прелестей. 4.6 ГГц то откуда? Предел 32 бита и то при объединение таймеров. У toshiba еще шикарнее мотор контролы, но всем проще ковырять STM-ы, ибо они проще и инфы больше))
                                                                        • +1

                                                                          Я имел ввиду временное разрешение.
                                                                          High-resolution timer: 217ps, self-compensated versus power supply and temperature drift.
                                                                          Максимальная частота таймера 144Мгц. При этом 10 выходов. Сигнал формируется не сравнением с числом, а событиями. Очень интересная периферия.
                                                                          Реальная задача, где без этого таймера не обошлось — ФАПЧ на 100-200кгц. На стандартных таймерах был слишком грубый шаг скважности.

                                                                          • 0
                                                                            В силовых преобразователях слишком сильно частоту не выгодно задирать из-за роста динамических потерь — нескольких десятков мегагерц (опорная частота ШИМ) обычно заглаза.
                                                                            • 0

                                                                              Частоту выгодно задирать, но дорого. Нужен более сложный драйвер, нужны ключи с мелкой ёмкостью затвора, а SiC и GaN пока достаточно дорогие.
                                                                              Хотя серия P7 у infineon стоит дёшево и 200 кГц для них не проблема

                                                                              • 0
                                                                                В принципе, я к тому и клоню. То есть понятно, что иметь более высокую частоту круто, но требования к компонентам и дизайну растут довольно резко начиная с какого-то уровня.
                                                                            • 0

                                                                              150пс у самого дешманского f28027. За стоимость F334 можно взять камень ещё серьезнее. И в чем смысл делать дороже и хуже? Для меня это загадка.
                                                                              32 бита я упомянул именно в плане точности хода.
                                                                              Все современные железки даже совсем большой мощности уже уходят за 100 кГц и выше. До 1000Вт стараюсь меньше 200 кГц не опускать частоту коммутации.


                                                                              Разумеется для каких-то задач хватит и stm, но в сложных задачах уже не прокатит. Есть математика, которая просто непосильна stm, например, управление сервоприводами высокого разрешения для ЧПУ. Делал и на F722 и на tms320f335 — последнего впритык хватило, а stm явно не хватает второго ядра или сопроцессора.
                                                                              В каких-то простых задачах меня подкупает цена f1 и f0 серии))

                                                                        • 0
                                                                          Неужели в 2017 осталась еще нагрузка, которой нужен реальный переменный ток? Компрессор холодильника? Окей, очень старые и дешевые — да, но сейчас все инверторное.
                                                                          • +1
                                                                            У меня дома — это скважина, циркулярные насосы системы отопления, то есть вся основная инфраструктура. Спалить грюнфус за 300-400$ мне кажется никто не захочет. Те, кто отапливаются газом еще и имеют котел, который так же хочет синус.

                                                                            Поэтому переменный ток нужен, просто не всем. Особенно если вы живете в квартире.
                                                                            • +1
                                                                              Что-угодно с мотором мощнее электробритвы.
                                                                              • 0
                                                                                Вы будете удивлены, но стремительно набирающие популярность во всем мире гибридные и электромобили требуют мощных преобразователей высокого DC напряжения от Li-Ion батареи в 3-х фазную переменку для работы мотор-генераторов. вот, например инвертор TOYOTA PRIUS Источник: priuschat.ru/topic/17-ustroistvo-invertora-avtomobilia-toyota-prius
                                                                                Так что эта тема весьма актуальна, спасибо большое автору за статью!
                                                                                • а инвенрторные какой то инопланетный двигатель используют, которому не нужен синус?
                                                                                  • 0

                                                                                    Они входную переменку сразу выпрямляют и из полученной постоянки уже формируют синусы с нужными параметрами для двигателя (как описано в этой статье :)), так что их можно хоть постоянкой питать :)

                                                                                    • 0
                                                                                      если выпрямитель инвертора расчитан на пределе, то ему может и поплохеть от постоянки
                                                                                      • 0

                                                                                        Может. Как и от небольшой перегрузки :)

                                                                                        • 0
                                                                                          естественно. иначе сервисники от голода помрут.
                                                                                  • 0

                                                                                    Ну еще всем асинхронникам с регулируемой частотой вращения тоже синусоидальная переменка нужна....

                                                                                  • 0
                                                                                    Я правильно понял, что выход STM подключен непосредственно к MOSFETам без драйвера (возможно с какой-то схемой согласования напряжений)?
                                                                                    На мой взгляд, было бы правильно здесь использовать полумостовой драйвер (2 шт), что-то типа IR2104PBF, который стоит три копейки. Заодно это решает проблему с потенциальным КЗ при одновременном открытии плечей и с ёмкостью затворов MOSFETов.
                                                                                    За теорию и описание схем большое спасибо.
                                                                                    • +4
                                                                                      Надо быть укуренным извращенцом, чтобы подключать МК на затворы. Схема в pdf-ке приведена в статье. И да, она куда умнее и стабильнее, чем предлагаемый вами вариант.

                                                                                      Дублируют — ссылка.
                                                                                    • –4
                                                                                      по поводу SPL HAL & CMSIS…
                                                                                      попробуйте без применения CubeMX создать проект например для STM32F746ZG
                                                                                      (FREERTOS,FATFS,FMC-16bit,LTDC-565,SDIO) а затем перенести его на STM32F476IG(заменив LTDC-565 на 888), а затем все это на STM32F769BI…
                                                                                      после решения подобных задач вы несколько разочаруетесь в «регистрах» и «полюбите»
                                                                                      HAL & CubeMX
                                                                                      • +4
                                                                                        Не поверите, но портировал недавно код с LTDC и Ethernet с F469 на F745 и заняло у меня это пол дня на регистрах. Когда была подобная задача с F4 на L4 и все на HAL, то несколько библиотек просто переписать пришлось. Да и так рекламируемая «полна совместимость кода» — полная фикция, особенно когда часть функций на разных сериях по разному работает.

                                                                                        Ну и самое главное, попробуйте написать что-то важнее, чем дисплей)) Код на регистрах работает шустрее и стабильнее. Если на дисплее тупняк на десяток мкс никто даже и не заметит, то в силовой электронике это приведет к выгоранию на пару тысяч $.
                                                                                        • 0
                                                                                          <blockquoteно портировал недавно код с LTDC и Ethernet с F469 на F745>
                                                                                          трудно оценить, что вы портировали, но на сайте st.com написано «STM32F745 doesn’t embed the LCD-TFT controller interface»…
                                                                                          по поводу «написания на регистрах», то задачу которую вы прекрасно описали в данной стотье, я решал года 3 назад — arm-stm.blogspot.com/2015/05/2-x-pwm-stm32f030f4.html
                                                                                          а насчет «тупняков» на дисплее — попробуйте например побороться с tearing-эффектом при пиксельных частотах 20-30 МГц при DMA 90-100 MГц и потом говорить, что в графике не важен «десяток мкс»
                                                                                          • +1
                                                                                            Действительно, в дискавери 746й стоит. Очепятка.

                                                                                            «Не важно» — это в смысле если ваш дисплей хоть молотком разбить, то это не приведет к остановке чего-то важного, как минимум потому, что HMI не наделяется каким-то критичным функционалом.

                                                                                            «решал года 3 назад» — у вас я, например, не вижу решения самой важной проблемы — проблемы сквозняка, задействование TIM3 путь простой, но не дает возможности получить аппаратную задержку, которую еще можно и пересчитывать на ходу. Вы вроде управляете двигателем, но не задействовали TIM1, который для этого и предназначен.
                                                                                            Да и назвать статьей 2 картинки и листинг у меня язык не поворачивается, материал все таки должен быть качественным.
                                                                                            • +1
                                                                                              Не заметил где я заметки из дневника «статьями» называю…
                                                                                              А по поводу dead time или как у вас «сквозняка», так он там и не учитывается, ибо решать такую проблему без применения аппаратных драйверов управления полумостами (IR2xxx, IRS2xxx), устраняющих возможность не только эффекта dead time но и межфазных замыканий для 3-х фазных мостов бессмысленно
                                                                                              • 0

                                                                                                Я уже писал выше: у драйверов dt фиксированный. На адекватной частоте (100+кГц) его просто не хватит. Для этого и регулиют DT в системе управления. DT считается для определенной частоты, для определенных условий и часто в ходе работы контроллера его приходится менять.
                                                                                                Я так понимаю вы очередной теоретик, который на практике даже 1-2 кВт не перешагнули? Иначе бы не писали про драйвера… В них защита чисто от дураков. Или по вашему DT регулируемый в том же TL598 зря сделали?

                                                                                                • 0
                                                                                                  теоретик по моему вы, меняя dead time «в ходе работы контроллера» и собравшись применять «адекватные частоты 100 кГц» в киловаттной технике
                                                                                                  • 0

                                                                                                    Ясно. Думаю дискуссия вошла в тупик, поэтому вынужден оставить вас наедине с вашими фантазиями.

                                                                                      • 0

                                                                                        Очень подробно и наглядно, интересно было освежить всё это в памяти, даже захотелось собрать… Хотя я больше стороник готовых решений, но на пару идей статья натолкнула, спасибо автору!

                                                                                        • 0

                                                                                          Кстати, судя по последней диаграмме, у Вас довольно таки разная частота переключения левых и правых транзисторов — первые переключаются с ШИМом, а вторые только 50Гц. Это приведет к довольно-таки неравномерным потерям и перегреву. Вы можете легко добавить блок, который бы перекодировал состояния транзисторов, чередуя их между собой. Тогда частота ШИМ транзисторов уменьшилась бы в 2 раза и вы получили бы равномерный нагрев всех 4-х транзисторов.

                                                                                          • 0

                                                                                            Так в этом и прелесть. Правая сторона VT3+VT4 она "медленная", значит динамические потери там стремятся к нулю и можно смело поставить более медленные и дешёвые ключи или даже igbt. В неравномерном нагреве плохого ничего нет.

                                                                                            • 0

                                                                                              … но при этом вам будут нужны более быстрые и дорогие ключи в ШИМ-части и в итоге выигрыша в КПД и стоимости может не получиться. Я просто не видел, чтобы использовались разные типы ключей в мосте. Может это какое-то новое веяние?

                                                                                              • 0
                                                                                                Зачем более быстрые? VT1 и VT2 будут в любом случае транзисторами с малой емкостью затворов. Mosfet-ы современные сейчас почти все могут до 200 кГц стабильно работать с адекватными потерями на коммутации, а главное стоят дешевле предыдущих поколений. Экономия существенная, просто не нужно в устройство ставить динозавров с алишки как это принято в СНГ.
                                                                                                • для эмоциональной разрядки: почему нельзя подключать выход ибп к его входу? (без задействования сети 220В)?
                                                                                                  • 0
                                                                                                    Я вроде не заряжался, мы же культурные люди)) Если синхронизирован вход и выход, то думаю можно, но синхронизировать все и вся слишком проблематично и дорого, а главное бессмысленно. Обычно ставят байпас чтобы вход и выход соединять.

                                                                                                    P.S. надеюсь правильно понял вопрос)
                                                                                                    • неет. я имел ввиду бытовые ИБП, которые дохнут если сделать вот так (только вилку воткнуть в него же самого) и включить кнопкой.
                                                                                                      • 0
                                                                                                        Да, то, что на фото подходит только для всяких лампочек, да импульсных БП типа ноута или телевизора. Там внутри вроде линейно-интерактивная топология, то есть коммутируется или инвертор или входная сеть. От такого котел думаю загнуться может с большой вероятностью.
                                                                                                        Мне попадался в руки VES-300, просто и достаточно качественный ИБП именно для котла.
                                                                                          • 0
                                                                                            Когда по работе начал осваивать промышленные ПЧ, задавался вопросом свиста асинхронных трехфазных двигателей при работе. По умолчанию частота дискретизации на ПЧ была установлена 10 кГц. В мануале для устранения шума было рекомендовано поднимать частоту дискретизации кГц до 15-20, но при этом падал КПД привода. Так что либо свист, либо низкий КПД. А у Вас в статье посыл, что чем выше частота, тем лучше. Противоречие?
                                                                                            • 0

                                                                                              КПД падает, потому что частотник ваш и вообще многие, сделаны на igbt модулях, а они медленные. Частота растет — растут динамические потери. Я использую быстрые полевики, а они до 150 кГц работают без проблем. Так что никаких противоречий, только наука))

                                                                                            • 0
                                                                                              Где-то с пол года назад здесь уже был цикл статей по мощным ИБП/инверторам с генерацией синуса на ПЛИСе используя алгоритм DDS.
                                                                                              • 0
                                                                                                Круто! А ссылочки не будет? Я все смотрю в сторону попробовать на fpga сделать преобразователь полноценный, но пока в порядке экспериментов дальше написания IP ядра для ШИМа не ушел.
                                                                                                • 0
                                                                                                  geektimes.ru/post/267682
                                                                                                  Как время летит, уже даже больше чем пол года прошло. Пожалуй даже сильнее чем пол года.
                                                                                                  • 0
                                                                                                    Эти статьи видел, задумка мне понравилась и корпус серверный тоже приятный. Жалко, что статьи не завершились. Реализацию на FPGA там вроде автор не показал, хотя упоминал.
                                                                                                    • 0
                                                                                                      Странно, я вроде думал что закончилось все. Как-то на полуслове заканчивается. Кажется я начал вспоминать… автора закритиковали он и бросил постить. Печаль. Да там вроде ничего сложного не должно быть, гланое на ПЛИС ШИМ высокоскоростной многоразрядный реализовать и четверть-синусовую таблицу занести. Сам DDS до безобразия прост — 32-битный накапливающий сумматор с выводом старших 16 бит на таблицу синуса и потом на ШИМ. А может и больше бит, где-то видел чип DDS с выходом синуса так там заведена таблица на 1Мx16 бит, чисто в ПЛИСе такая наверно не поместится.
                                                                                                      • 0
                                                                                                        Можно внешнюю SDRAM прицепить и перед стартом таблицу в нее из флешки переносить. Это должно решить проблему реализации большой разрядности.
                                                                                                        • 0
                                                                                                          Костыли, однако. Причем дикие костыли. Лучше уж сразу параллельную флеш. К тому же, наверняка есть ПЛИС со встроенной табличной(ПЗУ) памятью, ведь функция не так чтобы очень редкая.
                                                                                                          • 0
                                                                                                            Параллельная флешка медленнее SRAM. Да и такой «костыль» везде и применяют, никто не использует флеш как «расширение» ОЗУ. Обычно SRAM, в крайнем случаем SDRAM/DDR.
                                                                                                            У альтеры есть MAX10, у других не знаю. Можно конечно взять CPLD жирную от Lattice и не париться.
                                                                                                            • 0
                                                                                                              Это когда вопрос о десятках мегагерц и выше. Тут же вроде речи о таких скоростях не идёт.