Рубрики
Схемы на Arduino

Чистый синусоидальный инвертор на Arduino

Инверторы используются в случаях когда невозможно получить напряжение переменного тока (AC) из сети. Инверторы предназначены для преобразования напряжения постоянного тока (DC) в напряжение переменного тока (AC) и разделяются на два типа: чистые синусоидальные инверторы (Pure Sine Wave Inverters) и модифицированные прямоугольные инверторы (Modified Square Wave Inverters). Чистые синусоидальные инверторы достаточно дорого стоят, а модифицированные прямоугольные инверторы стоят существенно дешевле.

В этой статье мы рассмотрим создание чистого синусоидального инвертора (pure sine wave inverter) на основе платы Arduino.

Если вы решили повторить создание рассмотренной в данной статье схемы, то учтите, что она не имеет ни защиты от превышения тока, ни защиты от короткого замыкания, ни защиты от перегрева. Схема данного проекта представлена в образовательных целях и не рекомендуется для промышленного использования. Тем не менее, вы по своему желанию можете добавить в этот проект названные схемы защиты – подробной информации о них достаточно много в сети.

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

Что такое синусоидальная ШИМ (SPWM)

SPWM расшифровывается как Sinusoidal Pulse Width Modulation и переводится как синусоидальная ШИМ (широтно-импульсная модуляция). Ранее мы ее уже рассматривали в генераторе синусоидальных и прямоугольных импульсов на Arduino.

Как мы знаем, в ШИМ мы можем изменять ее скважность (коэффициент занятости, duty cycle), то есть соотношение периодов активности (on-time) и неактивности (off-time). Таким образом, изменяя скважность ШИМ, мы изменяем среднее напряжение импульса. Это наглядно показано на следующей картинке.

Как видно из представленной картинки, при скважности (коэффициенте заполнения) 100% мы получаем среднее выходное напряжение 5V, при скважности 50% получаем среднее выходное напряжение 2.5V, а при скважности 25% — еще в 2 раза меньше.

Синусоидальное напряжение представляет собой аналоговое напряжение, которое изменяет свою амплитуду с течением времени, поэтому мы можем воспроизвести «поведение» синусоидальной волны при помощи непрерывного изменения скважности ШИМ волны (сигнала), что показано на следующем рисунке.

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

Используемый входной сигнал будет заряжать и разряжать конденсатор в соответствии с входным сигналом и нагрузкой. Мы будем использовать SPWM сигнал (синусоидальный ШИМ сигнал) высокой частоты, он будет иметь сначала очень маленькую скважность 1%, этот 1% будет заряжать конденсатор совсем чуть-чуть, сигнал со скважностью 5% будет заряжать конденсатор немного больше, скважность 10% будет заряжать конденсатор еще больше и постепенно мы достигнем скважности 100%, а после этого мы будем уменьшать скважность до 1%. С помощью этого процесса будет сформирована очень гладкая кривая, очень похожая на синусоидальную волну. Таким образом, обеспечивая правильные значения скважности на входе, мы получим хорошую синусоидальную волну на выходе.

Как работает инвертор на основе SPWM сигнала

Схема подобного инвертора показана на следующем рисунке.

Как вы видите, мы использовали в схеме два MOSFET транзистора N-типа и полумост для управления трансформатором. Для уменьшения нежелательных шумов и защиты MOSFET транзисторов мы использовали два диода 1N5819, включенных параллельно MOSFET транзисторам. Для уменьшения возможных нежелательных импульсов, формируемых в секции управления, мы использовали резисторы сопротивлением 4.7 Ом, включенных параллельно диодам 1N4148. И, наконец, транзисторы BD139 и BD 140 включены по двухтактной схеме для управления затворами MOSFET транзисторов потому что MOSFET транзисторы имеют очень большое емкостное сопротивление затвора и требуют как минимум напряжения 10V на своем затворе чтобы работать корректно.

Для лучшего понимания принципов работы представленной схемы на следующем рисунке мы привели ее половину. Рассмотрим случай когда MOSFET транзистор в ней открыт – в этой ситуации ток протекает сначала через трансформатор и затем через MOSFET транзистор замыкается на землю, таким образом, магнитный поток возникает в том же самом направлении, в котором течет ток, поэтому сердечник трансформатора передает этот магнитный поток на вторую обмотку и, таким образом, на выходе мы получаем положительную половину цикла синусоидального сигнала.

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

То есть теперь мы знаем, что направление магнитного потока в трансформаторе изменяется. Таким образом, включая и выключая оба MOSFET транзистора (они инвертированы по отношению друг к другу) и осуществляя эти переключения 50 раз в секунду, мы будем формировать изменяющееся магнитное поле в сердечнике трансформатора, следовательно, будет изменяться направление тока во вторичной обмотке трансформатора в соответствии с законом Фараде. В этом и заключается основной принцип работы инвертора.

Теперь на следующем рисунке рассмотрим полную схему чистого синусоидального инвертора на основе платы Arduino.

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

Конструкция проекта

