
Эта статья является прямым продолжением предыдущей публикации на данную тему. К тому же, от пользователя @Sotnya1337 прозвучал вопрос
Подскажите пожалуйста, угол fi мы выбираем наобум? Было бы интересно рассмотреть автоматическую логику управления, без ручного выбора угла fi
требующий ответа. Более того - этот ответ я и сам хотел получить довольно давно. Но, как я и писал ранее, в отечественной литературе этот вопрос не освещается вообще, а в зарубежной - частично, в основном применительно к низковольтным активным выпрямителям вторичных источников питания. Тем не менее, мне удалось разобраться в этом вопросе. И сегодня мы не будем "наобум" выбирать угол , а построим настоящую систему управления 4QS-преобразователем и смоделируем её работу. При чем не для каких-то там "детских" мощностей, а вполне в соответствии с потребностями электрической тяги на магистральных линиях.
Введение
Итак, схемотехника силовой части и принцип действия 4QS-преобразователя мы рассмотрели в предыдущей статье. Кто забыл, подсмотрите туда, я же напомню основные свойства данного агрегата:
Обратимый преобразователь - преобразует переменный ток в постоянный в тяговом режиме, и постоянный ток в переменный в режиме рекуперативного торможения;
Является повышающим преобразователем - напряжение на выходе, в звене постоянного тока выше, чем амплитудное значение входного переменного напряжения;
Обеспечивает компенсацию реактивной мощности, превращая электровоз или электропоезд в чисто активную нагрузку для сети
Управляется данный преобразователь методом униполярной синусоидальной ШИМ, а коэффициент мощности ( в нашей литературе или PF (Power Factor) - в зарубежной) регулируется путем сдвига модулирующего сигнала по фазе на угол
относительно сетевого напряжения. В прошлый раз мы вручную задавали этот угол, пытаясь угадать значение, при котором PF по модулю будет равен единице. В реальности же, модулирующий сигнал формируется системой регулирования, на основании обратных связей по токам и напряжениям силовой цепи.
В этот раз мы займемся синтезом такой системы регулирования и смоделируем её работу в различных режимах. Но прежде определимся с параметрами преобразователя, которым будем управлять, а так же с инструментарием, которым будем пользоваться для симуляции.
Параметры нашего преобразователя будут таковы
Параметр |
Значение |
Выходная мощность, кВт |
1000 |
КПД |
0,95 |
Входное напряжение, В |
1500 |
Напряжение звена постоянного тока, В |
3000 |
Частота питающей сети, Гц |
50 |
Частота коммутации ключей, кГц |
1 |
Произведем нехитрый расчет параметров силовой цепи, как это было предложено в предыдущей публикации. Амплитуда входного напряжения
Действующее и амплитудное значение входного тока
Допускаемые пульсации входного тока и выходного напряжения
Индуктивность входного дросселя
Емкость выходного фильтра
Сопротивление эквивалента нагрузки, при заданной выходной мощности
Как показал опыт симуляции преобразователя, наличие системы регулирования делает эту методику расчета параметров элементов преобразователя вполне приемлемой и дает предсказуемые результаты. Так что теперь построим
1. Модель объекта управления
Для моделирования, после долгих тестов и поисков и почти недельного погружения в вопрос была выбрана среда OpenModelica. На ресурсе имеются публикации по этой системе, например вот такая. Я давно присматриваюсь к этому инструменту, и вот наконец смог кое-как в нем освоиться
OpenModelica — это открытая (open-source) платформа для моделирования, симуляции и анализа сложных физических и технических систем на основе языка Modelica. Modelica — это объектно-ориентированный, уравнение-ориентированный язык программирования, предназначенный для моделирования многодоменных физических систем (механика, электротехника, термодинамика, гидравлика и т.д.). Система своеобразная, со множеством интересных возможностей. Например, мне нравиться то, что собранные там модели можно компилировать в модули на языке C и использовать в программах на C/C++, используя библиотеку FMI4cpp, для меня это достаточно актуально, в свете разработки железнодорожного симулятора, которой я занимаюсь. Вероятно я напишу об этой среде подробнее несколько статей. В этот раз все манипуляции в OM я буду описывать кратко, применительно к контексту статьи.
OpenModelica элегантно сочетает в себе чистое программирование на языке Modelica и визуальное программирование в стиле Matlab/Simulink. Для визуального программирования используется OpenModelica Connection Editor (OMEdit). В нем мы построим модель силовой части 4QS-преобразователя.
OMEdit имеет богатую палитру готовых компонент, позволяя собирать модели систем из разных предметных областей, комбинируя их между собой. Нас будет интересовать раздел Electrical

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

