| 1 | within ;
|
|---|
| 2 | model IMC_YD "Induction machine with squirrel cage starting Y-D"
|
|---|
| 3 | import Modelica.Constants.pi;
|
|---|
| 4 | extends Modelica.Icons.Example;
|
|---|
| 5 | constant Integer m=3 "Number of phases";
|
|---|
| 6 | parameter Modelica.SIunits.Voltage VNominal=100
|
|---|
| 7 | "Nominal RMS voltage per phase";
|
|---|
| 8 | parameter Modelica.SIunits.Frequency fNominal=50 "Nominal frequency";
|
|---|
| 9 | parameter Modelica.SIunits.Time tStart1=0.1 "Start time";
|
|---|
| 10 | parameter Modelica.SIunits.Time tStart2=2.0 "Start time from Y to D";
|
|---|
| 11 | parameter Modelica.SIunits.Torque TLoad=161.4 "Nominal load torque";
|
|---|
| 12 | parameter Modelica.SIunits.AngularVelocity wLoad(displayUnit="rev/min")=
|
|---|
| 13 | 1440.45*2*Modelica.Constants.pi/60 "Nominal load speed";
|
|---|
| 14 | parameter Modelica.SIunits.Inertia JLoad=0.29
|
|---|
| 15 | "Load's moment of inertia";
|
|---|
| 16 | Modelica.Magnetic.QuasiStatic.FundamentalWave.BasicMachines.InductionMachines.IM_SquirrelCage imcQS(
|
|---|
| 17 | p=imcData.p,
|
|---|
| 18 | fsNominal=imcData.fsNominal,
|
|---|
| 19 | TsRef=imcData.TsRef,
|
|---|
| 20 | alpha20s(displayUnit="1/K") = imcData.alpha20s,
|
|---|
| 21 | Jr=imcData.Jr,
|
|---|
| 22 | Js=imcData.Js,
|
|---|
| 23 | frictionParameters=imcData.frictionParameters,
|
|---|
| 24 | wMechanical(fixed=true,displayUnit="rpm"),
|
|---|
| 25 | gammar(fixed=true, start=pi/2),
|
|---|
| 26 | gamma(fixed=true, start=-pi/2),
|
|---|
| 27 | statorCoreParameters=imcData.statorCoreParameters,
|
|---|
| 28 | strayLoadParameters=imcData.strayLoadParameters,
|
|---|
| 29 | Lrsigma=imcData.Lrsigma,
|
|---|
| 30 | TrRef=imcData.TrRef,
|
|---|
| 31 | Rs=imcData.Rs*m/3,
|
|---|
| 32 | Lssigma=imcData.Lssigma*m/3,
|
|---|
| 33 | Lm=imcData.Lm*m/3,
|
|---|
| 34 | Rr=imcData.Rr*m/3,
|
|---|
| 35 | m=m,
|
|---|
| 36 | TsOperational=293.15,
|
|---|
| 37 | alpha20r=imcData.alpha20r,
|
|---|
| 38 | TrOperational=293.15) annotation (Placement(transformation(extent={{20,10},{40,30}})));
|
|---|
| 39 | Modelica.Electrical.QuasiStationary.MultiPhase.Sensors.CurrentQuasiRMSSensor currentQuasiRMSSensorQS(m=m) annotation (Placement(transformation(
|
|---|
| 40 | extent={{-10,10},{10,-10}},
|
|---|
| 41 | rotation=270,
|
|---|
| 42 | origin={30,70})));
|
|---|
| 43 | Modelica.Electrical.QuasiStationary.MultiPhase.Sources.VoltageSource sineVoltageQS(
|
|---|
| 44 | final m=m,
|
|---|
| 45 | f=fNominal,
|
|---|
| 46 | V=fill(VNominal/sqrt(3), m)) annotation (Placement(transformation(
|
|---|
| 47 | origin={-30,90},
|
|---|
| 48 | extent={{10,10},{-10,-10}},
|
|---|
| 49 | rotation=0)));
|
|---|
| 50 | Modelica.Electrical.QuasiStationary.MultiPhase.Basic.Star starQS(final m=m) annotation (Placement(transformation(extent={{-50,80},{-70,100}})));
|
|---|
| 51 | Modelica.Electrical.QuasiStationary.SinglePhase.Basic.Ground groundQS annotation (Placement(transformation(
|
|---|
| 52 | origin={-90,90},
|
|---|
| 53 | extent={{-10,-10},{10,10}},
|
|---|
| 54 | rotation=270)));
|
|---|
| 55 | Modelica.Blocks.Sources.BooleanStep booleanStepQS[m](each startTime=tStart1) annotation (Placement(transformation(extent={{-80,50},{-60,70}})));
|
|---|
| 56 | Modelica.Electrical.QuasiStationary.MultiPhase.Ideal.IdealClosingSwitch idealCloserQS(
|
|---|
| 57 | final m=m,
|
|---|
| 58 | Ron=fill(1e-5, m),
|
|---|
| 59 | Goff=fill(1e-5, m)) annotation (Placement(transformation(
|
|---|
| 60 | origin={0,90},
|
|---|
| 61 | extent={{-10,10},{10,-10}},
|
|---|
| 62 | rotation=0)));
|
|---|
| 63 | Modelica.Magnetic.QuasiStatic.FundamentalWave.Utilities.SwitchYD switchYDQS(final m=m) annotation (Placement(transformation(extent={{20,30},{40,50}})));
|
|---|
| 64 | Modelica.Blocks.Sources.BooleanStep booleanStepYDQS[m](each startTime=tStart2) annotation (Placement(transformation(extent={{-40,30},{-20,50}})));
|
|---|
| 65 | Modelica.Mechanics.Rotational.Components.Inertia loadInertiaQS(J=JLoad) annotation (Placement(transformation(extent={{50,10},{70,30}})));
|
|---|
| 66 | Modelica.Mechanics.Rotational.Sources.QuadraticSpeedDependentTorque quadraticLoadTorqueQS(
|
|---|
| 67 | w_nominal=wLoad,
|
|---|
| 68 | TorqueDirection=false,
|
|---|
| 69 | tau_nominal=-TLoad,
|
|---|
| 70 | useSupport=false) annotation (Placement(transformation(extent={{100,10},{80,30}})));
|
|---|
| 71 | parameter Modelica.Electrical.Machines.Utilities.ParameterRecords.AIM_SquirrelCageData imcData annotation (Placement(transformation(extent={{70,70},{90,90}})));
|
|---|
| 72 |
|
|---|
| 73 | Modelica.Magnetic.FundamentalWave.BasicMachines.AsynchronousInductionMachines.AIM_SquirrelCage imc(
|
|---|
| 74 | p=imcData.p,
|
|---|
| 75 | fsNominal=imcData.fsNominal,
|
|---|
| 76 | TsRef=imcData.TsRef,
|
|---|
| 77 | alpha20s(displayUnit="1/K") = imcData.alpha20s,
|
|---|
| 78 | Jr=imcData.Jr,
|
|---|
| 79 | Js=imcData.Js,
|
|---|
| 80 | frictionParameters=imcData.frictionParameters,
|
|---|
| 81 | phiMechanical(fixed=true),
|
|---|
| 82 | wMechanical(fixed=true,displayUnit="rpm"),
|
|---|
| 83 | statorCoreParameters=imcData.statorCoreParameters,
|
|---|
| 84 | strayLoadParameters=imcData.strayLoadParameters,
|
|---|
| 85 | TrRef=imcData.TrRef,
|
|---|
| 86 | Rs=imcData.Rs*m/3,
|
|---|
| 87 | Lssigma=imcData.Lssigma*m/3,
|
|---|
| 88 | Lszero=imcData.Lszero*m/3,
|
|---|
| 89 | Lm=imcData.Lm*m/3,
|
|---|
| 90 | Lrsigma=imcData.Lrsigma*m/3,
|
|---|
| 91 | Rr=imcData.Rr*m/3,
|
|---|
| 92 | TsOperational=293.15,
|
|---|
| 93 | alpha20r=imcData.alpha20r,
|
|---|
| 94 | TrOperational=293.15) annotation (Placement(transformation(extent={{20,-90},{40,-70}})));
|
|---|
| 95 | Modelica.Electrical.Machines.Sensors.CurrentQuasiRMSSensor
|
|---|
| 96 | currentQuasiRMSSensor annotation (Placement(transformation(extent={{-10,10},{10,-10}}, rotation=270,
|
|---|
| 97 | origin={30,-30})));
|
|---|
| 98 | Modelica.Electrical.MultiPhase.Sources.SineVoltage sineVoltage(
|
|---|
| 99 | final m=m,
|
|---|
| 100 | freqHz=fill(fNominal, m),
|
|---|
| 101 | V=fill(sqrt(2/3)*VNominal, m)) annotation (Placement(transformation(
|
|---|
| 102 | origin={-30,-10},
|
|---|
| 103 | extent={{10,10},{-10,-10}},
|
|---|
| 104 | rotation=0)));
|
|---|
| 105 | Modelica.Electrical.MultiPhase.Basic.Star star(final m=m) annotation (
|
|---|
| 106 | Placement(transformation(extent={{-50,-20},{-70,0}})));
|
|---|
| 107 | Modelica.Electrical.Analog.Basic.Ground ground annotation (Placement(
|
|---|
| 108 | transformation(
|
|---|
| 109 | origin={-90,-10},
|
|---|
| 110 | extent={{-10,-10},{10,10}},
|
|---|
| 111 | rotation=270)));
|
|---|
| 112 | Modelica.Blocks.Sources.BooleanStep booleanStep[m](each startTime=
|
|---|
| 113 | tStart1) annotation (Placement(transformation(extent={{-80,-50},{-60,-30}})));
|
|---|
| 114 | Modelica.Electrical.MultiPhase.Ideal.IdealClosingSwitch idealCloser(
|
|---|
| 115 | final m=m,
|
|---|
| 116 | Ron=fill(1e-5, m),
|
|---|
| 117 | Goff=fill(1e-5, m)) annotation (Placement(transformation(
|
|---|
| 118 | origin={0,-10},
|
|---|
| 119 | extent={{-10,10},{10,-10}},
|
|---|
| 120 | rotation=0)));
|
|---|
| 121 | Modelica.Electrical.Machines.Utilities.SwitchYD
|
|---|
| 122 | switchYD(m=m) annotation (Placement(transformation(extent={{20,-70},{40,-50}})));
|
|---|
| 123 | Modelica.Blocks.Sources.BooleanStep booleanStepYD[m](each startTime=
|
|---|
| 124 | tStart2) annotation (Placement(transformation(extent={{-40,-70},{-20,-50}})));
|
|---|
| 125 | Modelica.Mechanics.Rotational.Components.Inertia loadInertia(J=JLoad)
|
|---|
| 126 | annotation (Placement(transformation(extent={{50,-90},{70,-70}})));
|
|---|
| 127 | Modelica.Mechanics.Rotational.Sources.QuadraticSpeedDependentTorque
|
|---|
| 128 | quadraticLoadTorque(
|
|---|
| 129 | w_nominal=wLoad,
|
|---|
| 130 | TorqueDirection=false,
|
|---|
| 131 | tau_nominal=-TLoad,
|
|---|
| 132 | useSupport=false) annotation (Placement(transformation(extent={{100,-90},{80,-70}})));
|
|---|
| 133 | initial equation
|
|---|
| 134 | sum(imc.is) = 0;
|
|---|
| 135 | imc.is[1:2] = zeros(2);
|
|---|
| 136 | imc.rotorCage.electroMagneticConverter.V_m = Complex(0, 0);
|
|---|
| 137 | equation
|
|---|
| 138 | connect(starQS.pin_n, groundQS.pin) annotation (Line(points={{-70,90},{-80,90}}, color={85,170,255}));
|
|---|
| 139 | connect(sineVoltageQS.plug_n, starQS.plug_p) annotation (Line(points={{-40,90},{-50,90}}, color={85,170,255}));
|
|---|
| 140 | connect(sineVoltageQS.plug_p, idealCloserQS.plug_p) annotation (Line(points={{-20,90},{-10,90}}, color={85,170,255}));
|
|---|
| 141 | connect(loadInertiaQS.flange_b, quadraticLoadTorqueQS.flange) annotation (Line(points={{70,20},{80,20}}));
|
|---|
| 142 | connect(booleanStepQS.y, idealCloserQS.control) annotation (Line(points={{-59,60},{0,60},{0,78}}, color={255,0,255}));
|
|---|
| 143 | connect(booleanStepYDQS.y, switchYDQS.control) annotation (Line(points={{-19,40},{18,40}}, color={255,0,255}));
|
|---|
| 144 | connect(idealCloserQS.plug_n, currentQuasiRMSSensorQS.plug_p) annotation (Line(points={{10,90},{10,90},{28,90},{28,90},{30,90},{30,80},{30,80}}, color={85,170,255}));
|
|---|
| 145 | connect(switchYDQS.plug_sn, imcQS.plug_sn) annotation (Line(points={{24,30},{24,30}}, color={85,170,255}));
|
|---|
| 146 | connect(switchYDQS.plug_sp, imcQS.plug_sp) annotation (Line(points={{36,30},{36,30}}, color={85,170,255}));
|
|---|
| 147 | connect(switchYDQS.plugSupply, currentQuasiRMSSensorQS.plug_n) annotation (Line(points={{30,50},{30,60}}, color={85,170,255}));
|
|---|
| 148 | connect(imcQS.flange, loadInertiaQS.flange_a) annotation (Line(points={{40,20},{50,20}}));
|
|---|
| 149 | connect(star.pin_n,ground. p)
|
|---|
| 150 | annotation (Line(points={{-70,-10},{-80,-10}},
|
|---|
| 151 | color={0,0,255}));
|
|---|
| 152 | connect(sineVoltage.plug_n,star. plug_p)
|
|---|
| 153 | annotation (Line(points={{-40,-10},{-50,-10}}, color={0,0,255}));
|
|---|
| 154 | connect(sineVoltage.plug_p,idealCloser. plug_p) annotation (Line(points={{-20,-10},{-10,-10}},
|
|---|
| 155 | color={0,0,255}));
|
|---|
| 156 | connect(loadInertia.flange_b,quadraticLoadTorque. flange)
|
|---|
| 157 | annotation (Line(points={{70,-80},{80,-80}}));
|
|---|
| 158 | connect(booleanStep.y,idealCloser. control) annotation (Line(points={{-59,-40},{0,-40},{0,-22}},
|
|---|
| 159 | color={255,0,255}));
|
|---|
| 160 | connect(booleanStepYD.y,switchYD. control)
|
|---|
| 161 | annotation (Line(points={{-19,-60},{18,-60}}, color={255,0,255}));
|
|---|
| 162 | connect(idealCloser.plug_n,currentQuasiRMSSensor. plug_p)
|
|---|
| 163 | annotation (Line(points={{10,-10},{30,-10},{30,-20}},
|
|---|
| 164 | color={0,0,255}));
|
|---|
| 165 | connect(switchYD.plug_sn, imc.plug_sn) annotation (Line(points={{24,-70},{24,-70}}, color={0,0,255}));
|
|---|
| 166 | connect(switchYD.plug_sp, imc.plug_sp) annotation (Line(points={{36,-70},{36,-70}}, color={0,0,255}));
|
|---|
| 167 | connect(switchYD.plugSupply,currentQuasiRMSSensor. plug_n) annotation (
|
|---|
| 168 | Line(
|
|---|
| 169 | points={{30,-50},{30,-40}}, color={0,0,255}));
|
|---|
| 170 | connect(imc.flange, loadInertia.flange_a) annotation (Line(points={{40,-80},{50,-80}}));
|
|---|
| 171 | annotation (experiment(StopTime=2.5,Interval=0.001,Tolerance=1e-06),
|
|---|
| 172 | __OpenModelica_simulationFlags(jacobian = "", nls = "newton", s = "dassl", lv = "LOG_STATS"),
|
|---|
| 173 | Documentation(
|
|---|
| 174 | info="<html>
|
|---|
| 175 | <p>
|
|---|
| 176 | At start time tStart three phase voltage is supplied to the asynchronous induction machine with squirrel cage, first star-connected, then delta-connected; the machine starts from standstill, accelerating inertias against load torque quadratic dependent on speed, finally reaching nominal speed.</p>
|
|---|
| 177 |
|
|---|
| 178 | <p>Simulate for 2.5 seconds and plot (versus time):</p>
|
|---|
| 179 |
|
|---|
| 180 | <ul>
|
|---|
| 181 | <li>currentQuasiRMSSensor.I: stator current RMS</li>
|
|---|
| 182 | <li>aimc.wMechanical: motor's speed</li>
|
|---|
| 183 | <li>aimc.tauElectrical: motor's torque</li>
|
|---|
| 184 | </ul>
|
|---|
| 185 | <p>
|
|---|
| 186 | Default machine parameters are used.</p>
|
|---|
| 187 | </html>"),
|
|---|
| 188 | Diagram(graphics={
|
|---|
| 189 | Text(
|
|---|
| 190 | extent={{-60,20},{20,12}},
|
|---|
| 191 | textStyle={TextStyle.Bold},
|
|---|
| 192 | textString="%m phase quasi static",
|
|---|
| 193 | lineColor={0,0,0}), Text(
|
|---|
| 194 | extent={{-60,-80},{20,-88}},
|
|---|
| 195 | lineColor={0,0,0},
|
|---|
| 196 | fillColor={255,255,170},
|
|---|
| 197 | fillPattern=FillPattern.Solid,
|
|---|
| 198 | textStyle={TextStyle.Bold},
|
|---|
| 199 | textString="%m phase transient")}),
|
|---|
| 200 | uses(Modelica(version="3.x.x"), Complex(version="3.2.2")));
|
|---|
| 201 | end IMC_YD;
|
|---|