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-Console 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-Console: showconsole(); -- LUA-Console ö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 Equipotentiallinien ein print ("R=", R, "[Ohm]") -- Werte in Outputfeld der LUA-Cosole print (" mit v=", v, "[V]"); print (" und i=", i, "[A]");