В демонстрационных целях мы собрали схему нашего инвертора на стрипборде (Veroboard). На выходе трансформатора схемы будет протекать огромный ток, поэтому в этом месте коннекторы (соединители) необходимо использовать как можно толще.

Необходимые компоненты

Полный список компонентов, необходимых для сборки нашего инвертора, представлен в следующей таблице.

№ п/п Название Тип компонента Количество Где купить
1 Atmega328P микроконтроллер 1
2 IRFZ44N Mosfet транзистор 2 купить на AliExpress
3 BD139 транзистор 2 купить на AliExpress
4 BD140 транзистор 2 купить на AliExpress
5 22pF конденсатор 2 купить на AliExpress
6 10K,1% резистор 1 купить на AliExpress
7 16MHz кварцевый генератор 1 купить на AliExpress
8 0.1uF конденсатор 3 купить на AliExpress
9 4.7R резистор 2 купить на AliExpress
10 1N4148 диод 2 купить на AliExpress
11 LM7805 регулятор напряжения 1 купить на AliExpress
12 200uF,16V конденсатор 1 купить на AliExpress
13 47uF, 16V конденсатор 1 купить на AliExpress
14 2.2uF,400V конденсатор 1 купить на AliExpress

Внешний вид этих компонентов показан на следующем рисунке.

Объяснение программы для Arduino

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Прежде чем переходить непосредственно к программе давайте вспомним основы формирования необходимого нам сигнала. Как выглядит изменяющийся во времени ШИМ сигнал мы изучили в первой части нашей статьи, здесь же стоит проблема как сформировать подобный сигнал с помощью платы Arduino.

Для формирования изменяющего во времени ШИМ сигнала мы будем использовать 16-битный timer1 с коэффициентом деления предделителя равным 1, что обеспечит нам время 1600/16000000 = 0.1ms на каждую единицу счета таймера (более подробно о таймерах Arduino можно прочитать в этой статье). То есть в нашем случае половина цикла нужной нам синусоидальной волны будет соответствовать 100 единицам счета таймера. Другими словами, мы можем разделить полный цикл нашей синусоидальной волны на 200 частей.

То есть нам необходимо разделить нашу синусоиду на 200 частей и рассчитать соответствующие амплитуды каждой из этих частей. Далее мы должны конвертировать эти значения в значения счета таймера при помощи умножения их на предел счета таймера. Потом эти значения мы должны поместить в таблицу преобразования чтобы в дальнейшем брать из нее значения для таймера, с помощью которого мы и будем формировать нашу синусоидальную волну.

Чтобы упростить программу нашего проекта мы использовали специальную библиотеку для формирования SPWM сигнала, написанную программистом по имени Kurt Hutten. Скачать ее можно по следующей ссылке.

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

Далее мы запишем две таблицы преобразования, из которых мы будем брать значения для счетчика таймера.

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

После этого мы запишем во входной регистр заранее определенное значение 1600, что позволит нам генерировать точно 200 отсчетов на один период синусоиды.

Далее мы разрешим все прерывания (глобально) с помощью функции sei().

Затем мы установим режим работы для контактов 9 и 10 платы Arduino на вывод данных.

На этом мы закончим с функцией setup. Функция loop в нашей программе будет оставаться пустой поскольку основной функцией нашей программы будет обработка прерываний от таймера. Более подробно об использовании прерываний в платах Arduino вы можете прочитать в этой статье.

Далее мы должны задать вектор переполнения для таймера 1 (timer1) и функцию для обработки прерываний от него – эта функция будет вызываться когда будет происходить переполнение таймера 1 и, соответственно, будет генерироваться прерывание от него.

Затем мы объявим несколько локальных статических переменных и начнем передавать значения в регистры OCR1A и OCR1B.

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

Тестирование работы инвертора

Для тестирования работы инвертора мы использовали:

  1. Свинцово-кислотная батарея с напряжением 12V.
  2. Трансформатор с отводами 6-0-6 и 12-0-12.
  3. Электрическую лампу на 40 Вт в качестве нагрузки.
  4. Мультиметр Meco 108B+TRMS.
  5. Мультиметр Meco 450B+TRMS.

Выходной сигнал с платы Arduino

После загрузки кода в плату Arduino мы измерили SPWM сигнал на двух ее контактах и получили следующую картину:

Если мы увеличим это изображение, то мы увидим каждый изменяющийся полуцикл ШИМ волны.

На следующем рисунке показан сигнал на выходе трансформатора.

Инвертор в идеальном состоянии

Как вы видите на рисунке, в идеальном состоянии схема инвертора потребляет примерно 13 Вт электроэнергии.

Выходное напряжение без нагрузки

Как вы видите, без подсоединённой нагрузки напряжение на выходе инвертора составляет примерно 245 В.

Потребление энергии на входе инвертора

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

Потребление энергии на выходе инвертора

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

Более подробно все эти процессы вы можете посмотреть на видео, приведенном в конце статьи.

Исходный код программы (скетча)

Видео, демонстрирующее работу инвертора

Источник статьи

12 ответов к “Чистый синусоидальный инвертор на Arduino”

