M-Modelle und PM-/Reluktanzmotor-Simulation¶
Das Beispiel zeigt die Verwendung der in FEMAG vorhandenen parameterbasierten Maschinenmodelle (M-Models)
mit den Befehlen pre_models
und deren Simulation mit run_models
.
Das Beispiel kann interaktiv erzeugt werden, wenn unter dem Menü-Punkt “CAD-Param/M-Models” die Funktion “Write Script file” aktiviert wird.
Skript-Datei
--------------------------------------------------------------------------------
-- Allgemeine Einstellungen ----------------------------------------------------
--------------------------------------------------------------------------------
exit_on_error = false -- Verhalten nach Fehler
exit_on_end = true -- Verhalten nach Skriptausfuehrung
verbosity = 2 -- Grad der Bildschirmmeldungen
--------------------------------------------------------------------------------
-- Modellerstellung ------------------------------------------------------------
--------------------------------------------------------------------------------
new_model_force("example","PMSM")
--------------------------------------------------------------------------------
-- Allgemeine Angaben ----------------------------------------------------------
--------------------------------------------------------------------------------
global_unit('mm') -- Globale Einheit (m, cm, mm)
pickdist(0.001) -- Abstand Schnappen auf Knotenpunkt
cosys('polar')
-----------------------------
-- Grunddaten der Maschine --
-----------------------------
m.tot_num_slot = 12 -- Number of Stator Slots (>= 1)
m.num_slots = 3 -- Number of Stator Slots (>= 1)
m.num_poles = 4 -- Number of Poles 2p (>= 2)
m.npols_gen = 1 -- Number of Poles simulated (>= 1)
m.fc_radius = 34.25 -- Radius air-gap center [mm]
m.arm_length = 50.0 -- Effect. armature length [mm]
pre_models("basic_modpar")
-----------------------
-- Erstellung Stator --
-----------------------
m.yoke_diam = 130.000 -- Outer diameter yoke DAS [mm]
m.inside_diam = 70.000 -- Inner diameter DIS [mm]
m.slot_height = 20.000 -- Total slot height HSL [mm]
m.slot_h1 = 2.000 -- Slot opening height H1S [mm]
m.slot_h2 = 4.000 -- Slot head height H2S [mm]
m.slot_width = 3.000 -- Slot width SWI,< 0 groove in Slot[mm]
m.slot_r1 = 0.000 -- Upper Radius R1S [mm]
m.slot_r2 = 0.000 -- Lower Radius R2S [mm]
m.wedge_width1 = 0.000 -- Distance middlepoints B1S [mm]
m.wedge_width2 = 0.000 -- Distance middlepoints B2S [mm]
m.nodedist = 1.000 -- Rel.nod-dist > 0 begin tooth,< 0 slot
m.middle_line = 0.000 -- Layers: 0,vert:1,horiz:2,vert+horiz:3
m.tooth_width = 9.000 -- Tooth width TW (replaces B1, B2) [mm]
m.slot_top_sh = 0.000 -- Top of slot: corner=2, line=1, arc=0
m.airgap = 1.000 -- Airgap 2/3 height:>0:3, <0:4 rows[mm]
m.tot_num_sl = m.tot_num_slot -- Total number of teeth on 2pi
m.num_sl_gen = m.num_slots -- Number of teeth be generated
m.zeroangl = 0.000 -- Reference angle to x-axis [grad]
m.rlength = 100.000 -- rel. length fe in z-dir [%]
m.mcvkey_yoke = 'dummy'
pre_models("STATOR_3")
----------------------
-- Erstellung Rotor --
-----------------------
m.magn_rad = 33.500 -- Radius Magnet airgap side RA [mm]
m.yoke_rad = 20.000 -- Radius iron yoke inside RI [mm]
m.magn_height = 5.000 -- Magnet height HM [mm]
m.magn_width = 80.000 -- Magnet width: > 0: [%], < 0:[mm]
m.nodedist = 1.000 -- Rel. Node distance > 0.5 ..
m.condshaft_r = 20.000 -- Conduct. Shaft Radius:< yoke_rad [mm]
m.magn_num = 1.000 -- Number Magnet sections: > = 1
m.magn_perm = 28.500 -- Radius Iron RFE between magnets [mm]
m.magn_l = 100.000 -- Magnet Length: < 150 % air gap length
m.magn_ori = 1.000 -- Magnet:par = +/-1,Pol = 2,halb = +/-3
m.magn_type = 2.000 -- MagnType:Ac:1,Acp:2,Rc:3, Rcp:4,AAp:5
m.magn_shape = 0.000 -- Magnet surface radius <= RA HA[mm]
m.br_height = 0.000 -- Iron bridge height: = 0: none BH[mm]
m.br_width = 0.000 -- Iron bridge width : = 0: none BW[mm]
m.zeroangl = 0.000 -- Reference angle to x-axis [grad]
m.cond_shaft = 0.000 -- El. Conductivity of shaft [S/m]
m.mcvkey_yoke = 'dummy'
m.mcvkey_mshaft = 'dummy'
pre_models("Magnet-Sector")
-------------------------------------------------
-- Modellvervollständigung und Randbedingungen --
-------------------------------------------------
pre_models("connect_models") -- connect stator and rotor, mesh airgap and
-- apply the boundary conditions automatically
-------------------------
-- Wicklungserstellung --
-------------------------
m.num_phases = 3.000 -- Number of Phases m <= 500
m.num_layers = 1.000 -- Number of Layers (slot sides)per slot
m.num_wires = 100.000 -- Number of wires per slot side
m.current = 0.000 -- Wdg-Current [A] or flux [Vs/mm],peak
m.coil_span = 3.000 -- Coil span Y >= 1
m.mat_type = 1.000 -- Ma-type:1=Rot;21=lin-x;22=lin-y
m.wind_type = 1.000 -- W-typ:1=w&cur;2=w&flux;3=bar&cur
m.win_asym = 1.000 -- asy. slot pitch: 1=sym.; <1=asym.
m.wdg_location = 1.000 -- Windg location:1: stator, 2: rotor
m.curr_inp = 0.000 -- Curent:Const:0, Q-axis:1, D-axis:-1
m.dq_offset = 0.000 -- Offset to D-axis:>=0 Compl;<0 only Re
m.npols_gen = 1.000 -- Number of Poles simulated (>= 1)
m.xcoil_1 = 44.433 -- center coordinate of 1. coil side [mm]
m.ycoil_1 = 11.906 -- center coordinate of 1. coil side [mm]
m.xcoil_2 = 0.000 -- center coordinate of 2. coil side [mm]
m.ycoil_2 = 0.000 -- center coordinate of 2. coil side [mm]
pre_models("Gen_winding")
--------------------------------------------
-- Materialeigenschaften Permanentmagnete --
--------------------------------------------
m.remanenc = 1.200 -- Remanence Br (Ref:20 Degree C) [T]
m.relperm = 1.050 -- Rel. Permeability muer
m.spmaweight = 7.600 -- Specific Weight Magnets [gr/cm3]
m.temcoefbr = -0.100 -- Temperature Coefficient for Br [%/K]
m.temcoefhc = -0.100 -- Temperature Coefficient for Hc [%/K]
m.magntemp = 20.000 -- Magnet Temperature [Degree C]
m.magncond = 625000.0 -- Magnet el. conductivity [1/Ohm m]
m.magsegwid = nil -- Magnet segment width [mm]
m.magseglen = nil -- Magnet segment length z-direction [mm]
pre_models("Magnet-data")
-------------------------------------------------------
-- Material-/Modellparameter des Stators- und Rotors --
-------------------------------------------------------
m.basfreq = 50.0 -- Base Frequency for ch and cw fo [Hz]
m.basind = 1.50 -- Base Induction (Peak) Bo [T]
m.ch = 4.00 -- Fe-Hysteresis -Coefficient ch [W/kg]
m.cw = 2.00 -- Fe-Eddy current-Coefficient cw [W/kg]
m.hyscoef = 1.00 -- Hysteresis- Frequency-Coefficient
m.edycoef = 2.00 -- Eddycurrent-Frequency-Coefficient
m.indcoef = 2.00 -- Induction-Coefficient
m.ffactor = 1.00 -- Material + Field Factor >= 1
m.spweight = 7.65 -- Specific Weight Iron [gr/cm3]
m.fillfact = 1.00 -- Fillfactor Iron <= 1
m.emodul = 0.210E+12 -- E-Modul [kN/mm2]
m.poison = 0.300 -- Poissonvalue <= 1
m.dampfact = 0.00 -- Dampingfactor
m.thcond = 0.00 -- Thermal conductivity [W/m degr]
m.thcap = 0.00 -- Thermal heat capacity [Ws/g degr]
pre_models("FE-Losses-1");
pre_models("FE-Losses-2");
-----------------------------
-- Stromverlaufsdefinition --
-----------------------------
cosys('polar') -- ensure the cosys is polar here
pre_models("gen_pocfile") -- generate poc file automatically
--------------------------------------------------------------------------------
-- Berechnung/ Simulation ------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------
-- Simulationsparameter --
--------------------------
m.hc_min = 95.000 -- Limit demagnetisa > 0:[%]Hc;<0:[kA/m]
m.con_hdcopy = 1.000 -- Hc-copy:Name:auto:0;intact:1; none:-1
m.b_max = 2.400 -- Max Induction [T] in colorgradation
m.b_min = 0.000 -- Move inside: 0 ; Move outside: > 0
m.calc_fe_loss = 1.000 -- Calc. FE-Loss:0:no; 1:yes; 2:m-output
m.eval_force = 0.000 -- Eval. force density > 0; no <= 0
m.allow_draw = 1.000 -- Draw Graphics :> 0: yes; 0: no
m.fline_dens = 5.000 -- F-Lines: 1: small; 2: medium; 3:thick
m.num_flines = 20.000 -- Number of Field-lines: < 100 > 2
m.name_bch_log = 0.000 -- Name bch-file in Logfile:> 0:yes;0:no
m.st_size_move = 0.000 -- Step size move: r/ph:[degr]; x/y:[mm]
m.num_nonl_it = 300.000 -- Number of nonlinear Iterations < 99
m.perm_mode = 1.000 -- Permeability mode:>0:restore;0:actual
m.error_perm = 0.010 -- Rel. Permeability error < 0.1 [%]
m.allow_demagn = 0.000 -- Allow Demagnetisation:= 1:yes;= 0:no
m.maenergy = 0.000 -- Force from magn energy 1 :yes;= 0:no
m.el_order_ag = 1.000 -- El. order in air gap: lin=1: quadr=2
m.export_scrpt = 0.000 -- Export parameters in script: yes > 0
pre_models("FE-contr-data");
-------------------------------------------------------
-- PM-/Reluktanzmotor-Simulation (Leerlauf und Last) --
-------------------------------------------------------
m.move_action = 0.000 -- Move Action: rotate=0, linear=1
--m.arm_length = 50.0 -- Effect. armature length [mm]
--m.num_pol_pair = m.num_poles/2 -- Number of Pole pairs (>= 1)
m.speed = 1000.000 -- Speed: rotate [1/min]
m.skew_angle = 0.000 -- Skew angle [Deg, mm]
m.nu_skew_steps = 0.000 -- No of skew sect:>0:finite,0:infinite
m.eval_force = 0.000 -- Evaluate force density: no = 0,yes >0
m.current = 6.000 -- Nominal stator coil current(Peak) [A]
m.angl_i_up = 0.000 -- Angle current I vs. voltage Up [Deg]
m.num_par_wdgs = 0.000 -- Number of parallel Windings (>= 1)
m.magn_temp = m.magntemp -- Temperature Magnet [Deg C]
m.optim_i_up = 1.000 -- Optimize < I vs Up : no = 0, yes > 0
m.nu_move_steps = 91.0 -- Number of move steps
m.range_phi = 180.0 -- Move range angle
m.phi_start = 0.000 -- Start angle
m.pm_eff_aktiv = 100.0 -- Effektive Magnetlaenge [%]
m.fc_mult_move_type = 0.0 -- Type of move path in air gap
m.pocfilename = 'example_4p.poc' -- POC file
run_models("pm_sym_fast")
--------------------------------------------------------------------------------
-- Auswertung ------------------------------------------------------------------
--------------------------------------------------------------------------------
post_models("r_torque","T")
printf("> Drehmoment: %g Nm",T[1])
printf("> Nutrastmoment: %g Nm",T[2])
printf("> Lastpulsation: %g Nm",T[3])
post_models("r_winding_losses","L")
printf("> Wicklungsverluste: %g W",L[1])
post_models("r_iron_losses","L")
printf("> Eisenverluste im Stator: %g W",L[1])
printf("> Eisenverluste im Rotor: %g W",L[2])
--------------------------------------------------------------------------------
-- Abschluss -------------------------------------------------------------------
--------------------------------------------------------------------------------
save_model('close')