Как стать автором
Обновить

Field Oriented Control в OpenModelica

Уровень сложностиСредний
Время на прочтение37 мин
Количество просмотров1.1K

Эта статья является продолжением исследования систем управления синхронными двигателями с постоянными магнитами (PMSM) и моделированием в OpenSource программном обеспечении. В ней рассматриваются принципы регулирования, которые были использованы в структурной схеме управления, описанной ранее. Представлены характеристики постоянных магнитов и влияние конструкции ротора на динамику системы.

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

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

Содержание

  • Примеры применения PMSM на современном транспорте

  • Принципы работы и особенности конструкции

    • Характеристики постоянных магнитов

    • Конструктивные особенности ротора

      • Поверхностное расположение магнитов (SPM, Surface Permanent Magnet).

      • Встроенные магниты (IPM, Interior Permanent Magnet).

  • Управление моментом неявнополюсного PMSM

    • Блок компенсации

    • Ограничение напряжения в системе dq

  • Управление скоростью PMSM

    • Управление с ослаблением поля в PMSM

    • Неявнополюсный PMSM в зоне постоянной мощности

  • Техника модуляции для снижения пульсаций крутящего момента

    • Контур управления ослаблением потока на основе обратной связи по вектору напряжения

    • Результаты моделирования

  • Генетический алгоритм оптимизации параметров PI-регулятора

  • Open Modelica - краткое описание

  • Быстрый старт OpenModelica

  • Объектно-ориентированное моделирование в OpenModelica

    • Абстракция

    • Инкапсуляция

    • Наследование

    • Полиформизм

    • Пакеты

    • Уравнения, алгоритмы и функции в Modelica

      • Уравнения (Equations)

      • Алгоритмы (Algorithms)

      • Функции (Functions)

    • Массивы (Arrays)

  • Компонентное моделирование в OpenModelica

    • Интерфейсы

    • Сигнальные интерфейсы

      • SISO - Single Input, Single Output

      • MIMO - Multiple Input, Multiple Output

    • Методы решения уравнений в OpenModelica

    • Параметризация моделей в OpenModelica

      • Использование параметров в коде

      • Использование структур Records

      • Загрузка параметров из внешних файлов

  • OMPython: Интерфейс OpenModelica для Python

  • Моделирование PMSM в OpenModelica

    • Пример из библиотеки - SMPM_VoltageSource

    • Пример пользовательской модели управления PMSM

  • Заключение

  • Используемые источники

Примеры применения PMSM на современном транспорте

Tesla Model 3 –  PMSM мощностью 211 kW
Tesla Model 3 – PMSM мощностью 211 kW
Nissan Leaf –  PMSM мощностью 110 kW
Nissan Leaf – PMSM мощностью 110 kW
BMW i3 –  PMSM мощностью 125 kW
BMW i3 – PMSM мощностью 125 kW
Мотоцикл Arc Vector –  PMSM мощностью ≈ 30 − 90 kW
Мотоцикл Arc Vector – PMSM мощностью ≈ 30 − 90 kW

Принципы работы и особенности конструкции

Синхронным называется электродвигатель, ротор которого вращается с угловой скоростью, соответствующей следующему выражению:

\omega_R = \frac{\omega_e}{Z_p}ωR​​​

где:

  • \omega_e​ — электрическая частота напряжения, подаваемого на статор;

  • Z_p​ — количество пар полюсов машины.

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

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

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

При вращении ротора, оснащённого магнитами, в фазных обмотках статора индуцируется электродвижущая сила (ЭДС), форма которой зависит от конфигурации двигателя.

Одна из распространённых разновидностей синхронных двигателей с постоянными магнитами — машины с синусоидальной формой ЭДС.

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

Если ротор двигателя имеет две пары полюсов p = 2, синхронная частота вращения уменьшается вдвое по сравнению с вариантом p = 1. Это даёт возможность подстраивать характеристики двигателя под конкретные задачи.

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

Основной недостаток таких машин – невозможность регулирования потока ротора, что затрудняет работу в режиме ослабления поля. Магниты могут быть размещены на поверхности ротора или внутри магнитопровода. Способ размещения магнитов существенно влияет на параметры машины, в частности на индуктивность обмоток статора. В машинах с внутренними магнитами магнитное сопротивление небольшое, и относительная индуктивность находится в диапазоне от 0,1 до 0,5. В машинах с поверхностными магнитами этот параметр ниже и составляет от 0,01 до 0,1.

Синхронные машины с постоянными магнитами имеют более высокий КПД по сравнению с другими типами электрических машин. В отличие от асинхронных машин, у них отсутствуют потери в роторе, что значительно увеличивает эффективность. Например, если КПД двухполюсного асинхронного двигателя при номинальной скорости 2850 об/мин составляет 90%, а потери в железе малы по сравнению с потерями в меди, то аналогичная синхронная машина может достигать КПД около 95% за счёт отсутствия роторных потерь.

Характеристики постоянных магнитов

Магнитные свойства материала постоянных магнитов определяются зависимостью B(H), где B – магнитная индукция, а H – внешнее магнитное поле. Остаточная индукция BR существует даже при отсутствии внешнего поля и может превышать 1 Тл. У ферритовых магнитов остаточная индукция ниже, около 0,3 Тл. Большинство ферромагнитных материалов, включая сталь, также обладают небольшой остаточной индукцией, которая исчезает при воздействии внешнего размагничивающего поля.

Рисунок - Намагничивающая характеристика постоянного магнита
Рисунок - Намагничивающая характеристика постоянного магнита

При увеличении внешнего магнитного поля H в направлении, противоположном BR, рабочая точка на характеристике B(H) смещается влево, что приводит к снижению магнитной индукции. Если размагничивающее поле достигает значения коэрцитивной силы –Hc, индукция падает до нуля, что может вызвать необратимое размагничивание. После снятия внешнего поля рабочая точка может вернуться в положение (0, BR1), где BR1 < BR, что свидетельствует о потере части магнитных свойств.

Наиболее уязвимой к размагничиванию областью характеристики B(H) является точка изгиба во второй четверти графика. Если внешнее поле превышает половину коэрцитивной силы, размагничивание происходит ускоренно, что приводит к необратимым изменениям. Поэтому для синхронных машин с постоянными магнитами важно выбирать материалы с высоким произведением BRHc, поскольку оно определяет способность магнита противостоять размагничивающим полям. Это особенно актуально для сервоприводов, где пиковые токи статора значительно превышают номинальные значения, создавая мощные размагничивающие поля.

В первой четверти характеристики B(H) все магнитные диполи уже ориентированы вдоль поля, поэтому дальнейшее увеличение H не приводит к увеличению магнитной индукции, а дополнительное изменение B становится пропорциональным µ0DH. Таким образом, выбор материалов с высоким BRHc обеспечивает стабильность работы синхронных машин с постоянными магнитами и их устойчивость к внешним магнитным воздействиям.

Рисунок - Типичная кривая гистерезиса неодимового магнита
Рисунок - Типичная кривая гистерезиса неодимового магнита

Значительным достижением стали постоянные магниты неодим-железо-бор, которые в настоящее время дают самое высокое энергетическое соотношение. Преимущество этих материалов заключается в том, что редкие самарий и кобальт были заменены гораздо более распространенными неодимом и железом. Основной тип этих материалов - Nd15Fe77B8. Остаточный поток и плотность энергии для неодима-железа-бора составляют 1,5 Тл и 450 кДж/м3. На практике плотность энергии материалов, пригодных для использования в автомобильной промышленности, по-прежнему не превышает 400 кДж/м3.

Конструктивные особенности ротора

Характеристики PMSM во многом определяются конструкцией ротора. В зависимости от расположения магнитов различают следующие основные типы конструкций.

Поверхностное расположение магнитов (SPM, Surface Permanent Magnet).

В этом случае ротор является неявнополюсной (non-salient), поскольку относительная магнитная проницаемость современных магнитов (например, NdFeB) близка к 1. Такое исполнение обеспечивает низкие синхронные индуктивности и высокий момент срыва, однако магниты подвержены механическим и магнитным нагрузкам, а также потерям на вихревые токи.
Поверхностное расположение магнитов позволяет достичь высокой индукции в воздушном зазоре, но увеличивает механические и магнитные нагрузки, а также вихревые потери.
Поверхностное расположение магнитов позволяет достичь высокой индукции в воздушном зазоре, но увеличивает механические и магнитные нагрузки, а также вихревые потери.

