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