который выглядит вот так

Посмотрим что там внутри, для чего правой кнопкой по блоку вызовем контекстное меню, выбрав пункт "Open class".

Э... тут явно не транзисторы. Вместо них тут применены идеальные GTO-тиристоры. В контексте того, что применены идеальные ключи для нас, на данном этапе это не имеет значение, хоть и весьма забавно - на иконке блок изображен IGBT-транзистор.
Нашим допущением будет применение идеальных ключей. Это годится в контексте задачи - мы хотим показать синтез управления преобразователям, а за тонкостями схемотехники лучше обратиться к моделям Oucs-S - надеюсь, что уже недалек тот день, когда там появятся полупроводниковые приборы соответствующего класса (я в том числе работаю и над этим).
Блок полумоста имеет пять коннекторов - квадратные - это электрические коннекторы. Их мы соединяем в соответствии с принципиальной электрической схемой. Синий коннектор "+"б белый - "-". Треугольные розовые коннекторы - логические входы fire_p и fire_n, открывающие, соответственно верхний и нижний ключ. Очень хорошо, что сюда сразу включены обратные диоды - в данной схеме они обеспечивают проводимость моста в пассивном режиме.
Итак, соберем силовую цепь из двух полумостов, источника входного синусоидального напряжения, входного дросселя, выходного конденсатора и индуктивно-активного эквивалента нагрузки

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

Там мы увидим описание класса нашей модели на языке Modelica.

И, разумеется, мы можем это редактировать. Например ввести параметры
model FQconv
parameter Real U2 = 1500 "Входное напряжение, В";
parameter Real I2 = 701 "Входной ток, А";
parameter Real freq = 50 "Частота сети, Гц";
Modelica.Electrical.PowerConverters.DCAC.SinglePhase2Level inverter annotation(
Placement(transformation(origin = {-50, 50}, extent = {{-10, -10}, {10, 10}})));
Modelica.Electrical.PowerConverters.DCAC.SinglePhase2Level inverter1 annotation(
Placement(transformation(origin = {-10, 50}, extent = {{-10, -10}, {10, 10}})));
Modelica.Electrical.Analog.Basic.Inductor inductor(L (displayUnit = "mH")= 0.006) annotation(
Placement(transformation(origin = {-34, 2}, extent = {{-10, -10}, {10, 10}}, rotation = 90)));
Modelica.Electrical.Analog.Sensors.CurrentSensor currentSensor annotation(
Placement(transformation(origin = {-34, -24}, extent = {{10, -10}, {-10, 10}}, rotation = -90)));
Modelica.Electrical.Analog.Sources.SineVoltage sineVoltage annotation(
Placement(transformation(origin = {-14, -44}, extent = {{-10, -10}, {10, 10}})));
Modelica.Electrical.Analog.Basic.Ground ground annotation(
Placement(transformation(origin = {20, -54}, extent = {{-10, -10}, {10, 10}})));
Modelica.Electrical.Analog.Sensors.VoltageSensor voltageSensor annotation(
Placement(transformation(origin = {-14, -64}, extent = {{-10, -10}, {10, 10}})));
Modelica.Electrical.Analog.Basic.Capacitor capacitor(C(displayUnit = "mF") = 18) annotation(
Placement(transformation(origin = {60, 46}, extent = {{-10, -10}, {10, 10}}, rotation = -90)));
Modelica.Electrical.Analog.Basic.Resistor resistor(R = 9) annotation(
Placement(transformation(origin = {100, 30}, extent = {{-10, -10}, {10, 10}}, rotation = -90)));
Modelica.Electrical.Analog.Basic.Inductor inductor1(L(displayUnit = "mH") = 0.01) annotation(
Placement(transformation(origin = {100, 60}, extent = {{-10, -10}, {10, 10}}, rotation = -90)));
protected
parameter Real U2m = U2*sqrt(2);
parameter Real I2m = I2*sqrt(2);
equation
Вернемся к графическому представлению модели

Теперь, вызов контекстного меню в окне модели и выбор пункта "Parameters" даст такой диалог

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

Для управления преобразователем нам нужна униполярная ШИМ, которую реализуем в виде собственного блока

внутренняя реализация которого выглядит так

