Пользователь
0,0
рейтинг
21 января 2013 в 12:09

Симисторный регулятор мощности с микроконтроллерным управлением из песочницы

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

Итак, начнём с теории. Все знакомы с так называемой широтно-импульсной модуляцией, позволяющей управлять током в (или, что реже, напряжением на) нагрузке с максимальным КПД. Лишняя мощность в таком случае просто не будет потребляться, вместо того, чтобы рассеиваться в виде тепла, как при линейном регулировании, представляющем собой не более чем усложнённый вариант реостата. Однако, по ряду причин такое управление, будучи выполненным «в лоб», не всегда подходит для переменного тока. Одна из них — бо́льшая схемотехническая сложность, поскольку требуется диодный мост для питания силовой части на MOSFET или IGBT транзисторах. Этих недостатков лишено симисторное управление, представляющее собой модификацию ШИМ.

Симистор (TRIAC в англоязычной литературе) — это полупроводниковый прибор, модификация тиристора, предназначенный для работы в качестве ключа, то есть он может быть либо открыт, либо закрыт и не имеет линейного режима работы. Основное отличие от тиристора — двусторонняя проводимость в открытом состоянии и (с некоторыми оговорками) независимость от полярности тока (тиристоры и симисторы управляются током, как и биполярные транзисторы) через управляющий электрод. Это позволяет легко использовать симистор в цепях переменного тока. Вторая особенность, общая с тиристорами, — это свойство сохранять проводимость при исчезновении управляющего тока. Закрывается симистор при отключении тока между основными электродами, то есть, когда переменный ток переходит через ноль. Побочным эффектом этого является уменьшение помех при отключении. Таким образом, для открывания симистора нам достаточно подать на управляющий электрод открывающий импульс небольшой, порядка десятков микросекунд, длительности, а закроется он сам в конце полупериода переменного тока.

Симисторное управление учитывает вышеперечисленные свойства этого прибора и заключается в отпирании симистора на каждом полупериоде переменного тока с постоянной задержкой относительно точки перехода через ноль. Таким образом, от каждого полупериода отрезается «ломтик». Заштрихованная на рисунке часть — результат этой процедуры. Таким образом, на выходе вместо синусоиды мы будем иметь что-то, в известной степени напоминающее пилу:

AC

Теперь наша задача — вовремя отпирать симистор. Эту задачу мы возложим на микроконтроллер. Приведённая ниже схема является результатом анализа имеющихся решений а также документации к оптронам. В частности, силовая часть взята из документации на симисторный оптрон производства Texas Instruments. Схема не лишена недостатков, один из которых — мощный проволочный резистор-печка, через который включён оптрон, детектирующий переход через ноль.

schematics

Как это работает? Рассмотрим рисунок.

waves

На положительном полупериоде, когда ток через оптрон превышает некоторое пороговое значение, оптрон открывается и напряжение на входе микроконтроллера опускается практически до нуля (кривая «ZC» на рисунке). Когда же ток снова опускается ниже этого значения, на микроконтроллер снова поступает единица. Происходит это в моменты времени, отстоящие на dz от нуля тока. Это dz ощутимо, в моём случае составляет около 0.8 мс, и его необходимо учитывать. Это несложно: мы знаем период T и длительность импульса высокого уровня h, откуда dz = (h — T / 2) / 2. Таким образом, нам необходимо открывать симистор через dz + dP от переднего фронта сигнала с оптрона.

О фазовом сдвиге dP стоит поговорить отдельно. В случае c ШИМ постоянного тока среднее значение тока на выходе будет линейно зависеть от скважности управляющего сигнала. Но это лишь потому, что интеграл от константы даёт линейную зависимость. В нашем случае необходимо отталкиваться от значения интеграла синуса. Решение простого уравнения даёт нам искомую зависимость: для линейного изменения среднего значения тока необходимо менять фазовый сдвиг по закону арккосинуса, для чего достаточно ввести в управляющую программу LUT таблицу.

