.. _exampleAir: ================================== 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 :any:`emagEvalSimpleAir`. .. role:: big :big:`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')