На вход подается нормированный в диапазоне [-1; 1] синусоидальный модулирующий сигнал. Для страховки, чтобы избежать over-модуляции поставлен блок ограничения. Внутренний генератор пилообразного напряжения формирует сигнал с частотой коммутации = 1 кГц, так же нормированный в диапазоне [-1; 1]. Здесь происходит сравнение модулирующего сигнала с "пилой" для управления первым полумостом, и сравнение сигнала, находящегося в противофазе с модулирующим с "пилой", для управления вторым полумостом. На выходе формируются логические сигналы управления ключами.
Подключим этот блок к силовой схеме, подав на вход модулирующий сигнал

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

Как видно, мы не выходим на расчетные параметры. Чтобы добиться требуемых показателей необходима система регулирования. Начнем реализовывать её поэтапно.
2. Детектор фазы сетевого напряжения
Нам необходимо обеспечить PF=1, а это означает что напряжение сети и ток должны быть в одной фазе. А для этого необходимо синхронизировать систему управления с сетевым напряжением, а именно
Определять переход сетевого напряжения через 0
Определять знак полупериода сетевого напряжения.
Для этого соберем блок PhaseDetector, внутренняя структура которого будет выглядеть так

На вход подается сигнал с votageSensor - сетевого датчика напряжения. Момент прохождения через 0 и знак полупериода определяется компаратором в виде релейного гистерезиса, с петлей в диапазоне от -0.01 до 0.01 вольт. Гистерезис исключает дребезг в районе 0, а также позволяет определить знак полупериода. На положительном полупериоде с выхода гистерезисного блока получает логическую 1, на отрицательном, логический 0.
Далее в дело вступают два таймера, которые сбрасываются и запускаются логической единицей на входе, а останавливаются - логическим 0. Верхний таймер отмеряет время положительного полупериода, а нижний - время отрицательного. При работе схемы мы получим с выходов таймера периодический треугольный сигнал

Красный график соответствует положительному полупериоду, синий - отрицательному. Далее вычтем сигнал нижнего таймера из сигнала верхнего, умножим на круговую частоту сети , и получим на выходе такую треугольную форму

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

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

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

Теперь наша задача - синтезировать регулятор тока, который принял бы на вход ошибку по току, а с выхода выдал бы нам модулирующий сигнал. Займемся этим
Примечание: Работая над статьей, я воспроизвожу построение модели заново, и делаю скриншоты. Я допустил ошибку в емкости конденсатора, указав мФ вместо мкФ. Должно быть так

и вот так

Прошу сильно не пинать, я заменил последний скриншот схемы, остальные оставлю как есть.
2. Синтез регулятора тока
Вновь обратимся с эквивалентной схеме замещения, для первой основной гармоники

Для данной цепи, во временной области, очевидно соотношение
откуда получаем выражение для напряжения инвертора
Из (2) становится понятным, что управляющее воздействие будет пропорционально производной ошибки по току, то есть структура регулятора может быть такой
где
ошибка регулирования. Однако, не будем спешить - такой регулятор даст отвратительный результат.
Регулятор тока, в данном случае, должен обладать следующими свойствами
Астатизм - то есть отсутствие статической ошибки. Мы стремимся к тому, чтобы ток во входной цепи точно повторял заданный ток, как по амплитуде, так и по фазе
Исходя из (2), сигнал управления должен иметь емкостную составляющую, то есть на 90 градусов опережать по фазе активный ток, который мы стремимся получить в установившемся режиме.
Выполнение второго условия действительно возможно за счет составляющей, пропорциональной производной ошибки. Однако с астатизмом будет беда. Представим нашу будущую систему управления в виде структурной схемы в передаточных функциях