Рисунок - Неявнополюсная синхронная машина с постоянными магнитами, имеющая двухслойную трехфазную обмотку статора и поверхностные магниты на роторе.
Рисунок - Неявнополюсная синхронная машина с постоянными магнитами, имеющая двухслойную трехфазную обмотку статора и поверхностные магниты на роторе.

В конструкции PMSM с неявнополюсным ротором индуктивности статорных обмоток вдоль осей d и q принимаются равными, то есть L_{Sd} = L_{Sq} = L_S. Именно управление таким типом двигателя является одной из наиболее распространенных задач.
В данном случае выражение для электромагнитного момента двигателя упрощается и представляется следующим образом:

M = \frac{3}{2} p \Psi i_{Sq}

Анализируя это уравнение, можно сделать вывод, что величина момента определяется исключительно конструктивными параметрами двигателя и значением q-составляющей тока статора i_{Sq}.
При этом d-составляющая тока i_{Sd} не вносит вклад в создание момента, но увеличивает потери мощности, связанные с активным сопротивлением фазных обмоток и другими факторами. Следовательно, для минимизации энергетических потерь в процессе управления моментом целесообразно поддерживать i_{Sd} = 0.

Встроенные магниты (IPM, Interior Permanent Magnet).

При таком размещении магнитов поперечная индуктивность L_q становится выше продольной L_d, что приводит к появлению дополнительного момента релактанса. Однако часть потока магнитов теряется в рассеянии, а механическая защита магнитов улучшается.
Встроенные магниты теряют значительную часть магнитного потока из-за утечек (около 25%), но при этом защищены механически.

Рисунок - Четырехполюсная синхронная машина с внутренним постоянным магнитом, двухслойная обмотка статора и явнополюсный ротор
Рисунок - Четырехполюсная синхронная машина с внутренним постоянным магнитом, двухслойная обмотка статора и явнополюсный ротор

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

Управление моментом неявнополюсного PMSM

Рисунок - структурная схема управлением моментом
Рисунок - структурная схема управлением моментом

В отличие от традиционного управления двигателем постоянного тока, управление моментом PMSM осуществляется путем регулирования вектора тока, разложенного на d- и q-составляющие в системе координат dq, ориентированной по потоку ротора.

Регулирование тока в системе dq осуществляется за счет управления его составляющими i_{Sd} и i_{Sq}. В соответствии с формулой момента i_{Sq} непосредственно влияет на его величину, тогда как i_{Sd} поддерживается равным нулю.

Для получения сигналов обратной связи используются фазные токи i_A, i_B, i_C, которые с помощью преобразования координат переходят в систему dq.

PI-регуляторы формируют управляющие сигналы напряжений u_{d} и u_{q}, которые затем преобразуются обратно в фазные напряжения и реализуются с помощью широтно-импульсной модуляции.

Поскольку система координат ориентирована по потоку ротора, угол \theta_e определяется как произведение измеренного механического угла \theta_R на число пар полюсов p:

\theta_e = p \theta_R

Блок компенсации

В замкнутой системе управления током i_{d} регулируется напряжением u_{d}, а i_{q} – напряжением u_{q}. Однако из уравнений динамики тока следует, что эти напряжения оказывают взаимное влияние:

\begin{aligned}u_{d} &= L_d \frac{di_{d}}{dt} + R_S i_{d} - \omega_e L_q i_{q}, \\ u_{q} &= L_q \frac{di_{q}}{dt} + E + R_S i_{q} + \omega_e L_d i_{d}\end{aligned}

Для исключения взаимных влияний в управляющие сигналы вводятся корректирующие составляющие:

\begin{aligned}u_{dK} &= -\omega_e L_q i_{q} \\ u_{qK} &= \omega_e (\Psi_f + L_d i_d)\end{aligned}

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

Ограничение напряжения в системе dq

При управлении током формируется вектор напряжения U_S, величина которого физически ограничена. При максимальном использовании напряжения звена постоянного тока U_{dc} предельная амплитуда фазного напряжения составляет:

U_{max} = \frac{U_{dc}}{\sqrt{3}}

На высоких частотах возникает риск недостатка напряжения из-за увеличения ЭДС и индуктивного сопротивления. В этом случае вектор напряжения ограничивают по следующим уровням:

|u_{d}| \leq U_{max}, \quad |u_{q}| \leq \sqrt{U^2_{max} - u^2_d} = \sqrt{\frac{U_{dc}^2}{3} - u_{d}^2}

Управление скоростью PMSM

Рисунок - структурная схема управлением скоростью
Рисунок - структурная схема управлением скоростью

Системы регулирования скорости двигателя PMSM строятся по аналогии с системами для привода постоянного тока. Они представляют собой двухконтурные системы подчинённого регулирования, где внутренний контур отвечает за управление током (моментом), а внешний — за регулирование скорости.

На выходе регулятора скорости формируется сигнал задания момента M_{ref}, который компенсирует рассогласование между заданной и текущей скоростью \omega_{ref} - \omega. Поскольку момент двигателя пропорционален составляющей тока i_{q}, сигнал M_{ref} можно использовать в качестве задания для подчинённого контура тока. Далее система управления моментом (контур тока) обеспечивает необходимое исполнение этого задания.
Регулятор скорости представляет собой PI-регулятор для исключения статической ошибки.

В управляющем контроллере контур тока обычно рассчитывается с циклом, равным периоду PWM. В каждом таком цикле процессор измеряет значения фазных токов и угла ротора с помощью датчика, после чего вычисляются управляющие напряжения u_A, u_B, u_C, которые затем реализуются посредством PWM.

Управление с ослаблением поля в PMSM

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

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

\begin{aligned}u_d &= R_s i_d - \omega_e L_s i_q  \\u_q &= R_s i_q + E + \omega_e L_s i_d\end{aligned}

Если управление осуществляется при нулевом продольном токе i_d = 0, уравнения принимают вид:

\begin{aligned}u_d &= -\omega_e L_s i_q \\u_q &= R_s i_q + E\end{aligned}
Рисунок - векторные диаграммы уравнений даигателя
Рисунок - векторные диаграммы уравнений даигателя

На низких частотах противо-ЭДС E = \psi_f \omega_e невелика, поэтому даже малое напряжение статора достаточно для получения номинального момента. Однако с ростом частоты увеличивается и противо-ЭДС, а также индуктивное сопротивление \omega_e L_s. В результате, для поддержания номинального момента требуется повышение напряжения.

Так как инвертор имеет ограничения по току и напряжению, амплитуда линейного напряжения двигателя не может превышать уровень \frac{U_{dc}}{\sqrt{3}}. Обычно напряжение звена постоянного тока U_{dc} выбирается таким, чтобы соответствовать амплитуде номинального линейного напряжения двигателя.

Для дальнейшего увеличения частоты без превышения предельного напряжения необходимо снизить момент двигателя, введя отрицательную составляющую тока i_d. Это создаёт встречный поток, ослабляющий результирующее магнитное поле в зазоре между статором и ротором. Индуцированная ротором ЭДС может стать больше амплитуды подводимого напряжения. Возможно увеличение частоты выше номинальной при некотором снижении предельного момента.

Рисунок - векторная диаграмма двигателя в режиме ослабления возбуждения
Рисунок - векторная диаграмма двигателя в режиме ослабления возбуждения

В тяговом электроприводе применяют двухзонное управление

  • В зоне постоянного момента \omega < \omega_n двигатель работает с номинальным моментом при i_d = 0;

  • В зоне постоянной мощности \omega > \omega_n момент снижается i_d < 0, что позволяет поддерживать номинальную мощность.

Рисунок - двухзонное управление
Рисунок - двухзонное управление

В области низких скоростей максимальный момент M_{max} ограничивается возможностями инвертора по току, но обычно превышает номинальное значение M_{nom}. Однако на более высоких частотах напряжение становится ограничивающим фактором, и начиная с базовой частоты \omega_{base}, максимальный момент естественным образом уменьшается.

Неявнополюсный PMSM в зоне постоянной мощности

