Симисторный регулятор мощности на arduino.

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

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

Симистор — triac.

Подойду к этому с точки зрения схемотехники — по большому счёту не столь важно внутреннее устройство электронного прибора — важно что он умеет делать. И современный triac

симистор 40 Ампер 600 Вольт
симистор
симистор усилитель кнопки
управление симистором в сети ~220V

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

 

Цель этой статьи — симисторный регулятор мощности на arduino — поэтому отметём сразу схемы без гальванической развязки и разные простые схемотехнические решения. Оставляю только надёжные с опторазвязкой.  Для управления симистором существуют готовые микросхемы разных производителей с даташитными схемами включения нужно лишь правильно применять и подавать нужные сигналы в нужные моменты времени.

Регулятор мощности на arduino и MOC3063.

опторазвязка MOC 3063
MOC 3063

Сам я с удовольствием применяю для управления triac микросхемы серии MOC30** . Например MOC3063 отлично подходит когда симистор управляет очень инертной нагрузкой а управление осуществляется низковольтным сигналом например от arduino. При этом нужно учитывать особенности микросхемы  MOC3063 — включение симистора привязано к переходу сетевого напряжения через ноль. То есть включение нагрузки вне зависимости от момента когда поступает активный уровень сигнала произойдёт только в ближайшей точке изменения полярности напряжения. Точно так же симисторный регулятор мощности выключит нагрузку вне зависимости от момента снятия активного напряжения только лишь при смене полярности напряжения сети.

Справедливости ради стоит уточнить : симистор , как впрочем и тиристор, не умеет сам выключаться — для того чтобы симистор перестал пропускать ток в нагрузку нужно вывести его из стабильного тригерного эффекта пропускания тока. То есть triac под напряжением имеет два устойчивых состояния — либо полностью включен — пропускает ток в нагрузку , либо полностью выключен — не пропускает ток в нагрузку. Чтобы перевести симистор из состояния выключено в состояние включено нужно подать активный ток на управляющий электрод достаточной для включения длительности и достаточного для включения уровня. А вот дальше чуток интереснее — даже если управляющий сигнал выключить, симистор всё равно останется в открытом состоянии до момента пока текущий сквозь него ток не станет меньше тока удержания — то есть симисторный регулятор мощности выключится в момент перехода сетевого напряжения через ноль.

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

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

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

Эмпирически симисторный регулятор мощности на arduino при активной нагрузке например ТЭН ом или другим инфракрасным источником тепла нормально работает при периоде от 10 секунд до минуты. При этом у нас в распоряжении 1 000 полупериодов сетевого напряжения в 10 секундном периоде. Один шаг регулировки мощности не хуже 1% — это приемлимая плавность регулировки при мощности нагревателя до 5 Квт даже в ПИД применении.

При таком периоде нет необходимости синхронизироваться с сетевым напряжением и ловить микропроцессором переход сетевого напряжения через ноль.  При этом регулятор мощности на arduino за счёт MOC3063 минимизирует помехи в сети — ведь сама MOC3063 будет включать симистор в момент минимального сетевого напряжения за счёт внутреннего встроенного детектора нуля.

Регулятор мощности на arduino и MOC3023.

MOC 3023 опторазвязка триак
MOC 3023

Для фазового управления регулятор мощности на arduino может быть подключен через ключ опторазвязки MOC3023. В отличие от MOC3063 в этой микросхеме нет схемы детекции нуля , что позволяет включить triac в любой момент и при любом напряжении. С помощью этого ключа можна реализовывать фазовое управление симистором.

Есть один момент, который необходимо подробно обьяснить : симистор выключается только по смене полярности — соответственно момент выключения у нас строго привязан к переходу сетевого напряжения через ноль. Регулировать момент включения нужно отсчитывая от момента следующего перехода сетевого напряжения через ноль. В сети 50Герц переменного тока, то есть один полупериод это 10 милисекунд и для 100% мощности в нагрузке управляющий сигнал нужно подать за 10 милисекунд до следующего перехода сетевого напряжения через ноль.

ТРАНЗИСТОРНЫЙ ОПТРОН NEC 2532
NEC 2532

Для получения же в нагрузке 0% мощности,  либо значений близких к этому,  нужно подавать сигнал на MOC3023 практически перед выключением триака.  Для реализации привязки к сетевому напряжению регулятор мощности на arduino синхронизируется с помощью оптронного ключа

Я применяю оптический детектор нуля подключая светодиод через резистор к сети 220 Вольт и получая на стороне ключа меандр синхронизированный с сетью ~220V .схема детектора нуля для ардуино

Включив прерывания по смене уровня сигнала на входе. регулятор мощности на arduino. получает фазу сетевого напряжения.   Я учитываю нестабильность частоты сети, но для практического применения достаточно учесть возможные ошибки например ограничив время включения симистора не 10 милисекундами а 9. Момент перехода сетевого напряжения через ноль можно один раз вычислить и потом использовать в виде константы. Достаточно измерить время между фронтом и спадом , выдать результат в терминал порта , разделить его пополам — это и будет пик сетевого напряжения — добавляем время по формуле t0 = (tfront-tspad)/2+25ms внести константой в программу.

В таким случае простая синхронизация от спада импульса плюс например 28,6 милисекунды это и будет момент перехода сетевого напряжения через ноль. Принимаем за 100% мощности момент 28,6 милисекунды и за 0% мощности 53,6 милисекунды от прерывания по спаду импульса от ардуины и пишем скетч.

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

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

Summary : симисторный переменного тока 220 Вольт регулятор мощности на arduino.

Основные моменты, которые нужно учесть при управлении мощностью в нагрузке с помощью микроконтроллера :

  • опторазвязка сетевого напряжения от низковольтной части
  • применение специализированных микросхем управления симистором сильно облегчает жизнь
  • для активной инертной нагрузки применяем ШИМ с минимизацией сетевых помех на MOC3063
  • для чувствительной к частоте нагрузки применяем фазовое управление с привязкой  к сетевой синусоиде на MOC3023
  • линеаризируем алгоритм управления с учётом того факта что мощность связана с напряжением квадратично
  • не забываем что симистор греется точно так же как и любой полупроводниковый прибор
  • применение микросхем серии  MOC30** сводит задачу проэктирования скетча к банальному миганию светодиодом по сложному алгоритму
  • применение в качестве ключевого элемента симистора позволяет реализовывать весьма сложные алгоритмы управления мощностью в нагрузке например по ПИД алгоритму

Arduino не панацейя — микроконтроллеры существовали задолго до появления ардуино на рынке — но именног этот проект сделал доступным микроконтроллерное програмирование широкому кругу чайников и ламеров, а , как известно, количество всегда переходит в качество. Поэтому сейчас не проблемма сварганить какой нибудь говнокод и получить массу удовольствия от самостоятельно сделанной игрушки. В этом смысле симистор как продолжение устройств ввода-вывода микроконтроллера, а управление сетевыми устройствами ещё никогда не было таким простым и доступным.