Software: FEMM - Stromfluss - LUA-Script
In der Übung (elektrostatischen Feld) haben wir Erfahrung mit der Entwicklung von LUA-Scripten gewonnen. Die vollständige Parametrisierung mit allen konstruktiv und technologisch relevanten Parametern soll auch diesmal das Ziel für den Aufbau eines scriptbasierten FEM-Modells darstellen. Die Prozess-Schritte, welche wir soeben auf dem Niveau der grafischen Bedienoberfläche ausführten, werden wir unter diesem Aspekt als LUA-Script entwickeln.
Infolge der knappen Übungszeit beschränkt sich die Script-Entwicklung wieder auf das Nachvollziehen der vorgegebenen Script-Abschnitte (Copy & Paste). Dazu öffnen wir einen geeigneten Script-Editor (z.B. Crimson-Editor) und die LUA-Konsole des FEMM-Programms:
- Teilnehmer der Lehrveranstaltung speichern die neue Textdatei als LaserTrimm_xx.LUA (mit xx=Teilnehmer-Nr.).
Script-Entwicklung
1. Parameter:
Wir werden weitestgehend die kompletten Dimensionierungsrechnungen in den Parameter-Abschnitt integrieren. Dabei berücksichtigen wir sofort die Abmessungen der Trimmkerbe, obwohl sie erst später im FEM-Modell benötigt werden.
Man kann die "Parameter" in zwei Gruppen einteilen:
- a) Funktionelle und technologische Parameter
- Hier kann der Modell-Nutzer seine speziellen Anforderungen an den Widerstand und die technologischen Prozessgrößen in Form von Werten vorgeben:
-- Funktionelle und technologische Parameter xx=00; -- Teilnehmer-Nr. 00 bis 30 s=25; -- Schnittbreite des Laser-Strahls [µm] Ls=500; -- aktuelle Länge L-Schnitt [µm] bz=200; -- Breite eines Zuschlags für Fertigung [µm] d=20; -- Schichtdicke in µm = Dicke 2D-Elemente RF=100; -- Nennwert Flächenwiderstand der Paste [Ohm/Quadrat] Pmax=6.2; -- max. zul. Leistungsdichte in Paste [W/cm²] RN=240; -- Nennwert nach Trimmen [Ohm] Szul=0.02; -- zulässige relative Toleranz von RN PV=0.2; -- max. Verlustleistung im Betrieb [W] SF=0.3; -- Fertigungsstreuung ungetrimmter Widerstand (rel.)
- b) Berechnete Geometrie- und Material-Parameter
- Im Unterschied zur manuellen Dimensionierung werden im Folgenden die berechneten geometrischen Größen nicht gerundet. Da dies für die Fertigung keine Bedeutung hat, werden die berechneten "krummen" Werte verwendet:
-- Berechnete Geometrie- und Material-Parameter
Ru=RN*(1-SF)*(1+Szul); -- notw. Nennwert ungetrimmter Widerstand [Ohm]
PWCR=Pmax*0.5; -- Leistungsdichte Worst-Case-Resistor [W/cm²]
Bu= sqrt(PV*RF/(PWCR*Ru))*cm/um; -- Breite Widerstand [cm] -> [µm]
L=Bu*Ru/RF; -- Länge des Widerstands [µm]
BgetrWCR=0.5*Bu; -- Breite des Reststegs bei max. Trimmkerbe
R0=(1-xx/100)*Ru; -- konkreter Wert ungetrimmter Widerstand [Ohm]
bk=Bu*(0.05+1.05*(1-R0/RN))+bz; -- Breite der Trimmkerbe für P-Schnitt [µm]
-- mit 5% Druck- und Pos.-Toleranz und Zuschlag
Kappa=1/((1-xx/100)*RF*d*um);-- spez. Leitfähigkeit (konkr.Teilnehmer) [S/m]
-- Kontrollausgabe auf die LUA-Konsole:
showconsole(); -- LUA-Konsole öffnen, falls Script als Datei ausgeführt
print ("Ru =",Ru,"[Ohm]");
print ("Bu =",Bu,"[µm]");
print ("L =",L,"[µm]");
print ("bk =",bk,"[µm]");
print ("Kappa =",Kappa,"[S/m]");
print ("R0 =",R0,"[Ohm] -> 'Sollwert' vor dem Trimmen in FEM-Rechnung!");
2. Definition des Problem-Typs
-- Definition des Problem-Typs ================================================
create(3); -- 0=magnetic|1=electrostatic|2=heatflow|3=currentflow
ci_probdef("micrometers","planar",0,1e-8,d,30);
-- 1e-8=Max.Fehler für Solver
-- 30° =Min.Winkel für Netz
3. Geometrie
Die markanten Punkte der Geometrie sind laut folgender Skizze durchnummeriert:
-- Geometrie (alle Abmessungen in µm!)=========================================
ci_seteditmode ("nodes") -- ungetrimmtes Rechteck *************************
x01= 0; y01= 0; ci_addnode (x01,y01);
x02= 0; y02= Bu; ci_addnode (x02,y02);
x03= L; y03= Bu; ci_addnode (x03,y03);
x04= L; y04= 0; ci_addnode (x04,y04);
ci_zoomnatural(); ci_zoomout(); -- Zoom einschließlich Kanten im Bild
ci_seteditmode ("segments")
ci_addsegment ( x01,y01 , x02,y02 );
ci_addsegment ( x02,y02 , x03,y03 );
ci_addsegment ( x03,y03 , x04,y04 );
ci_addsegment ( x04,y04 , x01,y01 );
4. Material der Paste
Das Block-Label für die Definition des Pasten-Bereiches muss unabhängig von den Abmessungen immer innerhalb des Rechtecks liegen. Außerdem darf dieses Label nicht mit dem späteren L-Schnitt kollidieren. Deshalb wird das Label unterhalb des oberen Rechteck-Randes mittig platziert. Global soll eine automatische Vernetzung des gesamten Bereiches erfolgen. Nur an kritischen Stellen wird die Maschengröße an den Segmenten des Randes individuell angepasst:
-- Material fuer Widerstand (Mesh Size=Auto) ==================================
-- ci_addmaterial ("name", ox, oy, ex, ey, ltx, lty)
-- ox,oy = el.Leistfähigkeit [S/m]
-- ex,ey = rel. el. Dielektrizitätskonst.
-- ltx,lty= Umpolarisierungsverluste
ci_addmaterial ("Paste", Kappa, Kappa, 1, 1, 0, 0); -- Paste
ci_seteditmode ("blocks") -- Label wegen L-Schnitt mittig 1/10 vom oberem Rand
x0_Paste= 0.5*L; y0_Paste= 0.9*Bu;
ci_addblocklabel(x0_Paste, y0_Paste); ci_selectlabel (x0_Paste,y0_Paste);
-- ci_setblockprop("blockname", automesh, meshsize, group);
ci_setblockprop ("Paste" , 1 , 0 , 0); ci_clearselected();
5. Randbedingungen (Conductor Property)
Segmente, welche mit Randbedingungen versehen sind, sollten hinreichend fein vernetzt werden. Unabhängig von den konkreten Abmessungen wird im Beispiel eine Maschengröße von 1/50 der Segmentlänge definiert:
-- Randbedingungen über Conductor Property mit Vorgabe Maschengröße ===========
--
-- ci_addconductorprop ("name", v, c, type: 1=v/0=c)
ci_addconductorprop ("Null", 0, 0 , 1 );--voltage
ci_addconductorprop ("Strom", 0, 0.01 , 0 );--current
ci_seteditmode ("segments")
-- ci_selectsegment(x,y) -> Mitte xs,ys des Segments P1,P2 nutzen:
-- xs=x1+(x2-x1)/2; ys=y1+(y2-y1)/2;
-- Links mit Nullpotential (SegL= 01...02)
xs_L=x01+(x01-x02)/2; ys_L=y01+(y02-y01)/2;
ci_selectsegment(xs_L,ys_L);
-- ci_setsegmentprop("bound.",elem.size,automesh,hide,group,"cond.name")
ci_setsegmentprop("<None>",Bu/50 , 0 , 0 , 0 , "Null");
ci_clearselected();
-- Rechts mit Stromeinspeisung (SegR= 03...04)
xs_R=x03+(x04-x03)/2; ys_R=y03+(y04-y03)/2;
ci_selectsegment(xs_R,ys_R);
ci_setsegmentprop("<None>",Bu/50 , 0 , 0 , 0 , "Strom");
ci_clearselected();
6. Vernetzung und Berechnung
-- Vernetzung und Berechnung ==================================================
ci_saveas("e:\\femm\\LaserTrimm.fec"); -- Speichern in vorh. Ordner
ci_createmesh(); --> nur gespeichertes Modell wird vernetzt!
ci_analyze(0); -- Solverfenster 0=minimiert / 1=sichtbar
ci_loadsolution(); -- öffnet Ergebnisfenster für Postprozess
7. Ergebnisse (Postprcessing)
-- Felddarstellung (normiert) und Widerstandsberechnung =======================
v,i = co_getconductorproperties("Strom");
R = v/i;
co_showmesh();
co_zoomnatural(); co_zoomout(); -- Zoom einschließlich Kanten im Bild
-- co_showdensityplot(legend,gscale,upper_D,lower_D,type);
-- 0|1 0=color, min , max , 0=V|1=D|2=E
co_showdensityplot( 1 , 0 , 0 , v , 0 );
co_showcontourplot(20,0,v); -- blendet 20 Aequipotentiallinien ein
print ("R=", R, "[Ohm]") -- Werte in Outputfeld der LUA-Konsole
print (" mit v=", v, "[V]");
print (" und i=", i, "[A]");