Входной сигнал задаваемого момента преобразуется в требуемое значение тока i_{q1}. Для этого используется коэффициент \frac{2}{3} \psi_f p, после чего сигнал поступает на блок ограничения i_{d2}.

Этот блок выполняет две ключевые функции:

  • В области постоянного момента ток q-компоненты ограничивается на уровне, соответствующем перегрузочному моменту.

  • В режиме постоянной мощности ток регулируется в соответствии с условием:$$ i_{qmax} = \frac{\omega_{enom}}{\omega_e} i_{nom}$$

Система управления моментом CVCP - Constant Voltage Constant
Power включает несколько элементов:

  • Контур регулирования тока.

  • Вычислительный блок, определяющий значение i_{Sd} в зависимости от режима работы.

  • Ограничитель i_{d2}, предотвращающий превышение номинального значения тока.

  • Инвертор, обеспечивающий подачу питания на двигатель.

Рисунок - Структурная схема управления с постоянной мощностью
Рисунок - Структурная схема управления с постоянной мощностью

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

i_{d} = - \frac{\Psi_F}{L_s} + \sqrt{\frac{u^2_{nom}}{\omega^2L^2_s} - (i_q)^2}

Ограничитель i_{nom} действует исключительно в зоне постоянной мощности, следя за тем, чтобы суммарный ток не превышал максимально допустимого значения. При этом:

|i_{q}| \leq \sqrt{i_{nom}^2 - i_{d}^2}

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

Техника модуляции для снижения пульсаций крутящего момента

Спрос на поверхностно-монтируемые PMSM в приводных системах легких транспортных средств и коммерческих приложениях растет. Благодаря высокой энергоэффективности эти двигатели обеспечивают высокую плотность магнитного потока. Однако в режиме ослабления потока широтно-импульсная модуляция (PWM) с переменной частотой переключения не всегда достаточно эффективно снижает пульсации крутящего момента. Поэтому был разработан алгоритм управления пульсациями момента, основанный на изменении частоты переключения PWM.

В работе Permanent Magnet Synchronous Machines and Drives представлены принципы моделирования и результаты симуляции приводов с PMSM.
Для работы алгоритма управления необходимо учитывать механическую позицию ротора, измеренное напряжение шины постоянного тока (DC) и фазные токи. Эффективность метода снижения пульсаций момента зависит от переменной частоты коммутации VSFPWM. Основная идея техники VSFPWM заключается в прогнозировании пиковых значений пульсаций тока для управления пульсациями момента, поскольку электромагнитный момент создаётся токами обмотки статора, а любые колебания тока вызывают соответствующие колебания момента.

Для управления частотой переключения можно установить связь между прогнозируемыми значениями пиковых пульсаций тока и момента. Уравнение электромагнитного момента для поверхностно-монтируемого PMSM имеет вид:

T_e = \frac{3}{2} n_p \left[ \lambda_m i_{qs} + (L_{qs} - L_{ds}) i_{qs} i_{ds} \right]

Как показано в этом уравнении, момент пропорционален току оси q. В условиях линейности (Lds = Lqs) можно контролировать пульсации момента путем регулирования пульсациями тока.

Оценка пиковых значений пульсаций момента (Te) производится на основе прогнозируемого пикового значения пульсаций тока оси q:

T_e = \frac{3}{2} n_p \lambda_m \Delta i_{qs}

Исследования Variable Switching Frequency PWM for Three-Phase Converters Based on Current Ripple Prediction и Current-Ripple Prediction for Three-Phase PWM Converters предполагают линейную зависимость между обновлённой частотой F_s и пиковыми значениями пульсаций тока оси q:

F_s = F_{sw} \frac{\Delta T_e}{\Delta T_{wanted}}

где \Delta T_{wanted} — желаемая величина пульсаций момента. Таким образом, алгоритм корректирует частоту переключения на основе изменений прогнозируемых пульсаций.
Время коммутации трёхфазного ШИМ рассчитывается следующим образом:

\begin{aligned}d_a &= \frac{T_2 + 0.5T_0}{T_s}  \\d_b &= \frac{T_0}{0.5T_s}  \\d_c &= \frac{T_1 + T_2 + 0.5T_0}{T_s}\end{aligned}

где d_a, d_b, d_c — длительности коммутационных состояний фаз, T_s — период переключения, T_0, T_1, T_2 — времена активации векторов напряжения.

Рисунок - Однофазный прогнозируемый график пульсации тока через один цикл переключения
Рисунок - Однофазный прогнозируемый график пульсации тока через один цикл переключения

Как показано на рисунке, самые высокие пики пульсации тока — это максимумы Px и Py.

Рисунок - Комбинация переключателей восьми различных векторов напряжения и их эквивалентные схемы Тевенина. (a) Vector 000. (b) Vector 100. (c) Vector 110. (d) Vector 111. (e) Vector 001. (f) Vector 010. (g) Vector 011. (h) Vector 101.
Рисунок - Комбинация переключателей восьми различных векторов напряжения и их эквивалентные схемы Тевенина. (a) Vector 000. (b) Vector 100. (c) Vector 110.
(d) Vector 111. (e) Vector 001. (f) Vector 010. (g) Vector 011. (h) Vector 101.

В первой зоне добавляется вектор V (000). Эквивалентная схема этого состояния переключения показана на рис. (a). На основе эквивалентной схемы Тевенина параллельных ветвей фазы B и фазы C эквивалентная схема этого состояния переключения также показана на рис. (a). Затем производная тока в индукторе фазы A может быть выведена и показана в уравнении. Учитывая среднее значение фазного напряжения в