Здесь, - передаточная функция регулятора;
- передаточная функция объекта управления.
Передаточная функция по ошибке
откуда изображение ошибки, в частотной области, где ,
И фокус в том, что статическая ошибка будет отсутствовать, если в установившемся режиме , и при этом передаточная функция объекта должна удовлетворять только одному условию
.
Например, если у нас будет ПИ-регулятор, как известно привносящий астатизм в САУ, то он, с передаточной функцией
при действительно, даст ожидаемый эффект. Только проблема в том, что наша ошибка, заданное значение и фактический ток - все это как минимум синусоидальные сигналы, а как мы увидим позже, в ошибке могут присутствовать и более высокие гармоники. Для первой гармоники при
(5) уже вполне конечная величина. ПИ-регулятор, а так же регулятор (3) нам не подходят.
Нам нужен регулятор, обеспечивающий огромный коэффициент усиления при частоте, равной круговой частоте сети, и ничтожный коэффициент усиления для всех других частот. Кроме того, он должен уметь отсекать постоянную составляющую ошибки. И это приводит нас к такой передаточной функции
при дающей бесконечный коэффициент усиления. Для всех остальных частот, и для постоянной составляющей (
), будет небольшой или нулевой коэффициент усиления. То есть мы используем резонанс на частоте сети.
Однако, такой регулятор будет работать неустойчиво, так как они имеет нулевую полосу пропускания. Нам придется сделать диапазон частот, где работает резонанс, конечным, то есть добавить демпфирование, и тогда эта передаточная функция будет выглядеть так
где - ширина полосы пропускания. В этом случае, на частоте сети регулятор обеспечит коэффициент усиления
и тогда нам придется сделать достаточно большим. Однако, это сделает наш регулятор устойчивым к колебаниям частоты сети в пределах
. Для дополнительного демпфирования, и обеспечения минимального управления вне резонансной частоты добавим сюда пропорциональную часть. Кроме того, мы учтем, что управляющее воздействие мы подаем, согласно (2) со знаком минус относительно ошибки. Тогда мы приходим к такой структуре регулятора
который называют пропорционально резонансным, или ПР-регулятором.
3. Реализация ПР-регулятора тока
В OpenModelica реализуем регулятор в виде пользовательского блока, имеющего вход по ошибке тока и выход, реализующий управляющее воздействие. Код регулятора будет выглядеть так
model PR_regulator
import Modelica.Constants.pi;
parameter Real Kp = 1.0;
parameter Real Kr = 1.0;
parameter Real freq = 50.0;
parameter Real w0 = 2*pi*freq;
parameter Real delta_freq = 5.0;
parameter Real wc = 2*pi*delta_freq;
Modelica.Blocks.Interfaces.RealInput u annotation(
Placement(transformation(origin = {-120, 0}, extent = {{-20, -20}, {20, 20}}), iconTransformation(origin = {-120, 0}, extent = {{-20, -20}, {20, 20}})));
Modelica.Blocks.Interfaces.RealOutput y annotation(
Placement(transformation(origin = {110, 0}, extent = {{-10, -10}, {10, 10}}), iconTransformation(origin = {110, 0}, extent = {{-10, -10}, {10, 10}})));
Real x1, x2;
Real u_res;
initial equation
x1 = 0;
x2 = 0;
equation
der(x1) = x2;
der(x2) = -w0^2 * x1 - wc * x2 + u;
u_res = Kr * wc * x2;
y = Kp * u + u_res;
annotation(
uses(Modelica(version = "4.0.0")),
Icon(graphics = {Rectangle(lineColor = {0, 0, 127}, extent = {{-100, 100}, {100, -100}}), Text( textColor = {0, 0, 255}, extent = {{-67, 63}, {67, -63}}, textString = "PR")}));
end PR_regulator;
Полосу пропускание зададим в 5 Гц, а коэффициенты пропорциональной и резонансной части сделаем пока равными единице. Интегрируем наш блок в структуру системы управления

Учитывая, что физический смысл выхода регулятора - это напряжение, формируемое инвертором, нормируем его к напряжению звена постоянного тока В, а также добавим ограничитель выходного сигнала в пределах [-1; 1], так как наш выходной сигнал - модулирующее напряжение для униполярной ШИМ. Посмотрим как это работает

Что-то как-то не очень. Но оно и понятно, ведь , что делает резонанс на частоте сети слабо выраженным. Увеличим этот коэффициент сразу на 2 порядка,
.

О-хо-хо! В начале мы наблюдаем некоторый переходный процесс, причем ток там содержит разные пакостные гармоники. Но через 0,1 секунды процесс "устаканивается", и мы видим что-то похожее на синфазные ток и напряжение. Посмотрим на это дело поближе

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

Ток следует четко в фазе сетевого напряжения, амплитуда его соответствует расчетным 991 А. Никакой постоянной составляющей не видно. А что твориться в выходной цепи?

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

Что будет если конденсатор разряжен, я покажу чуть ниже, а пока продолжим анализ. Видно, из графика, что конденсатор фильтра уверенно накачивается аж до 3100 В. При этом, (и это очень важно!) напряжение имеет синусоидальную пульсацию с размахом в 82 вольта и частотой 100 Гц. Как это повлияет на дальнейшую настройку САУ преобразователем мы увидим еще, а пока пойдем дальше и посмотрим на модуляцию

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

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