Всё, о чём я расскажу в дальнейшем, имеет прямое отношение к архитектуре микроконтроллеров серии STM32, в частности, к архитектуре их таймеров. Микроконтроллеры этой серии имеют разное число таймеров, в STM32F103RBT6 их семь, из которых четыре пригодны для захвата и генерации ШИМ. Таймеры можно каскадировать: для каждого таймера одно из внутренних событий (переполнение, сброс, изменение уровня на одном из входных или выходных каналов и т.д.; за подробностями отсылаю вас к документации) можно объявить выходным и направить его на другой таймер, назначив на него определённое действие: старт, стоп, сброс и т.д. Нам потребуются три таймера: один из них, работая в т.н. PWM input режиме, замеряет период входного сигнала и длительность импульса высокого уровня. По окончании измерения, после каждого периода генерируется прерывание. Одновременно с этим запускается связанный с этим событием таймер фазового сдвига, работающий в ждущем режиме. По событию переполнения этого таймера происходит принудительный сброс таймера, генерирующего выходной управляющий сигнал на симистор, таким образом, через каждый полный период переменного тока подстраивается фаза управляющего сигнала. Только первый таймер генерирует прерывание, и задача обработчика сводится к подстройке фазового сдвига (регистр ARR ждущего таймера) и периода ШИМ таймера (также регистр ARR) так, чтобы он всегда был равен половине периода переменного тока. Таким образом, всё управление происходит на аппаратном уровне и влияние программных задержек полностью исключается. Да, это можно было сделать и программно, но грех было не воспользоваться такой возможностью, как каскадируемые таймеры.

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

И напоследок, видеоролик, показывающий устройство в действии:

@e_asphyx
карма
–39,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (30)

  • 0
    Про каскадироание таймеров было интересно. Большое спасибо.
  • 0
    Я, в похожем домашнем проекте, взял резистор 80к и оптрон TLP626 со встречно-параллельными диодами. С таким оптроном импульс генерируется при каждом переходе через ноль, упрощается программа, и резистор-печка будет холодней.
    • 0
      Можно было и вовсе собрать усилительный каскад на транзисторе и воткнуть резистор под мегаом.
  • +4
    1. Откуда 5W на резисторе? (220^2)/47k = 1,0W;
    2. если вы будете подобным образом регулировать более-менее мощную нагрузку — вас проклянут все соседи за помехи в широком спектре;
    3. опять же, симистор открывается не мгновенно, соответственно, есть период времени, когда через симистор уже проходит значительный ток, а падение напряжение на нем достаточно велико, таким образом на переходах выделяется большая пиковая мощность.

    Поэтому, обычно регулирование осуществляют пропуская то или иное число целых периодов.
    • 0
      5W — это номинал резистора. А вообще, я, похоже, действительно где-то соврал: у меня выходили другие числа. Вероятно, потому, что мощность (что в корне неверно, согласен) я считал вместе с током через диод, по амплитудному значению напряжения вместо действующего.
    • 0
      А если пропускать целые периоды, будут же сильные пульсации? Это только для нагревателей годится, вероятно. Кстати, я предполагаю управлять нагревателем именно таким образом, при помощи серийного SSR, имеющего встроенный детектор нуля.
      • 0
        А тогда придется извращаться с помехоподавлением (которое, скорее всего, будет жрать дополнительную мощность), ну и схемы с MOSFET или IGBT транзистором становятся более предпочтительными в силу меньшей тепловой мощности при переходном процессе.
    • 0
      Метод пропуска (полу)периодов не подходит для управления индуктивными нагрузками — двигателями в частности. А вот описанный фазовый — вполне.
  • 0
    Насколько я понял, форма выходного напряжения будет далека от синусоидальной (особенно на больших dP)? Значит будут создаваться помехи в сети на частотах гармоник? Мне кажется, что питать таким напряжением, скажем импульсные блоки питания будет небезопасно. Таким образом этот способ подходит только для реактивных нагрузок. Мне интереснее было бы прочитать про то, как можно регулировать напряжение не нарушая форму выходного напряжения (ЛАТР с моторчиком, управляемым ардуиной, не предлагать :)).
    • 0
      Да, от синусоид одни «пупочки» останутся. Но зачем питать таким напряжением импульсные блоки мне, честно говоря, не понятно, хотя, я и не думаю, что это может им существенно навредить: там везде фильтры на входе стоят. А про правильную защиту от помех мне самому будет интересно узнать.
      • 0
        Но зачем питать таким напряжением импульсные блоки мне, честно говоря, не понятно

        Ну, это может случайно получиться. Например, вкрутили вместо лампы накаливания, энергосберегающую и привет (возможно).
        Немного оффтопа:
        Как-то, когда я был молод и горяч, я собрал для дачи релейный стабилизатор напряжения, который мог выдавать на выходе чистый синус 220 В, при изменении входного от 120 до 270 В. Как сейчас помню, стояли там 6 тяжеленных трансформаторов с различными выходными напряжениями во вторичных обмотках, а схема управления выбирала какие, как и сколько вторичных обмоток трансформаторов подключать последовательно с нагрузкой. Там искажения были только в момент переключения обмоток и потому от него можно было безопасно питать целый дачный дом с неслабым таким потреблением (до 10 кВт). Вот такую штуку, ИМХО, имело бы смысл повторить на современной микропроцессорной базе. И процессор там будет как раз к месту :).
        • 0
          Выше уже предлагали ЛАТР с моторчиком. Шутки шутками, а кое где такая схема применяется.
        • +1
          Такие штуки даже серийно выпускают (не реклама) www.resanta.ru/production/autostab.html
          • 0
            До чего дошел прогресс, классно!
            Но 17 тыр за однофазную 20 кВт модель — ИМХО перебор. Не, ошибся, электромеханические 1,7 тыр. Ну что ж — годное решение, надо брать. Спасибо за нерекламу :). Я помню самыми дорогими деталями в моей колхозной поделке были польские силовые реле с малым временем переключения. По сотне штука, всего 7 штук :).
    • +2
      Обычно переменное напряжение выпрямляют, а из него потом опять делают синусоиду с нужными параметрами напряжения и частоты. А синусоиду делают всеми любимым ШИМом.
      • –1
        А как ты получишь обратно 220 В без повышающего преобразователя? Выпрямление 220 В даст тебе эти самые 220 В постоянки, из которых ты получишь ШИМом 220 амплитуды, то есть 220/sqrt(2) действующего значения.
        • +1
          Такие преобразователи немного по другому работают. Во-первых, выпрямленное 220 даст 310 постоянки, из которой ШИМом опять можно нашинковать ту же самую синусоиду (за вычетом потерь). Но такая схема ничего нам не даст.
          Поэтому более распространены схемы с преобразователем на выходе, который обеспечивает постоянное напряжение для ШИМа (слегка завышенное, порядка 350В), а ещё чаще — системы с двойным преобразованием (online UPS)
        • 0
          К примеру, на трех фазах (380В переменки) после выпрямителя будет целых 510 В, в чем можно убедиться, если залезть в UPS с тестером :)
  • 0
    А скорость вращения электродвигателя то получилось регулировать?
    • 0
      Насколько я помню из электротехники (могу ошибаться), на скорость АД будет влиять частота питающей сети, а не среднеквадратичное напряжение питания. А в данном случае для АД можно только приблизить коэффициент мощности к 1, если он работает в режимах. близких к холостому ходу.
      • 0
        Однажды уже обсуждали этот момент: habrahabr.ru/post/147570/#comment_4974721
        • 0
          Понятно, т.е. скорость меняться будет, но не шибко. Да и момент на валу существенно уменьшается (вплоть до остановки). В общем я примерно так себе и представлял.
        • 0
          Автор не поленился красивую картинку нарисовать. Не то что я, набросал от руки на Wacom'овском планшете.
    • 0
      Будешь смеяться, но я боюсь пробовать :) Изначально я исходил из положительного опыта некоторых людей по регулировке скорости при помощи диммера из хозмага, а он работает по сходному принципу, только он аналоговый.
      • 0
        Надо довести начатое дело до конца.
  • 0
    Мне кажется, что MCUin и MCUout перепутаны на схеме?
    • 0
      У меня всегда были проблемы с такими относительными понятиями как «вход» и «выход». Здесь я имел в виду «input from MCU» и «output to MCU».
      • 0
        Да, по схеме видно. Но в первый момент вызывает когнитивный диссонанс.

        Чтобы не ломать мозг можно было подписать «to MCU» и «from MCU». Или можно по разному обозначать входные и выходные терминалы (стрелка в сторону передачи сигнала).
  • 0
    А статус можно получить в консоли?
    Я давно ищу управляемый диммер, чтобы можно было как задавать мощность так и считывать установленное значение.
    • 0
      Нет, но это легко сделать. Сейчас управление диммером в консоль выведено исключительно ради отладки. Предполагается, что в дальнейшем диммер будет управляться PID регулятором от датчика температуры (работа с AM2302 уже реализована, тоже через таймер, кстати) и в консоль будет выведена настройка PID.

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