\begin{aligned}V_a &= d^{'}_a \frac{V_{dc}}{2} \\V_b &= d^{'}_b \frac{V_{dc}}{2} \\V_c &= d^{'}_c \frac{V_{dc}}{2} \\\end{aligned}

выражение может быть записано в

\begin{aligned}\frac{di_a}{dt} &= \frac{2}{3L} (\frac{\vec{V_b} + \vec{V_c}}{2} - \vec{V_a}) \\\frac{di_a}{dt} &= \frac{V_{dc}}{3L} (\frac{d^{'}_b + d^{'}_c}{2} - d^{'}_a) \\\end{aligned}

Во второй зоне добавляется вектор Vx (100), эквивалентная схема показана на рис. (b). Похожий вид схемы Тевенина также выводится на рис. (b). Производная тока выводится далее. В третьей зоне добавляется вектор Vy (110), эквивалентная схема показана на рис. (c) вместе с эквивалентной схемой Тевенина. Производная тока выводится также далее. В четвертой зоне добавляется вектор V7(111), и эквивалентная схема этого состояния переключения показана на рис. (d) вместе с эквивалентной схемой Тевенина. Производная ia выводится как

\begin{aligned}\frac{di_a}{dt} &= \frac{2 V_{dc}}{3L} (1 + \frac{d_b + d_c}{4} - \frac{\vec{d_a}}{2}) \\\frac{di_a}{dt} &= \frac{2 V_{dc}}{3L} (0.5 + \frac{d_b + d_c}{4} - \frac{d_a}{2}) \\\frac{di_a}{dt} &= \frac{V_{dc}}{3L} (\frac{d_b + d_c}{4} - d_a) \\\end{aligned}

В зонах 5, 6 и 7 векторы напряжения и наклон тока совпадают с зонами 3, 2 и 1, форма волны пульсации тока в этом цикле переключения показана на рисунке. В каждом периоде переключения трехфазного преобразователя применяются четыре из восьми векторов напряжения. На основе эквивалентной схемы Тевена можно вывести наклон пульсации тока и суммировать в таблице. Пульсация тока фазы B и фазы C может быть проанализирована аналогичным образом.

Angle Range (Ө)

Voltage Sector

Current Ripple Slope Formula

Zero voltage sector

000 or 111

\frac{di_a}{dt} =\frac{V_{dc}}{3L_s} (\frac{\vec{d_b} + \vec{d_c}}{2} - \vec{d_a})

0 ≤ Ө < 60

100

\frac{di_a}{dt} =\frac{2 V_{dc}}{3L_s} (1 + \frac{\vec{d_b} + \vec{d_c}}{4} - \frac{\vec{d_a}}{2})

60 ≤ Ө < 120

110

\frac{di_a}{dt} =\frac{2 V_{dc}}{3L_s} (\frac{\vec{d_b} + \vec{d_c}}{4} - \frac{\vec{d_a}}{2} + 0.5)

120 ≤ Ө < 180

010

\frac{di_a}{dt} =\frac{2 V_{dc}}{3L_s} (\frac{\vec{d_b} + \vec{d_c}}{2} - 1 - \vec{d_a})

180 ≤ Ө < 240

011

\frac{di_a}{dt} =\frac{2 V_{dc}}{3L_s} (\frac{\vec{d_b} + \vec{d_c}}{2} - 1 - \frac{\vec{d_a}}{2})

240 ≤ Ө < 300

001

\frac{di_a}{dt} =\frac{V_{dc}}{3L_s} (\frac{\vec{d_b} + \vec{d_c}}{2} - 1 - \vec{d_a})

300 ≤ Ө < 360

101

\frac{di_a}{dt} =\frac{2 V_{dc}}{3L_s} (\frac{\vec{d_b} + \vec{d_c}}{4} + 0.5 - \frac{\vec{d_a}}{2})

Контур управления ослаблением потока на основе обратной связи по вектору напряжения

В рамках традиционной векторной схемы управления основная идея алгоритма регулирования потока заключается в добавлении внешнего контура управления величиной вектора напряжения (ρ), как показано на рисунке. Если величина вектора напряжения превышает 1, двигатель переходит в область ослабления потока. В противном случае он работает в зоне постоянного крутящего момента. При этом опорный ток i^*_{ds} оси d при работе в режиме ослабления потока корректируется внешним контуром для поддержания среднего значения ρ равным 1.

Параметр ρ определяется следующим выражением:

\rho = \sqrt{3}\frac{\sqrt{v^{*2}_{\alpha s} + v^{*2}_{\beta s}}}{V_{dc}}

Контур управления ослаблением потока на основе обратной связи по вектору напряжения можно описать следующим уравнением:

e_p = \frac{i^*_{ds}}{K_{p\rho}} - \frac{K_{I\rho}}{K_{P\rho}}E_{\rho} + \int(\frac{K_{I\rho}}{K_{P\rho}})^2 \Delta i^*_{ds} - \rho^* + \rho

где K_P и K_I — коэффициенты пропорционального и интегрального регуляторов индекса модуляции, \rho^* — опорное значение величины вектора напряжения, e_{\rho} — ошибка регулятора индекса модуляции, \Delta i^*_{ds} — разница между предельным и опорным значением контроллера, а E_{\rho} — интегральная ошибка.

Рисунок - структурная схема ослабление потока на основе обратной связи по вектору напряжения
Рисунок - структурная схема ослабление потока на основе обратной связи по вектору напряжения

Компенсированное значение тока оси d определяет пиковый ток оси q (i_{qs-max}), который создаёт электромагнитный момент:

i^*_{qs-max} = \sqrt{I^2_s - i^{*2}_{ds}}

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

Результаты моделирования

В таблице приведены параметры и характеристики поверхностно-монтируемого синхронного двигателя, используемого в моделировании. Инвертор напряжения с источником питания (VSI) работает на постоянной частоте коммутации 2,5 кГц, а напряжение на шине постоянного тока составляет 400 В. Настройка PI-параметров осуществляется с использованием офлайн-метода случайного поиска — параметры изменяются до тех пор, пока поведение скорости двигателя не достигнет приемлемого уровня.

Таблица - Параметры моделирования и эксперимента для поверхностно-монтируемого PMSM

Параметр

Обозначение

Единицы измерения

Значение

Номинальное линейное напряжение

Vn

В

270

Номинальный ток

In

А

6.8

Номинальная мощность

Pr

кВт

3

Номинальная скорость

Nm

об/мин

2000

Номинальный крутящий момент

Tn

Нм

14.3

Сопротивление статора

Rs

Ом

0.8

Индуктивность статора

Ls

Гн

5 × 10⁻³

Потокосцепление пост. магнита

λm

Вб

0.35

Момент инерции

J

кг·м²

3.78 × 10⁴

Коэффициент вязкого трения

Bv

-

7.403 × 10⁵

Количество пар полюсов

p

-

3

Частота коммутации инвертора

Fn

кГц

2.5

Максимальный ток инвертора

Is-max

А

20

Временной шаг

Ts

с

5 × 10⁻⁴

Рисунок - результаты моделирования
Рисунок - результаты моделирования

На рисунке показана динамика скорости двигателя. В ходе моделирования двигатель разгоняется до -2300 об/мин при нагрузочном крутящем моменте 8 Нм, после чего угол ротора изменяется каждые 0,5 с. В момент 1 с включается стратегия управления VSFPWM. Как показано на рисунке, скорость двигателя составляет примерно 2200 об/мин с установившейся ошибкой около 5%.

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

  • Параметры PI-регулятора системы управления полем не подходят для работы в режиме ослабления потока, особенно параметры регулятора потока и внутреннего регулятора статора для осей d-q. В результате система управления достигает максимальной скорости в зоне постоянного крутящего момента, но не обеспечивает необходимый размагничивающий ток в отрицательной траектории оси d.

  • В PI-регуляторе ослабления потока отсутствует фильтр, который мог бы компенсировать недостаток среднего отрицательного значения тока статора по оси d при снижении оптимального PI-параметра.

  • Ошибки в проектировании PI-регулятора отражаются на среднем значении тока статора по оси d и величине вектора напряжения VSI.

Генетический алгоритм оптимизации параметров PI-регулятора

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

Основные этапы работы генетического алгоритма:

  1. Формирование начальной популяции решений.

  2. Вычисление целевой функции.

  3. Анализ области поиска для нахождения лучших решений.

  4. Генерация нового потомства.

  5. Обновление потомства.

Реализация алгоритма.

  1. Создание начальной популяции: формируется 100 случайных решений, удовлетворяющих заданным ограничениям. Каждая особь (хромосома) содержит шесть параметров PI-регулятора.

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

    Chr = \sum_{i=0}^{40} rand(0,1) \cdot 2^i

    где Chr обозначает хромосому. Хромосома преобразуется в числовое значение в диапазоне между верхней и нижней границами:

    MBR = V_{LOW} + Chr \times \left( \frac{V_{UP} - V_{LOW}}{2^{40} - 1} \right)

    где MBR — это элемент частиц p, а Vlow и Vup — это нижний и верхний пределы этих элементов соответственно. Предельные значения в задачах оптимизации можно определить как $$ V_{LOW} = [0, 0, 0, 0, 0, 0], \quad V_{UP} = [50, 1, 500, 100, 1000, 50]$$

  3. Оценка функции стоимости: проводится вычисление значений функции на основе текущей популяции. Для этого применяется метод Рунге-Кутты для решения системы линейных уравнений, после чего определяются переменные состояния E_{\omega0}, E_{fw0}, E_{q0}.

  4. Расчет вероятностей выбора частиц: вероятность P_n для каждой особи определяется по формуле:

    P_n = \frac{f_n}{\sum_{N=1}^{100} f_N}

    где f_n — оценка целевой функции.

  5. Операция скрещивания: отбираются две лучшие хромосомы, которые разрезаются на две части и объединяются с фрагментами других хромосом, образуя новое поколение.

  6. Мутация: происходит случайная инверсия битов (0 заменяется на 1 и наоборот), что увеличивает вероятность нахождения глобального минимума.

  7. Отбор потомства: новые особи проверяются на соответствие ограничениям, после чего они включаются в следующую популяцию.

  8. Повторение цикла: алгоритм выполняется итерационно, пока не достигнуто одно из условий остановки:

    • Ошибка функции стоимости не изменяется на протяжении 12 итераций.

    • Достигнуто максимальное число поколений (100).

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

Open Modelica - краткое описание

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

В OpenModelica модели описываются с использованием:

  • Дифференциальных и алгебраических уравнений,

  • Объектно-ориентированного моделирования,

  • Компонентного подхода, где каждая часть системы представляется отдельным модулем.

Modelica — это объектно-ориентированный язык моделирования, предназначенный для описания физических систем. Его основные преимущества:

  • Поддержка многодоменных систем (электрика, механика, термодинамика);

  • Возможность повторного использования кода;

  • Высокая читаемость и удобство работы с уравнениями.

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

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

Скачать приложение можно на сайте https://openmodelica.org. Там же находятся ссылки на различные ивенты и воркшопы.

На основе Modelica создано несколько коммерческих продуктов, включая программные инструменты для моделирования, симуляции и оптимизации сложных систем. Вот некоторые из них:

  • Dymola (Dassault Systèmes) – один из наиболее известных коммерческих продуктов, основанных на Modelica. Это мощное средство для моделирования мультифизических систем, широко используемое в промышленности, особенно в автомобилестроении, аэрокосмической отрасли и энергетике​.

  • MapleSim (Maplesoft) – программный инструмент, использующий Modelica для многодоменного моделирования, особенно в инженерных и научных приложениях​.

  • Wolfram System Modeler (Wolfram Research) – программный пакет для моделирования и симуляции сложных систем, интегрированный с Wolfram Mathematica​.

  • TIL Suite (TLK Thermo) – библиотека для моделирования термодинамических процессов, особенно в области систем кондиционирования и охлаждения​.

  • Modelon Library Suite: набор из специализированных библиотек на основе Modelica, охватывающих различные отрасли и области применения, включая аэрокосмическую промышленность, автомобилестроение, энергетику и промышленное оборудование.

Источники информации

Что понравилось в OpenModelica.

  • Свободно распространяемый продукт

  • Концепция объектно-ориентированного моделирования и компонентного подхода

  • Возможность совместно работать с разными моделями и строить результаты симуляций

  • Возможность интеграции с Python с помощью пакета OMPython

  • Идентичность графического отображения модели и исходного кода

  • Проект в виде пакета представлен одним файлом .mo

  • Стандартная библиотека содержит много различных компонентов

  • Возможность моделирования многодоменных систем

Что не понравилось в OpenModelica

  • Баги:

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

    • После компиляции модели прогресс симуляции остается = 0% по причине того, что вычислитель не может решить уравнения. Необходимо отменять симуляцию и пытаться изменять параметры модели.

    • Иногда после редактирования параметра компонент исчезает с рабочего пространства, хотя в модели он присутствует, и симуляция проходит. Помогает редактирование параметров компонента в коде модели.

  • Высокий порог входа в язык Modelica. Требуется изучения концепций ООМ и особенности структуры кода.

  • Редактор кода не достаточно удобен по сравнению с современными IDE

  • Мало обучающего материала в легкодоступном виде по сравнению с коммерческими аналогами

  • В OMEdit нет функционала split tab, только переключение между вкладками

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

Быстрый старт OpenModelica

После запуска OpenModelica открывается основное рабочее пространство, включающее:

  • Браузер библиотек Modelica;

  • Графический редактор для построения моделей;

  • Окно симуляции и анализа результатов;

В стандартной библиотеке для каждого пакета содержаться примеры (Examples). Можно открыть любой пример и выполнить симуляцию. Тем самым практически ознакомиться с использованием стандартных моделей и блоков. Можно запускать симуляцию для example непосредственно открыв его. Однако можно склонировать пример в свой пакет, чтобы можно было его изменить и адаптировать под свои нужды. Для этого нужно вызвать меню Duplicate, и в диалоговом окне указать пакет, в который необходимо клонировать пример.

Построим простую модель, основываясь на примере Mechanics.Translational.Examples.Damper. Создавать модели рекомендуется в отдельных пакетах, таким образом весь проект находится в одном месте, физически в одном файле. Это позволяет легко загружать проект и редактировать модели.

В окне браузера библиотек выбираем меню New -> New Modelica Class. В выпадающем списке Specialization выбираем Package, и вводим имя пакета в поле Name.

В созданном пакете вновь открываем меню New -> New Modelica Class и теперь выбираем Specialization - Model. Вводим имя в поле Name. Откроется рабочая область редактирования модели в режиме диаграммы (Diagram View). Диаграмма по умолчанию содержит основную область в виде белого квадрата размером 100 х 100 расположенного в пространстве серого цвета. Компоненты можно располагать как в пределах рабочей области так и вне. Если количество компонентов не помещается на рабочую область рекомендуется создавать отдельные модели или блоки. Однако можно легко изменить размер рабочей области.

Добавление компонентов в модель

  • Открываем стандартную библиотеку Modelica.

  • Переходим в раздел Mechanics.Translational.Components

  • Добавляем компоненты: масса (Mass), пружина (Spring), демпфер (Damper), фиксатор (Fixed).

  • Перетаскиваем компоненты на рабочую область.

  • Соединяем выводы компонентов. Для этого кликаем на выводе одного компонента, удерживаем мышь, тянем к выводу другого компонента, а затем отпускаем.

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

  • Выбираем каждый компонент и задаем параметры:

    • Масса тела (m): 1 кг;

    • Жесткость пружины (c): 1 Н/м;

    • Коэффициент демпфирования (d): 25 Н·с/м.

Для перехода в текстовый режим модели необходимо нажать кнопку Text View на панели вкладки. Рядом находятся кнопки Diagram View - режим графического редактирования, Icon View - режим редактирования пиктограммы модели, Documentation View - получение документации по компоненту, если она была создана.

Чтобы быстро получить информацию или исходный код блока или модели можно открыть компонент с помощью меню Open class

Исходный код созданной модели пружины с демпфером

model Demo

Modelica.Mechanics.Translational.Components.Mass mass(m = 1)  annotation(
    Placement(transformation(origin = {-42, 2}, extent = {{-10, -10}, {10, 10}})));
Modelica.Mechanics.Translational.Components.Damper damper(d = 25)  annotation(
    Placement(transformation(origin = {2, 14}, extent = {{-10, -10}, {10, 10}})));
Modelica.Mechanics.Translational.Components.Spring spring(c = 1, s_rel0 = 1)  annotation(
    Placement(transformation(origin = {2, -12}, extent = {{-10, -10}, {10, 10}})));
Modelica.Mechanics.Translational.Components.Fixed fixed annotation(
    Placement(transformation(origin = {42, 2}, extent = {{-10, -10}, {10, 10}})));
  
equation
connect(damper.flange_a, spring.flange_a) annotation(
    Line(points = {{-8, 14}, {-22, 14}, {-22, -12}, {-8, -12}}, color = {0, 127, 0}));
connect(damper.flange_b, spring.flange_b) annotation(
    Line(points = {{12, 14}, {24, 14}, {24, -12}, {12, -12}}, color = {0, 127, 0}));
connect(fixed.flange, spring.flange_b) annotation(
    Line(points = {{42, 2}, {24, 2}, {24, -12}, {12, -12}}, color = {0, 127, 0}));
connect(mass.flange_b, spring.flange_a) annotation(
    Line(points = {{-32, 2}, {-22, 2}, {-22, -12}, {-8, -12}}, color = {0, 127, 0}));
end Demo;

Как видно из кода масса (Mass), пружина (Spring), демпфер (Damper) и фиксатор (Fixed) объявляются в модели в виде соответствующих объектов. В аннотациях (annotation), как правило, прописывается местоположения и другие графические атрибуты объектов. Уравнения и связи между объектами прописываются в разделе equation. В данном примере отдельные уравнения не создавались. Связи образуются с помощью функции connect, после того как компоненты соединили между собой в графическом редакторе.

Перед запуском симуляции можно проверить модель на наличие ошибок, нажав кнопку Check Model на панели инструментов.
После завершения настройки запускаем симуляцию, используя кнопку Simulate. Модель вначале компилируется в исполняемый файл, а затем выполняется симуляция.
В графическом окне отображается динамика системы, которую можно проанализировать и оптимизировать. В окне Variables можно выбрать любые переменные для отображения на графике. В данном примере выбрана сила и позиция фланца пружины. В колонке Value можно изменять значение переменных, которые заданы как параметры. Затем кликнуть на кнопку Re-simulate на панели инструментов. Процесс симуляции запустится заново, при этом повторной компиляции происходить не будет. По завершению симуляции выбранные переменные остаются на графике.

Редактор OMEdit позволяет работать с множеством моделей и пакетами совместно. Все запуски симуляций будут отображаться в виде отдельных групп переменных в окне Variables (синяя иконка MAT). Кнопка New Plot Window на панели инструментов позволяет создавать отдельные вкладки графиков, где можно выводить результаты симуляций разных моделей. Кнопка New Parametric Plot Window позволяет строить график зависимости одной переменной от другой.

Объектно-ориентированное моделирование в OpenModelica

Объектно-ориентированное моделирование (ООМ) позволяет создавать сложные иерархические модели, используя принципы абстракции, инкапсуляции, наследования и полиморфизма. В OpenModelica этот подход облегчает управление сложными системами и повышает гибкость моделирования.

Абстракция

Абстракция позволяет выделить ключевые свойства системы и скрыть детали реализации. Например, при проектировании электропривода можно абстрагировать мотор как объект с входными параметрами (напряжение, ток) и выходными переменными (момент, скорость).

Инкапсуляция

Инкапсуляция позволяет скрыть внутренние данные модели и предоставлять доступ только к необходимым параметрам. Например, переменные, которые не должны изменяться извне, могут быть объявлены как protected.

model Motor
  parameter Real R = 0.1 "Сопротивление";
  protected Real current;
end Motor;

Наследование

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

model BaseMotor
  parameter Real voltage;
  parameter Real power;
end BaseMotor;

model DC_Motor
  extends BaseMotor;
  parameter Real resistance;
end DC_Motor;

В данном примере DC_Motor наследует параметры voltage и power из BaseMotor с помощью ключевого слова extends, добавляя собственный параметр resistance.

Полиморфизм

Полиморфизм позволяет использовать общий интерфейс для работы с различными типами объектов. В Modelica это достигается через параметрические классы, используя ключевое слово partial.

partial model BaseComponent
  parameter Real value;
end BaseComponent;

model Resistor extends BaseComponent;
model Capacitor extends BaseComponent;

Использование объектно-ориентированного подхода позволяет объединять отдельные компоненты в сложные системы. Например, можно создать модель автомобиля, состоящую из двигателя, трансмиссии и колес:

model Vehicle
  Engine engine;
  Transmission transmission;
  Wheel wheel[4];
end Vehicle;

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

Пакеты

В OpenModelica принято организовывать модели в пакеты для удобства управления проектами. Создать пакет можно следующим образом:

package MySystem
  model Component1
    // код компонента
  end Component1;

  model Component2
    // код компонента
  end Component2;
end MySystem;

Уравнения, алгоритмы и функции в Modelica

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

Уравнения (Equations)

Ключевые особенности:

  • Уравнения в Modelica являются декларативными: они описывают равенства, а не последовательность вычислений.

  • Modelica-среда решает уравнения автоматически, выбирая порядок вычислений.

  • Дифференциальные уравнения задаются с использованием der() (например, der(x) = v).

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

model FreeFall
  parameter Real g = 9.81;   // Ускорение свободного падения
  Real h(start=100);         // Начальная высота (100 м)
  Real v(start=0);           // Начальная скорость (0 м/с)
equation
  der(h) = v;                // Производная высоты — это скорость
  der(v) = -g;               // Производная скорости — это ускорение (гравитация)
  
initial equation
  h = 100;                   // Задаем начальную высоту
  v = 0;                     // Задаем начальную скорость
end FreeFall;
  • der(h) = v; означает, что скорость — это производная высоты.

  • der(v) = -g; означает, что ускорение (производная скорости) равно -9.81 м/с².

  • В секции initial equation явно заданы начальные условия (можно также задавать их через start=...).

Алгоритмы (Algorithms)

Алгоритмы используются, когда необходимо задать явную последовательность вычислений. Они работают так же, как и процедуры в традиционных языках программирования (например, C, Python).

Ключевые особенности:

  • В отличие от equation, алгоритмы содержат операторы присваивания (:=).

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

  • Используются, когда важен порядок вычислений, например, в дискретных системах, управляющих алгоритмах, сложных управляющих логиках с if-then-else и for.

model FactorialExample
  parameter Integer n = 5;  // Число, для которого ищем факториал
  Integer result;
algorithm
  result := 1;              // Инициализация переменной
  for i in 1:n loop
    result := result * i;   // Умножаем текущее значение на i
  end for;
end FactorialExample;
  • Используется секция algorithm, так как порядок вычислений важен.

  • Цикл for i in 1:n loop перебирает значения от 1 до n.

  • result := result * i; обновляет значение факториала на каждой итерации.

Функции (Functions)

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

Ключевые особенности:

  • Объявляются с ключевым словом function.

  • Все аргументы должны быть явно определены как input или output.

  • Внутри функции можно использовать algorithm или equation.

  • Функции не могут хранить внутреннее состояние, но могут использовать protected переменные.

Массивы (Arrays)

Массивы — это основной тип коллекций в Modelica. Они бывают:

  • Одномерные (векторы)

  • Двумерные (матрицы)

  • Многомерные (трехмерные и выше)

Одномерный массив (вектор)

Real A[3] = {1.0, 2.0, 3.0};  // Вектор из трех элементов

Двумерный массив (матрица)

Real B[2,3] = [1, 2, 3; 4, 5, 6]; // Матрица 2x3

Трехмерный массив

Real C[2,2,2] = {{{1,2}, {3,4}}, {{5,6}, {7,8}}}; // 3D массив 2x2x2

Заполнение массива в for-цикле

Real D[5];
algorithm
  for i in 1:5 loop
    D[i] := i^2; // Заполняем квадратами чисел
  end for;

Создание массива с одинаковыми значениями

Real E[5] = fill(3.14, 5);  // Массив из 5 элементов, все 3.14

Доступ к элементам

Real x = B[2,1];  // Получаем первый элемент второй строки матрицы B → x = 4

Изменение элемента

B[1,3] := 10; // Теперь матрица B = [1,2,10; 4,5,6]

Обращение к строкам и столбцам

Real row1[:] = B[1,:];  // Взять всю первую строку → {1,2,10}
Real col2[:] = B[:,2];  // Взять весь второй столбец → {2,5}

Операции над массивами

Real sumB = sum(B);   // Сумма всех элементов массива B
Real maxB = max(B);   // Максимальный элемент
Real minB = min(B);   // Минимальный элемент

Компонентное моделирование в OpenModelica

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

Пример объявления механического коннектора:

connector MechanicalPort
  Real force;
  flow Real velocity;
end MechanicalPort;

Компоненты могут быть простыми (например, резисторы, массы) или сложными (например, электродвигатели, гидросистемы). Рассмотрим пример механического компонента:

model Mass
  parameter Real m = 1 "Масса";
  MechanicalPort p;
  Real acceleration;

equation
  m * der(p.velocity) = p.force;
end Mass;

Этот компонент описывает поведение тела с массой m, на которое действует сила p.force.

Интерфейсы

Интерфейсы в Modelica — это коннекторы, которые определяют, какие переменные могут передаваться между моделями. Они используются для создания переиспользуемых компонентов в различных областях (электрические схемы, механика, тепловые системы и т. д.).

В Modelica используются два основных типа интерфейсов:

  • Физические интерфейсы (разделяют переменные на потоковые и потенциальные).

  • Сигнальные интерфейсы (используют входы и выходы для передачи данных).

Свойства интерфейсов

  • Acausal (недирективные) — данные передаются в определенном направлении, например, из входа в выход (как в программировании). Используется в сигнальных системах управления.

  • Causal (директивные) — связь между компонентами не задает направление потока данных. Modelica автоматически решает, как распределить переменные, например, в физических системах.

В acausal-интерфейсах нет четкого направления потока данных, Modelica сама решает, как распределять переменные. Это удобно для физического моделирования, где есть законы сохранения (электричество, механика, термодинамика).

Пример: электрический разъем (Acausal)

connector Pin
  Real v;        // Потенциал (напряжение)
  flow Real i;   // Поток (ток)
end Pin;

Здесь:

  • v — просто значение потенциала (напряжение).

  • flow Real i — потоковая переменная (ток), Modelica автоматически распределяет его между подключенными компонентами.

Использование в модели:

model Resistor
  parameter Real R = 10; // Сопротивление
  Pin p1, p2;            // Два интерфейса
equation
  p1.v - p2.v = R * p1.i;  // Закон Ома
  p1.i + p2.i = 0;         // Закон Кирхгофа
end Resistor;
  • Modelica сама решает, какое направление тока (i) и напряжения (v).

  • Если к p1 подключить источник напряжения, ток сам распределится по цепи.

Сигнальные интерфейсы

Такие интерфейсы используются для передачи управляющих сигналов и подходят для MIMO/SISO систем.

SISO - Single Input, Single Output

SISO-интерфейсы применяются в простых системах управления, например, в ПИД-регуляторе.

block SISO_Block
  input Real u;   // Вход
  output Real y;  // Выход
equation
  y = 2*u;  // Простая передаточная функция
end SISO_Block;

MIMO - Multiple Input, Multiple Output

MIMO-системы используются в более сложных системах, например, в управлении многоагентными системами, робототехнике и HVAC.

block MIMO_Block
  input Real u1, u2;  // Два входных сигнала
  output Real y1, y2; // Два выходных сигнала
equation
  y1 = u1 + u2;
  y2 = u1 - u2;
end MIMO_Block;

  • Физические интерфейсы используются в моделировании механики, электрических и тепловых систем.

  • Сигнальные интерфейсы (SISO, MIMO) — в системах управления и обработки сигналов.

  • Acausal-интерфейсы удобны в физических моделях, так как Modelica сам решает уравнения.

  • Causal-интерфейсы применяются в цифровых системах, где важен порядок передачи данных.

Методы решения уравнений в OpenModelica

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

Основные классы уравнений
2. Обыкновенные дифференциальные уравнения (ODE) — описывают динамику систем во времени.
3. Дифференциально-алгебраические уравнения (DAE) — встречаются в моделях с жесткими ограничениями, например, механических системах.
4. Алгебраические уравнения (AE) — используются для описания статических процессов без зависимости от времени.

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

  • DASSL (Differential Algebraic System Solver). Используется для решения жёстких систем дифференциально-алгебраических уравнений. Подходит для моделирования механических и электрических систем. Стоит по умолчанию, подходит для большинства случаев.

  • Euler (метод Эйлера). Простой метод численного интегрирования, используемый для быстрого предварительного анализа. Подходит для простых моделей, но имеет низкую точность при больших шагах времени.

  • CVode (Sundials). Современный адаптивный метод, обеспечивающий высокую точность для жёстких и не жёстких систем. Автоматически подбирает шаг интегрирования, что делает его удобным для сложных моделей.

  • IDA (Implicit Differential Algebraic). Решает жесткие системы DAE с высокой точностью. Особенно полезен для моделирования систем управления и сложных механических конструкций.

При выборе численного метода важно учитывать:

  • Шаг интегрирования: Малый шаг увеличивает точность, но требует больше вычислительных ресурсов.

  • Жесткость системы: Жесткие системы требуют использования DASSL или CVode.

  • Сложность модели: Для простых систем может быть достаточно метода Эйлера.

Параметризация моделей в OpenModelica

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

Использование параметров в коде

Наиболее простой способ — объявление параметров непосредственно в модели:

model SpringMass
  parameter Real m = 5 "Масса";
  parameter Real k = 200 "Жесткость пружины";
  Real x(start=0);
  Real v(start=0);

equation
  m * der(v) = -k * x;
  der(x) = v;
end SpringMass;

Значения параметров можно изменять перед запуском симуляции.

Использование структур Records

Для удобного хранения параметров можно использовать Records — структуры данных, содержащие несколько параметров:

record SystemParams
  parameter Real mass;
  parameter Real stiffness;
end SystemParams;

model SpringMass
  parameter SystemParams params;
  Real x(start=0);
  Real v(start=0);

equation
  params.mass * der(v) = -params.stiffness * x;
  der(x) = v;
end SpringMass;
record Car
  String brand;
  Real maxSpeed;
  Integer year;
end Car;
Car myCar = Car("Tesla", 250.0, 2022);

Доступ к элементам:

String carBrand = myCar.brand;  // "Tesla"

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

Пример списка через рекурсивную структуру

record List
  Real value;
  List next;
end List;

Загрузка параметров из внешних файлов

Для передачи параметров из внешних источников OpenModelica поддерживает загрузку данных из .mat и .csv файлов:

model ExternalData
  parameter Real inputValue = Modelica.Utilities.Files.load("data.csv");
end ExternalData;

Этот подход удобен для обмена данными между различными программами и инструментами моделирования.

OMPython: Интерфейс OpenModelica для Python

OMPython — это свободный и кроссплатформенный API для работы с OpenModelica в среде Python. Он предоставляет инструменты для создания, компиляции и моделирования систем на основе стандарта библиотеки OpenModelica. OMPython объединяет стратегию решения уравнений и построение моделей, позволяя инженерам работать в единой среде, оптимизируя модели Modelica и разрабатывая новые алгоритмы. OMPython не является самостоятельным пакетом — он требует установленного пакета OpenModelica.

OMPython написан на Python и поддерживает две технологии взаимодействия с OpenModelica:

  • OmniORB и OmniORBpy — высокопроизводительные CORBA ORB для Python.

  • ZeroMQ — асинхронная библиотека обмена сообщениями.

Инструкции по установке доступны на GitHub.

Основные возможности OMPython

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

  • Интерфейс к актуальному API OpenModelica.

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

  • Удобные функции для работы с вложенными словарями.

  • Лёгкий доступ к библиотеке и тестированию команд OpenModelica.

Для взаимодействия с OpenModelica OMPython предоставляет два класса:

  • OMCSession (использует OmniORB)

  • OMCSessionZMQ (использует ZeroMQ)

Рекомендуется использовать OMCSessionZMQ.

from OMPython import OMCSessionZMQ
omc = OMCSessionZMQ()

Пример выполнения команд:

omc.sendExpression("getVersion()")
# Вывод: OMCompiler v1.25.0-dev.415+gaf5c3450b3

omc.sendExpression("loadModel(Modelica)")
# Вывод: True

omc.sendExpression("loadFile(getInstallationDirectoryPath() + "/share/doc/omc/testmodels/BouncingBall.mo")")
# Вывод: True

omc.sendExpression("instantiateModel(BouncingBall)")

После выполнения последней команды отобразится сгенерированная Modelica-модель "BouncingBall" с уравнениями движения.

Моделирование PMSM в OpenModelica

OpenModelica включает в себя стандартные библиотеки Modelica, которые содержат готовые компоненты для моделирования различных физических процессов. Эти библиотеки позволяют значительно ускорить разработку сложных систем без необходимости создания всех компонентов с нуля.
Modelica Standard Library — основная библиотека, включающая в себя модули для моделирования: электрических систем (Electrical), механических систем (Mechanics), тепловых процессов (Thermal), гидравлики (Fluid), блоков управления и логики (Blocks) и прочих систем.

Пример из библиотеки - SMPM_VoltageSource

В стандартной библиотеке представлен пакет Electrical.Machines. В нем находится пакет с примерами - Examples, в котором содержатся пакеты с примерами для асинхронных, синхронных машин, машин постоянного тока, трансформаторов.

Откроем пример SynchronousMachines SMPM_VoltageSource. Его модель выглядит так.

Рисунок - модель SMPM_VoltageSource
Рисунок - модель SMPM_VoltageSource

Здесь представлена модель управления PMSM двигателя (smpm) с помощью источника напряжения. В качестве источника напряжения выступает полифазный компонент SignalVoltage с количеством фаз m = 3. Для подключения источника необходимо установить компонент Ground и Star, тем самым указав, что используется многофазное питание. Управляется источник компонентом DQCurrentController. Контроллер представляет из себя два PI-регулятора с обратной связью по току, звеном сложения с напряжением развязки и блоками преобразования ToDQ, FromDQ. Опорными значения тока id, iq являются постоянные из массива параметров модели Idq {-53.5, 84.6}.

Рисунок - стандартная модель контроллера тока DQCurrentController
Рисунок - стандартная модель контроллера тока DQCurrentController
Рисунок - стандартная модель PMSM двигателя SM_PermanentMagnet
Рисунок - стандартная модель PMSM двигателя SM_PermanentMagnet

Данные двигателя представлены в структуре SM_PermanentMagnetData

Параметр

Обозначение

Значение

Единицы измерения

Примечание

Момент инерции ротора

Jr

0.29

кг·м²

Момент инерции статора

Js

0.29

кг·м²

Задано как Js=Jr

Число пар полюсов

p

2

Номинальная частота

fsNominal

50

Гц

Эффективное число витков статора

Neff

1

Сопротивление статора на фазу при TRef

Rs

0.03

Ом

Индуктивность нулевой последовательности статора

Lszero

0.000318

Гн

Разбросная индуктивность статора на фазу

Lssigma

0.000318

Гн

Индуктивность главного потока в оси d

Lmd

0.00095

Гн

Индуктивность главного потока в оси q

Lmq

0.00095

Гн

Индуктивность в оси d

Ld

0.00127

Гн

Вычисляемое поле: Ld=Lssigma+Lmd

Индуктивность в оси q

Lq

0.00127

Гн

Вычисляемое поле: Lq=Lssigma+Lmq

Сигналы угловой скорости и угла ротора считываются с помощью компонента SinCosResolver и преобразователя SinCosEvaluation и передаются в контроллер.
На валу двигателя подключена нагрузка в виде момента инерции Inertia J = 0.29 kg/m2 и компонента QuadraticSpeedDependentTorque TLoad = 181.4 Nm. Значение трехфазного тока передается в контроллер с помощью полифазного сенсора CurrentSensor. В качестве PMSM двигателя используется компонент SM_PermanentMagnet. Параметры двигателя заданы в структуре SM_PermanentMagnetData (smpmData). Для запуска симуляции открываем модель, и нажимает кнопку Simulate. Модель достаточно простая, симуляция выполняется быстро. Результаты можно посмотреть перетащив необходимые переменные на график.

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

Пример пользовательской модели управления PMSM

Блок SVPWM был сделан на основе алгоритма нового SVPWM, который использовался в предыдущей статье. Расчет Ta, Tb, Tc пробовал использовать в секции equation и в секции algorithm, в данном случае разницы не наблюдалось. Но оставил в algorithm, чтобы теоретически соблюдался порядок следования. Выходными сигналами являются интерфейсы: fire_p - для верхних ключей инвертора, fire_n - для нижних ключей инвертора. В секции equation вычисляется время для одного периода переключения t_norm = (time - T0)*f, где f = 2000 - частота PWM, T0 = time - начальное время поле запуска инвертора. Сигналы fire_p[1], fire_p[2], fire_p[3] - дискретные, длительной нахождения их в состоянии логической единицы определяется условием fire_p[1] = t_norm &lt; Ta; то есть время периода меньше чем период соответствующей фазы.

block SVPWMcustom
  parameter Modelica.Units.SI.Frequency f = 2000 "Switching frequency";
  extends Modelica.Blocks.Interfaces.DiscreteBlock(final samplePeriod = 1/f);
  parameter Real startTime = 0 "Start time";
  parameter Real Udc = 400 "DC bus voltage (Must match inverter DC bus)";
  parameter Real deadTime = 5e-6 "Dead time to avoid overlap";
  Modelica.Blocks.Interfaces.RealInput u[3] "Three-phase reference voltages (ABC frame)" annotation(
    Placement(transformation(extent = {{-140, -20}, {-100, 20}})));
  Modelica.Blocks.Interfaces.BooleanOutput fire_p[3] "Positive fire signal" annotation(
    Placement(transformation(extent = {{100, 50}, {120, 70}})));
  Modelica.Blocks.Interfaces.BooleanOutput fire_n[3] "Negative fire signal" annotation(
    Placement(transformation(extent = {{100, -70}, {120, -50}})));
protected
  Real t_norm;
  Integer sector;
  Real Ta, Tb, Tc;
  discrete Modelica.Units.SI.Time T0(start = startTime, fixed = true) "Start time of switching interval";
algorithm
  when sampleTrigger then
    T0 := time;
  end when;
  
  // Compute duty cycles (handling invalid values)
  if sector == 1 or sector == 4 then
    Ta := (1/(2*Udc))*(Udc + (u[1] - u[3]));
    Tb := (1/(2*Udc))*(Udc + (2*u[2] - u[1] - u[3]));
    Tc := (1/(2*Udc))*(Udc + (u[3] - u[1]));
  elseif sector == 2 or sector == 5 then
    Ta := (1/(2*Udc))*(Udc + (2*u[1] - u[2] - u[3]));
    Tb := (1/(2*Udc))*(Udc + (u[2] - u[3]));
    Tc := (1/(2*Udc))*(Udc + (u[3] - u[2]));
  else
// sector == 3 or sector == 6
    Ta := (1/(2*Udc))*(Udc + (u[1] - u[2]));
    Tb := (1/(2*Udc))*(Udc + (u[2] - u[1]));
    Tc := (1/(2*Udc))*(Udc + (2*u[3] - u[1] - u[2]));
  end if;
equation
// Normalize time within one switching period
  t_norm = (time - T0)*f;
// Determine sector using phase voltage comparisons
  sector = if u[1] &gt; u[2] and u[2] &gt; u[3] then 1 else if u[2] &gt; u[1] and u[1] &gt; u[3] then 2 else if u[2] &gt; u[3] and u[3] &gt; u[1] then 3 else if u[3] &gt; u[2] and u[2] &gt; u[1] then 4 else if u[3] &gt; u[1] and u[1] &gt; u[2] then 5 else 6;

// Generate PWM signals
  fire_p[1] = noEvent(t_norm &lt; Ta);
  fire_p[2] = noEvent(t_norm &lt; Tb);
  fire_p[3] = noEvent(t_norm &lt; Tc);
// Ensure complementary switching
  fire_n[1] = not fire_p[1];
  fire_n[2] = not fire_p[2];
  fire_n[3] = not fire_p[3];
end SVPWMcustom;
  • В качестве прототипа была выбрана модель SMPM_VoltageSource.

  • Источник питания изменен на ConstantVoltage со значением напряжения 150 V. Добавлен инвертор Polyphase2Level и ШИМ - SVPWM.

  • Сенсоры и сигналы оставил те же.

  • Убрал компонент квадратичной нагрузки QuadraticSpeedDependentTorque.

  • Добавлен контур задания скорости, в качестве PI-регулятора выбран LimitedPI: k = 1, ki = Ld/Rs (Lq/Rs)

  • В контроллере тока PI-регуляторы изменил на LimitedPI: k=1, ki = 0.042

  • curr_ref = 3/2pPsi

Рисунок - модель SMPM_VoltageSource с инвертором и SVPWM
Рисунок - модель SMPM_VoltageSource с инвертором и SVPWM

Стандартная модель инвертора представляет собой компонент состоящий из идеальных трехфазных стоек GTO-тиристоров.

Рисунок - стандартная модель инвертора в OpenModeica
Рисунок - стандартная модель инвертора в OpenModeica
Рисунок - стандартная модель LimitedPI
Рисунок - стандартная модель LimitedPI

Симуляция с заданной скоростью 90 rad/s

Рисунок - графики тока, момента и угловой скорости модели модели SMPM_VoltageSource с инвертором и SVPWM - опыт 1
Рисунок - графики тока, момента и угловой скорости модели модели SMPM_VoltageSource с инвертором и SVPWM - опыт 1

Симуляция с заданной скоростью 110 rad/s, ослабление поля id = -50A

Рисунок - графики тока, момента и угловой скорости модели модели SMPM_VoltageSource с инвертором и SVPWM - опыт 2
Рисунок - графики тока, момента и угловой скорости модели модели SMPM_VoltageSource с инвертором и SVPWM - опыт 2

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

Заключение

В статье рассмотрены конструктивные особенности PMSM и их влияние на работу двигателя, а также современные методы управления, направленные на повышение эффективности системы. Различные техники регулирования, включая ослабление поля и снижение пульсаций момента, позволяют оптимизировать работу двигателя в разных режимах.
Моделирование в OpenModelica показало, что объектно-ориентированный и компонентный подходы позволяют гибко анализировать систему, тестировать алгоритмы управления и исследовать влияние различных параметров. Однако необходимо учитывать ограничение стандартных моделей, таких как PMSM, инвертора, pwm. В ряде случаев целесообразно разработать модели с требуемыми качествами под собственные нужды.
В дальнейшем планирую исследовать реализацию алгоритма оптимизации коэффициентов регуляторов. Возможное направление - интеграция модели с OMPython, и использование пакета генетического алгоритма.

Используемые источники

Теги:
Хабы:
+6
Комментарии4

Публикации

Истории

Работа

Ближайшие события

25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань
20 – 22 июня
Летняя айти-тусовка Summer Merge
Ульяновская область