=========================== Innenläufer mit Ringmagnet =========================== .. image:: pic_20120202105824.png .. role:: big :big:`Skript-Datei` ---------------------------------------------------------------------- :: -------------------------------------------------------------------------------- -- Allgemeine Einstellungen ---------------------------------------------------- -------------------------------------------------------------------------------- exit_on_error = false -- Verhalten nach Fehler exit_on_end = true -- Verhalten nach Skriptausführung verbosity = 2 -- Grad der Bildschirmmeldungen ------------------------------------------------------------------------------- -- Parameterdefinition -------------------------------------------------------- ------------------------------------------------------------------------------- Q = 12 -- Nutzahl P = 10 -- Polzahl Da = 100 -- Statoraußendurchmesser Di = 55 -- Statorinnendurchmesser s = 3 -- Nutschlitzbreite ag = 1 -- Luftspaltweite bz = 7 -- Zahnbreite h1 = 1.5 -- Zahnkopfhöhe 1 h2 = 2 -- Zahnkopfhöhe 2 hj = 8 -- Jochhöhe hrs = 6 -- Rückschlusshöhe hm = 5 -- Magnethöhe ls = 150 -- Paketlänge Qm = Q/2 -- Nutzahl Modell Pm = P/2 -- Polzahl Modell urs = 1000 -- Permeabilität Stator urr = 1000 -- Permeabilität PM-Rückschluss Br = 1.2 -- Remanenz PM urm = 1.05 -- Rel. Permeabilität PM Nc = 100 -- Spulenwindungszahl -------------------------------------------------------------------------------- -- Modellerstellung ------------------------------------------------------------ -------------------------------------------------------------------------------- new_model_force("example","PMSM IL OM") --------------------- -- Allgemeine Angaben global_unit('mm') -- Globale Einheit (m, cm, mm) pickdist(0.001) -- Abstand Schnappen auf Knotenpunkt blow_up_wind(0,0,55,55) -- Fenstergröße anpassen cosys('cartes') -------------------------- -- Grunddaten der Maschine m.num_slots = Q -- Number of Sattor Slots m.num_slots = Qm -- Number of Stator Slots simulated (>= 1) m.num_poles = P -- Number of Poles 2p (>= 2) m.npols_gen = Pm -- Number of Poles simulated (>= 1) m.fc_radius = (Di-ag)/2 -- Radius air-gap center [mm] m.arm_length = ls -- Effect. armature length [mm] pre_models("basic_modpar"); ------------------------------ ----- Stator ----------------- ------------------------------ -- Berechnung der Koordinaten x = {} y = {} for i=1, 15 do x[i]=0 y[i]=0 end x[1],y[1] = pd2c(Da/2,0) x[2],y[2] = pd2c(Da/2,180/Q) x[3] = Di/2*math.cos(math.asin(s/Di)) y[3] = s/2 x[4] = x[3]+h1 y[4] = s/2 x[5],y[5] = pd2c(Di/2,180/Q) x[6] = Di/2+h1+h2; y[6] = y[5]/x[5]*x[6]-bz/2/math.cos(pi/Di) x[7] = Da/2-hj; y[7] = y[5]/x[5]*x[7]-bz/2/math.cos(pi/Di) x[8] = x[7] x[9],y[9] = pd2c(vlen(x[4],y[4]),180/Q) x[10] = (y[6]+x[5]/y[5]*x[6])/(y[5]/x[5]+x[5]/y[5]) y[10] = y[5]/x[5]*x[10] x[11] = (y[7]+x[5]/y[5]*x[7])/(y[5]/x[5]+x[5]/y[5]) y[11] = y[5]/x[5]*x[11] x[12] = Di/2 x[13] = x[4] x[14] = Di/2-ag/3 x[15],y[15] = pd2c(Di/2-ag/3,180/Q) -- Knotenkettenerstellung agnp = 1 -- Knotenteilung im Luftspalt ndt(ag*2/3) nc_circle(x[14],y[14],x[15],y[15],360/Q/2/agnp+1) nc_circle(x[1],y[1],x[2],y[2],0) nc_circle(x[13],y[13],x[4],y[4],0) nc_circle(x[3],y[3],x[5],y[5],0) nc_line(x[3],y[3],x[4],y[4],0) nc_line_cont(x[6],y[6],0) nc_line_cont(x[7],y[7],0) nc_line_cont(x[8],y[8],0) nc_line(x[12],y[12],x[13],y[13],0) nc_line_cont(x[8],y[8],0) nc_line_cont(x[1],y[1],0) nc_line(x[14],y[14],x[12],y[12],0) nc_line(x[15],y[15],x[5],y[5],0) nc_line_cont(x[9],y[9],0) nc_line_cont(x[10],y[10],0) nc_line_cont(x[11],y[11],0) nc_line_cont(x[2],y[2],0) -- Vernetzung mesh.con1 = 0.1 -- Vernetzungssteuerung create_mesh_se(Da/2-hj/2,0+hj/2) create_mesh_se((Da+Di)/4,s/4) create_mesh_se(Di/2+h1/2,s/4) -- Definition Subregionen def_new_subreg(Da/2-hj/2,0+hj/2,"Stat",blue) -- Spiegeln und Kopieren mirror_nodechains(x[2],y[2],x[15],y[15]) x0,y0 = pd2c(Di/2-ag/3,0) x1,y1 = pd2c(Da/2,0) x2,y2 = pd2c(Da/2,360/Q) x3,y3 = pd2c(Di/2-ag/3,360/Q) rotate_copy_nodechains(x0,y0,x1,y1,x2,y2,x3,y3,Qm-1) ------------------------------ ----- Rotor ------------------ ------------------------------ -- Berechnung der Koordinaten x[1],y[1] = pd2c(Di/2-ag*2/3,0) x[2],y[2] = pd2c(Di/2-ag*2/3,360/P) x[3],y[3] = pd2c(Di/2-ag,0) x[4],y[4] = pd2c(Di/2-ag,360/P) x[5],y[5] = pd2c(Di/2-ag-hm,0) x[6],y[6] = pd2c(Di/2-ag-hm,360/P) x[7],y[7] = pd2c(Di/2-ag-hm-hrs,0) x[8],y[8] = pd2c(Di/2-ag-hm-hrs,360/P) -- Knotenketten nc_circle(x[1],y[1],x[2],y[2],360/P/agnp+1) nc_circle(x[3],y[3],x[4],y[4],0) nc_circle(x[5],y[5],x[6],y[6],0) nc_circle(x[7],y[7],x[8],y[8],0) nc_line(x[7],y[7],x[5],y[5],0) nc_line_cont(x[3],y[3],0) nc_line_cont(x[1],y[1],0) nc_line(x[8],y[8],x[6],y[6],0) nc_line_cont(x[4],y[4],0) nc_line_cont(x[2],y[2],0) -- Vernetzung create_mesh_se(Di/2-ag*5/6,ag/3) create_mesh_se(Di/2-ag-hm/2,ag) create_mesh_se(Di/2-ag-hm-hrs/2,ag) -- Definition Subregionen def_new_subreg(Di/2-ag-hm-hrs/2,ag,"PMRS",blue) -- Spiegeln und Kopieren rotate_copy_nodechains(x[7],y[7],x[1],y[1],x[2],y[2],x[8],y[8],Pm-1) -- Luftspalt x0,y0 = pd2c(Di/2-ag*2/3,0) x1,y1 = pd2c(Di/2-ag/3,0) nc_line(x0,y0,x1,y1,0) x0,y0 = pd2c(Di/2-ag*2/3,360*Pm/P) x1,y1 = pd2c(Di/2-ag/3,360*Pm/P) nc_line(x0,y0,x1,y1,0) create_mesh_se(Di/2-ag/2,ag) ------------------------------- ----- Randbedingungen --------- ------------------------------- x0,y0 = pd2c(Di/2-ag-hm-hrs,0) x1,y1 = pd2c(Da/2,0) x2,y2 = pd2c(Di/2-ag-hm-hrs,360*Pm/P) x3,y3 = pd2c(Da/2,360*Pm/P) def_bcond_vpo(x1,y1,x3,y3,0) def_bcond_vpo(x2,y2,x0,y0,0) def_bcond(x3,y3,x2,y2,x0,y0,x1,y1,3) ------------------------------- ------ Wicklungen ------------- ------------------------------- tauq = 360/Q -- Nutteilungswinkel Rq = (Di/2+Da/2-hj)/2 -- mittlerer Nutradius x,y = pd2c(Rq,tauq/4) def_new_wdg(x,y,"cyan","Strang 1",Nc,0.0,wo) x,y = pd2c(Rq,tauq-tauq/4) add_to_wdg(x,y,wsamekey,wi,wser) x,y = pd2c(Rq,tauq+tauq/4) add_to_wdg(x,y,wsamekey,wi,wser) x,y = pd2c(Rq,2*tauq-tauq/4) add_to_wdg(x,y,wsamekey,wo,wser) x,y = pd2c(Rq,2*tauq+tauq/4) def_new_wdg(x,y,"magenta","Strang 2",Nc,0.0,wi) x,y = pd2c(Rq,3*tauq-tauq/4) add_to_wdg(x,y,wsamekey,wo,wser) x,y = pd2c(Rq,3*tauq+tauq/4) add_to_wdg(x,y,wsamekey,wo,wser) x,y = pd2c(Rq,4*tauq-tauq/4) add_to_wdg(x,y,wsamekey,wi,wser) x,y = pd2c(Rq,4*tauq+tauq/4) def_new_wdg(x,y,"yellow","Strang 3",Nc,0.0,wo) x,y = pd2c(Rq,5*tauq-tauq/4) add_to_wdg(x,y,wsamekey,wi,wser) x,y = pd2c(Rq,5*tauq+tauq/4) add_to_wdg(x,y,wsamekey,wi,wser) x,y = pd2c(Rq,6*tauq-tauq/4) add_to_wdg(x,y,wsamekey,wo,wser) ------------------------------- ---- Materialeigenschaften ---- ------------------------------- -- Stator und PM-Rückschluss def_mat_fm(Da/2-hj/2,ag,urs,100) def_mat_fm(Di/2-ag-hm-hrs/2,ag,urr,100) -- Permanentmagnete for i=0, Pm/2 do x,y = pd2c(Di/2-ag-hm/2,360/P*(2*i+1)-180/P) def_mat_pm(x,y,"red",Br,urm,0,m.radial,100) end for i=1, Pm/2 do x,y = pd2c(Di/2-ag-hm/2,360/P*2*i-180/P) def_mat_pm(x,y,"green",Br,urm,180,m.radial,100) end -------------------------- -- Stromverlaufsdefinition cosys('polar') -- ensure the cosys is polar here pre_models("gen_pocfile") -- generate poc file automatically -------------------------------------------------------------------------------- ----- Berechnung/Simulation ---------------------------------------------------- -------------------------------------------------------------------------------- -- Induktionsverteilung im Leerlauf calc_field_single(1,restored,0.01) color_gradation(0,0,tot,Babs,0,2,"example_Babs.eps") -- PM-/Reluktanzmotor-Simulation (Leerlauf und Last) m.move_action = 0.000 -- Move Action: rotate=0, linear=1 --m.arm_length = ls -- Effect. armature length [mm] --m.num_pol_pair = P/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 = 1.750 -- 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 = 20.000 -- Temperature Magnet [Deg C] --m.fc_radius = (Di-ag)/2 -- Radius air-gap center (torque) [mm] m.optim_i_up = 1.000 -- Optimize < I vs Up : no = 0, yes > 0 m.calc_fe_loss = 0.000 -- Calculate Losses:>0, areas>0, no = 0 m.nu_move_steps = 49.0 -- Number of move steps m.range_phi = 360/P*2 -- Move range angle m.phi_start = 0.000 -- Start angle m.pm_eff_aktiv = 100 -- Effektive Magnetlaenge [%] m.fc_mult_move_type = 0. -- Type of move path in air gap m.pocfilename = 'example_10p.poc' -- POC file run_models("pm_sym_fast") save_model('cont')