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')