Отсюда можно прикинуть полученную выходную мощность, при напряжении на выходе 3100 В и токе нагрузки 345 А это даст 1070 кВт выходной мощности. Мощность на входе, при амплитуде напряжения 2121 В и амплитуде тока 1041 А, составит 1104 кВт. Отсюда прикидываем, что КПД у нас 93% что близко к расчетному.
Но это еще не всё.
4. Контур регулирования напряжения в звене постоянного тока
Обычно нам необходимо обеспечить заданное напряжение в звене постоянного тока, например для тяговых преобразователей подвижного состава оно составляет 3 кВ. Мы же полагаемся на случай, стоит изменить параметры системы и у нас будет уже не 3.1 кВ, как показано выше, а другое значение и характер изменения напряжения . Например, чтобы уменьшить пульсацию тока мы увеличим индуктивность дросселя с 6 до 10 мГн, и получим вот это

Поэтому нам нужен астатический регулятор напряжения. Поскольку напряжение у нас постоянное, можно попробовать использовать классический ПИ-регулятор. Оснастим звено постоянного тока датчиком напряжения и соберем ПИ-регулятор

Рассмотрим регулятор поближе

Сигнал регулятора нормируется в диапазоне [-1; 1] как по входу, так и по выходу. В качестве нормирующего коэффициента взято - величина обратная заданному напряжению звена постоянного тока. Сигнал интегратора так же ограничен в этом диапазоне, так называемый анти-виндап, предотвращающий чрезмерное накопление интегральной ошибки.
Выходной сигнал регулятора - задание для контура тока, а конкретно - заданная амплитуда входного тока.
Кроме того, в контур обратной связи по напряжению включен фильтр нижних частот (ФНЧ). Для чего он? Всё потому, что напряжение в звене постоянного тока не постоянно! Вы ведь не забыли стогерцовую гармонику? Эта составляющая приводит к нестабильной работе регулятора, поэтому мы отфильтруем её, поставив ФНЧ с коэффициентом передачи . Параметры регулятора я подобрал вручную. Получилось
,
, частота среза ФНЧ - 1 Гц. Этими параметрами получаем следующие переходные процессы


Таким образом, мы получили двухконтурную систему, обеспечивающую PF=1 и стабилизацию напряжения в звене постоянного тока на заданном уровне.
А что будет, если конденсатор фильтра будет разряжен? А вот что

Возникает переходный процесс с существенной перегрузкой входной цепи по току. Именно поэтому конденсатор фильтра должен быть предварительно заряжен с отключенной нагрузкой. Это можно реализовать сняв импульсы с моста преобразователя и отключив нагрузку, что в реальном тяговом преобразователе выразится в отключении трехфазного АИН, который и служит нагрузкой для 4QS-преобразователя.
В рекуперативном режиме нам не нужен контур тока. За стабилизацию напряжения в звене постоянного тока будет отвечать трехфазный АИН, работающий в режиме активного выпрямителя. На стороне 4QS-преобразователя останется только контур тока, который будет держать ток в противофазе к напряжению сети


Заключение
На довольно простом примере мы рассмотрели общие принципы управления однофазным 4QS-преобразователем. Что мы не рассмотрели? Например не ответили на вопрос другого пользователя @Xexa
Какое решение принято для работы в сети с отсутствием чистой синусоиды(особенно, когда кто-то на этом участке сети уже тормозить удумал)?
Думаю, что это тема для отдельной статьи, где можно рассмотреть цифровые фильтры типа SOGI применяемые в качестве фазового детектора в сетях с "грязным" напряжением.
Кроме того, хотелось бы нагрузить наш 4QS-преобразователь трехфазным АИН с подключенным к нему асинхронным двигателем и рассмотреть все процессы, протекающие в тяговом тракте электровозов переменного тока с асинхронным приводом. Всему свое время, надеюсь у меня получиться рассказать и об этом.
Надеюсь что статья вышла интересной. Благодарю читателей за внимание и до новых встреч!
Arastas
По поводу пересечения нуля - мне казалось, что сейчас детекторы фазы при известной номинальной частоте делают на умножении на тригонометрию измеряемого сигнала?
Непонятно, что такое неустойчивая работа регулятора. Замкнутый контур неустойчив, или реализация регулятора вычислительно неустойчива? Вроде, ничего не мешает иметь чисто мнимые полюса в регуляторе, хотя это и может быть хрупким.
Или, в классической ТАУ, методом внутренней модели.