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