首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Modelica中将逆变器与smpm连接时的错误仿真结果

在Modelica中将逆变器与smpm连接时的错误仿真结果
EN

Stack Overflow用户
提问于 2019-09-09 13:46:08
回答 1查看 71关注 0票数 1

我使用来自Wolfram的SystemModeler来研究连接到永磁同步电机上的逆变器的系统行为。不幸的是,即使我只使用来自Modelica标准库的组件,我也得到了错误的仿真结果。

到目前为止,我用下面的模型尝试了几种设置。

代码语言:javascript
复制
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 电机有speed=0,当我应用转矩步进时,电机会减少并得到t=2s的负值。

有人可以告诉我,我的模型做错了什么,为什么模拟结果是错误的?

我也尝试了一些图书馆的例子,但他们从来不使用逆变器与电机。但我想研究PWM,不想工作在理想的正弦电压和电流,如在例子中.

谢谢你的帮助!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-09 15:17:22

在你的模型中,你要做的是,让同步电机从静止状态直接在标称频率上运行。这将使机器“步履蹒跚”,这就是机器不像你所期望的那样运转的原因,而只是以一种看似随机的方式振荡。

试着把sine[*].freqHz降低到fill(0.01*f1, m),你会看到它--经过一些振荡--开始以其标称频率的百分之一的速度工作。只是机器无法克服向标称频率跳跃的振荡。

解决这一问题有多种可能性:

  1. 正确地初始化机器:这可以通过至少将smpm.wMechancial.startsmpm.phiMechancial.start设置为正确的值来完成。另外,正确地初始化相位电流也是很好的。这样做可能会很乏味。但它的优点是你不必加快速度。
  2. 复制示例Modelica.Electrical.Machines.Examples.SynchronousInductionMachines.SMPM_Inverter的部分可能更容易,其中使用电压频率控制器启动机器。
  3. 许多同步电机实际上是被控制的(例如通过磁场定向或直接转矩控制).为此,可以从Modelica.Electrical.Machines.Examples.SynchronousInductionMachines.SMPM_CurrentSourceModelica.Electrical.Machines.Examples.SynchronousInductionMachines.SMPM_VoltageSource获得一些线索。

此外,我建议首先尝试让您的例子运行一个连续逆变器,如在Modelica.Electrical.Machines.Examples.SynchronousInductionMachines.SMPM_Inverter。如果这是预期的效果,那就转到切换的那个。

有些事情在我看来很可疑:

  • 对于我来说,smpm.Rs看起来很大,有4.7欧姆,特别是考虑到惰性smpm.Jr (有0.29 kg.m2)和inertia1.J (有0.29 kg.m2)。
  • 测试时,尽量将开关频率提高到1 1kHz以上。对于50赫兹的基波频率来说,这是有点低的(虽然它应该工作)。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57855336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档