Неправильные результаты моделирования при подключении инвертора к smpm в Modelica

Я использую SystemModeler от Wolfram для исследования системного поведения инвертора, подключенного к синхронной машине с постоянными магнитами. К сожалению, я получаю неверные результаты моделирования, хотя я использовал только компоненты из стандартной библиотеки Modelica.

Я попробовал несколько настроек для своей модели, представленной ниже.

model InverterSMPM
  import Modelica.Constants.pi;
  parameter Integer m = 3 "Number of phases";
  parameter Modelica.SIunits.Frequency f = 1000 "Switching frequency";
  parameter Modelica.SIunits.Frequency f1 = 50 "Fundamental wave AC frequency";
  parameter Modelica.SIunits.Torque TLoad = 181.4 "Nominal load torque";
  parameter Modelica.SIunits.Inertia JLoad = 0.29 "Load's moment of inertia";
  Modelica.Electrical.Analog.Sources.ConstantVoltage constantVoltage_n(V = 50) annotation(Placement(transformation(extent = {{-10, -10}, {10, 10}}, rotation = 270, origin = {-105, 4}), visible = true));
  Modelica.Electrical.PowerConverters.DCAC.MultiPhase2Level inverter(useHeatPort = false, m = m) annotation(Placement(transformation(extent = {{-50, 20}, {-30, 40}}, origin = {-35, -6}, rotation = 0), visible = true));
  Modelica.Electrical.Analog.Basic.Ground ground annotation(Placement(transformation(extent = {{-10, -10}, {10, 10}}, rotation = 180, origin = {-125, 34}), visible = true));
  Modelica.Electrical.PowerConverters.DCDC.Control.SignalPWM signalPWM[m](each useConstantDutyCycle = false, each f = f) annotation(Placement(transformation(extent = {{-10, -10}, {10, 10}}, origin = {-75, -26}, rotation = 0), visible = true));
  Modelica.Electrical.Analog.Sources.ConstantVoltage constantVoltage_p(V = 50) annotation(Placement(transformation(extent = {{-10, -10}, {10, 10}}, rotation = 270, origin = {-105, 44}), visible = true));
  Modelica.Blocks.Sources.Sine sine[m](phase = -Modelica.Electrical.MultiPhase.Functions.symmetricOrientation(m), startTime = zeros(m), amplitude = fill(0.5, m), offset = fill(0.5, m), freqHz = fill(f1, m)) annotation(Placement(transformation(extent = {{-30, -64}, {-50, -44}}, origin = {-35, -6}, rotation = 0), visible = true));
  Modelica.Electrical.Machines.BasicMachines.SynchronousInductionMachines.SM_PermanentMagnet smpm(Jr = 0.29, p = 8, fsNominal = f1, VsOpenCircuit = 100, TsOperational = 293.15, TrOperational = 293.15, Rs = 4.7, TsRef = 293.15, alpha20s = Modelica.Electrical.Machines.Thermal.Constants.alpha20Aluminium, Lssigma = 0.001, Lmd = 0.0133, Lmq = 0.0133, useDamperCage = false) annotation(Placement(visible = true, transformation(origin = {5, -15}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
  Modelica.Electrical.Machines.Utilities.TerminalBox terminalBox1(terminalConnection = "Y") annotation(Placement(visible = true, transformation(origin = {5, 2.209}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
  Modelica.Mechanics.Rotational.Components.Inertia inertia1(J = JLoad) annotation(Placement(visible = true, transformation(origin = {35, -15}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
  Modelica.Mechanics.Rotational.Sources.TorqueStep torqueStep1(stepTorque = -TLoad, offsetTorque = 0, startTime = 2, useSupport = false) annotation(Placement(visible = true, transformation(origin = {76.657, -15}, extent = {{10, -10}, {-10, 10}}, rotation = 0)));
  Modelica.Mechanics.Rotational.Sensors.SpeedSensor speedSensor1 annotation(Placement(visible = true, transformation(origin = {35, 20}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
equation
  connect(constantVoltage_p.n, constantVoltage_n.p) annotation(Line(points = {{-70, 40}, {-70, 20}}, color = {10, 90, 224}, visible = true, origin = {-35, -6}));
  connect(constantVoltage_p.p, inverter.dc_p) annotation(Line(points = {{-70, 60}, {-50, 60}, {-50, 40}}, color = {10, 90, 224}, visible = true, origin = {-35, -6}));
  connect(constantVoltage_n.n, inverter.dc_n) annotation(Line(points = {{-70, -0}, {-50, 0}, {-50, 20}}, color = {10, 90, 224}, visible = true, origin = {-35, -6}));
  connect(ground.p, constantVoltage_p.n) annotation(Line(points = {{-90, 30}, {-70, 30}, {-70, 40}}, color = {10, 90, 224}, visible = true, origin = {-35, -6}));
  connect(sine.y, signalPWM.dutyCycle) annotation(Line(points = {{-51, -54}, {-60, -54}, {-60, -20}, {-52, -20}}, color = {1, 37, 163}, visible = true, origin = {-35, -6}));
  connect(signalPWM.fire, inverter.fire_p) annotation(Line(points = {{-46, -9}, {-46, 18}}, color = {190, 52, 178}, visible = true, origin = {-35, -6}));
  connect(signalPWM.notFire, inverter.fire_n) annotation(Line(points = {{-34, -9}, {-34, 18}}, color = {190, 52, 178}, visible = true, origin = {-35, -6}));
  connect(terminalBox1.plug_sn, smpm.plug_sn) annotation(Line(visible = true, origin = {-1, -4.396}, points = {{0, 0.604}, {0, -0.604}}, color = {10, 90, 224}));
  connect(terminalBox1.plug_sp, smpm.plug_sp) annotation(Line(visible = true, origin = {11, -4.396}, points = {{0, 0.604}, {0, -0.604}}, color = {10, 90, 224}));
  connect(smpm.flange, inertia1.flange_a) annotation(Line(visible = true, origin = {20, -15}, points = {{-5, 0}, {5, 0}}, color = {64, 64, 64}));
  connect(inertia1.flange_b, torqueStep1.flange) annotation(Line(visible = true, origin = {55.828, -15}, points = {{-10.828, 0}, {10.828, 0}}, color = {64, 64, 64}));
  connect(speedSensor1.flange, smpm.flange) annotation(Line(visible = true, origin = {20, 2.5}, points = {{5, 17.5}, {0, 17.5}, {0, -17.5}, {-5, -17.5}}, color = {64, 64, 64}));
  connect(inverter.ac, terminalBox1.plugSupply) annotation(Line(visible = true, origin = {-18.333, 15.403}, points = {{-46.667, 8.597}, {23.333, 8.597}, {23.333, -17.194}}, color = {10, 90, 224}));
  annotation(experiment(StartTime = 0.00, StopTime = 5, NumberOfIntervals = 5000, __Wolfram_Algorithm = "dassl", Tolerance = 1e-6, __Wolfram_SynchronizeWithRealTime = false), Diagram(coordinateSystem(extent = {{-150, -90}, {150, 90}}, preserveAspectRatio = true, initialScale = 0.1, grid = {5, 5})));
end InverterSMPM;
  • Одна настройка: JLoad = 0 и TLoad = 0.

    Я ожидал, что мотор будет работать свободно и на холостом ходу. Вместо этого датчик скорости показывает синусоидальную волну с амплитудами [-0,46; 0,46].

  • Другой параметр: JLoad = 0,29 и TLoad = -180.

    Двигатель имеет скорость = 0 и уменьшается и принимает отрицательные значения от t = 2 с, когда я применяю шаг крутящего момента.

Может ли кто-нибудь сказать мне, что я делаю не так с моей моделью и почему результаты моделирования неверны?

Я также пробовал несколько примеров из библиотеки, но они никогда не используют инвертор вместе с двигателем. Но я хочу исследовать ШИМ и не хочу работать с идеальными синусоидальными напряжениями и токами, как в примерах ...

Спасибо за любую помощь!!


person Moebo    schedule 09.09.2019    source источник


Ответы (1)


В своей модели вы пытаетесь позволить синхронной машине работать на номинальной электрической частоте непосредственно из состояния покоя. Это заставит машину «выпадать из шага», что является причиной того, что машина не будет работать так, как вы ожидаете, а просто будет колебаться, казалось бы, случайным образом.

Попробуйте уменьшить sine[*].freqHz до fill(0.01*f1, m), и вы увидите, что там он - после некоторых колебаний - начнет работать с одним процентом своей номинальной частоты. Просто машина не может преодолеть колебания для скачка на номинальную частоту.

Есть несколько возможностей обойти эту проблему:

  1. Инициализируйте машину должным образом: это можно сделать, установив как минимум smpm.wMechancial.start и smpm.phiMechancial.start на правильные значения. Кроме того, было бы хорошо также правильно инициализировать фазные токи. Это может быть довольно утомительно. Но дает то преимущество, что вам не нужно увеличивать скорость.
  2. Вероятно, проще скопировать части примера Modelica.Electrical.Machines.Examples.SynchronousInductionMachines.SMPM_Inverter, где для запуска машины используется регулятор напряжения-частоты.
  3. Многие синхронные машины фактически управляются (например, с помощью ориентации поля или управления прямым крутящим моментом). Для этого некоторые подсказки можно взять из Modelica.Electrical.Machines.Examples.SynchronousInductionMachines.SMPM_CurrentSource и Modelica.Electrical.Machines.Examples.SynchronousInductionMachines.SMPM_VoltageSource.

Кроме того, я бы посоветовал сначала попробовать запустить ваш пример с непрерывным инвертором, как в Modelica.Electrical.Machines.Examples.SynchronousInductionMachines.SMPM_Inverter. Если это работает как ожидалось, переходите к переключенному.

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

  • smpm.Rs кажется мне довольно большим с 4,7 Ом, особенно с учетом инерции smpm.Jr (0,29 кг.м2) и inertia1.J (0,29 кг.м2).
  • Для тестирования попробуйте увеличить частоту переключения выше 1 кГц. Это немного мало для основной частоты волны 50 Гц (хотя должно работать).
person Markus A.    schedule 09.09.2019