Luftspaltfeld numerisch-analytisch

Das Skript erstellt ein Modell, führt eine lineare Berechnung durch, wertet die Luftspaltfeldgrößen ausgehend von den Randpotenzialen aus und schreibt diese als Verteilung sowie als Amplitudensprektrum in Dateien. Die Kräfte und das Drehmoment werden über der Rotordrehstellung berechnet und ebenfalls in einer Datei ausgegeben.

Befehlserläuterung siehe Air-gap field and force density.

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 IL OM")

global_unit('mm')         -- Globale Einheit (m, cm, mm)
pickdist(0.001)        -- Abstand Schnappen auf Knotenpunkt
cosys('polar')

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)
pre_models("basic_modpar");

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");

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.airgap          =         -1.000 --   Mesh height (2/3 airgap)         [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");

pre_models("connect_models");

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.num_slots       =   m.num_sl_gen --   Number of slots in Model (Rot-Mot)
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");
::

 ---------------------------------------------
 -- Berechnung -------------------------------
 ---------------------------------------------

 agr = 0.5*(m.inside_diam-math.abs(m.airgap)) -- Luftspaltradius
 dphi = 1                                     -- Winkelinkrement
 NRot = 360/m.num_poles/dphi+1                -- Anzahl Drehschritte
 phi1 = 360.0*m.npols_gen/m.num_poles
 rew = 0

 outputfile=io.open("example_BNP_ForceTorque.dat","w+")

 for i=1,NRot do
   calc_field_single(1,actual,0.01)

   x,y = pd2c(34.2,0.5)
   point(x,y,"red","x")
   Nk = evalBNP_fourcoeff(x,y)

   if (i==2) then
     r = 34.5
     outputfile2=io.open("example_BNP_Distr.dat","w+")
     for j=0,360 do
       phi = j/180*math.pi
       Az = evalBNP_vecpot(r,phi)
       Br,Bt = evalBNP_induc(r,phi)
       fr,ft = evalBNP_forcedens(r,phi)
       outputfile2:write(string.format("%7.3f   %9.6f   %9.6f    %9.6f    %9.6f    %9.6f\n",phi/math.pi*180,Az,Br,Bt,fr,ft));
     end
     io.close(outputfile2)

     outputfile2=io.open("example_BNP_Four.dat","w+")
     for j=0,Nk do
       AAz = evalBNP_Avecpot(r,j)
       ABr,ABt = evalBNP_Ainduc(r,j)
       Afr,Aft = evalBNP_Aforcedens(r,j)
       outputfile2:write(string.format("%3d   %9.6f   %9.6f    %9.6f    %9.6f    %9.6f\n",j,AAz,ABr,ABt,Afr,Aft));
     end
     io.close(outputfile2)
   end

   phi=dphi*(i-1)
   M,Fx,Fy = evalBNP_forcetorq()
   outputfile:write(string.format("%7.3f   %9.6f   %9.6f    %9.6f\n",phi,Fx,Fy,M));

   if (phi>0.5*phi1 and rew==0) then
     rotate(agr,dphi-phi1,inside,increment)
     rew=1
   else
     rotate(agr,dphi,inside,increment)
   end
 end

 io.close(outputfile)
 rotate(0,0,0,resetcon)
 save_model('close')