Innenläufer mit Ringmagnet

../../../_images/pic_20120202105824.png

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