"При реализации фазового метода управления возникает задача привязки по фазе к сетевому напряжению. Обычно для определения фазы сетевого напряжения используется детектор перехода через ноль. Однако такие детекторы работают весьма ненадежно. Сетевое напряжение содержит значительный уровень помех, в том числе импульсных, сама форма сетевого напряжения может иметь довольно значительные искажения. Кроме того, амплитуда напряжения может меняться, возможны как всплески, так и провалы напряжения, вплоть до выпадения нескольких полупериодов. Всё это нарушает нормальную работу схем детекторов перехода через ноль, так как они для определения фазы используют мгновенное значение напряжения. В то же время частота и фаза сетевого напряжения значительно меньше подвержены флуктуациям, чем амплитуда.
Точная привязка к фазе сетевого напряжения недостаточна, нужно еще каким-то способом формировать необходимую задержку открывания тиристоров, выраженную в градусах. К тому же, непостоянное значение частоты сети вызывает трудности формирование задержки, соответствующей заданному углу открывания тиристоров. Иногда для этих целей частота сети измеряется, а потом на основе измеренного значения производится вычисление необходимой задержки.
Наиболее адекватную привязку к сети обеспечивает система фазовой автоподстройки частоты (phase locked loop, PLL). В данном устройстве реализована петля программной фазовой автоподстройки частоты (software PLL или SPLL). Очевидно, что для уменьшения влияния помех на работу детектора, нужно отфильтровать сетевую частоту узкополосным фильтром. Но реализация такого фильтра затруднена, тем более что сетевая частота может отклоняться от номинального значения, фильтр придется делать адаптивным. Тот же эффект может быть достигнут с помощью PLL, ее можно рассматривать как полосовой фильтр с полосой пропускания, равной удвоенной частоте среза петлевого фильтра. Поскольку петлевой фильтр – это обычный ФНЧ, его реализация со сколь угодно низкой частотой среза не представляет проблем.
В качестве управляемого автогенератора используется таймер 1, работа которого синхронизируется по частоте и фазе с сетевым напряжением. Период таймера равен длительности полупериода сетевого напряжения. Прескалер таймера должен быть запрограммирован так, чтобы разрядности таймера с учетом прескалера было достаточно для формирования такого интервала.
Для синхронизации используются импульсы, формируемые детектором перехода через ноль (ZCD). Эти импульсы подаются на вход захвата ICP. Используется спад импульса, так как спад имеет меньшую длительность, чем фронт. Схема захвата имеет аппаратный подавитель шумов, который включен с помощью бита ICNC1. В прерывании по захвату анализируется текущее значение таймера 1 и вычисляется текущая ошибка фазы. Она является входной величиной для PI-регулятора, который служит петлевым фильтром SPLL. Выходной сигнал PI-регулятора представляет собой текущий период таймера 1, который загружается в регистр OCR1A. Таймер работает в режиме очистки по сравнению (CTC), причем TOP = OCR1A. Значение регистра OCR1A является фактически длительностью полупериода сетевого напряжения, выраженной в тиках таймера. Это значение можно использовать для индикации частоты сети.
Кроме фильтрующих свойств, SPLL обладает еще одним полезным свойством: она позволяет получить постоянный фазовый сдвиг относительно сигнала ZCD. Этот сдвиг может быть использован для компенсации конечной длительности импульса ZCD, задержки срабатывания ZCD и задержки в схеме управления тиристорами. В случае необходимости сдвиг позволяет реализовать опережение открывания тиристоров и одновременно защититься от паразитного открывания на следующем полупериоде. Сдвиг задается константой TRIAC_SHIFT в пределах от минус полупериода (опережение) до плюс полупериода (запаздывание). Сдвиг задается в микросекундах, а не в градусах, поэтому он не зависит от сетевой частоты.
Для управления тиристорами используется канал сравнения B. В регистр OCR1B последовательно загружаются значения, соответствующие моментам включения тиристоров управляемого выпрямителя. Управляющие сигналы формируются на портах микроконтроллера в обработчике прерывания по сравнению OC1B. Расчет загрузочных значений регистра OCR1B осуществляется как при изменении желаемого угла открывания тиристоров, так и при подстройке периода таймера в каждом цикле SPLL.
Для контроля захвата SPLL используется значение текущей ошибки фазы Spll_X. Критерием захвата является значение ошибки, меньше заданного, сохраняющееся в течение заданного времени. В случае отсутствия захвата тиристоры не включается и индицируется ошибка.
Средний ток нагрузки I зависит от угла открывания тиристоров ф по закону I = arccos(ф). Эта зависимость реализуется в программе с помощью таблицы, содержащей 250 значений. Между соседними элементами таблицы производится линейная интерполяция, что позволяет вычислять угол с точностью 0.01°.
"
Кстати, в этом проекте источника питания плазмотрона (120 кВт) для привязки используется выходное напряжение маломощного трансформатора, который питает процессорную часть. Никаких "гуляний" фазы не замечено.