forked from modelica/ModelicaStandardLibrary
-
Notifications
You must be signed in to change notification settings - Fork 0
/
SM_PermanentMagnet.mo
313 lines (311 loc) · 11 KB
/
SM_PermanentMagnet.mo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
within Modelica.Electrical.Machines.BasicMachines.SynchronousMachines;
model SM_PermanentMagnet "Permanent magnet synchronous machine"
extends Machines.Interfaces.PartialBasicInductionMachine(
Lssigma(start=0.1*unitR/(2*pi*fsNominal)),
final idq_ss=airGap.i_ss,
final idq_sr=airGap.i_sr,
final idq_rs=airGap.i_rs,
final idq_rr=airGap.i_rr,
redeclare final Machines.Thermal.SynchronousMachines.ThermalAmbientSMPM
thermalAmbient(
final useDamperCage=useDamperCage,
final Tr=TrOperational,
final Tpm=TpmOperational),
redeclare final Machines.Interfaces.InductionMachines.ThermalPortSMPM
thermalPort(final useDamperCage=useDamperCage),
redeclare final Machines.Interfaces.InductionMachines.ThermalPortSMPM
internalThermalPort(final useDamperCage=useDamperCage),
redeclare final Machines.Interfaces.InductionMachines.PowerBalanceSMPM
powerBalance(
final lossPowerRotorWinding=damperCageLossPower,
final lossPowerRotorCore=0,
final lossPowerPermanentMagnet=permanentMagnet.lossPower),
statorCore(final w=statorCoreParameters.wRef));
Modelica.Blocks.Interfaces.RealOutput ir[2](
start=zeros(2),
each final quantity="ElectricCurrent",
each final unit="A") if useDamperCage "Damper cage currents"
annotation (Placement(visible=false),Dialog(showStartAttribute=true));
Modelica.Blocks.Interfaces.RealOutput idq_dr[2](
each stateSelect=StateSelect.prefer,
each final quantity="ElectricCurrent",
each final unit="A") if useDamperCage
"Damper space phasor current / rotor fixed frame"
annotation (Placement(visible=false));
Machines.BasicMachines.Components.AirGapR airGap(
final p=p,
final Lmd=Lmd,
final Lmq=Lmq,
final m=m) annotation (Placement(transformation(extent={{-10,-10},{10,10}},
rotation=270)));
final parameter SI.Temperature TpmOperational=293.15
"Operational temperature of permanent magnet"
annotation (Dialog(group="Operational temperatures"));
parameter SI.Temperature TrOperational(start=293.15)
"Operational temperature of (optional) damper cage" annotation (
Dialog(group="Operational temperatures", enable=not useThermalPort
and useDamperCage));
parameter SI.Voltage VsOpenCircuit(start=112.3)
"Open circuit RMS voltage per phase @ fsNominal";
parameter SI.Inductance Lmd(start=0.3*unitR/(2*pi*fsNominal))
"Stator main field inductance per phase in d-axis"
annotation (Dialog(tab="Nominal resistances and inductances"));
parameter SI.Inductance Lmq(start=0.3*unitR/(2*pi*fsNominal))
"Stator main field inductance per phase in q-axis"
annotation (Dialog(tab="Nominal resistances and inductances"));
parameter Boolean useDamperCage(start=true)
"Enable / disable damper cage" annotation (Evaluate=true, Dialog(tab=
"Nominal resistances and inductances", group="Damper cage"));
parameter SI.Inductance Lrsigmad(start=0.05*unitR/(2*pi*
fsNominal)) "Damper stray inductance in d-axis" annotation (
Dialog(
tab="Nominal resistances and inductances",
group="Damper cage",
enable=useDamperCage));
parameter SI.Inductance Lrsigmaq=Lrsigmad
"Damper stray inductance in q-axis" annotation (Dialog(
tab="Nominal resistances and inductances",
group="Damper cage",
enable=useDamperCage));
parameter SI.Resistance Rrd(start=0.04)
"Damper resistance in d-axis at TRef" annotation (Dialog(
tab="Nominal resistances and inductances",
group="Damper cage",
enable=useDamperCage));
parameter SI.Resistance Rrq=Rrd
"Damper resistance in q-axis at TRef" annotation (Dialog(
tab="Nominal resistances and inductances",
group="Damper cage",
enable=useDamperCage));
parameter SI.Temperature TrRef(start=293.15)
"Reference temperature of damper resistances in d- and q-axis"
annotation (Dialog(
tab="Nominal resistances and inductances",
group="Damper cage",
enable=useDamperCage));
parameter Machines.Thermal.LinearTemperatureCoefficient20 alpha20r(start=0)
"Temperature coefficient of damper resistances in d- and q-axis"
annotation (Dialog(
tab="Nominal resistances and inductances",
group="Damper cage",
enable=useDamperCage));
parameter Machines.Losses.PermanentMagnetLossParameters permanentMagnetLossParameters(IRef(
start=100), wRef(start=2*pi*fsNominal/p))
"Permanent magnet loss parameter record" annotation (Dialog(tab="Losses"));
Components.PermanentMagnetWithLosses permanentMagnet(
final Ie=Ie,
final useHeatPort=true,
final m=m,
final permanentMagnetLossParameters=permanentMagnetLossParameters,
final is=is) annotation (Placement(transformation(
origin={30,-30},
extent={{10,10},{-10,-10}},
rotation=180)));
Machines.BasicMachines.Components.DamperCage damperCage(
final Lrsigmad=Lrsigmad,
final Lrsigmaq=Lrsigmaq,
final Rrd=Rrd,
final Rrq=Rrq,
final T_ref=TrRef,
final alpha=Machines.Thermal.convertAlpha(alpha20r, TrRef),
final useHeatPort=true) if useDamperCage annotation (Placement(
transformation(
origin={0,-40},
extent={{-10,-10},{10,10}},
rotation=270)));
protected
final constant SI.Resistance unitR=1;
final parameter SI.Current Ie=sqrt(2)*VsOpenCircuit/(Lmd*
2*pi*fsNominal) "Equivalent excitation current";
Modelica.Blocks.Interfaces.RealOutput damperCageLossPower(final
quantity="Power", final unit="W") "Damper losses";
equation
connect(ir, damperCage.i);
connect(idq_dr, damperCage.i);
connect(damperCageLossPower, damperCage.lossPower);
if not useDamperCage then
damperCageLossPower = 0;
end if;
connect(airGap.spacePhasor_r, damperCage.spacePhasor_r)
annotation (Line(points={{10,-10},{10,-30}}, color={0,0,255}));
connect(airGap.spacePhasor_r, permanentMagnet.spacePhasor_r)
annotation (Line(points={{10,-10},{10,-20},{20,-20}}, color={0,0,255}));
connect(airGap.support, internalSupport) annotation (Line(
points={{-10,0},{-40,0},{-40,-90},{60,-90},{60,-100}}));
connect(lssigma.spacePhasor_b, airGap.spacePhasor_s) annotation (Line(
points={{20,10},{10,10}}, color={0,0,255}));
connect(airGap.flange, inertiaRotor.flange_a) annotation (Line(
points={{10,0},{70,0}}));
connect(permanentMagnet.heatPort, internalThermalPort.heatPortPermanentMagnet)
annotation (Line(
points={{20,-40},{20,-80},{0,-80}}, color={191,0,0}));
connect(permanentMagnet.flange, inertiaRotor.flange_b) annotation (Line(
points={{30,-20},{90,-20},{90,0}}));
connect(damperCage.heatPort, internalThermalPort.heatPortRotorWinding)
annotation (Line(
points={{-10,-40},{-10,-80},{0,-80},{0,-80}}, color={191,0,0}));
connect(internalSupport, permanentMagnet.support) annotation (Line(
points={{60,-100},{60,-100},{60,-90},{30,-90},{30,-40},{30,-40}}));
annotation (
defaultComponentName="smpm",
Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{
100,100}}), graphics={
Rectangle(
extent={{-130,10},{-100,-10}},
fillColor={0,255,0},
fillPattern=FillPattern.Solid),
Rectangle(
extent={{-100,10},{-70,-10}},
fillColor={255,0,0},
fillPattern=FillPattern.Solid),
Ellipse(extent={{-134,34},{-66,-34}}, lineColor={0,0,255})}),
Documentation(info="<html>
<p><strong>Model of a three-phase permanent magnet synchronous machine.</strong><br>
Resistance and stray inductance of stator is modeled directly in stator phases, then using space phasor transformation and a rotor-fixed <em>AirGap</em> model. Resistance and stray inductance of rotor's squirrel cage is modeled in two axis of the rotor-fixed coordinate system. Permanent magnet excitation is modelled by a constant equivalent excitation current feeding the d-axis. The machine models take the following loss effects into account:
</p>
<ul>
<li>heat losses in the temperature dependent stator winding resistances</li>
<li>optional, when enabled: heat losses in the temperature dependent damper cage resistances</li>
<li>friction losses</li>
<li>core losses (only eddy current losses, no hysteresis losses)</li>
<li>stray load losses</li>
<li>permanent magnet losses</li>
</ul>
<p>Whether a damper cage is present or not, can be selected with Boolean parameter useDamperCage (default = true).
<br><strong>Default values for machine's parameters (a realistic example) are:</strong><br></p>
<table>
<tr>
<td>number of pole pairs p</td>
<td>2</td><td> </td>
</tr>
<tr>
<td>stator's moment of inertia</td>
<td>0.29</td><td>kg.m2</td>
</tr>
<tr>
<td>rotor's moment of inertia</td>
<td>0.29</td><td>kg.m2</td>
</tr>
<tr>
<td>nominal frequency fNominal</td>
<td>50</td><td>Hz</td>
</tr>
<tr>
<td>nominal voltage per phase</td>
<td>100</td><td>V RMS</td>
</tr>
<tr>
<td>no-load voltage per phase</td>
<td>112.3</td><td>V RMS @ nominal speed</td>
</tr>
<tr>
<td>nominal current per phase</td>
<td>100</td><td>A RMS</td>
</tr>
<tr>
<td>nominal torque</td>
<td>181.4</td><td>Nm</td>
</tr>
<tr>
<td>nominal speed</td>
<td>1500</td><td>rpm</td>
</tr>
<tr>
<td>nominal mechanical output</td>
<td>28.5</td><td>kW</td>
</tr>
<tr>
<td>nominal rotor angle</td>
<td>20.75</td><td>degree</td>
</tr>
<tr>
<td>efficiency</td>
<td>95.0</td><td>%</td>
</tr>
<tr>
<td>power factor</td>
<td>0.98</td><td> </td>
</tr>
<tr>
<td>stator resistance</td>
<td>0.03</td><td>Ohm per phase at reference temperature</td>
</tr>
<tr>
<td>reference temperature TsRef</td>
<td>20</td><td>°C</td>
</tr>
<tr>
<td>temperature coefficient alpha20s </td>
<td>0</td><td>1/K</td>
</tr>
<tr>
<td>stator reactance Xd</td>
<td>0.4</td><td>Ohm per phase in d-axis</td>
</tr>
<tr>
<td>stator reactance Xq</td>
<td>0.4</td><td>Ohm per phase in q-axis</td>
</tr>
<tr>
<td>stator stray reactance Xss</td>
<td>0.1</td><td>Ohm per phase</td>
</tr>
<tr>
<td>damper resistance in d-axis</td>
<td>0.04</td><td>Ohm at reference temperature</td>
</tr>
<tr>
<td>damper resistance in q-axis</td>
<td>same as d-axis</td><td> </td>
</tr>
<tr>
<td>reference temperature TrRef</td>
<td>20</td><td>°C</td>
</tr>
<tr>
<td>temperature coefficient alpha20r </td>
<td>0</td><td>1/K</td>
</tr>
<tr>
<td>damper stray reactance in d-axis XDds</td>
<td>0.05</td><td>Ohm</td>
</tr>
<tr>
<td>damper stray reactance in q-axis XDqs</td>
<td>same as d-axis</td><td> </td>
</tr>
<tr>
<td>stator operational temperature TsOperational</td>
<td>20</td><td>°C</td>
</tr>
<tr>
<td>damper operational temperature TrOperational</td>
<td>20</td><td>°C</td>
</tr>
<tr>
<td>These values give the following inductances:</td>
<td> </td><td> </td>
</tr>
<tr>
<td>main field inductance in d-axis</td>
<td>(Xd - Xss)/(2*pi*fNominal)</td><td> </td>
</tr>
<tr>
<td>main field inductance in q-axis</td>
<td>(Xq - Xss)/(2*pi*fNominal)</td><td> </td>
</tr>
<tr>
<td>stator stray inductance per phase</td>
<td>Xss/(2*pi*fNominal)</td><td> </td>
</tr>
<tr>
<td>damper stray inductance in d-axis</td>
<td>XDds/(2*pi*fNominal)</td><td> </td>
</tr>
<tr>
<td>damper stray inductance in q-axis</td>
<td>XDqs/(2*pi*fNominal)</td><td> </td>
</tr>
</table>
</html>"));
end SM_PermanentMagnet;