Если я не ошибаюсь, выходной транчформатор должен быть на 50 Гц, т.е. здоровенный и тяжеленный.Ибо какая бы ни была высокая частота дискретизации, переполюсовка железа происходит только при смене направления тока, т.е. 50 Гц. Если сначала повысить напряжение, а потом делать синус, то трансформатор будет значительно меньше.

Ну 50 Гц это не такая уж и маленькая частота, размеры трансформатора в этом проекте видны на рисунках. А так вы правы, чем выше частота тем меньше размеры трансформатора

Искал нормальную схему для синуса, а в итоге нашел качественный «полуфабрикат» .
на али ищите DC-AC Pure Sine Wave Inverter Generator SPWM Boost Driver Board EGS002 «EG8010 + IR2110» Driver Module +LCD. добавляется минимум компонентов (мосфеты с обвязкой) и готово. и чистый синус, и индикация, и дидтаймы. и еще свои руки приложены.
кстати в даташите на сам процессор внутри этого изделия (EG8010) есть около 5-и различных типовых применений. мощная штука. рекомендую.

Используйте нормальные драйвера, типа IR2110. При этом питайте МК развязанным DC-DC, чтобы самоиндукция не скакала обратно и не мешала наводками МК. Железный трансформатор для такой схемы — это самоубийство. Используйте импульсный трансформатор хотя бы на колечке. Частота модуляции должна быть 32 кГц, не меньше. На выход схемы поставить LC ФНЧ, чтобы синус чистейший был. И самое главное: В ЭТОЙ СХЕМЕ НЕТ МЁРТВОГО ВРЕМЕНИ!!!! Для тех, кто не в теме: мёртвое время — это пауза между переключениями ключей (примерно 1% от длительности периода), в то время как верхний транзистора закрывается, нижний должен открыться только спустя маленькую паузу. Аналогично и с закрытием. У вас через транзисторы хреначат сквозные токи, которые превращают схему в мангал. Кстати транзисторы лучше использовать с супрессором на затворах, чтобы ЭДС в обратку не сквозила.

Повторил эту схему. Ток холостого хода огромный через лаб блок питания 5 ампер на выходе трансформатора осцилл сходит с ума через аккум не рискнул транзисторы умрут хотя с ардуино шим почти как на картинке с частотой 1 килогерц а не 50 герц и не очень стабильный сигнал. Может библиотеки нужны которые по указанной ссылке не нашлись там просто архив с файлами в формате .ino
Где библиотеки nclude
#include
КТО ПОВТОРЯЛ ПОДСКАЖИТЕ КАК ДОБИТЬСЯ УСТОЙЧИВЫЙ СИГНАЛ НА ВЫХОДАХ АРДУИНЫ?

Юрий, подобные проекты при кажущейся простоте часто содержат много подводных камней, а связано это с протеканием достаточно больших токов — сразу всплывают различные паразитные связи и т.д. Здесь как и с высокими частотами, чем выше частота — тем сложнее наладить устойчивую работу какого-либо блока. К сожалению, я в подобных проектах не силен, поэтому я только перевел статью. Но если вы сформулируете конкретный вопрос, я могу перевести его на английский и задать его автору этого проекта на сайте, откуда я перевел данную статью.
В проекте используются базовые библиотеки для микроконтроллеров AVR — avr/io.h (для работы с функциями ввода/вывода) и avr/interrupt.h (для работы с прерываниями). Библиотека, написанная Kurt Hutten’ом, на скачивание которой есть ссылка в статье — в данном проекте непосредственно не используется и в программе не подключается. Исходные коды этой библиотеки были использованы автором данного проекта для разработки программы, код которой вы видите в данной статье. Упоминание в тексте статьи библиотеки Kurt Hutten’а — это своеобразная дань уважения проделанной им работе.

Спасибо за ответ я всё же попытаюсь запустить насос отопления через эту схему на большее и не рассчитывал как то грешу на не правильно намотанный трансформатор. С ардуинки сигнал красивый если подключать осцил через резистор и в наушниках слышен знакомый гул 50 герц это уже радует. Если будет положительный результат отпишусь. Удачи!

Хорошо, и вам спасибо. Будем надеяться у вас все получиться.
Я в силовой электронике не очень силен и для меня, честно сказать, было удивлением что сразу в первый день добавления на сайт этот проект вызвал ажиотажный интерес. Даже не знаю почему. Неужели в сети так мало схем инверторов. Я помню в 90-х, когда в институте учился, еще там мне в первый раз объяснили принцип работы простейшего инвертора

Надо добавить обмотку CLAMP, управление ею , переделать программу и будет счастье

А что именно нужно в программе переделать? Не подскажете?

К сожалению, с первого раза перевод этого проекта получился немного «сыроват» (индийский электронщик, написавший ее, несомненно грамотный специалист, но вот английский у него немного своеобразный), но я стараюсь регулярно улучшать материалы на моем сайте, которые получились «не очень». Буду признателен если вы в своих комментариях укажете на опечатки/ошибки/перспективные доработки данного проекта

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *