Software: FEM - Tutorial - Magnetfeld - Geometrie
Hinweise zur Geometrie-Definition
Ein FEM-Modell setzt sich im Normalfall aus mehreren geometrischen Teilbereichen zusammen. Die Strukturierung in ´Teilbereiche wird durch zwei Aspekte bestimmt:
- Abgrenzung nach stofflich-physikalischen Eigenschaften (Material, Zustandsgrößen, Isotropie)
- Berücksichtigung numerischer Erfordernisse in Abhängigkeit von den zu erwartenden Feldgradienten (feinere Vernetzung enger Spalten oder von Bereichen mit starken Feldgradienten).
Alle markanten Punkte der abgegrenzten Bereiche muss man als Nodes definieren. Um bei der Vielzahl der zu definierenden Koordinaten die Übersicht nicht zu verlieren, sollte man sich bei den Node-Bezeichnern an den Namen der Komponenten orientieren (z.B. Anfangsbuchstaben):
- Das magnetische Feld einer Spule erstreckt sich induziert durch den Stromfluss in den unendlichen Luftraum (µrel=1). Dieses Feld im Luftraum nennt man auch Streufeld der Spule.
- Vereinfacht kann man sich vorstellen, dass die Komponenten des Eisenkreises dem Streuleitwert des Luftraumes parallel geschalten sind. Auf Grund der viel besseren magnetischen Leitfähigkeit fließt der größte Teil des magnetischen Flusses durch das Eisen, anstatt durch die benachbarten Luftbereiche.
- Ausgehend von dieser vereinfachten Vorstellung sollte man auch das Modell eines Magneten aufbauen:
- Beschreibung des unendlichen Raumes (µrel=1).
- Definition der magnetischen MMK (Spule, Permanentmagnet)
- Beschreibung der Bereiche mit µrel≠1 (z.B. Eisen) und Definition von Luftbereichen mit besonderen Forderungen an die Feinheit der Vernetzung (z.B. kleine Spalte zwischen den Eisenkreis-Komponenten).
- Bei der Reihenfolge der Beschreibung muss man darauf achten, dass Zusammenbau-Abhängigkeiten zwischen den Komponenten des Eisenkreises existieren. Das äußert sich in der Abhängigkeit der Eckpunkt-Koordinaten. So orientieren sich z.B. die Platzierungen von Anker und Deckel an der Größe und Form des Topfes.
Unendlicher Luftraum
- In unserem Beispiel hat infolge des geschlossenen Eisenkreises der "unendliche" Luftraum um den Magneten wahrscheinlich nur einen geringen Einfluss. Trotzdem wollen wir die Eigenschaften dieses "unendlichen" Raumes wie im Beispiel der elektrischen Kapazität mit Hilfe einer Kugelsphäre nachbilden, die man mit geeigneten Randbedingungen versieht.
- Der Radius der Kugelsphäre sollte in jeder Richtung wenigstens doppelt so groß sein, wie die Ausdehnung der Magnetbaugruppe. Wenn wir als Radius der Kugelsphäre die Summe aus Durchmesser und Höhe des Magneten benutzen, sollte das für beliebig proportionierte Magneten reichen.
- Das Zentrum K00 der Kugel legen wir in den Koordinaten-Ursprung (0,0), die Geometrie des Magneten ist in der Skizze bereits angedeutet.
- Achtung: Es handelt sich nun um Zylinderkoordinaten mit Radius r und Höhe z!
------------------------------------------------------------------------------- -- Geometrie (Zylinder-Koordinaten mit r,z: alle Abmessungen in mm!) -- -- Blocklabels in alle Geometriebereiche und Zuweisen der Materialien -- ------------------------------------------------------------------------------- -- ********************************************* mi_seteditmode ("nodes"); -- K=Kugelsphäre ******************************* -- ********************************************* rKugel=dMagnet+hTopf+hDeckel; rK00= 0; zK00= 0; mi_addnode (rK00,zK00); --Ursprung 0,0 rK01= 0; zK01= rKugel; mi_addnode (rK01,zK01); --Oben rK02= 0; zK02=-rKugel; mi_addnode (rK02,zK02); --Unten mi_zoomnatural(); mi_zoomout(); -- Zoom incl. Achse im Bild mi_seteditmode ("arcsegments"); -- mi_addarc( r1,z1 , r2,z2 ,angle, maxseg deg.); mi_addarc(rK02,zK02 , rK01,zK01 , 180 , 5) -- Halbkreis entgegen Uhrzeiger mi_seteditmode ("segments"); -- Symmetrieachse im Halbkreis mi_addsegment ( rK01,zK01 , rK02,zK02 ); --------------------------------- mi_seteditmode ("blocks"); -- Block Luft mit Automesh=1 -- r0_K=0.9*rKugel; z0_K=0; -- 10% vom rechten Rand -- mi_addblocklabel(r0_K, z0_K); mi_selectlabel(r0_K,z0_K); mi_setblockprop("Luft",1,0,"<None>",0,0,0); mi_clearselected(); -- mi_setblockprop("name",automesh,meshsize,"incircuit",magdir,group,turns);
Wickelraum der Spule
- Falls es wie im Beispiel auf Grund der konkreten Form möglich ist, sollte man die Spule zentrisch in der "unendlichen" Kugelsphäre anordnen.
- Wir zeichnen die Spule als Rechteck (hSpule x bSpule) auf der Basis von Punkten und Linien.
- Die Abmessungen des Spulen-Wickelfensters berechnen wir vor der Definition der Eck-Knoten:
-- -- ********************************************* mi_seteditmode ("nodes"); -- S=Spulen-Wickelfenster ********************** -- -- ********************************************* rS01= dAnker/2+sWickel;zS01= hSpule/2; mi_addnode (rS01,zS01); rS02= rS01+bSpule; zS02= zS01; mi_addnode (rS02,zS02); rS03= rS02; zS03=-hSpule/2; mi_addnode (rS03,zS03); rS04= rS01; zS04= zS03; mi_addnode (rS04,zS04); mi_seteditmode ("segments"); mi_addsegment ( rS01,zS01 , rS02,zS02 ); mi_addsegment ( rS02,zS02 , rS03,zS03 ); mi_addsegment ( rS03,zS03 , rS04,zS04 ); mi_addsegment ( rS04,zS04 , rS01,zS01 ); ------------------------------ mi_seteditmode ("blocks"); -- Block "Draht" als "Spule"-- r0_S=rS01+(rS02-rS01)/2; z0_S=zS04+(zS01-zS04)/2;-- in Mitte Wickelfenster-- mi_addblocklabel(r0_S, z0_S); mi_selectlabel(r0_S,z0_S); mi_setblockprop ("Draht",1,0,"Spule",0,0,wSpule); mi_clearselected();
Eisenkreis (Topf)
- Wenn der Arbeitsluftspalt sAnker und der Restspalt sDeckel gleich Null sind, schließt der Anker oben mit dem Deckel fluchtend ab.
Dies wird bei der Berechnung der Eckpunkte des Topf-Schnittes berücksichtigt:
-- -- ********************************************* mi_seteditmode ("nodes"); -- T=Eisenkreis (Topf) ************************* -- -- ********************************************* rT01= dStift/2; zT01= (hTopf+hDeckel)/2-lAnker; mi_addnode(rT01,zT01); rT02= dAnker/2; zT02= zT01; mi_addnode(rT02,zT02); rT03= rT02; zT03=-(hTopf-hDeckel)/2; mi_addnode(rT03,zT03); rT04= dMagnet/2-dWand;zT04= zT03; mi_addnode(rT04,zT04); rT05= rT04; zT05=-zT04; mi_addnode(rT05,zT05); rT06= dMagnet/2; zT06= zT05; mi_addnode(rT06,zT06); rT07= rT06; zT07=-(hTopf+hDeckel)/2; mi_addnode(rT07,zT07); rT08= rT01; zT08= zT07; mi_addnode(rT08,zT08); mi_seteditmode ("segments"); mi_addsegment ( rT01,zT01 , rT02,zT02 ); mi_addsegment ( rT02,zT02 , rT03,zT03 ); mi_addsegment ( rT03,zT03 , rT04,zT04 ); mi_addsegment ( rT04,zT04 , rT05,zT05 ); mi_addsegment ( rT05,zT05 , rT06,zT06 ); mi_addsegment ( rT06,zT06 , rT07,zT07 ); mi_addsegment ( rT07,zT07 , rT08,zT08 ); mi_addsegment ( rT08,zT08 , rT01,zT01 ); --------------------------------- mi_seteditmode ("blocks"); -- Block "Stahl" in Topfmitte -- r0_T=rT01+(rT02-rT01)/2; z0_T=zT03+(zT02-zT03)/2; mi_addblocklabel(r0_T, z0_T); mi_selectlabel(r0_T,z0_T); mi_setblockprop ("Stahl",1,0,"<None>",0,0,0); mi_clearselected();
Eisenkreis (Anker)
- Die Position des Ankers ist durch den Topf und den Arbeitsluftspalt eindeutig bestimmt.
- Bei Arbeitsluftspalt sAnker=0 soll der Anker fluchtend mit der Oberseite des Deckels abschließen.
-- -- ********************************************* mi_seteditmode ("nodes"); -- A=Eisenkreis (Anker) ************************ -- -- ********************************************* rA01= dStift/2; zA01= zT01+sAnker+lAnker; mi_addnode(rA01,zA01); rA02= dAnker/2; zA02= zA01; mi_addnode(rA02,zA02); rA03= rA02; zA03= zT01+sAnker; mi_addnode(rA03,zA03); rA04= rA01; zA04= zA03; mi_addnode(rA04,zA04); mi_seteditmode ("segments"); mi_addsegment ( rA01,zA01 , rA02,zA02 ); mi_addsegment ( rA02,zA02 , rA03,zA03 ); mi_addsegment ( rA03,zA03 , rA04,zA04 ); mi_addsegment ( rA04,zA04 , rA01,zA01 ); --------------------------------- mi_seteditmode ("blocks"); -- Block "Stahl" in Ankermitte -- r0_A=rA01+(rA02-rA01)/2; z0_A=zA03+(zA02-zA03)/2; mi_addblocklabel(r0_A, z0_A); mi_selectlabel(r0_A,z0_A); mi_setblockprop ("Stahl",1,0,"<None>",0,0,0); mi_clearselected();
Eisenkreis (Deckel)
- Da der Spalt sDeckel=10 µm zwischen Topf und Deckel praktisch unsichtbar ist, sollte man zur Überprüfung der aus dem Script resultierenden Geometrie diesen Spalt temporär vergrößern.
-- -- ********************************************* mi_seteditmode ("nodes"); -- D=Eisenkreis (Deckel) *********************** -- -- ********************************************* rD01= dAnker/2+sGleit; zD01= zT06+sDeckel+hDeckel; mi_addnode(rD01,zD01); rD02= dMagnet/2; zD02= zD01; mi_addnode(rD02,zD02); rD03= rD02; zD03= zD01-hDeckel; mi_addnode(rD03,zD03); rD04= rD01; zD04= zD03; mi_addnode(rD04,zD04); mi_seteditmode ("segments"); mi_addsegment ( rD01,zD01 , rD02,zD02 ); mi_addsegment ( rD02,zD02 , rD03,zD03 ); mi_addsegment ( rD03,zD03 , rD04,zD04 ); mi_addsegment ( rD04,zD04 , rD01,zD01 ); --------------------------------- mi_seteditmode ("blocks"); -- Block "Stahl" in Deckelmitte-- r0_D=rD01+(rD02-rD01)/2; z0_D=zD03+(zD02-zD03)/2; mi_addblocklabel(r0_D, z0_D); mi_selectlabel(r0_D,z0_D); mi_setblockprop ("Stahl",1,0,"<None>",0,0,0); mi_clearselected();
Arbeitsluftspalt (Topf/Anker)
Es genügen zwei zusätzliche senkrechte Linien-Segmente, um den Arbeitsluftspalt als Bereich abzugrenzen. Dafür kann man bereits definierte Knoten von Topf und Anker nutzen:
-- -- ********************************************* mi_seteditmode("segments");-- L=Arbeitsluftspalt (Topf/Anker) ************* -- -- ********************************************* mi_addsegment ( rA04,zA04 , rT01,zT01 ); mi_addsegment ( rA03,zA03 , rT02,zT02 ); -------------------------------- mi_seteditmode ("blocks"); -- Block "Luft" in Spaltmitte -- r0_L=rA04+(rA03-rA04)/2; z0_L=zT01+(zA04-zT01)/2; mi_addblocklabel(r0_L, z0_L); mi_selectlabel(r0_L,z0_L); mi_setblockprop ("Luft",1,0,"<None>",0,0,0); mi_clearselected();
Restspalt (Deckel/Topf)
- Zur Verdeutlichung wurde der Restspalt sDeckel temporär auf 0.1 mm vergrößert.
- Für die Abgrenzung des Bereiches benötigt man einen zusätzlichen Knoten D05 am Deckel und zwei senkrechte Segmente:
-- -- ********************************************* mi_seteditmode ("nodes"); -- R=Restspalt (Deckel/Topf) ******************* -- -- ********************************************* rD05= rT05; zD05= zD03; mi_addnode(rD05,zD05); mi_seteditmode ("segments"); mi_addsegment ( rD05,zD05 , rT05,zT05 ); mi_addsegment ( rD03,zD03 , rT06,zT06 ); -------------------------------- mi_seteditmode ("blocks"); -- Block "Luft" in Spaltmitte -- r0_R=rD05+(rD03-rD05)/2; z0_R=zT05+(zD05-zT05)/2; mi_addblocklabel(r0_R, z0_R); mi_selectlabel(r0_R,z0_R); mi_setblockprop ("Luft",1,0,"<None>",0,0,0); mi_clearselected();
Führungsspalt (Deckel/Anker)
- Zur Verdeutlichung wurde der Führungsspalt sGleit temporär auf 0.2 mm vergrößert.
- Für die Abgrenzung des Bereiches benötigt man zwei zusätzliche Knoten A05 und A06 am Anker und zwei waagerechte Segmente:
-- -- ********************************************* mi_seteditmode ("nodes"); -- F=Führungsspalt (Deckel/Anker) ************** -- -- ********************************************* rA05= rD01-sGleit; zA05= zD01; mi_addnode(rA05,zA05); rA06= rA05; zA06= zD04; mi_addnode(rA06,zA06); mi_seteditmode ("segments"); mi_addsegment ( rA05,zA05 , rD01,zD01 ); mi_addsegment ( rA06,zA06 , rD04,zD04 ); -------------------------------- mi_seteditmode ("blocks"); -- Block "Luft" in Spaltmitte -- r0_F=rA05+(rD01-rA05)/2; z0_F=zA06+(zA05-zA06)/2; mi_addblocklabel(r0_F, z0_F); mi_selectlabel(r0_F,z0_F); mi_setblockprop ("Luft",1,0,"<None>",0,0,0); mi_clearselected();
Bohrung
Um die Vernetzung in der Bohrung unabhängig von der Kugelsphäre steuern zu können, sollte man den Bereich der Bohrung abgrenzen. Man benötigt dafür zwei zusätzliche Knoten und zwei waagerechte Segmente:
-- -- ********************************************* mi_seteditmode ("nodes"); -- B=Bohrung *********************************** -- -- ********************************************* rB01= 0; zB01= zA01; mi_addnode(rB01,zB01); rB02= 0; zB02= zT08; mi_addnode(rB02,zB02); mi_seteditmode ("segments"); mi_addsegment ( rB01,zB01 , rA01,zA01 ); mi_addsegment ( rB02,zB02 , rT08,zT08 );---------------------------------- mi_seteditmode ("blocks"); -- Block "Luft" in Bereichsmitte- r0_B=rA01/2; z0_B=0; mi_addblocklabel(r0_B, z0_B); mi_selectlabel(r0_B,z0_B); mi_setblockprop ("Luft",1,0,"<None>",0,0,0); mi_clearselected();
Wickelspalt (Spule/Eisenkreis)
Der Luftraum um die Spulenwicklung ist bereits komplett als Bereich abgegrenzt. Es fehlt nur das Blocklabel:
-- -- ********************************************* mi_seteditmode ("blocks"); -- W=Wickelspalt ******************************* -- -- ********************************************* r0_W=rT03+(rS04-rT03)/2; z0_W=zS04+(zS01-zS04)/2; --> in Mitte innerer Spalt mi_addblocklabel(r0_W, z0_W); mi_selectlabel(r0_W,z0_W); mi_setblockprop("Luft",1,0,"<None>",0,0,0); mi_clearselected();