[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

DE8916116U1 - Einrichtung zur Neubeschichtung von stereolithographischen Schichten - Google Patents

Einrichtung zur Neubeschichtung von stereolithographischen Schichten

Info

Publication number
DE8916116U1
DE8916116U1 DE8916116U DE8916116U DE8916116U1 DE 8916116 U1 DE8916116 U1 DE 8916116U1 DE 8916116 U DE8916116 U DE 8916116U DE 8916116 U DE8916116 U DE 8916116U DE 8916116 U1 DE8916116 U1 DE 8916116U1
Authority
DE
Germany
Prior art keywords
level
layer
smoothing member
over
previously formed
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE8916116U
Other languages
English (en)
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
3D Systems Inc
Original Assignee
3D Systems Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 3D Systems Inc filed Critical 3D Systems Inc
Priority claimed from EP89309762A external-priority patent/EP0361847B1/de
Publication of DE8916116U1 publication Critical patent/DE8916116U1/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G05CONTROLLING; REGULATING
    • G05DSYSTEMS FOR CONTROLLING OR REGULATING NON-ELECTRIC VARIABLES
    • G05D9/00Level control, e.g. controlling quantity of material stored in vessel
    • G05D9/12Level control, e.g. controlling quantity of material stored in vessel characterised by the use of electric means
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B29WORKING OF PLASTICS; WORKING OF SUBSTANCES IN A PLASTIC STATE IN GENERAL
    • B29CSHAPING OR JOINING OF PLASTICS; SHAPING OF MATERIAL IN A PLASTIC STATE, NOT OTHERWISE PROVIDED FOR; AFTER-TREATMENT OF THE SHAPED PRODUCTS, e.g. REPAIRING
    • B29C41/00Shaping by coating a mould, core or other substrate, i.e. by depositing material and stripping-off the shaped article; Apparatus therefor
    • B29C41/02Shaping by coating a mould, core or other substrate, i.e. by depositing material and stripping-off the shaped article; Apparatus therefor for making articles of definite length, i.e. discrete articles
    • B29C41/12Spreading-out the material on a substrate, e.g. on the surface of a liquid
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B29WORKING OF PLASTICS; WORKING OF SUBSTANCES IN A PLASTIC STATE IN GENERAL
    • B29CSHAPING OR JOINING OF PLASTICS; SHAPING OF MATERIAL IN A PLASTIC STATE, NOT OTHERWISE PROVIDED FOR; AFTER-TREATMENT OF THE SHAPED PRODUCTS, e.g. REPAIRING
    • B29C64/00Additive manufacturing, i.e. manufacturing of three-dimensional [3D] objects by additive deposition, additive agglomeration or additive layering, e.g. by 3D printing, stereolithography or selective laser sintering
    • B29C64/10Processes of additive manufacturing
    • B29C64/106Processes of additive manufacturing using only liquids or viscous materials, e.g. depositing a continuous bead of viscous material
    • B29C64/124Processes of additive manufacturing using only liquids or viscous materials, e.g. depositing a continuous bead of viscous material using layers of liquid which are selectively solidified
    • B29C64/129Processes of additive manufacturing using only liquids or viscous materials, e.g. depositing a continuous bead of viscous material using layers of liquid which are selectively solidified characterised by the energy source therefor, e.g. by global irradiation combined with a mask
    • B29C64/135Processes of additive manufacturing using only liquids or viscous materials, e.g. depositing a continuous bead of viscous material using layers of liquid which are selectively solidified characterised by the energy source therefor, e.g. by global irradiation combined with a mask the energy source being concentrated, e.g. scanning lasers or focused light sources
    • GPHYSICS
    • G01MEASURING; TESTING
    • G01FMEASURING VOLUME, VOLUME FLOW, MASS FLOW OR LIQUID LEVEL; METERING BY VOLUME
    • G01F23/00Indicating or measuring liquid level or level of fluent solid material, e.g. indicating in terms of volume or indicating by means of an alarm
    • G01F23/22Indicating or measuring liquid level or level of fluent solid material, e.g. indicating in terms of volume or indicating by means of an alarm by measuring physical variables, other than linear dimensions, pressure or weight, dependent on the level to be measured, e.g. by difference of heat transfer of steam or water
    • G01F23/28Indicating or measuring liquid level or level of fluent solid material, e.g. indicating in terms of volume or indicating by means of an alarm by measuring physical variables, other than linear dimensions, pressure or weight, dependent on the level to be measured, e.g. by difference of heat transfer of steam or water by measuring the variations of parameters of electromagnetic or acoustic waves applied directly to the liquid or fluent solid material
    • G01F23/284Electromagnetic waves
    • G01F23/292Light, e.g. infrared or ultraviolet
    • G01F23/2921Light, e.g. infrared or ultraviolet for discrete levels
    • GPHYSICS
    • G01MEASURING; TESTING
    • G01FMEASURING VOLUME, VOLUME FLOW, MASS FLOW OR LIQUID LEVEL; METERING BY VOLUME
    • G01F23/00Indicating or measuring liquid level or level of fluent solid material, e.g. indicating in terms of volume or indicating by means of an alarm
    • G01F23/30Indicating or measuring liquid level or level of fluent solid material, e.g. indicating in terms of volume or indicating by means of an alarm by floats
    • G01F23/32Indicating or measuring liquid level or level of fluent solid material, e.g. indicating in terms of volume or indicating by means of an alarm by floats using rotatable arms or other pivotable transmission elements
    • G01F23/36Indicating or measuring liquid level or level of fluent solid material, e.g. indicating in terms of volume or indicating by means of an alarm by floats using rotatable arms or other pivotable transmission elements using electrically actuated indicating means
    • G01F23/366Indicating or measuring liquid level or level of fluent solid material, e.g. indicating in terms of volume or indicating by means of an alarm by floats using rotatable arms or other pivotable transmission elements using electrically actuated indicating means using optoelectrically actuated indicating means
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B29WORKING OF PLASTICS; WORKING OF SUBSTANCES IN A PLASTIC STATE IN GENERAL
    • B29KINDEXING SCHEME ASSOCIATED WITH SUBCLASSES B29B, B29C OR B29D, RELATING TO MOULDING MATERIALS OR TO MATERIALS FOR MOULDS, REINFORCEMENTS, FILLERS OR PREFORMED PARTS, e.g. INSERTS
    • B29K2995/00Properties of moulding materials, reinforcements, fillers, preformed parts or moulds
    • B29K2995/0037Other properties
    • B29K2995/0072Roughness, e.g. anti-slip
    • B29K2995/0073Roughness, e.g. anti-slip smooth

Landscapes

  • Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Fluid Mechanics (AREA)
  • Mechanical Engineering (AREA)
  • Optics & Photonics (AREA)
  • Chemical & Material Sciences (AREA)
  • Materials Engineering (AREA)
  • Electromagnetism (AREA)
  • Thermal Sciences (AREA)
  • Manufacturing & Machinery (AREA)
  • Automation & Control Theory (AREA)
  • Non-Silver Salt Photosensitive Materials And Non-Silver Salt Photography (AREA)
  • Physical Vapour Deposition (AREA)
  • Heating, Cooling, Or Curing Plastics Or The Like In General (AREA)
  • Manufacturing Optical Record Carriers (AREA)

Description

20. September 1993
3D Systems, Inc.
D 17337GBM F/La/gi
Unterlagen, die der Eintragung des Gebrauchsmusters
zugrunde zu legen sind
Neubeschichten von stereolithographischen Schichten
Diese Erfindung bezieht sich allgemein auf ein verbessertes stereolithographisches System für die Produktion von dreidimensionalen Gegenständen.
In den letzten Jahren sind "stereolithographische" Systeme, wie z.B. die, die in dem US-Patent Nr. 4,575,330, betitelt 'APPARATUS FOR PRO-DUCTION OF THREE-DIMENSIONAL OBJECTS BY STEREOLITHOGRAPHY" beschrieben sind, in Gebrauch gekommen. Grundsätzlich ist Stereolithographie ein Verfahren zum automatischen Aufbauen komplexer dreidimensionaler Kunststoffteile durch aufeinanderfolgendes Aushärten bzw. Vernetzen einer Vielzahl von dünnen Schichten einer polymerisierbaren Flüssigkeit aufeinander, bis alle der dünnen Schichten zusammenverbunden sind, um einen ganzen Teil zu bilden. Jede polymerisierte Schicht ist im wesentlichen ein dünner Querschnitt des gewünschten dreidimensionalen Gegenstandes. Bei dieser Technologie werden die Teile buchstäblich in einer Wanne von flüssigem Kunststoff aufwachsen gelassen. Dieses Herstellungsverfahren ist extrem leistungsfähig für ein schnelles Reduzieren von Entwurfsideen zu einer physischen Form und zum Herstellen von Prototypen. Außerdem können komplexe Teile schnell ohne maschinelle Bearbeitung gemacht werden. Da das System
einen Computer verwendet, um den Querschnitt der Muster zu erzeugen, kann das System leicht mit CAD/CAM-Systemen verbunden werden.
Derzeit bevorzugte Polymere werden durch ultraviolettes (UV) Licht ausgehärtet und ihr Aushärten ist schnell genug, um sie zu praktischen Modellbaumaterialien zu machen. Die Flüssigkeit, die nicht polymerisiert wird, wenn ein Teil gemacht wird, bleibt verwendbar und verbleibt in der Wanne, wenn aufeinanderfolgende Teile gemacht werden. Ein Ultraviolet-Laser erzeugt einen kleinen intensiven UV-Lichtpunkt, der &iacgr;&ogr; über die Flüssigkeitsoberfläche mit einem Galvanometerspiegel-X-Y-Scanner in einem vorbestimmten Muster bewegt wird.. Der Scanner wird durch computer-erzeugte Vektoren oder ähnliches angetrieben. Präzise komplexe Muster können schnell mit dieser Technik produziert werden.
Das Stereolithographiesystem umfaßt einen Laserscanner, eine Wanne oder einen Behälter zum Enthalten der polymerisierbaren Flüssigkeit, und eine Gegenstandtrageplattform, die in der Lage, gehoben und in den Tank abgesenkt zu werden, und einen Steuercomputer. Das System ist programmiert, um automatisch ein Kunststoffteil durch Bilden eines dünnen Querschnittes zu einem Zeitpunkt und durch Aufbauen des gewünschten dreidimensionalen Gegenstandes Schicht um Schicht herzustellen.
Bei typischen Stereolithographieverfahren wird eine dünne Schicht von viskoser aushärtbarer Kunststoffflüssigkeit auf eine Oberfläche aufgebracht, die eine zuvor ausgehärtete Schicht sein kann, und, nachdem eine ausreichende Zeit für die dünne Schicht von polymerisierbarer Flüssigkeit verstrichen ist, damit sie sich durch die Schwerkraft glättet, ein computer-gesteuerter Strahl wird über die dünne Flüssigkeitsschicht bewegt, um ausreichend die Kunststoffflüssigkeit auszuhärten, so daß darauffolgende
Schichten darauf aufgebracht werden können. Die Wartöperiode, damit die dünne Schicht sich ausgleicht, variiert abhängig von mehreren Faktoren, wie z.B. die Viskosität der polymerisierbaren Flüssigkeit, die Schichtdicke, und ähnlichem.
Typischerweise wird die ausgehärtete Schicht, die von einer vertikal beweglichen Gegenstandstrageplattform getragen wird, unter die Oberfläche eines Bades der viskosen polymerisierbaren Flüssigkeit um eine Distanz eingetaucht, die gleich der gewünschten Schichtdicke ist, so daß &iacgr;&ogr; der flüssige Kunststoff über die ausgehärtete Schicht fließen kann. Wenn sich die Oberfläche ausgleicht, ist die Schicht fertig zum Aushärten durch Bestrahlung.
Für weitere Details der Stereolithographie wird sich auf das US-Patent is Nr. 4,575,330 und die folgenden anhängigen US-Patentanmeldungen bezogen, die hierin durch Bezug in ihrer Gesamtheit eingebunden werden, einschließlich beigefügten Anhängen oder darin durch Bezug eingebundenem Material, wie es vollständig bekanntgemacht wird:
US-Patentanmeldung Seriennr. 339,246, eingereicht am 17. Aprü 1989, betitelt "STEREOLITHOGRAPHIC CURL REDUCTION";
US-Patentanmeldung Seriennr. 331,664, eingereicht am 31. März 1989, betitelt "METHOD AND APPARATUS FOR PRODUCTION OF HIGH RESOLLHTION THREE-DIMENSIONAL OBJECTS BY STEREOLJTHO-GRAPHY";
US-Patentanmeldung Seriennr. 183,015, eingereicht am 18. April 1988, betitelt "METHOD AND APPARATUS FOR PRODUCTION OF THREE-DIMENSIONAL OBJECTS BY STEREOLITHOGRAPHY";
US-Patentanmeldung Seriennr. 182,801, eingereicht am 18. April 1988, betitelt "METHOD AND APPARATUS FOR PRODUCTION OF THREE-DIMENSIONAL OBJECTS BY STEREOLITHOGRAPHY";
US-Patentanmeldung Seriennr. 268,429, eingereicht am 8. November 1988, betitelt "METHOD FOR CURING PARTIALLY POLYMERIZED PARTS";
US-Patentanmeldung Seriennr. 268,428, eingereicht am 8. November 1988, betitelt "METHOD FOR FINISHING PARTIALLY POLYMERIZED PARTS";
US-Patentanmeldung Seriennr. 268,408, eingereicht am 8. November 1988, betitelt "METHOD FOR DRAINING PARTIALLY POLYMERIZED PARTS";
US-Patentanmeldung Seriennr. 268,816, eingereicht am 8. November 1988, betitelt 'APPARATUS AND METHOD FOR PROFILING A BEAM";
US-Patentanmeldung Seriennr. 268,907, eingereicht am 8. November 1988, betitelt APPARATUS AND METHOD FOR CORRECTING FOR DRIFT IN PRODUCTION OF OBJECTS BY STEREOLITHOGRAPHY";
US-Patentanmeldung Seriennr. 268,837, eingereicht am 8. November 1988, betitelt APPARATUS AND METHOD FOR CALIBRATING AND NORMALIZING A STEREOLITHOGRAPHIC APPARATUS";
US-Patentanmeldung Seriennr. 249,399, eingereicht am 26. September 1988, betitelt "METHOD AND APPARATUS FOR PRODUCTION OF THREE-DIMENSIONAL OBJECTS BY STEREOLITHOGRAPHY";
US-Patentanmeldung Seriennr. 365,444, eingereicht am 12. Juni 1989, betitled "INTEGRATED STEREOLITHOGRAPHY"; und
US-Patentanmeldung Seriennr. 265,039, eingereicht am 31. Oktober 1988, betitelt APPARATUS AND METHOD FOR MEASURING AND CONTROLLING THE LEVEL OF A FLUID".
Was benötigt wurde und hierzuvor nicht verfügbar war," ist eine Einrichtung,, um die Zykluszeit zum Bilden jeder Schicht von Kunststoff zu reduzieren. Die vorliegende Erfindung befriedigt dieses Verlangen.
Diese Erfindung bezieht sich auch allgemein auf eine Einrichtung
zum Steuern des Niveaus eines Fluides, und insbesondere auf eine Einrichtung zum Messen und Steuern des Niveaus
des Arbeitsfluides in einer Stereolithographieeinrichtung.
&iacgr;&ogr; Viele wissenschaftliche Experimente und industrielle Anwendungen erfordern die Messung des Niveaus eines Fluides. Der ,Begriff "Niveau eines Fluides", wie er hier verwendet wird, bedeutet die Höhe der Oberfläche eines Fluides in einem Gravitationsfeld oder einem anderen beschleunigten Bezugsrahmen. Diese Oberfläche kann die Oberseite oder auch die Unterseite des Fluides sein (wenn das Fluid auf einem anderen Fluid fließt). Das Fluid kann der Ozean, das Benzin in dem Tank eines Automobils oder eine flüssige Chemiekalie in einer Teströhre sein, unter vielen Möglichkeiten. Verschiedene Einrichtungen sind über die Jahre eingeführt worden, um Niveaus von solchen Fluiden zu messen, einschließlich Eintauchstäben, Linien, die auf die Seite von Pfählen gemalt wurden, Markierungen auf der Seite von Teströhren, Schwimmer und ähnliches. Ein Bedürfnis existiert jedoch für eine Einrichtung, die sehr präzise und zuverlässig das Niveau eines Fluides messen kann Eine Einrichtung dieser Art ist insbesondere bei industriellen Anwendungen nützlich und kann mit einer Niveauaufrechterhaltungseinrichtung wie z.B. einem Eintauchkolben, einem Diaphragma oder Steuerungen für eine Pumpe gekoppelt sein, um das Niveau des Fluides bei jeder gewünschten Höhe zu halten.
Insbesondere erfordern stereolithographische Maschinen eine sehr präzise Steuerung des Niveaus eines Arbeitsfluides. Das US-Patent Nr. 4,575,330 für Charles W. Hull, bereits zuvor erwähnt, offenbart eine Einrichtung zur Produktion von dreidimensionalen Gegenständen durch Stereolithographie. Das in der stereolithographischen Einrichtung verwendete Arbeitsfluid ist gewöhnlicherweise eine Photopolymerflüssigkeit, die bei der Anwendung von ultraviolettem (UV) Licht aushärtbar ist. Wie in dem US-Patent Nr. 4,575,330 bemerkt ist, muß das Niveau der Arbeitsflüssigkeit in dem bevorzugten Ausführungsbeispiel bei einem konstanten
&iacgr;&ogr; Niveau gehalten werden, so daß der Strahl des UV-Lichtes scharf im Fokus auf einer festen Ebene bleiben wird.
Cr
Die Gesamtintensität und das Intensitätsprofil ("Strahlprofil") des Strahles des UV-Lichtes an der Oberfläche des flüssigen Photopolymers wird in Zusammenwirkung mit anderen Faktoren (wie z.B. die Charakteristiken des flüssigen Polymers und die Länge der Zeit, die der Strahl in einem einzelnen Lichtpunkt bleibt), die Tiefe und das Profil des Photopolymers bestimmen, das dadurch ausgehärtet oder polymerisiert wird, das es dem Strahl ausgesetzt wird. Das Strahlprofil wird mit dem Niveau des flüssigen Photopolymers variieren, da der Strahl fokussiert ist, um ein bekanntes Profil bei einem vorbestimmten Niveau des flüssigen Photopolymers zu haben. Wenn das flüssige Photopolymer ein Niveau unterschiedlich von dem vorbestimmten hat, wird die Differenz in dem Strahlprofil die Breite des ausgehärteten Photopolymers und seine Tiefe ändern weg von der geplanten Tiefe und Breite.
Weiterhin, wenn das Niveau des flüssigen Photopolymers höher ist als das vorbestimmte Niveau, kann die Tiefe des ausgehärteten Photopolymers nicht ausreichend sein, um die zuvor ausgehärtete Schicht zu erreichen und mit ihr zusammenzuhaften, mit nachteiligen Konsequenzen
für die strukturelle Integrität des Gegenstandes, der gebildet wird. Wenn der Pegel niedriger ist, dann wird die neue Schicht dünner als geplant sein, was nachteilig für die Genauigkeit der Reproduktion des Gegenstandes ist.
Das Niveau des flüssigen Photopolymers muß aufrechterhalten werden trotz dem Schrumpfen, das durch Aushärten des flüssigen Photopolymers, Erhitzen, Verdampfen und ähnlichem verursacht wird. Bei früheren Versionen von stereolithographischen Einrichtungen wurde dieses Niveau
&iacgr;&ogr; durch Bereitstellen eines Überlaufkanales aufrecht erhalten. Das Niveau des flüssigen Photopolymers stieg bis und leicht über (wegen der Oberflächenspannung) den Überlaufkanal. Ein Überlaufkanal steuert jedoch nicht das Niveau des flüssigen Photopolymers mit ausreichender Präzision, um eine feinere Auflösung von Teilen zu ermöglichen, die durch eine stereolithographische Einrichtung gemacht werden. Demgemäß existiert ein Bedürfnis nach einer präziseren Einrichtung zum Messen des Niveaus eines Fluides.
Kurz und in allgemeinen Begriffen, die vorliegende Erfindung stellt ein neues und verbessertes Stereolithographiesystem zum Erzeugen eines dreidimensionalen Gegenstandes bereit durch Bilden aufeinanderfolgender dünne Querschnittsplättchen dieses Gegenstandes an der Fläche einer polymerisierbaren Flüssigkeit, die in Antwort auf eine geeignete Bestrahlungsstimulierung ausgehärtet wird. Die vorliegende Erfindung ist insbesondere auf ein verbessertes Stereolithographie -system
zum Reduzieren der Zykluszeit für jede Schicht, die durch dieses Verfahren gebildet wird, gerichtet.
In Übereinstimmung mit der vorliegenden Erfindung wird zuerst eine Schicht von polymerisierbarer Flüssigkeit auf einer Oberfläche auf einer
Gegenstandtrageplattfonn aufgebracht. Überschüssige polymerisierbare Flüssigkeit wird von der Schicht abgestrichen durch Ziehen einer Klinge über die Oberfläche der Schicht, um eine glatte Schicht der gewünschten Dicke bereitzustellen. Ein Aushärtungsmedium, wie z.B. Bestrahlung, wird auf die obere oder Arbeitsoberfläche der geglätteten Schicht in einem vorausgewählten Muster gerichtet, um dadurch die Schicht ausreichend auszuhärten, so daß darauffolgende Schichten aufgebracht und ausgehärtet werden können auf die gleiche Weise, um den gewünschten dreidimensionalen Gegenstand zu formen.
&iacgr;&ogr; f
Bei einem derzeit bevorzugten Ausführungsbeispieljst eine Gegenstandstrageplattform, mit einer Oberfläche, auf der die Schichten aufgebracht werden, bereitgestellt und angepaßt, um in einem Bad der polymerisierbaren Flüssigkeit in einer Wanne oder in einem Behälter erhöht oder erniedrigt zu werden. Die Plattform wird in das Bad abgesenkt, so daß eine Oberfläche darauf, die die zuletzt ausgehärtete Schicht sein kann, unter der oberen Oberfläche des polymerisierbaren Flüssigkeitsbades ist, um eine Distanz, die im allgemeinen größer als die gewünschte Dicke der Schicht ist. Die Plattform wird dann angehoben, so daß die viskose polymerisierbare Flüssigkeit auf der Oberfläche über der oberen Oberfläche des Bades ist. Ein sich horizontal bewegendes Abstreifmesser streift überflüssige polymerisierbare Flüssigkeit ab, so daß eine flüssige Schicht von Polymer der gewünschten Dicke gebildet wird. Die Plattform wird dann abgesenkt, so daß die obere Oberfläche der geglätteten Schicht der polymerisierten Flüssigkeit im wesentlichen auf dem gleichen Niveau wie das Bad ist. Aushärtende Strahlung wird dann auf die geglättete Schicht in einem graphischen Muster darauf gerichtet, um die dünne Flüssigkeitsschicht auszuhärten, so daß eine oder mehr aufeinanderfolgende Schichten der polymerisierbaren Rüssigkeit darauf aufgebracht werden können. Die Gegenstandtrageplattform mit der teilweise ausge-
härteten festen Schicht darauf wird dann weiter abgesenkt, weg von der Oberfläche des Bades, so daß die polymerisierbare Flüssigkeit auf die feste Schicht fließen kann und der Zyklus wiederholt werden kann.
Der Prozeß setzt sich fort mit der Bildung einer Vielzahl aufeinanderfolgend gebildeter Schichten, wobei diese Schichten zusammen verbunden werden, bis der gewünschte dreidimensionale Gegenstand gebildet worden ist. Das Endprodukt der Stereolithographie muß eine ausreichende Festigkeit für die darauffolgende Handhabung haben. Gewöhnlicherweise wird dem Gegenstand eine letzte Aushärtung r nach dem Formen gegeben.
Sorgfalt sollte während der Verfahren ausgeübt werden, um zu gewährleisten, daß das Niveau von polymensierbarer Flüssigkeit in dem Bad bei einem konstanten Niveau gehalten wird, insbesondere, wenn die ausgeglichene Schicht von polymerisierbarer Flüssigkeit in das Bad abgesenkt und durch Strahlung ausgehärtet wird, weil die Flüssigkeit in dem Bad im wesentlichen die Grenzen von ausgeglichenen Schichten von Flüssigkeit bildet. In einem gegenwärtig bevorzugten Ausführungsbeispiel wird das Badniveau auf eine geeignete Weise erfaßt, ein Niveau wird mit dem gewünschten Niveau verglichen und in Antwort auf irgendeinen Unterschied darin wird ein Kolben oder ein Eintauchkolben in dem Bad gehoben oder in das Bad gesenkt, um das Niveau an dem gewünschten Einstellpukt zu steuern.
Der dreidimensionale Gegenstand wird auf einer horizontalen Schicht bei einem Durchgang gebildet durch Bewegen eines Strahles, wie z.B. ultraviolettem Licht von einem Helium-Cadmium-Laser, über die Oberfläche des photon-aushärtbaren Harzes, wobei er die Flüssigkeit verfestigt,
wo er sie trifft. Absorption in dem Harz hindert das Laserlicht daran, tief einzudringen und erlaubt, daß eine dünne Schicht gebildet wird.
Die vorliegende Erfindung stellt auch eine neue und verbesserte Einrichtung zum Messen des Niveaus eines Fluides bereit, die eine Einrichtung zum Erzeugen eines Strahles von elektromagnetischer Strahlung und einen Sensor aufweist, der ein elektrisches Signal in Antwort auf Änderungen in der Position des elektromagnetischen Strahles, der auf den Sensor auftrifft, variiert. Der Strahlsensor ist mit einem Abstand
&iacgr;&ogr; senkrecht zu dem Niveau des Fluides montiert. Der Strahl ist längs eines ersten optischen Pfades (der Begriff "optischer Pfad" wird verwendet, obwohl der Strahl nicht aus sichtbarem Licht sein muß) gegen die Oberfläche des Fluides gerichtet, bei einem Winkel bezüglich der Oberfläche des Fluides, so daß ein erfaßbarer Abschnitt des Strahles von der Oberfläche des Fluides längs einem zweiten optischen Pfad zu dem Sensor reflektiert wird. Änderungen in dem Niveau des Fluides werden den Punkt ändern, bei dem der Strahl auf den Sensor auftrifft und werden demgemäß Variationen in dem elektrischen Signal von dem Sensor verursachen. Dieses Signal kann benutzt werden, um Vorrichtungen zu steuern, die wiederum das Niveau des Fluides steuern, wie z.B. Pumpen, Diaphragmen oder Eintauchkolben.
Es wird angenommen, daß die Oberfläche des Fluides flach ist, oder daß sie bei dem gleichen Winkel mit Bezug zu dem Strahl bleibt, auch wenn die Höhe der Oberfläche des Fluides variieren kann. Demgemäß wird der Winkel, bei dem der Strahl reflektiert wird von der Oberfläche des Fluides, nicht variieren. Wenn die Oberfläche nicht flach ist, kann der Strahl nicht reflektiert werden, oder kann an unvorhersehbaren Winkern reflektiert werden. Wenn Wellen oder Turbulenzen erwartet werden, dann kann ein bespiegelter Schwimmer, der gewichtet ist, um Gieren,
Schleudern und Rollen zu vermeiden, auf der Oberfläche des Fluides plaziert werden, um den Strahl zu reflektieren.
In einem bevorzugten Ausführungsbeispiel ist die Einrichtung zum Erzeugen eines Strahles von elektromagnetischer Strahlung ein Laser und der Sensor ist eine Vielzahl von verbundenen Photozellen, die von der Oberfläche des Fluides längs einer Richtung senkrecht zu der Oberfläche des Fluides angeordnet sind. Die Strahlung von dem Laser sollte bevorzugterweise nicht den Zustand des Fluides ändern. Elektronische Schaltungen sind bereitgestellt, um die elektrische Ausgabe-jeder der Photozellen zu vergleichen und demgemäß Bewegungen in der Position des Strahles zu erfassen, wenn er auf die Photozellen auftrifft "Wenn sich das Niveau des Fluides ändert, wird der Strahl nicht länger auf die Photozellen an dem gleichen Ort auftreffen. Eine Photozelle wird mehr
is von dem Strahl als zuvor empfangen und eine andere wird weniger als zuvor empfangen. Dies wird die elektrische Ausgabe von jeder der betroffenen Photozellen ändern. Eine Vergleichsschaltung wird diese Differenz erfassen und entweder ein Instrument antreiben, das das Niveau des Fluides anzeigt, oder eine Vorrichtung zum Ändern des Niveaus des Fluides (wie z.B. einen Eintauchkolben) oder beides.
Die Einrichtung zum Messen des Niveaus des Fluides der vorliegenden Erfindung ist schnell, zuverlässig und sehr empfindlich. Sie ist in der Lage sehr präzise das Niveau des Fluides zu bestimmen und konsequenterweise dieses Niveau sehr präzise zu halten. Derzeit kann eine Einrichtung zum Messen des Niveaus eines Fluides die gemäß der Erfindung gemacht ist, das Niveau eines Fluides messen (und halten) bei zumindests innerhalb plus oder minus 0,5 mil (plus oder minus 0,0005 Inches).
Zusammenfassend, das Stereolithographie -system der vorhegenden Erfindung stellt eine beträchtliche Reduktion der Zykluszeit für jede gebildete Schicht, Verbesserungen in der dimensionalen Genauigkeit und Erhöhungen in der Grünfestigkeit und der ausgehärteten Endfestigkeit bereit. Außerdem befriedigt die Niveaumeß- und Steuereinrichtung der vorliegenden Erfindung ein seit langem existierendes Bedürfnis nach einem System, das in der Lage ist schnell, zuverlässig und genau das Niveau eines Fluides zu messen.
&iacgr;&ogr; Das obige und andere Ziele und Vorteile der Erfindung werden offensichtlich werden aus der folgenden detaiUierteren Beschreibung, wenn sie in Verbindung mit der begleitenden Zeichnung von veranschaulichenden Ausführungsbeispielen genommen wird.
Fig. 1 ist eine Querschnittsansicht eines Stereolithographiesystems, das Merkmale der Erfindung verkörpert;
Fig. 2 ist eine perspektivische Ansicht des Systems, das in Fig. 1 gezeigt ist, die weiter das Ausführungsbeispiel, gezeigt in Fig. 1, veranschaulicht;
Fig. 3
bis 6 sind vereinfachte Querschnittsansichten des Behälters, gezeigt in Fig. 1, bei verschiedenen Stufen des Stereolithographieverfahrens;
Fig. 7 ist eine perspektivische Ansicht eines dreidimensionalen Gegenstandes, der in Übereinstimmung mit der vorliegenden Erfindung gemacht worden ist;
Fig. 8 ist eine perspektivische Ansicht eines Abschnittes, einer Stereolithographieeinrichtung mit einem bevorzugten Ausführungsbeispiel der Fluidniveau-Meßeinrichtung der vorliegenden Erfindung, die darauf montiert ist;
Fig. 9 ist eine Seitenschnittansicht des bevorzugten Ausfuhrungsbeispiels der Erfindung;
Fig. 10 ist eine Seitenschnittansicht des optischen Pfades, der von dem &iacgr;&ogr; Laserstrahl des bevorzugten Ausfuhrungsbeispieles der Erfindung
genommen wird unter Bedingungen von sich änderndem Fluidniveau und Einfallwinkel;
Fig. 11 ist eine Frontschnittansicht eines Bi-Zellen-Photosensors, der in dem bevorzugten Ausfuhrungsbeispiel der Erfindung benutzt wird;
Fig. 12 ist ein Blockdiagramm der mit dem Bi-Zellen-Photosensor verbundenen Elekronik des bevorzugten Ausführungsbeispieles der Erfindung;
Fig. 13 veranschaulicht das Problem des eingeschlossenen Volumens;
Fig. 14 veranschaulicht mit Gewinde versehene, zurückziehbare Stifte zum Einstellen des Klingenspaltes;
Fig. 15 stellt eine vergrößerte Ansicht des Stiftes, der in die Klinge montiert ist, dar;
Fig-16 veranschaulicht einen Querschnitt einer Klinge, die einen Angriffswinkel in der Richtung der Klingenbewegung hat;
Fig. 17
bis 19 veranschaulichen alternative Querschnittsformen für die Klinge von Fig. 16;
Fig. 20 veranschaulicht eine alternative Form für einen Niveau-erfassenden Schwimmer;
7.
Fig. 21 veranschaulicht eine Niveauerfassungseinrichtung einschließlich einem Schwimmer;
Fig. 22 ist ein Diagramm des optischen Detektors der Einrichtung von Fig. 21; und
Fig. 23 ist ein Flußdiagramm der wiederbeschichtenden Software, die in der SLA-250 verwendet wird.
Die Fig. 1 und 2 veranschaulichen schematisch das Stereolithographiesystem zum Bilden dreidimensionaler Gegenstände, das Merkmale der Erfindung verkörpert. Wie in diesen Zeichnungen gezeigt ist ein Behälter oder eine Wanne 10 bereitgestellt, um ein Bad 11 eines polymerisierbaren Fluides zu enthalten. Eine Gegenstandstrageplattform 12 ist in dem Behälter 10 angeordnet und ist angepaßt durch Rahmenelemente 13 und 14, um in dem Tank durch einen Motor (nicht gezeigt) gehoben und abgesenkt zu werden. Die Plattform 12 hat eine horizontale Oberfläche 15, auf der die dreidimensionalen Gegenstände in Übereinstimmung mit der Erfindung gebildet werden. Der Behälter 10 hat eine Zuflußrinne 16 in dem oberen Abschnitt einer Seitenwand des Behälters
10 und ein Eintauchkolben oder ein Kolben 17 ist in der Zuflußrinne angeordnet, um durch einen Motor 18 gehoben und gesenkt zu werden, um das Niveau der oberen Oberfläche 20 der polymerisierbaren Flüssigkeit in dem Behälter 10 zu steuern.
Das Niveau der oberen Oberfläche 20 des Bades 11 wird mittels einer Strahlungsquelle 21, wie z.B. einem HeNe-Laser, erfaßt, der gegen die obere Oberfläche 20 auf einen Winkel- und Strahlungssensor 22 gerichtet ist, der ein Bi-Zellen-Detektor sein kann. Die Position des Sensors 22 &iacgr;&ogr; ist eingestellt, um an einem komplementären Winkel bezüglich der oberen Oberfläche 20 zu sein, um die Strahlung _ vom HeNe-Laser zu empfangen. Ein Steuersystem 23 ist bereitgestellt, um die Bewegung des Eintauchkolbens 17 durch den Motor zu steuern.
Eine computergesteuerte Strahlungsquelle 24 ist über dem Bad 11 angeordnet, um Aushärtungsmedien, wie z.B. ultraviolette Strahlung oder andere Typen von aushärtender Strahlung, in einem vorbestimmten Muster über die obere Oberfläche 20 des Bades 11 zu richten, um die polymerisierbare Flüssigkeit in der Schicht über der Plattform auszuhärten, wo solche Strahlung darauf auftrifft. Die Bewegung und der Betrieb der Strahlungsquelle 24 und das Heben und Senken der Gegenstandstrageplattform 12 sind integrale Teile der Computersteuerung 25 des Systemes, wie es weiter hiernach beschrieben werden wird.
Eine Abstreifklinge 26 ist auf dem Oberteil des Behälters 10 montiert und angepaßt, um sich horizontal über dem Oberteil des Behälters zu bewegen. Ein Klingenträger 27 ist gleitbar auf Schienen 30 und 31 montiert, die längs einer Seite des Behälters 10 angeordnet sind. Eine mit einem Gewinde versehene Antriebswelle 32 passiert durch einen mit einem Gewinde versehenen Durchgang (nicht gezeigt) in dem !Gingen-
träger 27 und ihre Rotation durch einen Motor 33 bewegt den Klingenträger 27 und demgemäß die Klinge 26 horizontal über das Oberteil des Behälters 10.
Der Betrieb des Stereolithographiesystems, gezeigt in Fig. 1 und 2, ist am besten in der Folge von Fig. 3 bis 6 gezeigt. Beginnend mit Fig. 3 wird das stereolithographische Verfahren mit der Gegenstandstrageplattform 12 initiiert, die in dem Bad 11 von polymerisierbarer Flüssigkeit positioniert ist, so daß die horizontale Oberfläche 15 darauf bei einem
&iacgr;&ogr; kleinen Abstand von der oberen Oberfläche 20 des Bades angeordnet ist. Dieser Abstand ist größer als die gewünschte Dicke der Schicht von polymerisierbarer Flüssigkeit, die ausgehärtet werden soll. Die Schicht von polymerisierbarer Flüssigkeit direkt über der Oberfläche 15 wird die erste feste Schicht des dreidimensionalen Gegenstandes bilden, wenn sie ausgehärtet ist.
Der nächste Schritt in dem Prozeß ist in Fig. 4 gezeigt. Die Gegenstandstrageplattform 12 wird angehoben, so daß die Schicht 34 der polymerisierbaren Flüssigkeit auf der Oberfläche 15 über die obere Oberfläche 20 des Bades 11 gehalten wird. Die polymerisierbare Flüssigkeit ist ein relativ viskoses Fluid, so daß die Flüssigkeit nicht sofort über die Kanten der Oberfläche 15 auf der Plattform 12 läuft, wenn die Schicht aus dem Bad gehoben wird. Die Abstreifklinge 26 wird horizontal bewegt, so daß ihre untere Kante 35 überschüssige polymerisierbare Flüssigkeit von der Schicht 34 abstreift und dadurch die obere oder Arbeitsoberfläche 36 glättet. Geeignete Klingengeschwindigkeiten werden empirisch bestimmt, um ein gewünschtes Niveau zu der Arbeitsoberfläche 34 bereitzustellen. Außerdem können ein oder mehr Durchgänge von der Abstreifklinge 26 bei einer besonderen Geschwindigkeit benötigt werden, um eine glatte Niveauoberfläche 34 bereitzustellen. Typische
Klingengeschwindigkeiten können von ungefähr einem bis zehn Inches pro Sekunde reichen. Wenn polymerisierbare Flüssigkeiten mit niedriger Viskosität verwendet werden, können periphere Dämme angewendet werden, um die Flüssigkeit zu halten, bis sie polymerisiert ist.
Nachdem die Arbeitsoberfläche 36 der Schicht 34 ausgeglichen ist durch die Abstreifklinge 26, wird die Gegenstandshalteplattform 12 in das Bad 11 abgesenkt, wie in Fig. 5 gezeigt, so daß die geglättete Arbeitsoberfläche 36 der Schicht 34 nivelliert mit oder in der gleichen horizontalen
&iacgr;&ogr; Ebene wie die obere Oberfläche 20 des Bades 11 ist: Das polymerisierbare Fluid des Bades 11, das die Schicht 34 umgibt, bildet eine Schnittstelle 37, die im wesentlichen eine Wand ist, die die äußere Peripherie der Schicht 36 trägt. Irgendwelche Unterbrechungen der Arbeitsoberfläche 34 oder der oberen Oberfläche 20 des Bades 11, die durch das Eintauchen der Gegenstandstrageplattform 12 und der Schicht 34 in das Bad 11 verursacht werden, sind relativ gering und fallen schnell.
Die computergesteuerte Strahlungsquelle 24 wird betätigt nach einer kurzen Verzögerung, um irgendwelche Unterbrechungen in der oberen Oberfläche zu eliminieren, um Aushärtungsmedien, vorzugsweise UV-Strahlung oder andere geeignete Strahlung, über die Arbeitsoberfläche 36 der Schicht 34 in einem vorbestimmten Muster zu richten, um die polymerisierbare Flüssigkeit, auf die die Strahlung auftrifft, auszuhärten. Die Schicht 34 ist ausreichend ausgehärtet, so daß sie die notwendige Grünfestigkeit hat, um zusätzliche Schichten zu tragen, die darauffolgend auf eine ähnliche Weise aufgebracht werden, und um Handhaben des gebildeten Gegenstandes nach der Stereolithographie, aber vor der Endaushärtung, zu erleichtern.
Nach der Bestrahlung der Schicht 34 wird die Gegenstandstrageplattfonn 12 weiter abgesenkt, wie in Fig. 6 gezeigt, so daß die polymerisierbar? Flüssigkeit von dem Bad 11 über die zuvor ausgehärtete Schicht 34 fließt, um eine neue Schicht 38 zu bilden, um dadurch einen weiteren Zyklus des Prozesses zu initialisieren.
Eine Serie von polymerisierten Schichten wird auf die zuvor genannte Weise aufgebaut, wie in Fig. 1 gezeigt, wobei jede Schicht tatsächlich ein dünner Querschnitt des gewünschten dreidimensionalen Gegenstandes 40
&iacgr;&ogr; ist. Die Dicke der individuellen Schichten kann >■ abhängig von der Zusammensetzung und der Viskosität der polymerisierbaren .Flüssigkeit und der Natur und der Intensität des aushärtenden Strahlungsmediums variieren. Typische Dicken reichen jedoch von ungefähr 0,005 bis ungefähr 0,01 Inch. Der endgültige dreidimensionale Gegenstand 40, der
is durch das zuvor beschnebene Stereolithographiesystem gebildet ist, wird von dem Behälter 10 entfernt und dann einer weiteren Behandlung unterworfen, um das Aushärten von nicht ausgehärtetem Material zu vervollständigen, das in den gebundenen Oberflächen des dreidimensionalen Gegenstandes verbleibt. Oberflächenendbearbeiten, wie z.B. Schmirgern und ähnliches, kann auch angewandt werden, wenn benötigt.
Eine große Vielzahl von polymerisierbaren Flüssigkeiten kann mit der vorliegenden Erfindung verwendet werden, genauso wie ein breiter Bereich von aushärtenden Medien. Jedoch werden photon-polymerisierbare Flüssigkeiten, wie z.B. Acryle, derzeit bevorzugt gemeinsam mit UV-Strahlung, um sie auszuhärten. Bevorzugterweise sollte die Viskosität der polymerisierbaren Flüssigkeit 100 Centipoise überschreiten und bevorzugterweise von ungefähr 1000 bis ungefähr 6000 Centipoise reichen.
Ein Beispiel einer bevorzugten Ausführungsform der vorliegenden Erfindung, ein computergesteuertes Stereolithographiesystem, das von dem gegenwärtigen Anmelder entwickelt worden ist, und das schematisch in den Fig. 1 und 2 gezeigt ist, wurde verwendet, um den dreidimensionalen Gegenstand, der in Fig. 7 gezeigt ist, zu bilden. Die Basis des Gegenstandes war 8,25 &khgr; 8,25 Inches, die maximale Höhe war ungefähr 4 Inches und die minimale Höhe war ungefähr 1 Inch. Die Wanddicke war ungefähr 0,25 Inch. Das polymerisierbare Harz, das angewendet wurde, war ein relativ viskoses Harz von Desoto Chemical Company, als
&iacgr;&ogr; 4112-65-Harz bezeichnet. Die Temperatur des Bades davon war bei ungefähr 300C gehalten. Die Dicke jeder aufgebrachten Schicht war ungefähr 0,02 Inch. Die folgenden Verfahren, die die Merkmale der vorliegenden Erfindung verkörpern, wurden für jede aufgebrachte Schicht verfolgt. Die Gegenstandstrageplattform des Stereolithographiesystems
is wurde in das Bad von 4112-65-Harz abgesenkt, um zu erlauben, daß das Flüssigkeitsharz auf ihre Oberfläche fließt, um eine anfängliche Schicht von polymerisierbarer Flüssigkeit zu bilden, die dicker als gewünscht war. Die Plattform wurde dann gehoben, so daß die anfängliche Schicht darauf über das Bad gehoben wurde. Eine Klinge, die sich mit ungefähr einem Inch pro Sekunde bewegte, strich ungefähr 0,1 Inch von polymerisierbarer Flüssigkeit in einem Durchgang ab, ungefähr 0,02 Inch von porymerisierbarer Flüssigkeit auf der Trägeroberfläche auf der Plattform zurücklassend. Die Plattform wurde dann abgesenkt, so daß die geglättete Arbeitsoberfläche der Schicht mit der oberen Oberfläche des Bades nivelliert war. Die Schicht wurde einer ultravioletten Strahlung von einem HeCd-Laser unterworfen, der eine Strahlung bei einer Wellenlänge von ungefähr 325 nm bei ungefähr 15 Milliwatt Leistung bereitstellt. Die Gesamtzeit für jeden Schichtzyklus war ungefähr 35 Sekunden. Die Zeit, um solch ein Teil mit früheren Verfahren herzustellen, würde ungefähr 165 Sekunden pro Schichtzyklus gewesen sein. Die Gesamtzeit,
die durch Verwendung der Ausführungsbeispiele der vorliegenden Erfindung in diesem Beispiel eingespart wurde, war ungefähr 7,5 Stunden.
Bezüglich jetzt zu Fig. 8 in den Zeichnungen ist ein vorteilhaftes Ausführungsbeispiel des nivellierenden Gesichtspunktes der vorliegenden Erfindung gezeigt, angebracht an eine Stereolithographieeinrichtung 10, um das Niveau des Arbeitsfluides 20 (einem UV-aushärtbaren Photopolymer, wie z.B. DeSoto #65) in einer Harzwanne 30 zu messen. Die Stereolithographieeinrichtung, dargestellt in Fig. 8, abgesehen von der &iacgr;&ogr; Hinzufügung des bevorzugten Ausfuhrungsbeispieles <Ier Erfindung und verwandter Ausrüstungen, hat das Grundformat, das in dem US-Patent Nr. 4,575,330 (früher durch Referenz eingebunden) gezeigt ist, und das in der kommerziellen Stereolithographieeinrichtung, die von 3D-Systems, Inc. unter dem Namen "SLA-I." verkauft wird.
Die Stereolithographieeinrichtung 10 hat einen Seitenbehälter 40, der ihr hinzugefügt ist, der mit einer Harzwanne 30 mittels einem Durchgang 50 in der Wand 60 der Harzwanne 30 in Verbindung steht. Die Dimensionen des Seitenbehälters sind 7 Inches zu 4 Inches in dem bevorzugten Ausführungsbeispiel der Erfindung. Das Arbeitsfluid 20 füllt die Harzwanne 30 und den Seitenbehälter 40. Das Arbeitsfluid ist frei, um von dem Seitentank zu der Harzwanne und umgekehrt zu fließen. Das Niveau des Arbeitsfluides in der Harzwanne (und demgemäß in dem Seitenbehälter) muß präzise zu einem voreingestellten Niveau gesteuert werden, um eine stereolithographische Produktion von Teilen (Gegenstände, die durch Stereolithographie gemacht werden, werden 'Teile" genannt) auszuführen. Die Einrichtung der vorliegenden Erfindung, die in der Form des bevorzugten Ausführungsbeispieles gezeigt ist, erfüllt diesen Zweck.
Ein Helium-Neon-Laser 100 ist auf die Harzwanne 30 unter und zu der Seite des Seitenbehälters 40 montiert Der Laser ist ausgerichtet, so daß sein Ausgangsstrahl gerade längs dem Seitenbehälter ausgestrahlt wird. Ein Uniphase-1508-Laser wurde als erfolgreich gefunden in dem bevorzugten Ausführungsbeispiel der vorliegenden Erfindung. Der Uniphase-1508-Laser wurde gewählt aufgrund seiner niedrigen Kosten, der Kompaktheit und niedriger Leistungserfordernisse. Das Licht, das von diesem Laser ausgestrahlt wird, wird das Arbeitsfluid nicht polymerisieren.
&iacgr;&ogr; Der Ausgangsstrahl 110 des Helium-Neon-Lasers ist nach oben zu einem Spiegel 120 (einem Rolyn Optics # 60.21), der auf einem Träger über dem Seitenbehälter montiert ist, gerichtet. Dieser lenkt den Strahl längs einem ersten optischen Pfad 112 auf die Oberfläche 70 des Arbeitsfluides in dem Seitenbehälter 40 ab, wie es am besten in Fig. 9 zu sehen ist.
Der Strahl trifft auf die Oberfläche des Arbeitsfluides bei einem Winkel &bgr; bezüglich der Oberfläche 70 (der Einfallswinkel ist gleich 90° minus ß). Der Winkel &bgr; hat einen Wert, bei dem eine erfaßbare Komponente des Strahles längs einem zweiten optischen Weg 114 reflektiert werden wird. Ein variierender Bereich von Winkeln wird dieses letztere Erfordernis erfüllen, abhängig von der Eigenschaft des Fluides und des Laserlichtes, und den Dimensionen des Behälters. In dem bevorzugten Ausführungsbeispiel, das hier beschrieben ist, ist dieser Winkel 15°.
Die hier beschriebene Einrichtung mißt das Niveau des Harzes in dem Seitenbehälter gegenüber der Wanne. Dies ist vorteilhaft, da Blasen oder andere Oberflächenunterbrechungen sich in der Hauptwanne bilden können, wenn das Teil oder der Träger durch die Harzoberfläche bei jedem Zyklus des Teüaufbauens passiert. Diese Blasen oder andere Oberflächenunterbrechungen, wenn sie von dem Strahl getroffen werden, können den Strahl dazu veranlassen, von der Harzoberfläche bei einem
fehlerhaften Winkel zu reflektieren. Andere Oberflächenunterbrechungen können sich über dem Oberteil eines eingetauchten Teiles bilden, was eine fehlerhafte Strahlablenkung verursachen kann, wobei die Unterbrechungen eine lange Zeit brauchen, um sich auszugleichen. Diese umfassen Harzbuckel oder Bereiche, wo zuviel Harz von der Klinge während dem Wiederbeschichten abgestoßen worden ist wegen einem Klingenreißens. Diese Probleme können insbesondere bedenklich sein im Falle von bestimmten Teilgeometrien, die eingeschlossene Volumen, oder große, flache, horizontale Oberflächen haben, welche Geometrien in mehr Detail später beschrieben werden. Durch Messen des Niveaus des Harzes in einem Seitenbehälter werden die obigen Probleme, minimiert oder eliminiert.
Nach Reflexion von der Oberfläche 70 des Arbeitsfluides kehrt der Strahl längs dem zweiten optischen Pfad 114 zu dem gleichen Winkel bezüglich der Oberfläche des Fluides zurück, zu dem der Strahl auf die Oberfläche 70 des Fluides auftraf. Der Strahl scheint dann auf den Bi-Zellen-Photodetektor 130, der auf dem Eintauchkolbengehäuse 85 auf der anderen Seite des Seitenbehälters 40 von dem Spiegel 120 montiert ist. Der Spiegel ist eingestellt, so daß der Strahl auf den Bi-Zellen-Detektor 130 auftrifft, wenn das Niveau des Arbeitsfluides auf der gewünschten Höhe ist. Der Spiegel wird nicht bewegt oder gedreht, wenn einmal eingestellt worden ist, um den Strahl von der Oberfläche des Arbeitsfluides weg zu dem Bi-Zellen-Photodetektor zu reflektieren, wenn das Niveau des Arbeitsfluides auf der gewünschten Höhe ist.
Ein befriedigender Bi-Zellen-Photodetektor, gezeigt in Fig. 11, wird von der Silicon Detektor Corporation gemacht und ist durch ihre Nr. SD113-24-21-021 bekannt. Andere Marken und Größen von Bi-Zellen-Photodetektoren würden befriedigend sein. Linearpositionsempfindliche Detekto-
ren ("PSD"), wie z.B. der zweidimensionale PSD (S 1544) von Hamamatsu oder die zweidimensionale laterale ZeUe (S1B52) wurden akzeptierbar sein und könnten bevorzugt sein, wenn die Einrichtung geplant ist, um eine Ausgangsgröße in Längeneinheiten zu messen und anzuzeigen. Der Bi-Zellen-Photodetektor weist Seite an Seite zwei Photozellen 140 auf. Der Bi-Zellen-Photodetektor 130 ist auf das Eintauchkolbengehäuse 85 montiert, so daß die Photozellen 140 eine über der anderen und beide Photozellen über dem Niveau des Arbeitsfluides sind. Der Photodetektor kann geneigt sein, so daß er den zweiten optischen Pfad 114 zu einem
&iacgr;&ogr; rechten Winkel unterbricht, wie es am besten in den Fig. 9 und 12 gesehen wird. Dies gewährleistet, daß das Profil des Strahle.s bei dem Photodetektor ein Kreis ist, nicht ein Oval, wenn der Strahl ursprünglich ein kreisförmiges Profil hatte.
Wenn das Niveau des Fluides ansteigt oder abfällt aufgrund von Schrumpfen durch Aushärten, Erhitzen und ähnlichem, wird der Strahl die Oberfläche 70 an einem unterschiedlichen Punkt treffen. Demgemäß wird der Strahl den Bi-Zellen-Photodetektor an einem unterschiedlichen Punkt treffen. Diese Wirkung auf den Strahl ist gestrichelt in Fig. 9 gezeigt, wo ein niedrigeres Niveau 80 des Arbeitsfluides den Strahl längs dem zweiten optischen Pfad 150 reflektiert, damit er an einem niedrigeren Punkt bezüglich des Bi-Zellen-Photodetektors auftrifft. Die Änderung des Arbeitsfluidniveaus ist übertrieben, um diese Wirkung zu veranschaulichen; das bevorzugte Ausführungsbeispiel der Erfindung mißt das Niveau des Arbeitsfluides, um dieses Niveau auf einer vorbestimmten Höhe zu halten. Niveauänderungen sind klein, da solche Niveauänderungen schnell korrigiert werden, wie unten beschrieben.
Eine gegebene Änderung in dem Niveau des Arbeitsfluides, wird die gleiche Verschiebung in dem Punkt verursachen, bei dem der Strahl auf
den Bi-Zellen-Photodetektor auftrifft, unabhängig von dem Wert von ß. Fig. 10 veranschaulicht das Ergebnis einer Änderung in dem Arbeitsfluidniveau vom Niveau 82 zu einem höheren Niveau 84. Der Unterschied zwischen den Niveaus 82 und 84 ist der vertikale Abstand d.
Zwei unterschiedliche Strahlen sind gezeigt, die längs ersten optischen Pfaden 151 und 152 ankommen und die Oberfläche des Fluides bei Winkeln ^1 bzw. ß2 treffen. Die zweiten optischen Pfade 153 und 154 (für das erste Niveau 82) sind gesetzt, um auf der Senkrechten P an dem gleichen Punkt Y1 aufzutreffen. Wenn das Niveau des Arbeitsfluides zu dem Niveau 84 ansteigt, folgen die Strahlen zweiten optischen Pfaden 155 bzw. 156. Einfache trigonometrische Berechnungen ergeben, daß beide zweiten optische Pfade 155 und 156 die Senkrechte P an dem gleichen Punkt Y2 treffen werden, und daß der vertikale Abstand zwischen Y1 und Y2 zweimal der Wert von d ist, der vertikalen Änderung im Niveau des Arbeitsfluides. Demgemäß wird Variieren von &bgr; nicht die Genauigkeit des Meßverfahrens des Niveaus eines Fluides gemäß der Erfindung beeinflussen. Der zu wählende Wert von &bgr; hängt hauptsächlich davon ab welcher Winkel eine ausreichende Reflexion des Strahles innerhalb der Beschränkungen der Einrichtung erreichen wird.
Die Änderung im Arbeitsfluidniveau wird in einer Änderung in dem elektrischen Signal resultieren, das von dem Bi-Zellen-Photodetektor ausgesandt wird. Die Photozellen 140 in dem Bi-Zellen-Photodetektor sind durch einen Schütz 160 getrennt (siehe Fig. 11), der eng ist, kleiner als ein mil dick. Die Ausgabe von beiden der Photozellen wird gleich sein, wenn der Bi-Zellen-Photodetektor nicht von dem Laser beleuchtet ist, oder wenn der Laserstrahl exakt auf dem Schutz 160 zwischen den Photozellen 140 zentriert ist. Die Ausgaben werden ungleich, wenn der Strahl sich bewegt, so daß er auf eine der Zellen mehr als auf die andere auftrifft. Ein Vergleich der ungleichen Ausgaben durch eine
Vergleichsschaltung, wie unten beschrieben, wird in einem Signal resultieren, das zu dem Schrittmotor 90 gesandt wird, um den Eintauchkolben 95 anzutreiben. Der Eintauchkolben 95 (siehe Fig. 9) wird nach oben oder nach unten gehen, wie benötigt, um das Niveau des Arbeitsfluides zu halten.
Der Eintauchkolben hält das Arbeitsfluidniveau an einem im wesentlichen konstanten Niveau im Raum. Dies ist vorteilhaft, da es den Laserstrahl im Brennpunkt hält. Wenn dem Niveau erlaubt wäre sich zu ändern, &iacgr;&ogr; wie es der Fall für bestimmte harzausgebende Systeme ist, die frisches Harz in die Wanne bei jedem Zyklus von Teileaufbauenc· anordnen, müßte der Laser für das neue Niveau wieder fokussiert werden.
Bezüglich jetzt Fig. 12 werden die Stromausgaben 205 und 207 der
is Photozellen 140 zu einem Strom/Spannung-Umwandler 200 geliefert, der die Ausgabe jeder Photozelle zu einer Spannung zwischen 0 und -2,5 V umwandelt. Die beiden Spannungsausgaben 215 und 217 des Strom/ Spannung-Umwandlers 200 (jede Photozelle 140 hat ihre eigene Ausgabe) werden zu dem Subtrahierer eingespeist, wo die Spannungsausgaben subtrahiert werden. Mit der Addition einer Referenzspannung (nicht gezeigt) ist der Unterschied zwischen den Spannungsausgaben 215 und 217 ein Signal 225, das zwischen 0 und +5 V reicht. Wenn das Fluid an seinem gewünschten Niveau ist, ist das Signal 225 bei +2,5 V
Das Signal 225 wird zu einem Analog/Digital-Umwandler 230 gesandt, wo das Signal zu einem digitalen Signal 235 umgewandelt wird, das dann zu einem Computer 240 geht. Der Computer 240 vergleicht das Signal 235 mit dem vorbestimmten digitalen Signal für das gewünschte Fluidniveau und aktiviert eine Schrittmotorsteuereinrichtung 245. Die Schrittmotorsteuereinrichtung 245 wiederum aktiviert den Schrittmotor 90 (in dem bevorzugten Ausführungsbeispiel einen Schrittmotor von Minarik-
Electric Co., LAS 3802-001), der den Eintauchkolben 95 auf- und abbewegt, um Flüssigkeit zu verschieben, um das Fluidniveau zu dem gewünschten Wert zurückkehren zu lassen.
Der Computer ist programmiert, um ein Fluidniveau kurz nach einer ersten Eintauchoperation zu messen, bei der das Teil eingetaucht wird durch Bewegen des Hebewerkes tiefer in das Fluid, und bevor das Hebewerk zurück hochgehoben wird, um die nächste Schicht auf das Teil "zu zeichnen". Das Niveau des Arbeitsfluides wird nur zu diesem spezifisehen Zeitpunkt in dem Aufbauprozess gemessen und gesteuert. Der Computer vergleicht das Signal 233 mit dem Referenzwert nur^.zu diesem spezifischen Zeitpunkt und erzeugt das Signal 242 zu der Schrittmotorsteuereinrichtung 245, das bestimmt, wie lange und in welcher Richtung die Schrittmotorsteuereinrichtung 245 den Schrittmotor 90 aktivieren wird.
Bei einem zusätzlichen Ausführungsbeispiel der wiederbeschichtenden Einrichtung des Gegenstandes der Erfindung ist die Möglichkeit bereitgestellt, verschiedene Parameter, die mit dem Klingenwiederbeschichtungsprozeß verbunden sind, zu variieren, wobei die Parameter den Klingenspalt, was der Abstand zwischen der Abstreifklinge und der Oberfläche des Harzbades in der Wanne ist, und das Klingenspiel, was der Abstand zwischen der Klinge und dem oberen Teil des Teiles ist, umfassen. Typischerweise wird das Klingenspiel das gleiche wie die Schichtdicke der nächsten zu formenden Schicht sein, muß es aber nicht.
Die optimale Größe des Klingenspaltes hängt ab von dem Abwägen von verschiedenen Betrachtungen. Ein großer Klingenspalt ist problematisch, da er zu Knittern in der Oberfläche des Harzbades führen kann, was Zeit brauchen wird um sich auszugleichen. Dies ist so, weil der KHngenspalt das Ausmaß bestimmt, zu dem das Oberteil des Teiles über die
Harzoberfläche beim Überstreifen gehoben werden muß, und ebenso das Ausmaß bestimmt, zu dem das Oberteil des Teiles danach abgesenkt werden muß, bevor das Aushärten der nächsten Schicht beginnen kann. Für einen Klingenspalt von 125 mil z.B. und ein gewünschtes KHngenspiel von 20 mil muß das Oberteil des Teiles 105 mil über die Harzoberfläche gehoben werden, bevor das Überstreichen beginnen kann, und muß dann 125 mil abgesenkt werden, bevor das Aushärten beginnen kann, so daß das Oberteil des Teiles 20 mil unter der Harzoberfläche sein wird. Je größer die Bewegung des Oberteiles des Teiles ist, desto
&iacgr;&ogr; mehr Unterbrechung wird an der Harzoberfläche durch die Bewegung der Plattform und der Träger und dem Rest des Teiles in mjd aus dem Flüssigkeitsharz verursacht werden. Diese Unterbrechung ist das, was oben mit Knittern bezeichnet worden ist. Dies Knitterungen werden sich typischerweise an den Schnittstellen zwischen dem Harz und dem Teil bilden.
Ein kleiner Klingenspalt ist ebenso problematisch, da je kleiner der Klingenspalt ist, desto mehr Harz muß die Abstreifklinge typischerweise bei einem gegebenen Überstreifen abstreifen. Für einen 0 mil Klingenspalt z.B., wobei die Abstreifklinge gerade an der Oberfläche des Bades gehalten wird, obwohl das Knitterproblem, auf das sich oben bezogen wurde, reduziert werden kann, ist es erforderlich, daß die Abstreifklinge Harz von der gesamten Wannenoberfläche abstreift. Dies kann eine kleine Strömungswelle von Harz erzeugen, die über die Seiten der Wanne auslaufen, und die "zerplatzen" kann und Blasen auf der Harzoberfläche bilden kann.
Es ist gefunden worden, daß ein Klingenspalt von 25 mil einen guten Kompromiß zwischen den beiden Problemen, auf die sich oben bezogen wurde, bereitstellt. Typischerweise wird der Klingenspalt einmal einge-
stellt werden bevor ein Teil aufgebaut wird, und er wird danach konstant während dem Teilaufbauen bleiben.
Ein anderer Parameter, den man vorteilhaft variiert ist das Klingenspiel. Unähnlich dem Klingenspalt jedoch ist es wünschenswert in der Lage zu sein das Klingenspiel während dem Teilaufbauen zu variieren, anstelle von nur einem Mal vor dem Teilaufbauen.
Eine variables Klingenspiel ist vorteilhaft, weil es gestuftes Wiederbeschichten möglich macht. Gestuftes Wiederbeschichten ist dann, wo vielfache Überstreifungen der Klinge verwendet wird-zum Wie(|erbeschichten einer gegebenen Schicht mit einem unterschiedlichen Klingenspiel und möglicherweise Klingengeschwindigkeit bei jedem Überstreifen. Unter der Annahme einer Schichtdicke von 20 mil für die nächste Schicht z.B. bei
is einem gestuften Wiederbeschichtungsprozeß kann das Klingenspiel für das erste Überstreifen 60 mil sein, für das zweite 40 mil und für das dritte 20 mil. Als ein Ergebnis wird bei jedem Überstreifen eine geringere Menge von Harz weggestreift werden, als wenn ein einzelnes Überstreifen zum Wiederbeschichten verwendet würde, und ein kleinerer Buckel von Harz wird sich vor der Klinge aufbauen, als wenn ein einzelnes Überstreifen zum Wiederbeschichten verwendet würde. Ein großes Buckelaufbauen vor der Klinge ist problematisch, wenn ein eingeschlossenes Volumen von Harz von der Klinge getroffen wird. Wenn ein eingeschlossenes Volumen getroffen wird, kann aufgrund der Gravitationskraft ein großer Buckel von Harz unter die Klinge fließen und die gewünschte Schichtdicke der glatten Schicht, die sich im Kielwasser der Klinge bildet, unterbrechen. Wenn dem Buckel nicht erlaubt wird, sich in dem ersten Augenblick aufzubauen, dann kann dieses Problem weniger schwerwiegend gemacht werden. Dieses Problem kann veranschaulicht werden mit Fig. 13, die eine Klinge 300 in der Mitte eines Durchlaufs
zeigt. Teil 304 ist unter die Klinge um einen Abstand 303 abgesenkt, was das Klingenspiel ist. Eine glatte Harzoberfläche 301 wird in dem Kielwasser der Klinge gebildet, während ein Buckel von überschüssigem Harz, identifiziert durch das Bezugszeichen 302, vor der Klinge gebildet wird. Wenn die Klinge ein eingeschlossenes Volumen von Harz trifft, das mit dem Bezugszeichen 305 identifiziert ist, kann das Harz, wenn der Buckel 302 groß genug ist, unter die Klinge fließen, wie angezeigt, um die Bildung der glatten Oberfläche 301 zu unterbrechen. Dieser Effekt ist weniger ausgeprägt, wo die Klinge sich über eine flache,
&iacgr;&ogr; horizontale Oberfläche eines Teiles bewegt, da dort *■ weniger Raum für das Harz ist, um unter die Klinge zu fließen. - ^.
Ein anderer Parameter, der variiert werden kann, ist die Geschwindigkeit der Klinge, besonders während dem abgestuften Überstreichen, wo eine unterschiedliche Geschwindigkeit für jedes Überstreichen spezifiziert werden kann. Es ist vorteilhaft in der Lage zu sein die Klingengeschwindigkeit passend für die Teilgeometrie zu machen. Wenn die Klinge über einen großen, horizontalen flachen Bereich eines Teiles passiert, kann, wenn die Klinge zu schnell wandert, zuviel Harz weggestrichen werden, aufgrund dem Mitreißen, das Harz unter der Klinge dazu veranlassen wird sich mit einer besonderen Geschwindigkeit zu bewegen. Wenn die Klinge z.B. mit 5 Inch pro Sekunde bewegt wird, kann Harz 1 mil unter der Klinge dazu veranlaßt werden, sich mit 4 Inch pro Sekunde zu bewegen, und Harz unter dem kann dazu veranlaßt werden sich mit 3 Inch pro Sekunde zu bewegen. Bei einigen Beispielen kann das Mitreißen so stark über flache Bereiche sein, daß alles flüssiges Harz von der Klinge weggestrichen wird. Daher kann es über große flache Bereiche wünschenswert sein die Klingengeschwindigkeit zu verlangsamen, so daß das obige Problem nicht auftritt.
Auf der anderen Seite, wenn die Klinge zu langsam über eingeschlossenem Volumen bewegt wird, kann dies dem Harz in dem Buckel mehr Zeit geben unter die Klinge zu fließen. Daher kann es wünschenswert sein über eingeschlossenen Volumen die Geschwindigkeit der Klinge zu erhöhen, so daß Harz keine Zeit hat darunter zu fließen. Die Geschwindigkeit kann jedoch nicht zu stark erhöht werden, da, wenn sie zu stark erhöht wird, eine Welle von Harz vor der Klinge gebildet werden kann, die zerplatzend Blasen bilden kann.
&iacgr;&ogr; Unglücklicherweise ist es schwierig die Geschwindigkeit der Klinge dynamisch abhängig von der Teilgeometrie während dem Teüaufbauen zu variieren. Wenn jedoch eine variable Geschwindigkeit für jedes Überstreichen des abgestuften Wiederbeschichtens bereitgestellt ist, kann die Geschwindigkeit der Klinge bei jedem Überstreichen und die Anzahl von
is Überstreichungen gewählt werden, um die obigen Probleme für ein typisches Teil zu minimieren. Zum Beispiel kann es wünschenswert für bestimmte Teile sein, wo große flache Bereiche und eingeschlossene Volumen getroffen werden, eine große Anzahl von Überstreichungen pro Schicht zu verwenden, in dem Bereich von 5 bis 10, mit einer relativ niedrigen Klingengeschwindigkeit bei jedem Überstreichen. Wegen der großen Anzahl von Überstreichungen wird nur eine geringe Menge von Harz bei jedem Überstreichen weggestrichen werden, so daß ein Buckel nicht in der Lage sein wird sich aufzubauen und unter die Klinge zu fließen, wenn ein eingeschlossenes Volumen getroffen wird. Auf der anderen Seite, wegen der langsamen Klingengeschwindigkeit, wird das Problem von Wegstreichen von zuviel Harz von einer großen, flachen horizontalen Teiloberfläche minimiert werden. Dies ist, da die Klinge nicht in der Lage sein wird, genug Mitreißen zu erzeugen, um alles Harz wegzustreichen. Außerdem wird die niedrige Klingengeschwindigkeit kein Problem über eingeschlossenen Volumen sein, da es einem großen
Buckel nicht erlaubt sein wird sich aufzubauen, so daß es wenig oder kein Problem geben wird von Harz, das unter die Klinge fließt, auch bei der niedrigen Klingengeschwindigkeit.
Es ist ebenso vorteilhaft in der Lage zu sein, das Ausmaß zu variieren, zu dem das Teil in das Harz übermäßig eingetaucht wird, bevor das Überstreichen beginnt. Wie zuvor beschrieben ist das Teil typischerweise unter die Oberfläche des Harzes um mehr als die gewünschte Schichtdicke der nächsten Schicht eingetaucht. Zum Beispiel sind bei einem
&iacgr;&ogr; kommerziellen Ausfühmngsbeispiel einer SLA, bekannt als die SLA-250, hergestellt von 3D Systems, dem Anmelder der vorliegenden^-JErfindung, bevorzugte Schichtdicken Vi mm oder niedriger. Bei der SLA-250 wird das Teil typischerweise in das Harz um 8 mm übermäßig eingetaucht, was ein Vielfaches einer typischen Schichtdicke ist. Daher ist es wünsehenswert in der Lage zu sein diesen Paramter abhängig von der Schichtdicke zu variieren. Ein typischer Wiederbeschichtungszyklus weist die folgenden Schritte auf: (1) tiefes übermäßiges Eintauchen des Teiles; (2) Erfassen und Einstellen des Harzoberflächenniveaus; (3) Auftauchen; (4) Überstreichen; und (5) Verzögern, so daß die Oberfläche sich absetzt. Übermäßiges Eintauchen um mehr als eine Schichtdicke gewährleistet nicht nur, daß ein Buckel von Harz sich auf dem Oberteil des Teiles bilden wird, der während dem Überstreifen geglättet werden kann, sondern es gewährleistet auch, daß Oberflächenunterbrechungen, die sich mit der Erfassung des Harzniveaus in Schritt 2) überlagern können, sich schneller ausgleichen. Wenn das Teil nahe der Oberfläche eingetaucht wäre, würde jede Oberflächenunterbrechung, die sich über dem Teil bilden könnte, länger brauchen, um sich auszugleichen. Dies ist, da der "Kanal" zwischen dem Oberteil des Teiles und der Harzoberfläche kleiner wäre und die Bewegung des Harzes, die zum Ausglätten der Unterbrechungen benötigt wird, beschränken würde. Daher wird wegen dem
übermäßigen Eintauchen um mehr als eine Schichtdicke die Niveauerfassung entsprechend genauer gemacht. Außerdem, würden, wenn übermäßiges Eintauchen auf eine Schichtdicke beschränkt wäre, dann dünne Schichtdicken von einem halben Millimeter (ungefähr 20 mils) oder weniger weniger wünschenswert sein. Aber diese Schichtdicken können notwendig sein, um bestimmte Teile mit hoher Auflösung aufzubauen. Daher macht tiefes übermäßiges Eintauchen es auch leichter, dünne Schichten in diesem Bereich zu verwenden.
&iacgr;&ogr; Zusammenfassend, in diesem Ausführungsbeispiel stellt die Möglichkeit den Klingenspalt, das Klingenspiel, die Tiefe des übermäßigen Eintauchens und die Klingengeschwindigkeit zu variieren und die Möglichkeit gestuftes Wiederbeschichten zu verwenden, Mittel bereit, um besser das Wiederbeschichten durch Klingen an spezifische Teilgeometrien anzupassen, so daß spezifische Probleme verbunden mit diesen Geometrien überwunden werden können.
In einem zusätzlichen Ausführungsbeispiel kann das Klingendesign variiert werden, um es noch effizienter zu machen. In der SLA-250 ist der Querschnitt der Abstreifklinge ein Quadrat, das eine Breite von Ve Inch hat. Zusätzlich wird die Klinge nur an einem Ende mit einer Trageschiene getragen, die die Bewegung der Klinge führt, so daß die Klinge und ihr Träger einem Ausleger ähneln. Dies kann ein Problem verursachen, das als Flattern und Verdrehen bekannt ist, wodurch das ungetragene Ende der Klinge flattert und sich verdreht, das dadurch zu Fehlern bei dem Wiederbeschichtungsprozeß führt, wie z.B. einer nichtgleichförmigen Schichtdicke. Das Ausmaß, zu dem das ungetragene Ende sich verdrehen und flattern wird, ist proportional zu dem Quadrat der Klingenlänge. Ein zusätzliches Problem das auftreten kann ist das Einstellen des Klingenspaltes mit dieser Klinge. Dieser Prozeß benötigt
viele Schritte, von denen' jeder für Fehler anfällig ist, und ist auch zeitaufwendig. Außerdem erfordert er Drehen von Schrauben, was ein Drehmoment ausüben und daher die Klinge verbiegen kann.
In einem neueren kommerziellen Ausführungsbeispiel eines Stereolithographiesystemes, bekannt als die SLA-500, ebenfalls von 3D Systems entwickelt, ist die Klinge neu entworfen worden bezüglich der, die in der SLA-250 verwendet wird.
&iacgr;&ogr; Zuerst, um zu ermöglichen, daß das Klingenspalteinstellen einfacher ausgeführt werden kann, sind Mikrometerschrauben an jedem;- Ende der Klinge bereitgestellt, die erlauben die Höhe jedes Endes der Klinge über der Harzoberfläche unabhängig zu dem bekannten Wert in einer Toleranz von Vi mil ohne Ausüben eines Drehmomentes auf die Klinge einzustellen.
Zusätzlich sind mit Gewinde versehene, zurückziehbare Nadeln eine an jedem Ende der Klinge bereitgestellt, wobei jede von ihnen sich um einen bekannten Abstand von dem Unterteil der Klinge erstreckt, weleher Abstand gleich zu dem erwarteten Klingenspalt ist. Zur Zeit erstrecken sich die Nadeln 25 mil über das Unterteil der Klinge. Wenn ein unterschiedlicher Klingenspalt erwünscht ist, können Nadeln, die sich um einen unterschiedlichen Betrag erstrecken, verwendet werden.
Die Nadeln sind in Fig. 14 und 15 dargestellt. Fig. 14 zeigt eine Klinge 400 mit Nadeln 401 und 402, die an jedem Ende bereitgestellt sind. Fig. 15 zeigt eine Vergrößerung einer der Nadeln, die in die Klinge montiert ist. Wie gezeigt, hat die Nadel einen ausgedehnten Abschnitt 403, der sich um einen Abstand 404 über das Unterteil der Klinge erstreckt. In der SLA 500 ist der Abstand 25 mils ± 0,5 mils. Wie
gezeigt, hat die Nadel einen mit einem Gewinde versehenen Abschnitt 405, der vorzugsweise ein Mikrometergewinde ist, das 60 Umdrehungen pro/inch hat.
Die Nadelhaltenmg in der Khnge ist mit dem Bezugszeichen 409 identifiziert. Wie gezeigt hat die Halterung einen mit einem Gewinde versehenen Abschnitt 406, in den der mit einem Gewinde versehene Abschnitt der Nadel eingeschraubt werden kann, und Anschläge 407 zum Steuern des Ausmaßes, zu dem die Nadel über das Ende der Klinge hervorragen
&iacgr;&ogr; kann. f
c-
Um den Klingenspalt einzustellen, werden die Nadeln montiert durch Schrauben in die Klinge bis sie um den geeigneten Betrag hervorstehen, und dann wird die Mikrometerschraube an einem Ende der Klinge gedreht, bis die Nadel an diesem Ende die Harzoberfläche berührt. Dies kann leicht visuell bestimmt werden, da die Spitze der Nadel einen großen leicht beobachtbaren Miniskus mit der Harzoberfläche bilden wird, wenn sie innerhalb von 1/4-1/2 mil von ihr hegt. Demgemäß kann die Nadel an der Oberfläche innerhalb einer Toleranz von 1/4-1/2 mil angeordnet werden. Dann wird die Mikrometerschraube an dem anderen Ende der Klinge eingestellt, bis die Nadel an diesem Ende die Harzoberfläche berührt. Dann wird die Klinge gehoben und dann abgesenkt, um zu sehen, ob beide Nadeln die Oberfläche zur gleichen Zeit berühren. Wenn nicht, werden weitere Schritte des obigen Zyklus gemacht, bis sie es tun. Wenn sie es tun, wird erachtet, daß der Klingenspalt eingestellt ist, und dann werden die Nadeln herausgeschraubt, so daß sie nicht länger hervorstehen. Sie werden jedoch in den Halterungen verbleiben, so daß die Klingenmasse die gleiche bleibt.
Andere Einrichtungen zum Anbringen der Nadeln an der Klinge sind möglich, einschließlich der Verwendung von Sperrnadeln und Auslöseknöpfen, ähnlich zu denen, die bei einer Spen-klinkeneinrichtung verwendet werden.
Um Verdrehen und Flattern der Klinge zu reduzieren, wird ein zweiter Schienenträger hinzugefügt, so daß jedes Ende der Klinge von solch einer Schiene getragen wird. Dies wird Verdrehung und Flattern reduzieren oder eliminieren an dem ungetragenen Ende der Klinge.
Aufgrund des doppelten Schienenträgers kann die Klinge dicker für eine erhöhte Festigkeit gemacht werden, und auch, um Flattern in der Mitte der Klinge zu reduzieren. Eine dickere Klinge mit nur einem Träger kann nicht möglich sein, da die Klinge mehr durchhängen würde, is Derzeit sind SLA-500-Klingen mit Breiten von 1/8 inch, 3/16 inch und 1/4 inch verfügbar.
Schließlich, wie in Fig. 16 gezeigt, kann der Klingenquerschnitt geändert werden, so daß er nicht langer rechtwinklig ist. Zuerst kann das Unterteil der Klinge so konstruiert sein, daß die nichthorizontalen Kanten der Klinge nahe dem Unterteil Winkel bilden, mit den Bezugszeichen 506 und 507 identifiziert, bekannt als die Angriffs- bzw. Trennwinkel mit der Harzoberfläche. Der Angriffswinkel ist der Winkel in der Richtung der Klingenbewegung, während der Trennwinkel der Winkel an dem anderen Ende ist. Diese Winkel werden hinzugefügt, um stärker den Harzfluß unter der Klinge zu verbessern. Ohne diese Winkel können Turbulenzen unter der Klinge erzeugt werden, die Blasen erzeugen können. Diese Blasen sind problematisch, da sie gemeinsam mit der Klinge unter ihr wandern und an der Oberfläche des Teiles verbleiben, nachdem die Klinge über sie gewandert ist. Als ein Ergebnis können sie als ein
Fehler in dem Teil zum Vorschein kommen. Durch Abwinkein der Kanten der Klinge werden die Druckgradienten unter der Klinge reduziert, was zu geringerer Fluidtrenming führt und daher zujveniger Turbulenz und weniger Blasenbildung. Es ist gefunden worden, daß abhängig von der Teilgeometrie, diese Winkel von zwischen ungefähr 5 und 8 Grad reichen können, und zusätzlich kann der Angriffswinkel von dem Trennwinkel unterschiedlich sein. Für die SLA-500 wird ein Angriffswinkel von 6 Grad verwendet.
&iacgr;&ogr; Die Klinge in Fig. 16 ist als bisymmetrisch gezeigt, so daß sie in jeder Richtung überstreichen kann. Alternativ können- zwei asymmetrische Klingen abwechselnd verwendet werden, um in jeder Richtung mit Angriffswinkeln in der Richtung der Bewegung überstreifen zu können. Andere Klingenkonfigurationen sind möglich.
Fig. 17 zeigt die Klinge von Fig. 16, wobei jeder Scheitelpunkt gerundet ist. Dies kann weiter Turbulenz reduzieren. Fig. 18 zeigt eine Version, wo das gesamte Unterteil gerundet ist. Fig. 19 zeigt eine Version, wo das Unterteil ein scharfer Scheitel ist.
Die nivellierende Einrichtung der SLA-500 wird jetzt beschrieben werden. Diese Einrichtung überwindet ein Problem, das auftreten kann mit der Bizellen-Detektor-Einrichtung, die früher beschrieben wurde. Wie früher diskutiert wurde, kann die Bi-Zellen-Einrichtung empfindlich für Blasen sein. Um dieses Problem in dieser Einrichtung zu überwinden, wird ein Seitenbehälter hinzugefügt, in dem Blasen nicht gebildet werden, und das Harzniveau wird in der Seitenwanne erfaßt. Wenn jedoch eine Schicht von Harz auf einem schweren unvermischbaren Fluid getragen wird, wie es in der US Patentanmeldung Nr. 365,444 beschrieben ist, kann das Harzniveau in dem Seitenbehälter eine nicht genaue Bestimmung des
Harzniveaus in der Hauptwanne sein, wie es angenommen wird. Dies ist, da während dem Teilaufbauen, Harz in der Hauptwanne unproportional verbraucht werden kann verglichen mit dem Seitenbehälter. Wegen dieser Disproportionalität kann die Flüssigkeit in dem Seitenbehälter, wenn als ein ganzes gesehen, nicht so dicht sein, wie die in der Hauptwanne. Dies kann dazu führen, daß das Harzniveau in dem Seitenbehälter fälschlich als zu hoch gelesen wird.
Um dieses Problem zu überwinden, wird eine Einrichtung, die einen &iacgr;&ogr; Schwimmer umfaßt, in der SLA-500 eingesetzt, um k das Harzniveau in der Hauptwanne zu erfassen anstelle der Bi-Zellen-Einrichtung^· die früher beschrieben worden ist. Der Schwimmer hat den Vorteil, daß er relativ unempfindlich gegenüber Blasen ist, und so verwendet werden kann, um das Niveau des Harzes in der Hauptwanne gegenüber einem Seitenbehälter zu erfassen. Dies ist, da eine Blase, die an der Seite des Schwimmers hängt, nicht seine Masse ändern wird, und daher das Niveau auf dem er schwimmt. Daher wird ein Seitenbehälter nicht benötigt und der Schwimmer wird genau das Harzniveau erfassen, auch wenn eine Harzschicht auf einem schweren, undurchmischbaren Fluid schwimmt.
Der Schwimmer kann viele Formen haben. Für die SLA-500 ist der Schwimmer derzeit in der Form einer kleinen Dose, die ein Volumen von ungefähr 50 cc oder mehr hat. Zusätzlich ist der Schwimmer vorteilhaft Teflon-beschichtet, so daß jedes Harz, das auf das Oberteil kommt, oder die Seiten des Schwimmers benetzt, schnell abtropfen oder abgleiten wird und nicht wesentlich die Masse des Schwimmers für eine nennenswerte Zeitperiode verändern wird.
Wenn eine Blase in der Lage wäre sich selbst unter dem Schwimmer anzubringen, würde dies eine fehlerhafte Niveaumessung verursachen, da
es das Ausmaß, zu dem der Schwimmer untergetaucht ist, verändern könnte. In diesem Beispiel sind, um dieses Problem zu bekämpfen, andere Schwimmerentwürfe möglich, wie in Fig. 20 gezeigt, die Blasen nicht ermöglichen würden, sich unter dem Schwimmer anzubringen.
Die Schwimmereinrichtung, die derzeitig verwendet wird in dem SLA-500, ist in Fig. 21 veranschaulicht. Wie veranschaulicht weist die eine Richtung einen Schwimmer 602, einen Tragebalken 603, ein Lager 604 und eine optische Erfassungsschaltung 605 auf. Wie gezeigt" ist der Tragebalken mit dem Schwimmer gekoppelt, der auf der Harzoberfläche 601 schwimmt, die in der Wanne 600 angeordnet ist. Der Balkgn ist auch vertikal drehbar um ein Lager 604. In der SLA-500, ist das Lager 604 vorteilhaft ein Lager der Klasse 9.
is Die optische Erfassungsschaltung 605 ist im Detail in Fig. 22 gezeigt. Wie veranschaulicht umfaßt die Schaltung ein Glied 6051, das zu dem Balken 603 gekoppelt ist, lichtausstrahlende Dioden ("LEDs") 6052 und 6053, die Lichtstrahlen 6056 bzw. 6057 aussenden und optische Detektoren 6054 und 6055, die die ununterbrochene Anwesenheit von Lichtstrahlen 6056 bzw. 6057 erfassen. Die optischen Detektoren sind elektronisch mit einem Tauchkolben oder einer anderen Einrichtung (nicht gezeigt), die früher beschrieben wurde, gekoppelt zum Heben oder Absenken des Harzniveaus in Antwort auf elektrische Signale von den optischen Detektoren.
Jede Änderung in dem Niveau des Fluides wird eine entsprechende vertikale Verschiebung des Schwimmers verursachen. Dies wiederum wird den Balken 603 dazu veranlassen sich um das Lager 604 zu drehen, das das Glied 6051 dazu veranlaßt wird, vertikal um einen Abstand, der eine Vergrößerung der Fluidverschiebung ist, sich zu verschieben.
Solange wie das Glied 6051, wie gezeigt, dazwischen angeordnet ist, und keinen der beiden Lichtstrahlen 6056 und 6057 blockiert, deren ununterbrochene Anwesenheit durch die optischen Detektoren 6054 bzw. 6055 erfaßt wird, wird angenommen, daß das Harzniveau auf der korrekten Höhe ist. Nur wenn das Glied 6051 ausreichend abgelenkt wird, um den Durchgang eines der Lichtstrahlen zu seinem entsprechenden optischen Detektor zu blockieren, was durch den Ausfall des optischen Detektors irgendwelches Licht von seiner entsprechenden LED aufzunehmen, erfaßt wird, wird angenommen werden, daß das' Harz auf einem
&iacgr;&ogr; inkorrekten Niveau ist. In diesem Beispiel werden'ein Eintauchkolben oder andere Einrichtungen, die elektrisch mit den optischen ^Detektoren gekoppelt sind, entweder gehoben oder abgesenkt, um das Harzniveau und daher den Schwimmer, auf der korrekten Höhe zu positionieren. Wenn der Strahl 6056 durch das Glied blockiert ist, was durch den
is optischen Detektor 6054 erfaßt werden wird, wird angenommen, daß das Harzniveau zu niedrig ist, in welchem Falle ein Eintauchkolben oder ähnliches abgesenkt werden kann, bis das Harzniveau zu der korrekten Höhe angehoben ist. Wenn der Strahl 6057 durch das Glied blockiert ist, was durch den optischen Detektor 6055 erfaßt werden wird, wird angenommen, daß das Harzniveau zu hoch ist, in welchem Falle ein Eintauchkolben oder ähnliches gehoben werden kann, bis das Harzniveau zu der korrekten Höhe erniedrigt ist. Es sei bemerkt, daß sowohl die Strahlen 6056 als auch 6057 nicht gleichzeitig durch das Glied 6051 blockiert werden können. Daher wird es selten, wenn überhaupt, eine Zweideutigkeit bei dieser Einrichtung geben, in dem Beispiel, wo das Harzniveau an einer inkorrekten Höhe ist, hinsichtlich ob die richtige Antwort darauf ist, das Harzniveau zu erhöhen oder abzusenken.
Die in der SLA-250 verwendete Wiederbeschichtungssoftware wird jetzt beschrieben werden. Eine Spezifikation für die Software in der Form
eines Flußdiagrammes ist in Fig. 23 veranschaulicht. Vor der Verwendung der Software muß ein Benutzer zuerst bestimmte Parameter spezifizieren, die verwendet werden, um die Bewegung der Plattform zu steuern. Diese Parameter sind ZA, ZV, ZW und ZD. Wie in größerem
s Detail in der US Patentanmeldung S.N. 331,644 beschrieben, ist die Plattform unter der Steuerung eines Computers, der als der PROZESS-Computer bekannt ist. ZA ist der Betrag, um den der Prozeß-Computer erlauben wird, die Plattform zu beschleunigen oder abzubremsen, ZV ist die maximale Geschwindigkeit, die der Plattform erlaubt wird zu erreichen und ZD ist die Tiefe, um die die Plattform veranlaßt wird in das flüssige Harz vor dem Überstreichen übermäßig - einzutauchen. Wie früher diskutiert worden ist, ist ZD typischerweise viel größer als eine Schichtdicke. ZW ist die Absetzverzögerung, die der Zeitbetrag ist, um den der Prozeß-Computer angewiesen ist, zu warten, nachdem die Plattform nach dem Überstreichen abgesenkt worden ist, um die obere Oberfläche der Harzschicht auf dem Oberteil des Teiles bei dem gleichen Niveau wie das Harz in der Wanne zu plazieren. Der Prozeß-Computer wird den Zeitbetrag abwarten, der durch ZW vor dem Aushärten des Harzes auf dem Oberteil des Teiles spezifiziert worden ist.
Neben diesen Parametern kann der Benutzer andere Variablen für jede Schicht oder Bereich von Schichten einschließlich S.N. spezifizieren, was die Anzahl von Überstreichungen pro Schicht ist, und GV, was für globale Geschwindigkeit steht, und anzeigt, daß alle Überstreichungen bei der spezifizierten Geschwindigkeit gemacht werden sollen. Der Benutzer kann auch V1-V7 spezifizieren, was individuelle Geschwindigkeiten, verbunden mit jeweiligen Überstreichungen 1-7, sind. Durch Einstellen dieser Werte zeigt der Benutzer an, daß er oder sie wünscht, daß die Geschwindigkeit beim Überstreichen variieren soll.
Der Prozeß beginnt in Schritt 700, wenn die Schicht N gezeichnet wird. Als nächstes, in Schritt 701, wird die Plattform unter die Harzoberfläche um ZD abgesenkt bei einer Geschwindigkeit, die durch ZA und ZV bestimmt ist. In Schritt 703 ist eine Nach-Eintauch-Verzögerung implementiert, um das Absetzen des Harzes zu erlauben, da die Plattform gerade bewegt worden ist.
In Schritt 704 wird ein Auslesen von dem Bi-Zellen-Detektor genommen und für eine Vorspannung korrigiert, die von der Schaltung (identifiziert &iacgr;&ogr; als BCVAL-BIAS) eingeführt wird. Die Ablesung wird dann mit einer oberen Grenze verglichen, als UPLIM identifiziert, und eüjer unteren Grenze, als LOWLIM identifiziert. Wenn er zwischen diesen beiden Werten ist, wird angenommen, daß das Harzniveau auf der korrekten Höhe ist.
Angenommen das Niveau ist auf der korrekten Höhe, in Schritt 705, dann wird ein Flag getestet, um zu sehen, ob gesetzt. Das Flag wird gesetzt in Antwort auf eine Taste, die von dem Benutzer gedrückt wird, die anzeigt, daß der Benutzer manuell Harz hinzugefügt oder von der Wanne weggenommen hat. Unter der Annahme, das das Flag nicht gesetzt ist, in Schritt 708, wird eine Kontrolle gemacht, um zu bestimmen, daß das SN, die Anzahl von Überstreichungen für die Schicht N+l, größer als 0 ist, und daß die Plattform noch in einer sicheren Position ist, so daß die Klinge sie nicht berühren wird, während dem Überstreichen. Die obere Grenze für die Plattformposition ist durch das Mnemonic NOSWEEP identifiziert.
Unter der Annahme, daß diese Bedingungen erfüllt sind, in Schritt 709, wird ein interner Zähler SWEEP, zuerst zu 0 initialisiert und dann inkrementiert. In Schritt 712 wird eine Kontrolle gemacht, um zu
bestimmen, ob die Klinge an der Vorderseite oder Hinterseite der Wanne ist Unter der Annahme, daß es die Vorderseite für den Augenblick ist, in Schritt 713, wird die Klinge zu der Hinterseite der Wanne streichen gelassen (was ein Abstand ist, der mit SWEEPDIST spezifiziert ist) bei einer Geschwindigkeit, die von dem derzeitigen Wert von SWEEP abhängen kann.
Wenn die Klinge den Hinterteil der Wanne erreicht hat, wird sie bei dem gewöhnlichen Beispiel einen Schalter triggem, der mit dem Mnemonie LIMIT SWITCH identifiziert ist. Unter der Annahme, daß der Grenzschalter aktiviert worden ist in Schritt 727, - wird eing. Kontrolle gemacht, um zu bestimmen, ob alle die Überstreichungen, die durch SN spezifiziert sind, für die Schicht durchgeführt worden sind. Unter der Annahme daß sie es nicht sind, wird ein Sprung zurück zu Schritt 709
is gemacht und der obige Zyklus wiederholt.
Zurückkehrend zu Schritt 714, in dem Falle wo der Grenzschalter nicht aktiviert worden ist, wird die Klinge langsam nach hinten bei der Geschwindigkeit von 0,5 inch/sek. bewegt und unter der Annahme, daß der Grenzschalter innerhalb zwei Sekunden aktiviert wird, wird ein Sprung zu Schritt 722 gemacht. Unter der Annahme, daß er nicht aktiviert ist, wird der Prozeß abgebrochen in Schritt 721.
Zurückkehrend zu Schritt 712, unter der Annahme, daß die Klinge an dem Hinterteil der Wanne ist, in Schritt 717, wird die Klinge nach vorne überstreichen gelassen bei einer Geschwindigkeit, die eine Funktion der derzeitigen Überstreichungsanzahl sein kann, und in Schritt 718 wird eine Kontrolle gemacht, um zu sehen, ob der Grenzschalter aktiviert worden ist. Unter der Annahme, daß er es wurde, wird ein Sprung zu Schritt 725 gemacht. Wenn er es nicht wurde, in Schritt 719, wird die Klinge
langsam nach vorne bei einer Geschwindigkeit von 0,5 inches/set bewegt, und wenn der Grenzschalter innerhalb zwei Sekunden aktiviert wird, wird ein Sprung zu Schritt 722 gemacht. Wenn er es nicht ist, wird der Prozeß in Schritt 721 abgebrochen.
Zurückkehrend zu Schritt 704, was richtig ist, nachdem die Plattform (und das Teil) übermäßig unter die Harzoberfläche eingetaucht worden sind, wenn das Harzniveau nicht auf der geeigneten Höhe ist, wird eine Kontrolle in Schritt 723 gemacht, um zu sehen, ob es "zu hoch oder zu
&iacgr;&ogr; niedrig ist. Wenn BCvAL-BIAS größer als UPLIM ^ist, ist das Harzniveau zu niedrig und der Eintauchkolben muß dann abgesenkt werden. In Schritt 724 wird eine Kontrolle gemacht, um zu sehen, ob der Eintauchkolben schon auf dem Boden der Wanne ist, und unter der Annahme daß er es nicht ist, in den Schritten 725 und 726 wird der
is Eintauchkolben abgesenkt, und die Eintauchkolbenposition, identifiziert mit dem Mnemonic PLUNGPOS, wird aktualisiert. In Schritt 727 wird eine Verzögerung eingeleitet, um dem Harz zu erlauben sich abzusetzen, und ein Sprung wird zu Schritt 704 gemacht, um das Harzniveau wieder zu kontrollieren. Der obige Zyklus wiederholt sich dann.
Zurückkehrend zu Schritt 724, unter der Annahme, daß der Eintauchkolben auf dem Boden der Wanne ist, dann ist der einzige Weg, um das Niveau zu erhöhen, Harz in die Wanne hinzuzufügen. In Schritt 732 wird das Niveau wieder kontrolliert und unter der Annahme, daß es noch zu niedrig ist, in den Schritten 733 bis 734, wird der Benutzer gefragt, auf eine Taste zu drücken, die anzeigt, daß er oder sie manuell Harz hinzufügen wird. Bis die Taste gedrückt wird, wird der Prozeß leer laufen. Wenn die Taste gedrückt ist, wird ein Flag gesetzt (das gleiche Flag, das in Schritt 705 getestet wird). Während der Benutzer vermutlich Harz zu der Wanne hinzufügt, in Schritt 739, wird der Prozeß
leer laufen bis das Harzniveäu auf dem derzeitigen Niveau ist. Wenn es dies ist, in Schritt 740, wird eine Nachricht zu dem Benutzer gesandt, die anzeigt, daß genug Harz hinzugefügt worden ist, und ein Sprung wird zu Schritt 704 gemacht. Zurückkehrend zu Schritt 705, nachdem das Harz hinzugefügt worden ist, so daß das Harzniveau auf der korrekten Höhe ist, muß das Flag zurückgesetzt werden. Diese Bedingung wird in den Schritten 705 und 706 erfaßt, und in Schritt 707 wird das Rag zurückgesetzt.
&iacgr;&ogr; Zurückkehrend zu Schritt 723, in dem Falle wo BCVAL-BIAS kleiner als LOWLIM ist, was anzeigt, daß das Harzniveau zu hoch ist, muß der Eintauchkolben gehoben werden. Eine Kontrolle wird gemacht in Schritt 728, um zu sehen, ob der Eintauchkolben schon an seiner höchstmöglichen Position ist, angezeigt durch 0. Unter der Annahme, daß er es
is nicht ist, in den Schritten 729 - 730, wird der Eintauchkolben angehoben und die Eintauchkolbenposition, identifiziert als PLUNGPOS, wird aktualisiert. Dann, in Schritt 731, wird eine Absetzverzögerung eingeleitet, und ein Sprung wird zurück zu Schritt 704 gemacht.
Zurückkehrend zu Schritt 728, unter der Annahme, daß der Eintauchkolben schon an seiner höchsten Position ist, und nicht mehr angehoben werden kann, muß dem Benutzer angezeigt werden, etwas Harz in der Wanne zu entfernen. In Schritt 741 wird eine Kontrolle gemacht, um zu bestimmen, daß das Harzniveau noch zu hoch ist, und in den Schritten 742 - 743 wird dem Benutzer eine Nachricht gesandt, die ihn oder sie auffordert, das Harz zu entfernen, und er wird gebeten eine Taste zu drücken um die Nachricht zu bestätigen. Bis die Taste gedrückt wird, wird der Prozeß leer laufen. Wenn die Taste gedrückt wird, in Schritt 744, wird ein Rag gesetzt und in Schritt 745, während der Benutzer das
Harz entfernt, wird das Harzniveau kontrolliert, bis es auf der geeigneten Höhe ist..
Bis es dies ist, wird der Prozeß leer laufen. Wenn das Niveau auf seiner korrekten Höhe ist, in Schritt 746, wird dem Benutzer angezeigt, aufzuhören Harz zu entfernen, und ein Sprung zurück zu Schritt 704 wird gemacht. In den Schritten 705 - 707, wie früher diskutiert, wird das Rag zurückgesetzt.
&iacgr;&ogr; Man bemerke, daß das Nivellieren nicht bei jeder Schicht durchgeführt werden muß, sondern nur, wenn das Niveau sich geändert haben kann, aufgrund irgendeinem des folgenden: 1) thermische Ausdehnung; 2) Schrumpfen; und 3) Änderung der Verschiebung, verursacht durch Plattformträger. Wenn nichts von diesem vorhanden ist, muß das Nivellieren
is nicht für eine Schicht durchgeführt werden.
Zu Schritt 749 hinkehrend, wenn alle die Überstreichungen für die Schicht aus N+1 durchgeführt worden sind, wird eine Absetzverzögerung gleich ZW eingeleitet werden, und in den Schritten 750 - 751, werden die Vektoren für die Schicht N+1 berechnet, und die Schicht, die diese Vektoren verwendet, in Schritt 751 gezeichnet. Mehr Detail über das Berechnen der Vektoren und Zeichnen der Schichten ist in der US Patentanmeldung S.N. 331,644 bereitgestellt.
Der obige Zyklus wird dann für den gesamten Rest der Schichten des Teiles wiederholt
Ein Listing der Wiederbeschichtungssoftware, Version 3.60, das in der SLA-250 verwendet wird, wird jetzt bereitgestellt werden. Die Software
weist die folgenden Module auf, die in Turbo Pascal geschrieben sind, von denen jedes wiederum aufgelistet ist:
Modul
Beschreibung
UTLS WEEP.PAS
&iacgr;&ogr; SINSTEP.PAS
MACHINE.PRM
AUTOLEVELPAS
UTLAD JUST.PAS
RECOATER.PAS steuert Überstreichen während dem Teilaufbau; verwendet in Verbindung mit BUILD
erlaubt Sinuswellen-Abstufung der.. Platform während dem Wiederbeschichten
umfaßt Überstreichparameter input/default
führt Nivellieren zwischen dem Zeichnen der Schichten durch
verwendet um das Harzniveau vor dem Aufbauen eines Teiles einzustellen
verwendet obige Programme, um eine Wiederbeschichtungshandlung extern zu BUELD durchzuführen.
Wie in mehr Detail in der U.S. Patentanmeldung S.N. 331,644 beschrie-30 ben, ist BUILD das Programm, das das Aufbauen eines Teiles leitet.
Wie oben angezeigt, werden die Programme, in dem gewöhnlichen Beispiel; in Verbindung mit BUILD verwendet. Zusammen werden diese Programme eine Funktionalität bereitstellen die im wesentlichen ähnlich zu der oben beschriebenen mit Bezug auf Fig. 23 ist RECOATER.PAS stellt jedoch eine Einrichtung bereit, um Wiederbeschichten unabhängig von BUILD durchzuführen. Die Softwarelistings folgen:
unit UTLSWEEP;
3D Systems Stereolithography System Software
UTLSWEEP.INC
SLA Recoater blade and plunger Utility include file.
11/15/88 GOF File created.
11/28/88 GOF Updated for production SLA250 board.
11/30/88 GOF Add BldSweep.inc, solidify interfaces with Richard. Its his fault!
01/03/89 GOF Comment out all if keypressed from sweeper code.
01/13/89 GOF Put MonitorLaserBeamDrift as a part of PD, postdipdelay.
01/18/89 GOF Integrate with Jon's SLA 500 version.
01/24/89 JFT If requested speed is > MaxSäfeSineSpeed then we use the old square-wave steps to move the recoater, but if it's <= it then we use sine-wave stepping from SINSTEP.PAS unit, which we now USE here. Both methods changed to correct speed parameters to correct velocity.
01/31/89 JFT Pass ZAccel & ZVeloc as parameters to ZFreeMove & ZMoveGivenDistance.
01/27/89 GOF Add PD2, the second post dip delay for set plunger proc.
01/31/89 GOF Add routine to read and write Machine.prm (MaxBladeMoves)
02/01/89 GOF Add PD2, DrainAccel, and DraiQVeloc to sweep.prm.
02/07/89 GOF Add XP support, (extra Platform) Also change Veloc to Floatt.
02/24/89 GOF Add exit to SetPlunger if its OK the first ReadBiCell.
02/27/89 GOF Minor cleanup and comments.
0 03/07/89 JFT On PlungerUp full stroke, add better assurance of getting to top. Echo stall message if we don't reach it.
03/17/89 JFT It's only fitting that I'm writing this on
a green display. To accomodate the SLA-500, MaxPlungeMoves has become greater than maxlnt. So, variables in this unit that take assignment from MaxPlungeMoves are transformed to longint.
04/10/89 JFT Change Velocity to Period.
05/22/89 JFT Change blade malfunction alert to allow user to reposition blade.
07/05/89 JFT Single Coil Holding Torque.
09/20/89 JFT/RAG Added Sweeper Calibration procedure and support for NCR.
interface
uses CRT,DOS,UTILITY1,UTLZSTAGE,SINSTEP,BUILDVAR;
{ math coprocessor support }
{$IFOPT N+}
{$DEFINE COP}
{$ELSE}
{$UNDEF COP} {$ENDIF} type
{$IFDEF COP} ;
FloatType = Single;
{$ELSE} - £
FloatType = Real; {$ENDIF}
{$1 product.inc}
const
20 { MaxPlungeMoves = 3000; }{ for the silver screw } { Now in product.inc. }
{ MaxPlungeMoves = 2800; for the gold screw }
defaultPeriod minplungemoves
3; { seconds per sweep } = 1;
minPeriod maxPeriod
0.1;
10;
Bits: array[0..3] of Byte = ($09,$0A,$06,$05);
var
{ global variables}
NoSweep : boolean;
PlungerPos from integer for 500. }
: longint; { Made longint
MachineType
MaxBladeMoves
DefaultPlungerStepsPerMii
string; integer; real;
{ file contents }
NumSweeps
Period
BladeGap
Bias
PlungeMotorDelay
PlungStart
UpLim
LowLim
BladeGapLO
PostDipDelay
NumChecks
PD2
XP
SHOWSWEEP
ProcessSpeedM
integer
array[1
array[1
integer;
integer;
FloatType
integer;
integer;
FloatType
integer;
integer;
integer;
FloatType
boolean;
Real ;
7] of FloatType; 7] of integer;
{ not used }
procedure ReadSWEEPxPRMfile; procedure ReadMACHINExPRMfile; procedure WriteMACHINExPRMfile;
procedure SweeperBack(period : real; StopCode : integer); procedure SweeperForward(period: real; StopCode :
integer);
30 procedure MoveBlade(period: real; StopCode:integer);
procedure PlungerHoldingTorque; {Use after any plunger
move of 1}
procedure PlungerDown(numMoves : longint; var StopCode :
integer);
35 procedure PlungerUp(numMoves : longint; var StopCode :
integer);
procedure InitSweeperandPlunger(option:integer;var StopCode : integer);
procedure InitSweeper(option:integer;var StopCode :
integer);
procedure ReadBiCell(recurs:char;var FinalLevel:integer) ;
procedure WhichBladeLimit(var LimitSwitch: integer); { procedure AddRemoveResin(var FinalLevel: integer); }
procedure SetPlunger(numSetPlungers:integer;var FinalLevel:integer );
procedure DoSweep(DipDepth,LayerDepth:real;
RelaxationTime:integer); ·
procedure expSweeperBack(speed:real); procedure expSweeperForward(speed:real); c.
procedure expMoveBlade(period:real); procedure SweepCal;
implementation
const
LnSteps: array[1..6O] of Integer (400,200,100,060,50,45,40,35,30,25,20,18,16,14,12,10,10, 8,8,8,8,6,6,6,5,5,5,4,4,4,4,4,3,3,3,2,2,2,2,2,1,1,1,1,1, 1,1,1,1,1,1,1,0,0,0,0,0,0,0,0);
25
SwepCoil = $309;
SweepLim = $308;
defaultBladeGap = 100; { percent }
30 defaultBias = 0;
defaultPlungeMotorDelay = 8;
defaultPlungStart =3.5; { inches - not used
now }
defaultUpLim = 5;
35 defaultLowLim = -5;
defaultBladeGapLO = 0.125; { inches between
liquid and blade }
defaultPostDipDelay = 3; .8« { seconds } &bull;
defaultNumChecks = -l; &bull; 81 { automatic mode } *
defaultPD2 = 2; .0· &bull;
defaultDA = 1O i;
defaultDV = 1O
defaultXP - 1O
SweepDist = 12.
10 var
Steplter : integer; SweepStep : integer; PlungeStep : integer; delaytime : integer; junkl,junksc : integer; j unkKey : char;
procedure SweepDefaults; var
i, code : integer; begin
NumSweeps := 1; for i := 1 to 7 do begin Periodfi] := defaultPeriod; BladeGapfi] := defaultBladeGap;
end;
Bias := defaultBias;
PlungeMotorDelay := defaultPlungeMotorDelay;
PlungStart UpLim LowLim BladeGapLO to mm }
PostDipDelay NumChecks
:= defaultPlungStart;
:= Bias + defaultUpLim; := Bias + defaultLowLim; = defaultBladeGapLO * 25.4
{ convert
:= defaultPostDipDelay; := defaultNumChecks; { automatic mode
PD2 : = defaultPD2;
DrainAccel := defaultDA;
DrainVeloc := defaultDV;
XP := RealVal (def aultXP, code.) -r
ShowSweep := false; end;
&igr; J
procedure ReadSWEEPxPRMfile; const
anyfile = $3F;
var ·
't. SweepFile : Text;
Line : String; c-
i,j j,kk,index : integer; Dirlnfo : searchRec;
begin
If ShowSweep then writeln (' Reading machine.prm file. ·);
FindFirst('\3dsys\Machine.PRM1,anyfile,Dirlnfo); if DosError <> 0 then begin window(1,1,80,25); ClrScr;
gotoxy(l,21); writeln;
writeln(' ERROR: Machine.PRM not found.
UserWait; HaIt(I); end;
assign(SweepFile,'\3dsys\Machine.prm1); reset(SweepFile); i := 0;
repeat
readln(sweepFile,line) until line = 'SWEEP.PRM1;
while (Not Eof(SweepFile)) and (i <= 27) do begin
readln(SweepFile,line);
if"line[lj <> ·!· then inc(i);
if i = 1 then begin
NumSweeps: =
IntVal(copy(line,l,pos(·!·,line)-1),jj);
end;
if (i >= 2) and (i <= 15) then begin
if (i mod 2) = 0
then Period[i div 2]:=RealVal(copy(1ine,l,pos('!·,line)-l),jj)
else BladeGap[i div
2]: =round(RealVal (copy (1 ine, l,pos( · 1 · ,line)-l) , J1J)) ;
{) { BladeGap[i div 2]:=(l/1000) * (25.4) * BladeGap[i div 2]; }
{ covert mils to mm }
if (BladeGap[i div 2] <= 0)
then BladeGap[i div 2] := 0;
if (BladeGap[i div 2] > 999)
then BladeGap[i div 2] := 999;
end;
case i of
16 : Bias : =
IntVal(copy(1ine,l,pos(··',line)-l),jj) ;
17 : P1ungeMotorDe1 ay :-
IntVal(copy(1ine,l,pos(·!·,line)-l),jj);
18 : PlungStart : =
RealVal(copy(1ine,1,pos('··,line)-l),jj);
19 : UpLim : =
IntVal (copy (1 ine, l,pos(·! \line)-l) , j j) ;
20 : LowLim : =
IntVal(copy(line,l,pos(·!',line)-l),jj);
2 1 : BladeGapLO : =
(25.4)*RealVal(copy(line,l,pos(·!',line)-l),jj);
{ convert inches to mm }
{){ 22 : postDipDelay :=
IntVal(copy(line,1,pos(·!',line)-l),jj); }
, . ST
2 2 .;;■· : NumChedks : =
IntVal(copy(1ine,l,pos(·&iacgr;·,line)-l),j j);
{}{ 24 : PD2 :=
IntVal( copy (line ,1,POsC ! ',line)-l), jj) ; } --·
23 : DrainAccel:= copy(line,l,pos(· ',line)-l);
24 : DrainVeloc:= copy(line,l,pos(· ',line)-l);
25 XP := RealVal(copy(line,l,pos('!·,line)-1),jj);
26 : ShowSweep := ( upcase(line[l]) = 1S' );
end;
end;
'r.
Close(SweepFile);
for i := 1 to 7 do begin - <;■
if (Period[i] > maxSweepPeriod) then Period[i] := maxSweepPeriod;
if (Period[i] < minSweepPeriod) then Period[i] := minSweepPeriod;
end;
UpLim := Bias + UpLim;
LowLim := Bias + LowLim;
if showsweep then begin
writeln('Here are the gap percentages&mdash;·);
for i := 1 to 7 do writeln( 'Gap1, i, · is 1,BladeGapfi]);
end;
ZSafeSweep := ZBladeLevel + 0.060 {warp tolerance + 10 mils} + XP;
end;
&zgr;******************************************************} procedure ReadMACHINExPRMfile;
const
anyfile = $3F;
var
SweepFile : Text;
Line : String;
i,jj,kk,index : integer;
$6
Dirlnfo : searchRec;
begin
If ShowSweep then writeln (· Reading^MACHINE.PRM file. ·);
FindFirst(·\3dsys\Machine.PRM·,anyfile,Dirlnfo); if DosError <> 0 then begin
window(l,l,80,25) ;
CIrSer;
gotoxy(l,21) ;
writeln; ·-
writeln(' ERROR: Machine.prm not found.
IN.
UserWait;
HaIt(I);
end;
{ }
assign(SweepFile,'XSdsysXMachine.pnn1); reset(SweepFile);
i := 0;
repeat
readln(SweepFile,line)
until line = ·MACHINE.PRM·;
while (Not Eof(SweepFile)) and (i < 3) do begin readln(SweepFile,line);
if linefl] <> ·!· then inc(i);
case i of
1 : begin
MachineType := copy(1ine,1,7); ProcessSpeedM := RealVal(copy(line, 8, 8), jj) ;
end ;
2 : MaxBladeMoves :=
IntVal(copy(line,l,pos('!',line)-l),jj);
3 : DefaultPlungerStepsPerMil :=
RealVal(copy(1ine,l,pos('!·,line)-l),jj); end;
«&pgr;»
end; ._·.·■■
close(sweepFile); end;
{
procedure WriteMACHINExPRMfile; const
ParamFileName = 'XSDSYSXMACH NewName = '\3DSYS\MACHINE.PRM·; 10
var
IOerr,i,m,n,valcode : integer; j : longint;
r : real;
ParamFileLine, AppendText : str80;
ParamFile,NewFile: text; Dirlnfo : SearchRec; InputLine : string; 20
begin
OpenParamFile := ParamFileName;
assign(ParamFile,OpenParamFile); rewrite(ParamFile); assign(NewFile,NewName); reset(NewFile); while not eof(NewFile) do begin readln(NewFile,InputLine); writeln(ParamFile,InputLine); end;
rewrite(NewFile);
IOerr := IOresult; if IOerr <> 0 then begin
OpenParamFile := ParamFileName; assign(ParamFile,OpenParamFile);
reset(ParamFile);
IOerr := IOresult;
if IOerr &ogr; 0 then OpenParamFile := ' ·
end; {10 error)
if IOerr = 0 then begin
i := 0;
reset(ParamFile);
repeat
readln(paramFile,paramFileLine); writeln(newFile,paramFileLine); until paramFileLine = 'MACHINE.PRM';; readln(paramFile,paramFileLine);
while (paramFileLine[1] = · ') or (paramFileLine[1] = ·!·) do
begin
writeln(newFile,paramFileLine); readln(paramFile,paramFileLine); end;
writeln(newFile,paramFileLine); { This is the machine model #. }
Str(MaxBladeMoves,paramFileLine);
writeln(newFile,paramFileLine+1 1 Maximum blade steps to cross vat');
readln(paramFile); { We just wrote a new val here so throw old away. )
while not eof(paramFile) do
begin
readln(paramFile,paramFileLine); writeln(newFile,paramFileLine); 0 end;
end;
close(NewFile);
close(ParamFile);
end;
35
procedure RotateStep(DirStep: Integer;var · InputByte: Integer);
begin ' "'■
Steplter := ((Steplter + DirStep) + 4) mod 4^ InputByte := Bits[Steplter];
end;
procedure BenDelay(del:integer);
var
&khgr; :integer;
i :integer; *
j :integer;
-Cf
begin ~
X := 0;
j := 0;
repeat
INC(X);
for i := 1 to 10 do inc(j); { 100 us } until X>= del;
end ;
function SweeperParameter(period : real): real; { Feed this the desired period and it will return the appropriate parameter }
{ to sweep at that period. You then feed that # to the appropriate }
{ sweeper moving procedure.
)
var
RoundPeriod : integer;
sweeperParam : real;
begin
RoundPeriod := round(period);
if RoundPeriod < minSweepPeriod then RoundPeriod :=
minSweepPeriod;
if RoundPeriod > maxSweepPeriod then RoundPeriod maxSweepPeriod;
{ SineMoves
(* check for the machine type so the appropiate *) (* Parameter Value for the blade sweep is assigned *) if ((ProcessSpeedM * 10) < 1) then
(* WYSE 286 values *)
case RoundPeriod of
1 : sweeperParam := periodlParam; { SquareMoves start here. }
2 : sweeperParam := period2Param;·
3 : sweeperParam := period3Param,**
4 : sweeperParam := period4Param; _&ldquor;
5 : sweeperParam := periodSParam; *~ 6 : sweeperParam := periodöParam;
7 : sweeperParam := period7Param; start here. }
8
9
10
11
12
13
14
25 15
16
else
begin
if (RoundPeriod > 16) and (RoundPeriod < 21) then sweeperParam := periodl6Param
((RoundPeriod - 16) * ((periodl6Param-period21Param)/4)); if (RoundPeriod > 20) and (RoundPeriod < 31) then sweeperParam := period21Param ((RoundPeriod - 20) * ((period21Param-period30Param)/10));
sweeperParam
sweeperParam sweeperParam sweeperParam sweeperParam sweeperParam sweeperParam sweeperParam sweeperParam sweeperParam
= periodSParam;
= period9Param;
= periodlOParam; = periodllParam; = periodl2Param; = periodl3Param; = periodl4Param; = periodlSParam; = periodl6Param;
end;
end
else (* NCR 386 VALUES *)
(* all NCR 386 values are sine moves *)
case RouhdPeriod of
1 : sweeperParam := 1.2 ; 2 : sweeperParam := 1.2 ;
3 : sweeperParam := 1.2 ; 4 : sweeperParam : = 0.8 ;
5 : sweeperParam := 0.6 ; 6 : sweeperParam := 0.5 ;
7 : sweeperParam := 0.4 ; 8 : sweeperParam :=
0.35 ; :
9 : sweeperParam := 0.31 ; 10 : sweeperParam : = 0.26 ; - -c·
11 : sweeperParam := 0.245 ; 12 : sweeperParam : = 0.22 ;
13 : sweeperParam := 0.205 ; 14 : sweeperParam : = 0.19 ;
15 : sweeperParam :- 0.18 ; 16 : sweeperParam : = 0.16 ;
17 : sweeperParam := 0.152 ; 18 : sweeperParam :=0.1375;
19 : sweeperParam := 0.135 ; 20 : sweeperParam : = 0.13 ;
21 : sweeperParam := 0.12 ; 22 : sweeperParam :=0.115 ;
23 : sweeperParam := 0.11 ; 24 : sweeperParam :=0.105 ;
25 : sweeperParam := 0.1 ; 26 : sweeperParam :=0.097 ;
27 : sweeperParam := 0.0935 ; 28 : sweeperParam : = 0.09 ;
29 : sweeperParam := 0.087 ; 30 : sweeperParam :=0.085 ;
end (* case NCR 386 *) ;
35
SweeperParameter := sweeperParam;
end;
^***************************************************^ function SweeperSqrVelocity(vel:real):real; { Converts a velocity in inches per second to the sweepers private units. Smaller trueVels correspond-to greater velocities. }
{ This function is no longer used. }
var
trueVel : real;
begin
if vel <= 1 then trueVel := 76 : else if vel <= 2 then trueVel := (vel - 1) * (36-76) + 76 Nielse if vel <= 3 then trueVel := (vel - 2) * (23-36) + 36
else if vel <= 4 then trueVel := (vel - 3) * (17-23) + 23
else if vel <= 5 then trueVel := (vel - 4) * (12-17) + 17
else if vel <= 6 then trueVel := (vel - 5) * (10-12) + 12
else if vel <= 7 then trueVel := (vel - 6) * (9-10) + 10
else if vel <= 8 then trueVel := (vel - 7) * (7-9) 25+9
else if vel <= 9 then trueVel := (vel - 8) * (6-7) + 7
else if vel <= 10 then trueVel := (vel - 9) * (6-7) + 7
else trueVel := 5;
SweeperSqrVelocity := truevel; end;
procedure SweeperBack(period : real; StopCode : integer); { StopCode 0 = normal return ( could be the limit )
1 = abnormal - limit hit before completed move ( ZStage ) .
2 = abnormal - keypressed
3 = stall }
var
: integer;
key : char;
speed : real;
begin
speed := SweeperParameter(period); {speed holds a raw parameter now} -
if period < MinSafeSinePeriod then begin delaytime := trunc(speed); - ^0 if (ZStagePos < ZSafeSweep) then exit; port[Sweeplim] := $FF;
i := 0;
if ShowSweep then writeln(· SWEEPER BACK '); repeat
if (port[SweepLim] and $40) <> $40 then begin port[SwepCoil] := $00;
BladePos := MaxBladeMoves;
StopCode := 0;
exit; { hit limit switch }
end;
inc(BladePos);
if i <= 59 then inc(i) { ramp up
else if BladePos > (MaxBladeMoves - 60) { ramp down }
then i := MaxBladeMoves - BladePos + 1;
rotatestep(l,Sweepstep);
port[Swepcoil] := {(port[Swepcoil] and $F3) or} (sweepstep and $0F) ;
BenDelay(delaytime + LnSteps[i]); until {(keypressed) or } (BladePos >= MaxBladeMoves); port[SwepCoil] := $00;
CM
{ if keypressed then begin
key := Readkey;
StopCode := 2;
end; } _ .
if BladePos >= MaxBladeMoves then begin
if ShowSweep then writeln(' *** ERROR : STALL in Sweeper Back ');
delay(1000);
beep;
BladePos := MaxBladeMoves;
StopCode := 3; ;
end; *'
end - c.
else sinemove(MaxBladeMoves,speed,'&ggr;','&ggr;',stopcode) ; end;
procedure SweeperForward(period : real; StopCode : integer);
var
i : integer;
key : char;
speed : real;
begin
speed := SweeperParaneter(period); {speed holds a raw parameter now)
if period < MinSafeSinePeriod then begin delaytime := trune(speed);
if (ZStagePos < ZSafeSweep) then exit; portfSweeplim] := $FF;
i := 0;
if ShowSweep then writeln(· SWEEPER FORWARD '); repeat
if (port[SweepLim] and $20) <> $20 then begin port[SwepCoil] := $00;
BladePos := 0;
StopCode := 0;
exit; { home, limit switch } end;
dec(BladePos); if i <= 59 then inc(i) { ramp up
else if BladePos < 60 { ramp down }
then i := BladePos + 1; rotatestep(-l,sweepstep); port[Swepcoil] := {(port[Swepcoil] and $F3) or }(sweepstep and $0F);
BenDelay (delaytime + LnSteps[i]); until {(keypressed) or } (BladePos <= rf) ; port[SwepCoil] := $00; - _,-.
{ if keypressed then begin key := Readkey;
StopCode := 2; end; }
if BladePos <= 0 then begin if ShowSweep then writeln(· *** ERROR : STALL in Sweeper Forward '); BladePos := 0; StopCode := 3; beep ;
delay(lOOO); 5 end;
end
else sinemove(MaxBladeMoves,speed,'r','11,stopcode); { We should never reach } { this point.
end;
/***************************************************** procedure MoveBlade(period : real; StopCode:integer); var
RoundPeriod : integer;
sweeperParam : real;
begin
{ Determine machine type. }
if ( ProcessSpeedM * 10 ) >= 1 then { NCR 920 } {Too cool! JFT)
begin
if BladePos <> 0 then expsinemove( MaxBladeMoves , SweeperParameter( period ) , 'r1 )
else expsinemove( MaxBladeMoves , SweeperParameter( period ) , 1I' ); end else begin
{ Wyse 286 )
if period >= MinSafeSinePeriod - &idiagr;· then if BladePos <> 0 then expsinemove(MaxBladeMoves,SweeperParameter(period),'r1)
else expsinemove(MaxBladeMoves,SweeperParameter(period),1I1)
else if BladePos <> 0 then sweeperforward(period,StopCode)
else sweeperback(period,StopCode);
end;
end;
V )
procedure PlungerHoldingTorque;
begin
if Steplter >= $09
then port[SwepCoil] := ( $08 * 16 and $F0 ) else port[SwepCoil] := ( $04 * 16 and $F0 ); 0 end;
procedure PlungerDown(numMoves : longint; var StopCode : integer);
(*** numMoves of 0 means go to Plunger limit ***} var
i,j,k : integer;
m : longint; {} {.Changed from integer to" accomodate SLA-500. }
begin
if PlungerPos >= MaxPlungeMoves then exit;
if numMoves <> 1 t h e &eegr; Read3DStateFile(ZStagePos,PlungerPos,JunkSC);
if ShowSweep then writeln(· MOVING PLUNGER DOWN setting level.');
if numMoves = 0 then m := MaxPlungeMoves else m : = numMoves;
port[SwepCoil] := ( plungeStep * 16 ana $F0 );
repeat - ^
inc(k);
for j := 1 to minplungemoves do begin
rotatestep(l,plungestep);
port[Swepcoil] := {(port[Swepcoil] and $F0) or} (plungestep*16 and $F0);
delay(PlungeMotorDelay);
0 end;
inc(PlungerPos);
until (k >= m) or (PlungerPos >= MaxPlungeMoves);
if numMoves <> 1 then PlungerHoldingTorque;
{ if numMoves <> 1 then }
Update3DStateFile(ZStagePos,PlungerPos,JunkSC);
end;
&zgr;***************************************************}
procedure PlungerUp(numMoves : longint; var StopCode : integer);
{*** numMoves of 0 means go to Plunger limit ***}
var
i,j,k : integer;
m : longint;
HitLimit : boolean;
begin
HitLimit := false;
PlungerStalled :=., false;
{ If moving up full stroke, set the plunger position to twice
MaxPlungeMoves give greater assurance that the plunger reaches the top. }
StopCode := 1; { Default to stall, set to 0 when we hit switch. }
if PlungerPos <- 0 then exit;
if numMoves <>1 then Read3DStateFile(ZStagePos,PlungerPos,JunkSC);
if numMoves = 0 then PlungerPos := 2 * MaxPlungeMoves; if ShowSweep then writeln(· MOVING PLUNGER UP
setting level. ') ; ■ ^o
if numMoves = 0 then m := 2 * MaxPlungeMoves else m := numMoves;
k := 1;
port[SwepCoil] := ( plungeStep * 16 and $F0 );
repeat
inc(k);
for j := 1 to minplungemoves do begin
rotatestep(-l,plungestep);
port[Swepcoil] := {(port[Swepcoil] and $F0) or }(plungestep*16 and $F0);
delay(PlungeMotorDelay);
5 end;
dec(PlungerPos);
if (portfSweepLim] and $80) <> $80 then begin
port[SwepCoil] := $00;
PlungerPos := 0;
StopCode := 0;
HitLimit := true;
{ Update3DStateFile OK for numMoves = 1 }
Update3DStateFile(ZStagePos,PlungerPos,JunkSC); exit; { plunger top limit switch }
end;
until (k >= m) or ( PlungerPos <= 0);
if numMoves <> 1 then PlungerHoldingTorque;
{ If this was a full-stroke move, check to see if we hit the limit switch. If we didn't, then display that situation according to OpMode. }
if numMoves = 0 then begin &mdash;
if not HitLimit then PlungerStalled := true; end;
{ if numMoves <> 1 then }
Update3DStateFile(ZStagePos,PlungerPos,JunkSC); end;
10
procedure ReadBiCell (recurs:char;var FinalLevel: integer) ; {*** recurs = R = recursive readings to check validity
N = non-recursive reading S= average of 5 simple straight bi-cell values with no validity checks ***} const
LevelReading = 128;
var
b,i,j,count,k,newlevel,sum,stopcode : integer;
junkstr,sign : string;
begin
count := 1;
if Recurs = 1S1 then count := 5; sum := 0;
for k := 1 to count do begin
port[780] := 12; { addr ADC port = 780 has 16 channels, use 5 }
for i := 1 to 100 do inc(j); { 10 us } i := 0;
repeat
inc(i);
b := port[$310];
newLevel := port[$30C];
until (b<128) or (i>2000); {re-repeat this loop} NewLevel := NewLevel - LevelReading;
FinalLevel .: = NewLevel;
sum := sum +FinalLevel;
if ShdwSweep then begin
{} {writeln(· NewLevel =',NewLevel,'
clrscr;
if NewLevel > O then sign := '-1 else sign := ' + ·;
junkstr := concat('New level = ',sign,intstr(abs(NewLevel)));
centertext(junkstr,1);
delay(100); j
end;
end; { for 1 to count } - c.
if (ShowSweep) and ( count > 1) then begin if sum > 0 then FinalLevel := trunc((sum / count)+0.5)
else FinalLevel := trunc((sum / count)-0.5);
{} { writeln(' AveLevel =',FinalLevel,' ');}
if NewLevel > 0 then sign := ·-· else sign := '+';
junkstr := concat('New level = ',sign,intstr(abs(NewLevel)));
centertext(junkstr,1);
delay(200);
end;
if (Recurs = 1S1) then exit;
if (NewLevel = BIAS) and (Recurs = 1R1) then begin { test for laser blocked or off bi-cell ) PlungerUp(20,StopCode);
0 ReadBiCell(1N1,NewLevel);
if NewLevel = BIAS then begin
PlungerDown(40,StopCode);
ReadBiCel1(·N·,NewLevel);
if NewLevel = BIAS then begin centertext('ERROR : Laser Beam is blocked or off Bi-CeIl.',I) ;
UserWait;
HaIt(I);.; end;
PlungerUp(4O,StopCode);
end; &mdash;
PlungerDown(20,StopCode);
end; { NewLevel = BIAS } end; { ReadBiCell }
procedure WhichBladeLimit(var LimitSwitch:/integer); { 1 = front, 2 = back, 3 = neither } begin ' -<>
if (port[SweepLim] and $20) <> $20 then begin port[SwepCoil] := $00; LimitSwitch:= 1;
BladePos := 0; exit; { home limit switch ) end;
if (port[SweepLim] and $40) <> $40 then begin port[SwepCoil] := $00;
LimitSwitch:= 2; BladePos := MaxBladeMoves; exit; { back limit switch } end;
LimitSwitch := 3; end;
procedure InitSweeperandPlunger(option:integer; var StopCode : integer); var
wastekey : char;
kk : integer;
begin
port[$30B] := $98; { init 8255 } port[$30B] := $98; {control port}
port[Swepcoil] := O; {8255 port C} port[Sweeplim] := 0; {8255 port B} delay(1);
WhichBladeLimit(kk); { this sets BladePos } if kk = 3 then begin
beep ;
writeln;
Centering CAUTION: Sweeper blade not in home position.·);
Centerln(' You may manually reposition the blade at front of vat. ·);
userwait; - ^1
delay(1);
{}{}kk:=-1234;
WhichBladeLimit(kk);
{}{}Window(l,l,80,25) ;
{}{}Writeln(kk);
if kk = 3 then begin
gotoxy(l,l);
DrawBox(3,7,73,14,2);
repeat delay(100) until keypressed; junkkey := readkey;
CursorOn;
HaIt(I);
end;
end;
PlungerPos := MaxPlungeMoves +150; { Pad it so we KNOW it goes to limit }
0 PlungerUp(0,StopCode);
PlungerDown((MaxPlungeMoves div 2),StopCode); PlungerPos := MaxPlungeMoves div 2; if ShowSweep then begin
writeln(' SWEEPER, PLUNGER, AND ZSTAGE INITIALIZED ');
delay(800);
end;
if keypressed then .wastekey := ReadKey; end;
procedure InitSweeper(option:integer;
var StopCode : integer); var
wastekey : char;
kk : integer;
begin '■
port[$30B] := $98; { init 8255 } &
port[$3OB] := $98; {control port} port[Swepcoil] := 0; {8255 port C) port[Sweeplim] := 0; {8255 port B) delay(1);
WhichBladeLimit(kk); { this sets BladePos } if kk = 3 then begin
0 beep;
writeln;
Centering Sweeper blade not in home position, program aborting. ');
Centerin(· You may manually reposition the blade at front of vat. ·);
userwait;
if (port[SweepLim] and $20) <> $20 then begin
portfSweeplim] := $00; end else begin
gotoxy(l,l);
DrawBox(3,7,73,14,2); repeat delay(100) until keypressed; junkkey := readkey; CursorOn;
HaIt(I);
end;
end;
end;
procedure LiquidStableDelay; &mdash;
{ Take bicell readings until the difference between readings is within epsilon a specified number of times in a row. }
const
NumOfODeltaReadsNeeded = 5; deltaEpsilon = 3;
var
level,oldlevel : integer;
numOfODeltaReads : integer; " *» begin
numOfODeltaReads := 0;
ReadBiCellCS' ,level) ;
ReadBiCell(1S',oldlevel);
while (abs(level - oldlevel) > deltaEpsilon) and (NumOfODeltaReads < NumOfODeltaReadsNeeded) do begin
ReadBiCellCS· ,level) ;
ReadBiCell('S·,oldlevel);
if abs(level - oldLevel) <= deltaEpsilon then inc(NumOfODeltaReads);
end;
end;
{ *************************************************** j
procedure SetPlunger(numSetPlungers:integer;var FinalLevel:integer );
var
level,oldlevel, timesthru,stopcode : integer; OKfirstTry : boolean;
&zgr;Pos : real;
pPos : longint;
junksc : integer;
begin { SetPlunger )
if PMWriteFlag then begin
Read3DStateFile(zPos,pPos,j unksc); ReadBiCell(1N1,level); -
Append(PMWriteFile);
Writeln(PMWriteFile,zPos:2:6, ' : ·, pPos:l,· : ', level:1, · SetPlunger commences...');
Close(PMWriteFile);
end;
{*****************} *)
OKfirstTry := false; ,:
TimesThru := 0;
if ShowSweep then begin ' ■£"
if NumSetPlungers = -1 then writeln('AUTOMATIC MODE·)
else writeln('Number of Level Checks=1,numSetPlungers);
end;
{} ReadBiCell(1N',level);
{} if (level < Uplim) and (level > lowlim) then begin
if ShowSweep then writeln('Bi-cell level OK first time through SetPlunger.');
if PMWriteFlag then begin
Read3DStateFile(zPos,pPos,junksc); ReadBiCell(1N',level);
Append(PMWriteFile);
Writeln(PMWriteFile,zPos:2:6,· : ', pPos:l,' : ', level:1, ' SetPlunger completed.');
Close(PMWriteFile);
end;
{*****************} *)
exit;
end;
if NumSetPlungers = -1 then NumSetPlungers := 25; repeat
if ShowSweep then writeln('READING BI-CELL·);
ReadBiCell(·N·,level); if (NumSetPlungers = 25) and (TimesThru>=l) and
(Level<=UpLim) and (Level>=LowLim) then OKfirstTry:= true;
5
(* if TimesThru = 0 then begin { do a validity test here &mdash; } oldlevel := level; PlungerUp(20,StopCode); ReadBiCell(1N',level);
if level = oldlevel then begin PlungerDown(40,Stopcode); ReadBiCell(1N1 ,level) ; -£
if ( level = oldlevel ) and ( level = bias ) then begin
writeln;
writeln('ERROR : Laser Beam is not within a usable bi-cell range.1); writeln;
UserWait;
{ AddRemoveResin(level); } HaIt(I); end;
end else PlungerDown(20,StopCode); end; { TimesThru = 0 } *) 25
&diams; if level > UpLim then begin repeat
PlungerDown(1,StopCode); ReadBiCell(1N1,level); until level < UpLim; end;
if level < LowLim then begin repeat
PlungerUp(l,StopCode); ReadBiCell(1N1,level);
until level > LowLim; end;
{ the state file is not updated in Plunger moves of 1 case... }
Update3 DStateFile(ZStagePos,PlungerPos,StopCode); inc(TimesThru); &mdash;
LiquidStableDelay;
{}(* {} delay(PD2 * 1000); *)
{ if not((TimesThru > NumSetPlungers) or OKfirstTry) then delay(PD2*1000); }
until (TimesThru > NumSetPlungers) or OKfirstTry; if ShowSweep then writeln ( · FINAL LEVEL =',FinalLevel);
(* {*****************}
if PMWriteFlag then begin · £■
Read3DStateFile(zPos,pPos,junksc); ReadBiCell(1N1,level);
Append(PMWriteFile);
Writeln(PMWriteFile,zPos:2:6,' : ·, pPos:l,· : ', level:1, · SetPlunger completed.1); Close(PMWriteFile);
end;
PlungerHoldingTorque;
end; { SetPlunger }
procedure OneSweep(index:integer;DipDepth,LayerDepth:real); var
stopcode : integer;
currentZPos : real;
junkPlungerPos : longint;
begin
Read3DStateFile(currentZPos, junkPlungerPos, stopcode);
(*if currentZPos > 0 then DipDepth := 8 else DipDepth := 6;*)
if index = 1
then begin ■■-. '
if ShowSweep then writeln(' ZMove =',(-(-DipDepth - BladeGapLO
+ (LayerDepth * BladeGap[index]/100)) /25.4):7:3);
ZMoveGivenDistance(ZAccel,ZVeloc,-(-DipDepth
BladeGapLO +
(LayerDepth * BladeGap[index]/100))/25.4 {conv. to inches})
end else begin
if ShowSweep then writeln(' : ZMove =·,(-((LayerDepth * BladeGap[index]/100)-*
( L a y e r D e j? t h * BladeGap[index-l]/100))/25.4):7:3);
ZMoveGivenDistance(ZAccel,ZVeloc,-((LayerDepth * BladeGap[index]/100)-
(LayerDepth * BladeGap[index-l]/100))/25.4);
end;
MoveBlade(Period[index],StopCode);
end;
{&igr;******************************************************} procedure DoSweep(DipDepth,LayerDepth:real; RelaxationTime:integer);
var
level,oldlevel,isweep,StopCode : integer;
currentZPos : real;
junkPlungerPos : longint;
begin
Read3DStateFile (currentZPos, j unkPlungerPos, stopcode) ;
(*if currentZPos > 0 then DipDepth := 8 else DipDepth := 6;*)
{ ZW=RelaxationTime in seconds // ZD=DipDepth in mm
ZV=ZtableVeloc // ZA := ZtableAccel // Next Layer Thickness = LayerDepth }
if ShowSweep then begin
writeln(' Layer Thickness(mm)=·,LayerDepth:5:3,
(mils)=·,(LayerDepth*1000/25.4):5:3); writeln(' ZMove =',(-DipDepth/25.4):7:3, ' inches
writeln(' =',-DipDepth:7:3,· mm ');
end;
{ Move down ZD, DipDepth. )
ZMoveGxvenDistance(ZAccel,ZVeloc,-DipDepth/25.4); { wait PD }
Delay (3500) ; ^.
LiquidStableDelay;
(* delay(postDipDelay*1000); *)
if (numchecks <> 0) and (not demoFlag) then SetPlunger(numChecks,level);
if showsweep then begin
0 writeln('ZstagePos=',ZstagePos:7:2); writeln('BladeGapL0/25.4=·,(BladeGapLO/25.4):7:2); writeln(·DipDepth (mils)=1,(DipDepth/25.4):7:3); writeln('LayerDepth (mils)=·,(LayerDepth/25.4):7:3);
writeln('1-2-3+4=',( ZStagePos - (BladeGapLO/25.4) - (DipDepth/25.4)
+ (LayerDepth/25.4) ) : 7:3);
writeln(·ZSafeSweep=',ZSafeSweep:7:3); userwait;
end;
30
{ no sweep case }
{ Note this critera does not involve BladeGap[i]. ) if (numSweeps <= 0) or (( ZStagePos - (BladeGapLO/25.4) - (DipDepth/25.4)
+ (LayerDepth/25.4) ) < ZSafeSweep) then begin if ShowSweep then writeln('*** Unsafe to sweep.1);
Qo
{ Move elevator up to the 'draw next layer1 position.
if ShowSweep then writeln(·
=·,(-(LayerDepth-DipDepth)/25.4):7:3);
ZMoveGivenDistance (ZAccel, ZVeloc, - (LayerDepth-DipDepth) / 25.4) ;
delay(5);
Delay(RelaxationTime{ZW});
exit;
end; ^
for isweep := 1 to numSweeps do begin ' ^-
OneSweep(isweep,DipDepth,LayerDepth);
end;
{Now bring the system to pre-sweep plus part layer thickness.}
if ShowSweep then writeln(' ZMove
= ', (-(BladeGapLO-(LayerDepth * BladeGap[numSweeps]/100) + LayerDepth)/25.4):7:3);
if not HopNguyen then begin
if demoFlag then ZMoveGivenDistance(ZAccel,ZVeloc,-(BladeGapLO-
(LayerDepth * BladeGap[numSweeps]/100) )/25.4)
else ZMoveGivenDistance(ZAccel,ZVeloc,-(BladeGapLO-(LayerDepth
BladeGap[numSweeps]/100) +LayerDepth)/25.4);
end;
delay(10);
end;
Bi
function expSweeperSqrVelocity(vel:real):real; { Converts a velocity in inches per second to the sweepers private units. Smaller trueVels correspond to greater velocities. }
var
trueVel : real;
begin
if vel <= 1 then trueVel := 76 else if vel <= 2 then trueVel := (vel - 1) * (36-76) + 76 :
else if vel <= 3 then trueVel := (vel - 2) * (23-3 6)
+ 36 i;
else if vel <= 4 then trueVel := (vel - 3) * (17-23) + 23
else if vel <= 5 then trueVel := (vel - 4) * (12-17) + 17
else if vel <= 6 then trueVel := (vel - 5) * (10-12) + 12
else if vel <= 7 then trueVel := (vel - 6) * (9-10) + 10
else if vel <= 8 then trueVel := (vel - 7) * (7-9) + 11
else if vel <= 9 then trueVel := (vel - 8) * (6-7) 25+9
else if vel <= 10 then trueVel := (vel - 9) * (6-7) + 9
else trueVel := 5;
expSweeperSqrVelocity := truevel; end;
procedure expSweeperBack;
{ StopCode 0 = normal return ( could be the limit )
1 = abnormal - limit hit before completed move ( ZStage )
2 = abnormal - keypressed
3 = stall }
ei
var .;;■;
: integer;
key : char;
{}{ speed : real; } - -
begin
delaytime := trunc(speed);
if (ZStagePos < ZSafeSweep) then exit; port[Sweeplim] := $FF;
:= 0;
if ShowSweep then writeln(' SWEEPER BACK ·); repeat i
if (port[SweepLim] and $40) <> $40 then begin port[SwepCoil] := $00; - ^. BladePos := MaxBladeMoves;
exit; { hit limit switch }
end;
inc(BladePos);
if i <= 59 then inc(i) { ramp up
else if BladePos > (MaxBladeMoves - 60) { ramp down }
then i := MaxBladeMoves - BladePos +1;
rotatestep(1,Sweepstep);
portfSwepcoil] := {(portfSwepcoil] and $F3) or} (sweepstep and $0F);
BenDelay(delaytime + LnSteps[i]);
until {(keypressed) or } (BladePos >= MaxBladeMoves); port[SwepCoil] := $00;
{ if keypressed then begin
key := Readkey;
end; )
if BladePos >= MaxBladeMoves then begin if ShowSweep then writeln(· *** ERROR : STALL in Sweeper Back ■);
delay(1000);
beep;
BladePos := MaxBladeMoves; end;
end;
procedure expSweeperForward; var
i : integer; key : char; {}{ speed : real; }
begin ;
delaytime := trunc(speed); if (ZStagePos < ZSafeSweep) then exit? & port[Sweeplim] := $FF; i := 0; if ShowSweep then writeln(' SWEEPER FORWARD ·); repeat if (port[SweepLim] and $20) <> $20 then begin port[SwepCoil] := $00; BladePos := 0;
exit; { home limit switch } end; dec(BladePos);
if i <= 59 then inc(i) { ramp up }
else if BladePos < 60 { ramp down } then i := BladePos + 1;
rotatestep(-l,sweepstep); port[Swepcoil] := {(port[Swepcoil] and $F3) or }(sweepstep and $0F);
BenDelay(delaytime + LnSteps[i]); until {(keypressed) or } (BladePos <= 0); portfSwepCoil] := $00; { if keypressed then begin key := Readkey; end; } if BladePos <= 0 then begin
if ShowSweep then writeln(· *** ERROR1 : STALL in Sweeper Forward ·); BladePos := 0;
beep; &mdash;
delay(1000);
end;
end;
procedure expMoveBlade(period:real); var
SineMoveParam : real;
begin i
{}{ if period < 2 then begin
if BladePos <> 0 then expsweeperforward Nielse expsweeperback; end else begin
case period of
S ineMoveParam
S ineMoveParam S ineMoveParam S ineMoveParam S ineMoveParam
10
S ineMoveParam S ineMoveParam S ineMoveParam S ineMoveParam
= 10.5; = 6.8; = 6.2; = 6.1; = 4; = 3; = 2.98; = 2.97; = 2.95;
end;
if BladePos <> expsinemove(MaxBladeMoves,SineMoveParam,'r')
then else expsinemove(MaxBladeMoves,SineMoveParam,1I'); end; }
sinemoveparam := period;
{}{ if BladePos <> 0 then
expsinemove(MaxBladeMoves,SineMoveParam,'r') else expsinemove(MaxBladeMoves,SineMoveParam,1I1);} if BladePos <> 0 then expsweeperforward(period)
es-
.else expsweeperback(period);
end;
procedure SweepCal;
var
resp : integer;
theDelay : integer;
realDelay : real;
hourl, hour2, - ^c-
mini, min2,
seel, sec2,
secllOO, sec2100 : WORD ;
begin
repeat
write( 1I) for square, 2) for sine ?' ); readln( resp );
if resp = 1 then begin
write( 'Raw delay ? · );
readln( theDelay );
GetTime(hourl, mini, seel, secllOO) ;
if BladePos <> 0 then sweeperforward(theDelay,StopCode)
else
sweeperback(theDelay,StopCode);
end else if resp = 2 then begin write( 'Raw delay ? ' );
readln( realDelay );
GetTime(hourl, mini, seel, secllOO) ; if BladePos <> 0 then expsinemove(MaxBladeMoves,realDelay,'r')
else expsinemove(MaxBladeMoves,realDelay,1I')
&bgr;&ohacgr;
end;
GetTime(hour2, min2, sec2, sec2100) ; writelnCStart: ·, hourl, ':·, mini, ':'·, seel, ':·, secll00:2) ;
writeln('Start: ', hour2, ':', min2, ·:', sec2, ':·, sec2100:2) ;
until false; {forever}
end;
begin
{ blade must be at the front, already checked in utlzstage init } i:
SweepDefaults;
ReadSWEEPxPRMfile;
ReadMACHINExPRMfile;
BladePos := 0;
Steplter := 0;
NoSweep := false;
ZClearBuffer;
Read3DStateFile(ZStagePos,PlungerPos,junkSC); end.
unit SINSTEP;
3D Systems Stereolithography System Software
01/24/89 JFT Creation.
interface
uses CRT,DOS,UTLZSTAGE,UTILITYl;
const
MaxSafeSineSpeed = 1;
var
&bgr;*
BladePos : -integer;
procedure sinemove(steps: integer; SweepPeriod: real; device,dir : char; stopcode:integer); &mdash;
procedure expsinemove(steps:integer; rawParam: real; dir : char);
implementation
const
JB = $300; {plunger, recöater address}
JBC = $308; {8255: 4 MSB: plunger}
CoilDataPort = $309; { 4 LSB: recöater}
MaxBladeMoves = 1255; { pre - microstepping }
SwepCoil = $309;
SweepLim = $308;
function SweeperVelocity(InchesPerSec:real):real;
{No longer used&mdash;JFT, 4/3/89 }
{ Used by SineMove to correct the velocity parameter to correct speed. }
var
vel : real;
begin
if InchesPerSec < 0.1 then vel := (InchesPerSec / 0.1) * 0.11
else if InchesPerSec <= 0.2 then vel : = ((InchesPerSec - 0.1) / 0.1) * (0.2375-0.11) + 0.11
else if InchesPerSec <= 0.5 then vel : = ((InchesPerSec - 0.2) / 0.1) * (0.68-0.2375) +0.2375
else if InchesPerSec <- 1.0 then vel : = ((InchesPerSec - 0.5) / 0.3) * (1.55-0.68) + 0.68;
SweeperVelocity := vel;
5 end;
, -
{} {sinemove: microstepping of recoater and plunger: see description of parameter at begin of file. Last test results: better performance with CoProc N+, Ramp seemed to be to slow for higher velocities (>10), so AccelRampMax := 5 2 without further tests ! Test for this procedure: MICROl.PAS (see conditional defines)}
{ No longer used. Expsinemove is used instead&mdash;JFT, 4/3/89 }
10 procedure sinemove(steps: integer; SweepPeriod: real; device,dir : char; stopcode:integer); :
const
DAngIeArray
(10,10,10,15,15,15,30,30); AccelRampMax RampLength
array[0..7] of integer =
integer = 2; integer - 4;
0 type
LookUpTable = array [0..45] of real;
var
stepcount
Xl, X2
FId,AccelValue
DIndex, DAngle
SinOfAngle,CosOfAngle
QuarterPi,PeriodPoint
FldTimes
BitFactor
X0Bit,XlBit,X2Bit
CoilABitl,CoilABit2
CoilBBitl,CoilBBit2
SingleBit,FLdCount
j,double,accelcount
integer; real;
integer; integer; integer; integer; LookUpTable; integer; integer; integer; integer; integer; integer;
&bgr;?
single,null &ldquor;> · : integer;
output - _ : integer;
rep : integer;
whichLim : integer;
veloc : real;
begin
if (ZStagePos < ZSafeSweep) then exit; port[Sweeplim] := $FF; veloc := SweeperVelocity(12.1/SweepPeriod);
if device - 'p1 then BitFactor := else BitFactor := 16; - ^?
CoilABitl := 32 div BitFactor; {20H, 2}
CoilABit2 := 16 div BitFactor; {10H, 1}
CoilBBitl := 128 div BitFactor; {80H, 8} 0 CoilBBit2 := 64 div BitFactor; {40H, 4}
{Fid}
FId := round(100/veloc+O.5); 25
{Dangle} DIndex := round(veloc+0.5)-l; if DIndex < 0 then DIndex := 0; if DIndex > 7 then DIndex := 7; for j := 0 to DIndex do Dangle := DAngleArray[j];
{ Set QuarterPi to one-fourth period. } QuarterPi := 90 div DAngle;
5 { Build a table of values for the five-fourths period interval. } { The extra quarter lets us look up cosines easily. }
for j:= 0 to (5 *.QuarterPi) do FldTimes(j] :=sin(pi / 180 * DAngle * j) * FId;
5 for stepcount := 1 to steps do begin
if (port[SweepLim] and $20) <> $20 then begin
if upcase(dir)='R' then
10 begin
port[SwepCoil] := $00; l
7.
bladePos:=0;
StopCode : = 0; - <t
exit;
15 end;
end else if (port[SweepLim] and $40) <> $40 then begin
if upcase(dir)='L' then
begin
20 port[SwepCoil] := $00;
bladePos:=MaxBladeMoves; StopCode := 0;
exit ;
end;
25 end;
if (stepcount <= RampLength) then begin
AccelValue : =
AccelRampMax*round(veloc/3)*(RampLength-stepcount+1) 30 div RampLength; {accel}
if AccelValue < 1 then AccelValue := 1; end;
if ((steps-stepcount+1) <= RampLength) then begin 35 AccelValue : =
AccelRampMax*round (veloc/3) * (RampLength- (steps-stepcount))
.&ngr; 94
div RampLength;
if AccelValue < 1 then AccelValue := 1;
end else if (stepcount > RampLength) then
AccelValue := 1; - ■
{ Point SinOf Angle at Io or hi end of table, depending on step }
{ direction. CosOfAngle is one-quarter pi ahead of this. }
if upcase(dir) = 1L'
then SinOfAngle := 0 ;
else SinOfAngle := 360 div DAngle; CosOf Angle := SinOfAngle + QuarterPi; c-
for PeriodPoint := 0 to (4 * QuarterPi) do begin
Xl := FldTimes[SinOfAngle]; if Xl > 0 then Xlbit := CoilABitl {32 20H} else if Xl < 0 then Xlbit := CoilABit2 {16 10H) else Xlbit := 0;
X2 := FIdTimes[CosOfAngle]; if X2 > 0 then X2bit := CoilBBitl {128 80H) else if X2 < 0 then X2bit := CoilBBit2 {64 40H) else X2bit := 0;
XOBit := 0;
if abs(Xl) < abs(X2) then begin
double := abs(round(Xl +0.5)); SingleBit := X2bit; end;
if abs(X2) <= abs(Xl) then begin double := abs(round(X2 +0.5)); SingleBit := Xlbit; end;
single := abs(round(abs(Xl)-abs(X2)+0.5)); null := Fid-double-single;
for. accelcount : = 1 to AccelValue do begin
if upcase(dir) = 1L' then begin &mdash;{left} 5
if double > 0 then begin
for j := 0 to double do port [CoilDataPort] Xlbit+X2bit;
end;
if single > 0 then begin
for j := 0 to single do port [CoilDataPort] SingleBit;
end; ■£'
if null > 0 then begin
for j := 0 to null do port[CoilDataPort] XOBit;
end;
{end dir ="1··}
end else begin {dir "r"}
{right}
if null > 0 then begin
for j := 0 to null do port[CoilDataPort] XOBit,·
end;
if single > 0 then begin
for j := 0 to single do port [CoilDataPort] SingleBit;
0 end;
if double > 0 then begin
for j := 0 to double do port [CoilDataPort] Xlbit+X2bit;
end;
end; {dir "r")
end; {accelcount}
{ Update lookup table pointers. } if upcase(dir) = 1R' then begin SinOfAngle := SinOfAngle-1; end else begin
SinOfAngle := SinOfAngle+1; end;
CosOfAngle := SinOfAngle + QuarterPi;
end; {for SinOfAngle...}
end; {steps}
port[CoilDataPort] := $FF; if BladePos <= 0 then begin
{} {if ShowSweep then writeln(· *** ERROR : STALL in Sweeper SineMove Forward ');} BladePos := 0; StopCode := 3; 0 beep;
delay(1000); end;
end;
procedure expsinemove(steps:integer; rawParam: real; dir : char);
const
DAngleArray : array[0..7] of integer =
(10,10,10,15,15,15,30,30);
AccelRampMax : integer = 2;
5 RampLength : integer = 4;
type
LookUpTable = array [0..45] of real;
var
stepcount
Xl, X2
FId,AccelValue
DIndex, DAngle
SinOfAngle,CosOfAngle
QuarterPi,PeriodPoint
FldTimes
BitFactor
X0Bit,XlBit,X2Bit
CoilABitl,CoilABit2
CoilBBitl,CoilBBit2
SingleBit,FLdCount
j,double,accelcount
single,null
output
rep
whichLim
veloc
integer;
real;
integer;
integer;
integer;
integer;
LookUpTable;
integer; :
integer;
integer;
integer;
integer;
integer;
integer;
integer;
integer;
integer;
real;
begin
if (ZStagePos < ZSafeSweep) then exit; port[Sweeplim] := $FF; veloc := rawParam;
BitFactor : CoilABitl : CoilABit2 : CoilBBitl : CoilBBit2 :
= 16; =32 div BitFactor;
= 16 div BitFactor;
= 128 div BitFactor;
= 64 div BitFactor;
{20H, 2}
{10H, 1}
{80H, 8}
{40H, 4}
{Fid}
FId := round(100/veloc+O.5);
{Dangle}
DIndex := round(veloc+0.5)-1; if Dlndex < O then Dlndex := O; if Dlndex > 7 then Dlndex := 7;
for j := 0 to Dlndex do Dangle := DAngleArray[j]; 5
{ Set QuarterPi to one-fourth period. } QuarterPi := 90 div DAngle;
{ Build a table of values for the five-fourths period interval. } { The extra quarter lets us look up cosines easily.
}
for j:= 0 to (5 * QuarterPi) do - ' -c-
FldTimes[j]:=sin(pi / 180 * DAngle * j) * FId; 15
for stepcount := 1 to steps do begin
if (port[SweepLim] and $20) <> $20 then begin
if upcase(dir)='R' then begin portfSwepCoil] := $00; bladePos:=0; exit; end;
end else if (port[SweepLim] and $40) <> $40 then begin if upcase(dir)='L' then begin portfSwepCoil] := $00; bladePos:=MaxBladeMoves; exit; end; 5 end;
if (stepcount <= RampLength) then begin
AccelValue : =
AccelRampMax*round(veloc/3)*(RampLength-stepcount+1) div RampLength; {accel}
if AccelValue < 1 then AccelValue := l·? end;
if ((steps-stepcount+1) <= RampLength) then begin
AccelValue : =
AccelRampMax*round (veloc/3) * (RampLength- (steps-stepcount))
div RampLength;
if AccelValue < 1 then AccelValue := 1; end else if (stepcount > RampLength) then -c* AccelValue := 1;
{ Point SinOf Angle at Io or hi end of table, depending on step }
{ direction. CosOfAngle is one-quarter pi ahead of this. }
if upcase(dir) = 1L1
then SinOfAngle := 0
else SinOfAngle := 360 div DAngle; CosOfAngle := SinOfAngle + QuarterPi;
for PeriodPoint := 0 to (4 * QuarterPi) do begin 25
Xl := FldTimes[SinOfAngle];
if Xl > 0 then Xlbit := CoilABitl {32 20H} else if Xl < 0 then Xlbit := CoilABit2 {16 10H}
else Xlbit := 0;
30
X2 := FldTimes[CosOfAngle];
if X2 > 0 then X2bit := CoilBBitl {128 80H) else if X2 < 0 then X2bit := CoilBBit2 {64 40H) else X2bit := 0;
XOBit := 0;
^ If
if abs(Xl) < abs(X2) then begin
double := abs(round(Xl +0.5));
SingleBit := X2bit;
end; -
if abs(X2) <= abs(Xl) then begin
double := abs(round(X2 +0.5));
SingleBit := Xlbit;
end;
single := abs(round(abs(Xl)-abs(X2)+0.5)); null := Fid-double-single;
for accelcount := 1 to AccelValue do begin
1*
if upcase(dir) = 1L1 then begin {left} 15
if double > 0 then begin
for j := 0 to double do port [CoilDataPort] :: Xlbit+X2bit;
end;
if single > 0 then begin
for j := 0 to single do port [CoilDataPort] : = SingleBit;
end ;
if null > 0 then begin
for j := 0 to null do port[CoilDataPort] := XOBit;
end;
{end dir ="1"}
end else begin {dir "r"}
{right}
if null > 0 then begin
for j := 0 to null do port[CoilDataPort] : XOBit;
end;
if single > 0 then begin
for j :=, 0 to single do port[CoilDataPort] : = SingleBit;"
end;
if double > 0 then begin &mdash;
5 for j := 0 to double do port [Coil DataPort] : =
Xlbit+X2bit;
end;
end; {dir "r"}
10 end; {accelcount}
't. { Update lookup table pointers. }
if upcase(dir) = 1R1 then begin - &
SinOfAngle := SinOfAngle-1; 15 end else begin
SinOfAngle := SinOfAngle+1; end;
CosOfAngle := SinOfAngle + QuarterPi;
20 end; {for SinOfAngle...}
end; {steps}
port[CoilDataPort] := $FF;
25 if BladePos <= 0 then begin
{} {if ShowSweep then writeln(· *** ERROR : STALL in Sweeper SineMove Forward ·);}
BladePos := 0;
beep;
30 delay(lOOO);
end;
end;
end.^Z
! Build Parameter File
! Version 3.60 "*
! Part Name: Date:
! Important Data:
! last altered:
! place options together inside of quotesj use "" if no
options
I General Parameters
&igr;
800 Elevator board base address
100 elevator pitch
3.556 XY-only scale factor; Use 3.556 for Inches
and Slize res=1000
!!1, 0.0
MAO, 0.0
17000 X-coordinate offsets
17000 Y-coordinate offsets
5000 Max number of bytes per block in Laser Queue
26000,26000 Minimum X and Y of vat area (for graphics
viewport)
39000,39000 Maximum X and Y of vat area &iacgr;
#TOP,"DC+M &iacgr; Drift Correction on &igr;
#BTM,"ZW 30; ! Z-axis wait time in
5 seconds
ZD 8; ! Z-axis dip depth in mm
stoo
ZV 0.2; ..,;?.' ! Z-axls velocity
parameter - "
ZA 0.2" ! Z-axis acceleration
MACHINE.PRM
! MACHINE.PRM machine parameter file 05/18/89 &igr;
SLA-250 ! machine type 620 1 maximum blade steps to cross vat 0.03 ! plunger steps per mil of elevator movement
f·.
BEAM. PRM ' i*
! PROFILE Parameters Table ! Version 3.60 &igr;
5000,32767 beam rest position &igr;
! Beam Profile Data !
3 number of profile sensors
3 second sensor channel #
63104,55452 sensor #1 changed 3-24-89 MJH
0.045 1/2 mil hole multiplier to get mW
0.0116 1 mil
0.00592 2 mils changed 3-24-89 MJH
0.00072 4 mils
1 first sensor channel #
4752,6543 sensor #2 changed 3-24-89 MJH
0.040 1/2 mil hole multiplier to get mW
0.0102 1 mil
0.00776 2 mils changed 3-24-89 MJH
0.00063 4 mils
32767,32767 position of 2 mil hole (#3)
0.040 1/2 mil hole multiplier to get mW
0.0010 1 mil
0.00605 2 mils· 0.00063 .-- " 4 mils &igr;
! Temperature Data &mdash;
4 thermometer channel #
13 # points in thermistor calibration table
19900,10 temperature calibration table...
15720,15 format is resistance (Ohms), temperature (C)
12490,20 /
10000,25
8057,30 - £·
6531,35 5327,40 4370,45 3604,50 2986,55 2486,60 2081,65 1749,70 &igr;
! Fast, Medium & Slow Calibration Delay Values &igr;
! line format is Spiral time (ms), between points (sees, 1/10 sec res), ! between rows (sees) &igr; ■
20,0,0 Fast: 20 ms, turnaround as quickly as
possible 50,0.5,5 Medium: 50 ms, 1/2 sec, 5 sees 100,20,120 Slow: 100 ms, 20 sees, 2 minutes &igr;
! Slew Rate Limit Parameters !
1000 maximum step in either axis
2 delay between step points in milliseconds
POWER. PRM ■ ;-- · ! POWER V3.60 Parameters File
&igr; . &mdash; ■ ■
LASERPOWERTYPE=TOGGLe LEVEL or UNKNOWN
SWEEP.PRM
! SWEEP.PRM 05/18/89 &igr;
1 !NS nurasweeps 10 ! Pl sweep velocity 100 ! Gl blade gap as a percent of next layer
thickness (ignore if NS=I) " -£
10 ! P2 100 ! G2 10 ! P3 100 ! G3 10 ! P4 100 ! G4 10 ! P5 100 ! G5 10 ! P6 100 ! G6 10 &iacgr; &Rgr;7 100 ! Gl 0 ! BI bias when He laser is blocked 9 &iacgr; MD plunge Motor Delay : delay between plunger motor pulses (ms) 3.0 !PS PlungStart : inches plunger moves down to its start position 4 ! UL UPLIM : bi-cell activate level ' -4 ! LL LOWLIM: bi-cell activate level 0.125 ! BG BladeGapLO - distance between liquid and
recoater blade (inches) 35-1 ! NC Number of cheeks for leveling ( 0 -> 5 or -1 for auto mode *** ) 0.3 !DA Draining elevator acceleration
0.5 ! DV Draining elevator velocity ' 0 ., -.·■.! XP extra Platform height(mils).ZSafeSweep=ZBladeLevel+60mil+XP noshow ! Show or No-Show sweep info ( S or N in the first column )
ZSTAGE.PRM
! ZSTAGE Parameters File
! Version 3.60
!
1111 command line options: /NEGZ, /S, /M 800 elevator control board I/O address .5 acceleration parameter ■ ■& 1 velocity parameter 2000000 big distance (max movement for up or down) 100000 # of microsteps per inch 2000 timeout value
10000 ZBladeLevel
10000 ZLiquidLevel
10000 ZUnloadLevel
program AutoLevel; ...;· uses crt,utilityl,utlsweep,windows; var
j unksc
Displaywind
ExitSave
Done
HoldKey
theLevel
integer; wind ; pointer; boolean; char; integer;
{$F+}procedure ExitAutoLevel;{$F-} begin
CursorOn; ■ ■£·
DefaultWindow;
ClrScr;
ExitProc := ExitSave; end;
procedure DrawMainScreen; begin
clrscr;
centertext('This is the Surface Position Repeatability POD',I);
centertext('Auto-Levelling Program Vl.1',2); centertext(·Press L to Level, X to exit.',4); end;
procedure DoAutoLevel; begin
centertext('Auto-Levelling in progress...',6); SetPlunger(-l,theLevel); centertext('Levelled at ',6); write(PlungerPos); writeln(' ·); userwait;
DrawMainScreen; end;
begin . ■ C
'■j ■ ■
{ Initialize program. } ExitSave := ExitProc; ExitProc := §ExitAutoLevel; CurscrOff;
Done := false;
{ Initialize screen. } clrscr;
DefineWindow(Displaywind,5,5,75,20,2) ; FrameWindow(Displaywind); ActivateWindow(Displaywind); DrawMainScreen; 15
{ Read keys. } { 11X" key exits. } { "L" key autolevels. } repeat
repeat
delay(100) ; until keypressed; HoldKey := upcase(ReadKey); if HoldKey = 1X1 then Done := true; if HoldKey = 1L1 then DoAutoLevel;
until Done;
end.^Z
{ 02/01/89 JFT Made into a unit from Wayne Vinson's code.
02/27/89 JFT Modified "Too High" or "Too Low" sections to read until a peak is reached, then read until the abs (level) is less than a threshold value. -The user is adding or removing resin during this time.
03/01/89 JFT Above fix only works well for resin removal. Go to modified older method with epsilon of 5. Change user messages.
05/04/89 JFT Fixed (?) the bug that caused repeated adjustments when the bicell was bullseyed. Changed user messages and sounds. Removed need to press key when
r.
adjustment complete.
05/25/89 JFT Use procedure HandleKeyboardRequest in adjust resin level loops so that the user may abort w/ctrl-c or break.
06/16/89 JFT Lengthen move done by plunger from 40 to 60 when checking to see if we're on the bicell. Also use upLim and lowLim instead of twice upLim and twice lowLim.
08/03/89 JFT In CheckLevel, if 2nd or 3rd readings are 0 then call it off the bicell. )
unit UtIAdjust;
{ $ M 16384,0,0}
j*******************************************************} interface
uses Crt,Dos,Utility1,UtlSweep,UtlZStage,Windows;
procedure AddRemoveResin(var FinalLevel: integer);
&rgr; r &ogr; c e d u r e procReadBiCellfdisplaydelay:integer;echo:boolean);
procedure LongReadBiCell(displaydelay:integer);
procedure procPlungerUp(echo:boolean);
procedure procPlungerDown(echo:boolean);
35
implementation
const -^
epsilon = 2; { +/" bias variation used in add/remove resin }
5
var
opt,stopc : integer;
velocity2 : real;
key, junkkey : char;
level : integer;
delaytime : integer;
r. onbicell,leveladjusted : boolean;
tempstring : string; - ,c·
AlertWind,DataWind : wind;
ID { j
procedure procReadBiCell(displaydelay:integer;echo:boolean);
{If echo is true then write levels to screen} var
junkStr:string;
sign :string;
begin
ReadBiCellCN1 ,level) ;
if echo then begin
if level < 0 then sign := ' + ' else sign := '-'; {Reverse signs for display)
if level = 0 then sign := "; {0 gets no
sign)
junkStr := concat('The liquid level is ',sign,IntStr(abs(level)));
centerText(junkStr,1);
end;
delay(displaydelay);
end;
JD { )
procedure LongReadBiCell(displaydelay:integer); begin
repeat .,;:■
procReadBiCell(displaydelay,false); {don't echo to levels to screen)
until keypressed; &mdash;■·■
key := Readkey; end;
procedure procPlungerUp(echo:boolean); begin leveladjusted := false; repeat PlungerUp(10,stopc);
procReadBiCell (1, echo) ; - £·
until keypressed; junkkey := upcase(Readkey); end;
procedure procPlungerDown(echo:boolean); begin leveladjusted := false; repeat
PlungerDown(10,stopc); procReadBiCell(1,echo); until keypressed; junkkey := upcase(Readkey); end;
procedure DoBeep(freq,time : integer); begin sound(freq); delay(time); nosound; end;
&ngr; )
procedure DoFinalAdjustment; var i,level,tempint,returncode : integer;
wasteKey ,. ■ : char; begin,- '' ActivateWindow(AlertWind); clrscr;
5 if onbicell then begin { otherwise setplunger gets pissed }
centertext('Performing automated fine adjustment of resin level.',2);
centertext('Please stand by.',5); 10 ActivateWindow(DataWind);
clrscr;
ReadBicell(1N1,level); {}{ tempint := 8;} {do course adjustment first
15 tempint := 32; { do course adjustment first }
repeat
HandleKeyboardRequest( wasteKey ); if (level > uplim) then begin
repeat
20 for i := 1 to tempint do begin
PlungerDown(1,ReturnCode); delay(400 div tempint); end; { of i } ReadBiCell(1N',level);
25 until level < UpLim;
end;
if (level < lowlim) then begin repeat
for i := 1 to tempint do begin 30 PlungerUp(l,returnCode);
delay(400 div tempint); end; { i }
ReadBiCell(1N',level); until level > LowLim; 3 5 end;
clrscr;
centertext('Pausing to allow · resin to settle.·,1);
delay(5000) ; { allow settling time } ClrScr; { Pause completed-} tempint := 1; { now do finer adjustment }
ReadBicell(1S1,level);
until (level < uplim) and (level > lowlim); ActivateWindow(AlertWind);
clrscr;
centertext('Resin level now adjusted for part
building.',4); ;
leveladjusted := true;
delay(2500) ; &
beep;
end; { if onbicell }
end; { of dofinaldjustment }
procedure CheckLevel;
{ reads and evaluates if on or off bicell and sets boolean bicell accordingly } var
returncode, f irstlevel, secondlevel, thirdlevel, tempint : integer;
begin
ActivateWindow(AlertWind);
ClrScr;
onbicell := false;
Centertext('Checking resin level.',1); Centertext('Please stand by.',5); firstlevel := 0;
secondlevel := 0;
thirdlevel := 0;
ActivateWindow(DataWind);
clrscr;
ReadBicell(1S',firstlevel);
if (firstlevel > 2*uplim) or (firstlevel < 2*lowlim) then onbicell := true
else begin { first gave bias type reading .. could still be dead on }
{ This delay added to thwart the .recurrent adjustment bug. }
Delay(3000);
ReadBicell(1S1,secondlevel);
PlungerDown(120,returncode);
{ This delay added to thwart the recurrent adjustment bug. }
Delay(3000); i
ReadBicell(1S1,thirdlevel); '*
PlungerUp(60,returncode); . ^.
{ both 2nd and 3rd must not give bias reading to be on bicell }
if not (secondlevel in[bias-epsilon..bias+epsilon]) and
not (thirdlevel in[bias-epsilon..bias+epsilon]) then OnBicell := true;
*)
(*
if ((secondlevel > uplim) or (secondlevel < 1owlim)) and
((thirdlevel > uplim) or (thirdlevel < 1owlim)) then
OnBicell := true;
if ( ( secondLevel > bias + epsilon ) or ( thirdLevel < bias - epsilon ) )
then OnBicell := true;
{ The following was added to accomodate SLAs with biases outside of the range -1..+1. When off the bicell, those SLAs showed as on the bicell. This should catch that case. &mdash;JFT }
if ( secondLevel = bias ) or ( thirdLevel = bias ) then OnBicell := false;
ActivateWindow(AlertWind);
end;"{ else }
end; { of checklevel }
procedure CenterPlunger;
var
returncode,midplunge,plungemove : integer;
begin
midplunge := maxplungemoves div 2;
plungemove := abs(midplunge - plungerpos);
{ always put plunger in mid position before starting part }
{ for now always go all the way to top )£
plungerup(0,returncode);
plungerdown(maxplungemoves div 2,stopc);
update3dstatefile(zstagepos,plungerpos,returncode); { if tracking shows no problem then activate following instead }
{ if plungerpos < midplunge then plungerdown(plungemove,stopc);
if plungerpos > midplunge then plungerup(plungemove,stopc);}
FrameWindow(DataWind);
ActivateWindow(DataWind);
clrscr;
centertext('Pausing to allow resin to settle.',I);
delay(10000); { wait 10 sec for level to stabilize after
fast plunge move }
ActivateWindow(AlertWind);
end; { centerplunger }
)
procedure AddRemoveResin(var FinalLevel: integer);
const
CoarseAdjustLim = 10;
var
tempint,oldlevel,plungemove,option,returncode : integer;_ - .
key,wastekey : char;
tempreal : real; ... .
PeakReached : boolean;
MaxReading : integer;
begin
DefineWindow(AlertWind,10,7,70,18,2); DefineWindow(DataWind,10,23,70,25,1); DefaultWindow;
ClrScr;
writeln; K
centerln(Product+· Resin Level Adjustment Utility1) ;
writeln;
centerln('Copyright (C) 1989 by 3D Systems, Inc.1); centerln('3D Systems StereoLithography System1); FrameWindow(AlertWind);
{ FrameWindow(DataWind); }
{ DataWind is framed in CenterPlunger } ActivateWindow(AlertWind);
{ first see if already did level check } { showsweep := true; }
if not leveladjusted then begin centertext('Initializing resin adjustment apparatus.·,2);
centertext('Please stand by.■,5); CenterPlunger;
CheckLevel;
Delay(300);
if OnBicell then begin
ActivateWindow(AlertWind); ClrScr;
centertext('The resin level is currently in',2);
centertext (' an acceptable range' for part building.·,3); .
centertext('Manual adjustment will be unnecessary.',5); &mdash;
. DoFinalAdjustment;
Update3DStateFile(ZStagePos,PlungerPos,stopc);
exit;
end; { if OnBicell }
ActivateWindow(AlertWind);
ClrScr; ;
■f.
for tempint := 1 to 3 do begin
beep; - i-
delay(100);
end; { of tempint }
centertext (· The resin level is not in an acceptable·,2);
centertext('range for part building.',3); centertext(1A MANUAL adjustment will be necessary:',5);
centertext(·Look at the white leveling pointer at the«,7);
centertext('rear of the vat.1,8); centertext(1Is resin touching the pointer?',9); While keypressed do wastekey := readkey; { catch all previous keys )
Wastekey := Readkey; { get new key )
{ LEVEL TOO HIGH }
If Upcase(Wastekey) = 1Y1 then begin { level too high }
ClrScr;
centertext('The resin level is too high.',1); centertext('Please remove resin until the beep sounds.',5);
centertext(·Stop removing resin when you hear the beep.·,6);
PeakReached := false;
MaxReading := 0;
Repeat
HandleKeyboardRequest( wasteKey );
ActivateWindow(DataWind);
readbicell('N1,level); { need quick read here }
{ delay(10);}
ActivateWindow(AlertWind); ;
if abs (level) > MaxReading *then MaxReading := abs (level) ; - c-
if (abs(level) < MaxReading) and (MaxReading > 50)
then PeakReached := true;
{}{ Until (level < bias-epsilon) or (level >
bias+epsilon);}
{}{ Until PeakReached and (abs(level) <
CoarseAdjustLim); }
Until abs(level) > uplim+l{ ( bias ) + epsilon};
{ bicell values negative at bicell top }
centertext('Press any key to continue...',8);
Repeat
DoBeep(100,1000);
{ delay(50); }
Until keypressed;
wastekey := readkey;
clrscr;
centertext ('User finished removing resin. ', 5) ;
CheckLevel; { to check for too much liquid removed }
if not onbicell then begin
ClrScr;
centertext('Resin level not in acceptable range.·,5);
DoBeep(100,1000);
delay(2000) ; ... .
addremoveresin(stopc);
end; { if not onbicell }
DoFinalAdjustment;
Update3DStateFile(ZStagePos,PlungerPos,stopc);
exit;
end; { if level too high } ·.
{ LEVEL TOO LOW } - ■ <?
CIrSer;
centertext('The resin level is too low.',I);
centertext('Please add resin SLOWLY until the beep sounds.',5);
centertext('Stop adding resin when you hear the beep.',6);
PeakReached := false;
MaxReading := 0;
Repeat
HandleKeyboardRequest( wasteKey );
ActivateWindow(DataWind);
readbicell(1N',level); { need quick read here }
{ delay(10);)
ActivateWindow(AlertWind);
if abs(level) > MaxReading then MaxReading 0 := abs(level);
if (abs(level) < MaxReading) and (MaxReading > 50)
then PeakReached := true;
{}{ Until (level < bias-epsilon) or (level >
bias+epsilon);}
{}{ Until PeakReached and (abs(level) <
CoarseAdjustLim) ; }
Until abs(level) > uplim+l{( bias ) + epsilon}; -
centertext('Press any key to continue...',8); repeat
DoBeep(100,1000) ;
delay(50) ;
until keypressed;
wastekey := readkey;
clrscr; ;
't centertext('User finished adding resin.',5);
CheckLevel; { to be sure before attempting finaladjustment }
if not onbicell then begin
CenterText('Resin level not in acceptable range.■,5);
DoBeep(100,1000);
delay(2000);
0 addremoveresin(stopc);
end; { if not onbicell }
DoFinalAdj ustment;
Update3DStateFile(ZStagePos,PlungerPos,stopc) ; exit;
end; { if not leveladjusted }
clrscr;
centertext('Resin level is now adjusted for part building.',4);
delay(2500);
0 beep;
end; ( addremoveresin }
begin
leveladjusted := false;
5 end.
-4*9
3D Systems StereoLithography System Software
RECOATER.PAS
SLA-250 Recoater wiper and plunger Control Program
Recent History:
9/12/88 Ver 3.30 first released for breadboard
f.
testing
10/17/88 Ver 3.301 modified c-to be utility/initialization for final SLA250
11/15/88 Ver 3.31 copied from Recoatl - use common utl*.inc files
01/11/89 Ver 3.32 remove sweeper forward back &mdash;> use move move sweeper
01/25/89 Ver 3.33 JFT removed sweeper velocity biasing &mdash;> pass desired velocity in in/sec to MoveBlade, 0 SweeperForward or SweeperBack. Cheeks constant SIMULATION to see if we want to run this as a simulation (no communication with SLA) (useful for running on workstations not attached to SLAs).
01/30/89 JFT merged with Wayne's updated AddRemoveRe sin procedures.
02/01/89 USES Windows. Move AddRemoveResin to unit UtIAdjus. USES UtIAdjus.
02/16/89 Adjust Start Position sets new ZPlungeSetPos and sends the elevator to that position.
03/07/89 JFT Added exit proc to forward sweeper.
03/09/89 JFT Recalibrated sweep periods to account for final compiler options.
03/10/89 JFT Fixed UtlAdjust so that it may be broken out of.
03/28/89 JFT Y.V3.42 Change sweep period now bullet-proofed to input.
03/30/89 JFT V3.43 Write parameters to machine.prm
instead of zstage.prm.
05/25/89 JFT V3.61 Allow user to break out of adjust resin level loops.
06/07/89 JFT V3.61B Make stirring easier to break out of.
06/15/89 JFT V3.61C Better stirring utility (multi-speed).
06/16/89 JFT V3.61D Better bicell check (see UtIAdjust.pas). '■
06/16/89 JFT V3.61E Fix stir utility by using the indexer 1S MA (Mode Alternate) command.
07/05/89 JFT V3.61F Single Coil Holding Torque.
07/21/89 JFT V3.62 Changed version #.
07/24/89 JFT V3.63 Fixed adjust resin level (?).
}
{ $ M 16384,0,0)
{ $ D-;I+)
{R+}
uses Crt,Dos,Utilityl,UtlSweep, UtlZStage,windows,UtIAdj ust,Indexer;
{$I product.inc}
25
const
Versionld = «3.63·;
Indent = 19;
epsilon &mdash; 1; · { +/- bias variation used in add/remove resin )
Simulation = false; { Is this a simulation (no SLA)?
var
opt,stopc : integer;
SweepPeriod : real;
key, junkkey : char;
level : integer; delaytime : integer; onbicell,leveladjusted : boolean; tempstring : string; TopWind,BottomWind,IntroWind : wind; SaveExit : pointer;
Procedure CenterText(tempstring : string;RowNumber : integer); -
begin
gotoxy(l,rownumber); - ^.
CIrEoI;
if length(tempstring) >= (lo(WindMax)-lo(WindMin)) then gotoxy(1,rownumber)
else
gotoxy(((lo(WindMax)-lo(WindMin)-length(tempstring)) div 2),rownumber);
write(tempstring); end; }
procedure ExitRecoater; begin
SweeperForward(3,stopc); CursorOn;
ExitProc := SaveExit; HaIt(O);
0 end;
procedure DisplayLevel; var
junkStr : string; sign : string[l]; begin
procReadBiCell(500,true);
end; , ·.
procedure DefaültWindow2;
begin
DefaultWindow;
window(l,1,80,22) ;
end;
procedure ShowPowerMenu;
var
i : integer; ;
junkstr : string;
begin - &
Defaultwindow2;
ClrScr;
FrameWindow(BottomWind);
{ ActivateWindow(BottomWind);
DisplayLevel;}
Defaultwindow2;
centertext(Product+1 Recoater Utility Control Program·,1);
writeln;
centertext(·Version '+Versionld+· Software Release &bull;+Rel_3D,2);
centertext(·Copyright (C) 1989 by 3D Systems, lnc',3);
centertext('3D Systems Laser StereoLithography System',4);
if Simulation then centertext(«SIMULATION IN PROGRESS«,5);
for i:=l to 5 do writeln;
FrameWindow(TopWind);
ActivateWindow(TopWind);
ClrScr;
writelnC 1. Adjust Resin Level Utility ·); writeln(· 2. Sweep ');
writeln(' 3. Change Sweep Period1); writeln(' 4. Lower Liquid1);
writeln(' 5. Raise Liquid1); writeln('~ 6. Adjust Building Start Position1); writeln(' 7. Stir Liquid1); write (· X. Exit1); DefaultWindow2;
centertext('Please make a selection.·,18); writeln;
end;
procedure WriteZStartLevel(NewStartZLevel:real); const ·
ParamFileName = '\3DSYS\MACHINE.XYZ · ; '* NewName = "XSDSYSXMACHINE.PRM1 ; - c.
var
IOerr,i,m,n,valcode : integer; j : longint;
r : real;
ParamFileLine, AppendText : str80; 20
ParamFile,NewFile: text; InchDistanceStr : str80; Dirlnfo : SearchRec; InputLine : string; begin
OpenParamFile := ParamFileName;
assign(ParamFile,OpenParamFile); rewrite(ParamFile); assign(NewFile,NewName); reset(NewFile);
while not eof(NewFile) do begin readln(NewFile,InputLine) ; writeln(ParamFile,InputLine); 5 end;
rewrite(NewFile);
IOerr := IOresult;.
if IOerr <> 0 then begin OpenParamFile := ParamFileName; assign(ParamFile,OpenParamFile); reset(ParamFile); IOerr := IOresult;
if IOerr <> 0 then OpenParamFile := ' ' end; {10 error} if IOerr = O then begin i := 0,-reset (ParamFile) ; : repeat readln(paramFile,paramFileLine); <? writeln(newFile,paramFileLine); until paramFileLine = 1ZSTAGE.PRM1;
while (not eof(ParamFile)) and (i <= 9) do begin for j:=l to 255 do ParamFileLine[i]:=' '; readln(ParamFile,ParamFileLine); if i < 7 then writeln(NewFile,ParamFileLine) else begin
if i = 7 then appendText := ' ZLiquidLevel·;
if i = 7 then
writeln(NewFile,NewStartZLevel:12:10,appendText) else writeln(NewFile,ParamFileLine);
end;
if (ParamFileLine[1] <> · ') and (ParamFileLine[l] <> '!·) and (ParamFileLine[l] <> 1111J then inc(i) ; 0 end;
while not eof(paramFile) do begin
readln(paramFile,paramFileLine); writeln(newFile,paramFileLine); 5 end;
end;
ZPlungeSetPos := JtfewStartZLevel + 0.315; '{ 8mm lower than Start; } ■ close(NewFile);
close(ParamFile); -
end ;
procedure ZSurfacePosition(var ZValue : real); const
ZVSlow = '0.10000O1; { Slow speed for setting levels }
var ;
key : char;
dumbkey,OK : boolean; ,c-
StopCode : integer; ZVSetZ : strlO; begin
dumbkey := false; ActivateWindow(TopWind); clrscr;
Centertext('Use up and down arrows for positioning,',1); Centertext('space to halt,',2); CentertextC S to shift to slow speed,',3); CentertextC and X when at the desired level.',4); ZVSetZ := ZVeloc; repeat
OK := false; repeat
key := ' &zgr; ·; HandleKeyboardRequest(key); key := upcase(key); if dumbkey then key:=· '; dumbkey:=false;
if key in [#72,#80,' ',1S1^X1] then OK := true; {up and down arrows ) until OK; case key of
#72 : begin
.· /&ldquor; ' if not NegZStage then ZFreeMov¥(ZAccel,ZVSetZ,1UP ') else
ZFreeMove(ZAccel,ZVSetZ,·DOWN·) ;
dumbkey := true; end;
#80 : begin if not NegZStage then ZFreeMove(ZAccel,ZVSetZ,'DOWN') else
ZFreeMove (ZAccel, ZVSetZ, ' UP ') ; '*
dumbkey := true;
end; ~~
1S': begin
ZVSetZ := ZVSlow; { change to slow speed }
Centertext('Shifted to slow speed',6); Centertext(' for final positioning. · ,7) ; 0 end;
1X1: begin {} ZValue := -abs(ZStagePos);
exit; end;
2 5 end; instring : string;
valcode : integer;
until false; junkStr : string;
end; NewStart : real;
3 5 Temp : real;
procedure AdjustBuildStart; begin
30 var StopKey := = true;
Temp := ZLiquidLevel; ActiyateWindow(BottomWind); clrscr; Centertext('Moving elevator to current start position.·.',1); GotoZPos(l);
Centertext('Position the elevator at the desired start position.',1); ZSurfacePosition(ZLiquidLevel); clrscr; ActivateWindow(BottomWind); clrscr;
junkStr := concat('A new build starting level£has been entered.·); centertext(junkStr,1); ActivateWindow(TopWind); clrscr; centertext('Accept this new level ?',2); repeat delay(lOO) until Keypressed; if temp <> ZLiquidLevel then begin
if upcase(readkey)='Y' then WriteZStartLevel(ZLiquidLevel) else ZLiquidLevel := temp; end;
StopKey := false;
GoToZPos(2); { Go to Check Resin Level position. } {}{ ZReadParms;) 0 end;
procedure SetNewDelay; var
instring : string; 5 valcode : integer; junkStr : string; tempReal : real;
begin -.;?■'
ActivateWindow(BottomWind);
junkStr := concat('Enter sweeper period [now 1 ,RealStr(SweepPeriod,2) , 's]:'); centertext(junkStr,1);
cursoron;
readln(instring);
if instring <> ·' then begin
tempReal := RealVal(instring,valcode); if (tempReal > maxSweepPeriod) then tempReal := maxSweepPeriod;
if (tempReal < minSweepPeriod) then tempReal := minSweepPeriod; £
end;
cursoroff;
if (valcode = 0) and (instringo1 ') then SweepPeriod : = tempReal;
junkStr := concat('Sweeper period now set to 1,Realstr(SweepPeriod,2),· seconds■); 0 centertext(j unkStr, 1) ;
delay(3000);
end;
procedure GetSelectionl;
begin
repeat
ActivateWindow(BottomWind);
DisplayLevel;
ActivateWindow(TopWind);
HandleKeyboardRequest(key);
key := upcase(key);
if key in [1I1..'7',1X1] then exit; until false;
end;
35
procedure DoBeep(freq,time : integer);
begin sound(freq); delay(time); nosound; end;
procedure doUpLiquid; begin ActivateWindow(BottomWind); procPlungerDown(true);
ActivateWindow(TopWind); end;
procedure doDownLiquid; begin
ActivateWindow(BottomWind); procPlungerUp(true); ActivateWindow(TopWind); end; (***■ procedure Stir; var
wasteKey : char;
endPos : longlnt;
endPosStr : string;
abortStir,stop : boolean;
accel,veloc : string;
procedure ElevatorCommand( theCmd : string ); var
response : string; begin
if theCmd <> ·■ then if SendCmdToIndexer(theCmd+1 ',ZTimeOut) <> then begin beep;
end
else, if ReadResponseFromlndexer(response,zTimeOut) <> 0
then begin _
beep; end;
end;
begin
endPos := trunc( zStepsPerlnch * (-1) * ( zLiquidLevel - 0.5 ) ); '
Str( endPos , endPosStr ); ActivateWindow(BottomWind); - ^. ClrScr;
WriteC STIR fast/medium/slow (f/m/s) : ·); repeat delay(100) until keypressed; wasteKey := UpCase(ReadKey); abortStir := false; case wasteKey of 1S1 : begin
accel := 10.5' ; veloc := &Iacgr;1 ; end;
1M' : begin accel := '5';
veloc := »5·; end; 1F1 : begin accel := '10'; veloc := 1IO1;
end;
else abortStir := true; end;
if not abortStir then begin 5 ClrScr; Write( ' STIRRING : press any key to abort...' ); GoToZPos(2);
ElevatorCommand( 1E MA A' + accel + ' V1'+ veloc ); stop.:= false; EleVatorCommand( 1D1 + endPosStr + · G1 ); repeat _
if KeyPressed then stop := true;
delay(100) ;
if KeyPressed then stop := true; until ( stop ); ClrScr;
Write( ' Aborting stir operation...' ); ElevatorCommand( 1K1 ); ZGoHome;
GoToZPos(2) ; . ^.
end;
ClrScr;
ActivateWindow(TopWind); end;
J
begin { ReCoater } TextBackground(Black); TextColor(White); SaveExit := ExitProc; ExitProc := @ExitRecoater; DefaultWindow; ClrScr;
DefineWindow(TopWind,Indent-1,7,80-Indent,16,1);
DefineWindow(IntroWind,10,7,70,11,2); if Simulation then OnBicell := false; Read3DStateFile(ZStagePos,PlungerPos,stopc); SweepPeriod := DefaultPeriod; LevelAdjusted := false; delaytime := trunc(SweepPeriod); CursorOff;
FrameWindow(IntroWind); ActivateWindow(IntroWind);
ClrScr;. ■,-'' Centei-Text (' Elevator position... ' ,2) ;
if not Simulation then GoToZPos(2);
key := ' '; DefaultWindow; clrscr; repeat
ShowPowerMenu; ActivateWindow(BottomWind); ActivateWindow(TopWind); GetSelectionl; case key of
AddRemoveResin(stopc);
MoveBlade(SweepPeriod,stopc);
SetNewDelay;
doDownLiquid;
doUpLiquid;
AdjustBuildStart;
Stir;
HaIt(O) ;
moving to check resin level
&bull;I1 &bull;2' '3'
I4. '5' '6' &bull;7' 1X' end;
key := ' '; until false; CursorOn;
{ We exit through abort... we never reach here, end.
Während die Erfindung, wie hier beschrieben, auf spezifische Ausführungsbeispiele gerichtet war, können vielfältige Modifikationen dazu angewandt werden. Zum Beispiel während überschüssige polymerisierbare Flüssigkeit hierin als von einer Abstreifklinge abgestreift beschrieben worden ist, können offensichtlich andere Einrichtungen für solches Entfernen angewandt werden, wie z.B. Rechen oder ähnliches. Als ein anderes &iacgr;&ogr; Beispiel, eine Strahlungsquelle und ein Sensor sind hierin als Einrichtungen beschrieben worden, um das Niveau der oberen Oberfläche des Bades von polymerisierbarem Fluid zu erfassen, wobei eine große Vielzahl von mechanischen, elektronischen, pneumatischen und anderen Vorrichtungen verwendet werden kann, um dieses Niveau zu erfassen. Zum Beispiel ist eine Einrichtung beschrieben worden, die einen Schwimmer verwendet. Andere Modifikationen und Verbesserungen können verwendet werden, ohne von dem Anwendungsbereich der Erfindung abzuweichen. Demgemäß ist es nicht beabsichtigt, daß die Erfindung beschränkt ist, außer durch die beigefügten Ansprüche.

Claims (79)

3D Systems, Inc. D 17337GBM F/La/gi SCHUTZANSPRÜCHE
1. Einrichtung zum stereolithographischen Formen eines Abschnittes eines dreidimensionalen Gegenstandes, die aufweist:
einen Behälter zum Halten eines Aufbaumaterials, das eine Arbeitsoberfläche hat, und wobei das Aufbaumaterial selektiv physikalisch umwandelbar nach Aussetzung einer vorbeschriebenen synergistischen Stimulierung ist;
eine Einrichtung zum Bilden einer gleichförmigen Beschichtung über die zuvor gebildete Schicht, die ein Glättglied und eine Einrichtung zum Überstreichen des Glättgliedes zumindestens einmal aufweist; und
eine Einrichtung zum Aufbringen eines vorgeschriebenen Musters synergistischer Stimulierung auf das Aufbaumaterial auf der Arbeitsoberfläche, nach Überstreichen des Glättgliedes, um die darauffolgende Schicht zu bilden.
2. Einrichtung gemäß Anspruch 1 , worin die Einrichtung zum Bilden einer gleichförmigen Beschichtung eine Einrichtung zum Überstreichen des Glättgliedes zumindest einmal in einer Richtung unterschiedlich von einer Richtung, die bei einer vorherigen Überstreichung des Glättgliedes überstrichen wurde, aufweist.
3. Einrichtung von Anspruch 2, worin die Richtung des Überstreichens mit aufeinanderfolgenden Überstreichungen abwechselt.
4. Einrichtung gemäß irgendeinem der Ansprüche 1-3, worin die eine Einrichtung zum Bilden einer gleichförmigen Beschichtung eine Einrichtung zum Überstreichen des Glättgliedes zumindest zweimal aufweist.
5. Einrichtung gemäß einem der Ansprüche 1 - 4, worin die Einrichtung zum Bilden einer gleichförmigen Beschichtung aufweist:
eine Einrichtung zum Streichen eines Glättgliedes über die zuvor gebildete Schicht zumindest einmal mit einer ersten Glättgliedgeschwindigkeit;
eine Einrichtung zum Überstreichen des Glättgliedes zumindest ein zweites Mal mit einer zweiten Glättgliedgeschwindigkeit; und
eine Einrichtung zum Veranlassen, daß die ersten und zweiten Glättgliedgeschwindigkeiten unterschiedlich sind.
6. Einrichtung gemäß einem der Ansprüche 1-5, worin die Einrichtung zum Bilden einer gleichförmigen Beschichtung aufweist:
eine Einrichtung zum Überstreichen eines Glättgliedes zumindest einmal über die zuvor gebildete Schicht mit einem ersten Spiel zwischen einer niedrigeren Oberfläche des Glättgliedes und einer oberen Oberfläche der zuvor gebildeten Schicht;
eine Einrichtung zum Überstreichen des Glättgliedes zumindest ein zweites Mal über die zuvor gebildete Schicht mit einem zweiten Spiel zwischen der niedrigeren Oberfläche des Glättgliedes und der oberen Oberfläche der zuvor gebildeten Schicht;
eine Einrichtung zum Veranlassen, daß das zweite Spiel kleiner als das erste Spiel ist.
7. Einrichtung gemäß einem der Ansprüche 1-5, worin die Einrichtung zum Bilden einer gleichförmigen Beschichtung aufweist:
eine Einrichtung zum Überstreichen des Glättgliedes über die zuvor gebildete Schicht mit einem Wert eines Spieles zwischen einer niedrigeren Oberfläche des Glättgliedes und einer oberen Oberfläche is der zuvor gebildeten Schicht, der unterschiedlich von der Schichtdicke ist.
8. Einrichtung gemäß einem der Ansprüche 1 - 5, worin die Einrichtung zum Bilden einer gleichförmigen Beschichtung aufweist:
Eine Einrichtung zum Überstreichen des Glättgliedes ein erstes Mal über die zuvor gebildete Schicht mit einem ersten Spiel zwischen einer niedrigeren Oberfläche des Glättgliedes und einer oberen Oberfläche der zuvor gebildeten Schicht;
eine Einrichtung zum Überstreichen des Glättgliedes ein zweites Mal über die zuvor gebildete Schicht mit einem zweiten Spiel zwischen der niedrigeren Schicht des Glättgliedes und der oberen Oberfläche der zuvor gebildeten Schicht; und
eine Einrichtung zum Veranlassen, daß das erste und zweite Spiel unterschiedlich ist, und daß eines der ersten und zweiten Spiele unterschiedlich von der Schichtdicke ist.
9. Einrichtung gemäß einem der Ansprüche 1 - 8, worin das Glättglied
zumindest einmal über die zuvor vorgebildete Schicht mit einer
ersten Glättgliedgeschwindigkeit überstrichen wird, die weiterhin aufweist:
&iacgr;&ogr; eine Einrichtung zum Bilden einer gleichförmigen Beschichtung von
gewünschter Dicke über die darauffolgende Schicht in Vorbereitung zum Bilden einer zweiten darauffolgenden Schicht des dreidimensionalen Gegenstandes, die eine Einrichtung zum Überstreichen eines Glättgliedes über die darauffolgende Schicht zumindest einmal mit
is einer zweiten Glättgliedgeschwindigkeit aufweist;
eine Einrichtung zum Veranlassen, daß die ersten und zweiten Glättgliedgeschwindigkeiten unterschiedlich sind;
eine Einrichtung zum Aufbringen eines vorgeschriebenen Musters synergistischer Stimulierung auf das Aufbaumaterial auf der Arbeitsoberfläche, um zumindest einen Abschnitt des Aufbaumaterials umzuwandeln, um die zweite darauffolgende Schicht zu bilden.
10. Einrichtung gemäß einem der Ansprüche 1 - 9, worin die Einrichtung zum Bilden einer gleichförmigen Beschichtung aufweist:
eine Einrichtung zum Aufbringen einer Beschichtung auf das Material über eine Oberfläche einer zuvor gebildeten Gegenstandsschicht, die von einem Gegenstandsträger getragen wird;
eine Einrichtung zum relativen Verschieben der zuvor gebildeten Schicht, so daß die Beschichtung, wenn aufgebracht, über die Arbeitsoberfläche verschoben wird;
eine Einrichtung zum Überstreichen des Glättgliedes über die zuvor gebildete Schicht, wenn die Beschichtung über die Arbeitsoberfläche verschoben wird.
11. Einrichtung gemäß einem der Ansprüche 1-9, worin die Einrichtung zum Bilden einer gleichförmigen Beschichtung aufweist:
eine Einrichtung zum Aufbringen einer Beschichtung auf das Material über einer Oberfläche der zuvor gebildeten Schicht, die von einem Gegenstandsträger getragen wird;
eine Einrichtung zum relativen Verschieben der Oberfläche der zuvor gebildeten Schicht über die Arbeitsoberfläche;
eine Einrichtung zum Überstreichen des Glättgliedes über die zuvor gebildete Schicht, wenn die Oberfläche der zuvor gebildeten Schicht über die Arbeitsoberfläche verschoben wird.
12. Einrichtung gemäß einem der Ansprüche 1-9, worin die Einrichtung zum Bilden einer gleichförmigen Beschichtung aufweist:
eine Einrichtung zum Aufbringen einer Beschichtung auf das Material auf eine Oberfläche der zuvor gebildeten Schicht, die von einem Gegenstandsträger getragen wird;
eine Einrichtung zum relativen Verschieben der Oberfläche der zuvor gebildeten Schicht weniger als eine Schichtdicke unter die Arbeitsoberfläche;
eine Einrichtung zum Überstreichen des Glättghedes über die zuvor gebildete Schicht, wenn die Oberfläche der zuvor gebildeten Schicht weniger als eine Schichtdicke unter die Arbeitsoberfläche verschoben wird.
&iacgr;&ogr;
13. Einrichtung gemäß einem der Ansprüche 1 - 9, worin die Einrichtung zum Bilden einer gleichförmigen Beschichtung aufweist:
eine Einrichtung zum Überstreichen des Glättghedes in einer Ebene über der gewünschten Arbeitsoberfläche.
14. Einrichtung gemäß einem der Ansprüche 1 - 13, worin die Einrichtung zum Bilden einer gleichförmigen Beschichtung aufweist:
Einstellschrauben, die an dem Glättglied angebracht sind, zum Einstellen seiner vertikalen Position; und
Nadeln, die an dem Glättglied angebracht sind, zum Einstellen eines Spaltes zwischen einer niedrigeren Oberfläche des Glättghedes und der Arbeitsoberfläche.
15. Einrichtung von Anspruch 14, worin die Nadeln zurückziehbar sind.
16. Einrichtung gemäß einem der Ansprüche 1 - 15, worin das Glättglied steif ist.
17. Einrichtung gemäß einem der Ansprüche 1 - 16, worin das Glättglied eine Abstreifklinge ist.
18. Einrichtung gemäß einem der Ansprüche 1 - 17, die weiterhin eine Einrichtung aufweist, um das Glättglied in einer horizontalen Ebene zu bewegen.
19. Einrichtung gemäß einem der Ansprüche 1 - 18, die zusätzlich aufweist:
eine Einrichtung zum Halten der Arbeitsoberfläche bei einem im wesentlichen festen Niveau.
20. Einrichtung gemäß einem der Ansprüche 1 - 19, die zusätzlich is aufweist:
eine Einrichtung zum Erfassen eines Oberflächenniveaus des Aufbaumaterials; und
eine Einrichtung zum Einstellen des erfaßten Oberflächenniveaus zu der gewünschten Arbeitsoberfläche.
21. Einrichtung gemäß einem der Ansprüche 1 - 20, worin die Einrichtung zum Aufbringen eines vorgeschriebenen Musters synergistischer Stimulierung aufweist:
eine Quelle synergistischer Stimulierung, die eine Strahlung erzeugt, die aus der Gruppe ausgewählt ist, die aus ultravioletter Strahlung, Infrarot-Strahlung, sichtbarem Licht, Elektronenstrahlen, Röntgenstrahlen und Gamma-Strahlen besteht.
22. Einrichtung von Anspruch 21, worin das Aufbaumaterial umwandelbar ist nach Aussetzung zu ultravioletter Strahlung, und wobei die Quelle der synergistischen Stimulierung ultraviolette Strahlung erzeugt.
23. Einrichtung gemäß einem der Ansprüche 1 - 22, die aufweist:
eine Einrichtung zum Überstreichen des Glättgliedes bei einer Geschwindigkeit von ungefähr 6 - 250 mm/s.
24. Einrichtung zum stereolithographischen Formen eines drei-dimensionalen Objekts aus einer Vielzahl von verfestigten und anhaftenden Schichten, enthaltend eine Einrichtung zur Formung aufeinanderfolgender Schichten von Aufbaumaterial über jeder vorher verfestigten Schicht des Objekts, enthaltend ein Glättglied, mit dem jede vorher geformte Schicht des Objekts überstrichen wird, um das Aufbaumaterial gleichförmig über die vorher verfestigten Schichten zu verteilen, eine Einrichtung zur Verfestigung der aufeinanderfolgenden Materialschichten zur Formung aufeinanderfolgender Schichten des dreidimensionalen Objekts, und eine Einrichtung zum Zweck des Haftens der aufeinanderfolgenden Schichten des drei-dimensionalen Objekts auf der jeweils vorher geformten Schicht des Objekts, gekennzeichnet durch
eine Einrichtung zum Überstreichen mit dem Glättglied in einer ersten Richtung bei einem ersten Strich, wobei das Glättglied in Kontakt mit dem Aufbaumaterial ist, und
eine Einrichtung zum Überstreichen mit dem Glättglied in einer zweiten Richtung bei einem zweiten Strich, während das Glättglied in Kontakt mit dem Aufbaumaterial ist, wobei die erste und zweite Richtung verschieden sind.
25. Einrichtung nach Anspruch 24, wobei die Richtung des Strichs mit aufeinanderfolgendem Überstreichen wechselt.
26. Einrichtung nach den Ansprüchen 24 oder 25, ferner enthaltend eine Einrichtung, um den ersten und zweiten Strich unmittelbar über die gleiche vorher verfestigte Schicht herbeizuführen.
27. Einrichtung nach den Ansprüchen 24 oder 25, ferner enthaltend eine Einrichtung, um den ersten und zweiten Strich unmittelbar über
&iacgr;&ogr; verschiedene vorher verfestigte Schichten herbeizuführen.
28. Einrichtung zum stereolithographischen Formen eines drei-dimensionalen Objekts aus einer Vielzahl von verfestigten und anhaftenden Schichten, enthaltend eine Einrichtung zur Formung aufeinanderfolgender Schichten von Aufbaumaterial über jeder vorher verfestigten Schicht des Objekts, enthaltend ein Glättglied, mit dem jede vorher geformte Schicht des Objekts überstrichen wird, um das Aufbaumaterial gleichförmig über die vorher verfestigten Schichten zu verteilen, eine Einrichtung zur Verfestigung der aufeinanderfolgenden Materialschichten zur Formung aufeinanderfolgender Schichten des dreidimensionalen Objekts, und eine Einrichtung zum Zweck des Haftens der aufeinanderfolgenden Schichten des drei-dimensionalen Objekts auf der jeweils vorher geformten Schicht des Objekts, gekennzeichnet durch
eine Einrichtung zum Überstreichen mit dem Glättglied, während es im Kontakt mit dem Aufbaumaterial ist, wenigstens zweimal über eine vorher geformte Schicht des drei-dimensionalen Objekts, um eine nachfolgende Schicht von Aufbaumaterial zu formen.
- 10 -
29. Einrichtung zum stereolithographischen Formen eines drei-dimensionalen Objekts aus einer Vielzahl von verfestigten und anhaftenden Schichten, enthaltend eine Einrichtung zur Formung aufeinanderfolgender Schichten von Aufbaumaterial über jeder vorher verfestigten Schicht des Objekts, enthaltend ein Glättglied, mit dem jede vorher geformte Schicht des Objekts überstrichen wird, um das Aufbaumaterial gleichförmig über die vorher verfestigten Schichten zu verteilen, eine Einrichtung zur Verfestigung der aufeinanderfolgenden Materialschichten zur Formung aufeinanderfolgender Schichten des dreidimensionalen Objekts, und eine Einrichtung zum Zweck des Haftens der aufeinanderfolgenden Schichten des drei-dimensionalen Objekts auf der jeweils vorher geformten Schicht des Objekts, gekennzeichnet durch
eine Einrichtung zum Überstreichen mit dem Glättglied wenigstens
is einmal über eine vorher geformte Schicht des Objekts mit einem
ersten Spiel zwischen einer unteren Oberfläche des Glättglieds und einer oberen Oberfläche der unmittelbar vorher geformten Schicht des Objekts, das verschieden von der Schichtdicke ist.
30. Einrichtung nach Anspruch 29, wobei das erste Spiel größer ist als die Dicke einer zu verfestigenden Schicht.
31. Einrichtung nach Anspruch 30, ferner enthaltend eine Einrichtung zum Überstreichen mit dem Glättglied wenigstens ein zweites Mal über die vorher geformte Schicht mit einem zweiten Klingenspiel, das von dem ersten Klingenspiel verschieden ist.
32. Einrichtung nach Anspruch 31, enthaltend eine Einrichtung, um das zweite Klingenspiel kleiner als das erste Klingenspiel einzustellen.
- 11
33. Einrichtung zum stereolithographischen Formen eines ' drei-dimensionalen Objekts aus einer Vielzahl von verfestigten und anhaftenden Schichten, enthaltend eine Einrichtung zur Formung aufeinanderfolgender Schichten von Aufbaumaterial über jeder vorher verfestigten Schicht des Objekts, enthaltend ein Glättglied, mit dem jede vorher geformte Schicht des Objekts überstrichen wird, um das Aufbaumaterial gleichförmig über die vorher verfestigten Schichten zu verteilen, eine Einrichtung zur Verfestigung der aufeinanderfolgenden Materialschichten zur Formung aufeinanderfolgender Schichten des dreidimensionalen Objekts, und eine Einrichtung zum Zweck des Haftens der aufeinanderfolgenden Schichten des drei-dimensionalen Objekts auf der jeweils vorher geformten Schicht des Objekts, gekennzeichnet durch
eine Einrichtung zum Überstreichen mit dem Glättglied über eine
is vorher geformte Schicht des Objekts wenigstens einmal mit einer
ersten Glättgliedgeschwindigkeit;
eine Einrichtung zum Überstreichen mit dem Glättglied über eine zweite vorher geformte Schicht des Objekts wenigstens einmal mit einer zweiten Glättgliedgeschwindigkeit; und
eine Einrichtung, die die erste und zweite Glättgliedgeschwindigkeit verschieden hält.
34. Einrichtung nach Anspruch 33, wobei die erste und die zweite vorher geformte Schicht verschieden sind.
35. Einrichtung nach Anspruch 34, wobei die erste und zweite vorher geformte Schicht die gleiche Schicht sind.
36. Einrichtung zum stereolithographischen Formen eines drei-dimensionalen Objekts aus einer Vielzahl von verfestigten und anhaftenden
- 12 -
Schichten, enthaltend eine Einrichtung zur Formung aufeinanderfolgender Schichten von Aufbaumaterial über jeder vorher verfestigten Schicht des Objekts, enthaltend ein Glättglied, mit dem jede vorher geformte Schicht des Objekts überstrichen wird, um das Aufbaumaterial gleichförmig über die vorher verfestigten Schichten zu verteilen, eine Einrichtung zur Verfestigung der aufeinanderfolgenden Materialschichten zur Formung aufeinanderfolgender Schichten des dreidimensionalen Objekts, und eine Einrichtung zum Zweck des Haftens der aufeinanderfolgenden Schichten des drei-dimensionalen Objekts
&iacgr;&ogr; auf der jeweils vorher geformten Schicht des Objekts, gekennzeichnet
durch
eine Einrichtung zum Überstreichen mit der unteren Oberfläche des Glättglieds in einer Ebene über einer gewünschten Arbeitsoberfläche des Aufbaumaterials.
37. Einrichtung zum stereolithographischen Formen eines drei-dimensionalen Objekts aus einer Vielzahl von verfestigten und anhaftenden Schichten, enthaltend eine Einrichtung zur Formung aufeinanderfolgender Schichten von Aufbaumaterial über jeder vorher verfestigten Schicht des Objekts, enthaltend ein Glättglied, mit dem jede vorher geformte Schicht des Objekts überstrichen wird, um das Aufbaumaterial gleichförmig über die vorher verfestigten Schichten zu verteilen, eine Einrichtung zur Verfestigung der aufeinanderfolgenden Materialschichten zur Formung aufeinanderfolgender Schichten des dreidimensionalen Objekts, und eine Einrichtung zum Zweck des Haftens der aufeinanderfolgenden Schichten des drei-dimensionalen Objekts auf der jeweils vorher geformten Schicht des Objekts, gekennzeichnet durch
Einstellschrauben, die mit dem Glättglied zum Zweck der Einstellung seiner vertikalen Position verbunden sind.
- 13 -
38. Einrichtung nach Anspruch 37, enthaltend an dem Glättglied befestigte Nadeln zur Einstellung eines Spalts zwischen einer unteren Oberfläche des Glättglieds und einer Arbeitsoberfläche des Aufbaumaterials.
39. Einrichtung nach Anspruch 38, wobei die Nadeln rückziehbar sind.
40. Einrichtung nach einem der Ansprüche 24 - 39, dadurch gekennzeichnet, daß das Glättglied starr ist.
41. Einrichtung nach einem der Ansprüche 24 - 40, wobei das Glättglied eine ärztliche Klinge ist.
42. Einrichtung nach einem der Ansprüche 24 - 41, enthaltend eine is Einrichtung zur Bewegung des Glättglieds in einer horizontalen
Ebene.
43. Einrichtung nach einem der Ansprüche 24 - 42, enthaltend eine Einrichtung, um die Arbeitsoberfläche des Aufbaumaterials im wesentlichen auf festem Niveau zu halten.
44. Einrichtung nach einem der Ansprüche 24 - 42, enthaltend eine Einrichtung zur Feststellung des Oberflächenniveaus des Aufbaumaterials, und eine Einrichtung zur Einstellung des festgestellten Oberflächenniveaus zu einer gewünschten Arbeitsoberfläche.
45. Einrichtung nach einem der Ansprüche 24 - 44, wobei die Mittel zur Verfestigung eine Quelle synergistischer Stimulation umfassen, die eine Strahlung aussendet, ausgewählt aus der Gruppe bestehend aus
- 14 -
ultravioletter Strahlung, infraroter Strahlung, sichtbarem Licht, Elektronenstrahlen, Röntgenstrahlen und Gammastrahlen.
46. Einrichtung nach Anspruch 45, wobei die Mittel zur Verfestigung ultraviolette Strahlung erzeugen.
47. Einrichtung nach einem der ,Ansprüche 24 - 46, enthaltend eine Einrichtung zum Überstreichen mit dem Glättglied mit einer Geschwindigkeit von ungefähr 0,25 - 10' pro Sekunde.
48. Einrichtung nach einem der Ansprüche 24 - 47, wobei das Aufbaumaterial ein polymerisierbares Material ist.
49. Stereolithographiesystem zum Bilden dreidimensionaler Gegenstände, das aufweist:
(a) eine Gegenstandstrageeinrichtung;
(b) eine Einrichtung zum Aufbringen einer dünnen Schicht polymerisierbarer Flüssigkeit auf eine Oberfläche der Gegenstandstrageeinrichtung;
(c) eine Einrichtung zum Abstreifen überflüssiger polymerisierbarer Flüssigkeit von der aufgebrachten Schicht darauf, um eine geglättete Schicht polymerisierbarer Flüssigkeit gewünschter Dicke bereitzustellen;
(d) eine Einrichtung zum Aufbringen eines aushärtenden Medi
ums in einem vorbestimmten Muster auf der geglätteten Schicht polymerisierbarer Flüssigkeit.
- 15 -
50. Stereolithographisches System gemäß Anspruch 49, das einen Behälter aufweist, der angepaßt ist, um ein Bad von polymerisierbarer Flüssigkeit darin zu enthalten.
51. Stereolithographisches System nach Anspruch 50, das eine Einrichtung zum Anheben und Absenken der Gegenstandtrageeinrichtung in dem Behälter aufweist.
52. Stereolithographiesystem von Anspruch 49, worin die Abstreifeinrichtung eine Abstreifklinge ist.
53. Stereolithographiesystem von Anspruch 49, worin eine Einrichtung bereitgestellt ist, um die Abstreifklinge in einer horizontalen Ebene zu bewegen.
54. Stereolithographiesystem von Anspruch 51, worin die Einrichtung zum Anheben und Absenken der Gegenstandtrageeinrichtung eine Einrichtung aufweist, um die Gegenstandtrageeinrichtung abzusenken in ein Bad polymerisierbarer Flüssigkeit, um eine dünne Schicht der polymerisierbaren Flüssigkeit auf einer Oberfläche zu bilden, die auf der Gegenstandstrageeinrichtung bereitgestellt ist.
55. Stereolithographiesystem von Anspruch 54, worin die Einrichtung zum Heben und Absenken der Gegenstandtrageeinrichtung eine Einrichtung aufweist, um die Schicht polymerisierbarer Flüssigkeit auf der Oberfläche der Gegenstandtrageeinrichtung über die obere Oberfläche des Bades zu heben.
56. Stereolithographiesystem von Anspruch 55, worin die Abstreifeinrichtung einer Abstreifklinge ist.
- 16 -
57. Stereolithographiesystem von Anspruch 55, worin die Einrichtung zum Heben und Absenken der Gegenstandstrageeinrichtung eine Einrichtung aufweist, um die geglättete Schicht polymerisierbarer Flüssigkeit auf der Oberfläche der Gegenstandtrageeinrichtung in das Bad abzusenken, wobei die obere Oberfläche der Schicht ein Niveau mit der oberen Oberfläche des Bades in dem Behälter bildet.
58. Stereolithographiesystem von Anspruch 50, das eine Einrichtung aufweist, um das Niveau des Bades in dem Behälter zu steuern.
59. Stereolithographiesystem von Anspruch 58, worin die Einrichtung zum Steuern des Niveaus des Bades in dem Behälter einen Kolben aufweist, der in dem Bad angeordnet ist, der gehoben oder abgesenkt darin werden kann.
60. Stereolithographiesystem von Anspruch 59, das eine Einrichtung aufweist, um das Niveau von polymerisierbarer Flüssigkeit in dem Behälter zu erfassen, und eine Einrichtung, um die vertikale Position des Kolbens in dem Bad in Antwort auf das erfaßte Niveau einzustellen.
61. Stereolithographiesystem von Anspruch 60, das eine Einrichtung aufweist, um ein Signal zu erzeugen, das das erfaßte Badniveau darstellt, und eine Einrichtung, um das Niveausignal mit einem Referenzsignal zu vergleichen, das das gewünschte Badniveau darstellt, und weiter eine Einrichtung, um die vertikale Position des Kolbens in Antwort auf den Unterschied zwischen dem erfaßten Signal und dem Referenzsignal einzustellen.
- 17 -
62. Stereolithographisches System von Anspruch 49, das einen Laser aufweist, um ultraviolettes Licht zu erzeugen, um die polymerisierbare Flüssigkeit auszuhärten.
63. Stereolithographisches System von Anspruch 62, worin der Laser ein HeCd-Laser ist.
64. Stereolithographisches System von Anspruch 62, das ein Computersteuerungssystem aufweist, um die Bewegung und die Ausgabe des
&iacgr;&ogr; Lasers zu steuern.
65. Stereolithographiesystem von Anspruch 64, das ein Computersteuersystem aufweist, um die Bewegung der Gegenstandtrageinrichtung zu steuern.
66. Einrichtung zum Messen des Niveaus einer Oberfläche eines Fluides, die aufweist:
(a) eine Einrichtung zum Erzeugen und Richten eines Strahles elektromagnetischer Strahlung längs eines ersten optischen Pfades, um auf die Oberfläche des Fluides aufzutreffen, so daß ein erfaßbarer Abschnitt des Strahles von der Oberfläche des Fluides längs eines zweiten optischen Pfades wegreflektiert wird;
(b) Sensor, der ein elektrisches Signal in Antwort auf die Bewegung eines auftreffenden elektromagnetischen Strahles über dem Sensor variiert; und
(c) eine Einrichtung zum Montieren des Sensors bei einem Abstand senkrecht zu dem Niveau des Fluides und längs des zweiten
- 18 -
optischen Pfades, so daß der reflektierende Strahl den Sensor schneidet.
67. Einrichtung gemäß Anspruch 66, die weiterhin eine Einrichtung aufweist zum Ändern des Niveaus des Fluides in Antwort auf das elektrische Signal von dem Sensor.
68. Einrichtung gemäß Anspruch 66, die weiter eine Einrichtung aufweist, zum Anzeigen des Niveaus des Fluides in Antwort auf das
&iacgr;&ogr; elektrische Signal von dem Sensor.
69. Einrichtung zum Messen des Niveaus an der Oberfläche eines Fluides, die aufweist:
is (a) einen Laser, wobei die Ausgabe von dem Laser von über der
Oberfläche des Fluides längs einem ersten optischen Pfad zu der Oberfläche des Fluides gerichtet wird, so daß die Ausgabe des Lasers von der Oberfläche des Fluides längs einem zweiten optischen Pfad reflektiert;
(b) eine Vielzahl von verbundenen Fotozellen, wobei jede Fotozelle eine Ausgabe hat und ein elektrisches Signal auf die Ausgabe erzeugt, die mit der Intensität des auf die Fotozelle auftreffenden Lichtes variiert; und
(c) eine Einrichtung zum Montieren der Vielzahl von verbundenen Fotozellen über der Oberfläche des Fluides längs dem zweiten optischen Pfad, wobei die verbundenen Fotozellen eine über der anderen in einer Richtung senkrecht zu dem Niveau der Ober-
- 19 -
fläche des Fluides ausgerichtet sind, worin die Laserausgabe auf eine oder mehr der verbundenen Fotozellen auftrifft.
70. Einrichtung gemäß Anspruch 69, die weiter eine Vergleichsschaltung aufweist, die eine Vielzahl von Eingaben und eine Ausgabe hat,
worin jede Eingabe zu einer verschiedenen Ausgabe einer einer Vielzahl von verbundenen Fotozellen gekoppelt ist, um die relativen Amplituden der elektrischen Signale, die von jeder der verbundenen Fotozellen erzeugt werden zu vergleichen, und um ein Signal zu &iacgr;&ogr; erzeugen, in Antwort auf die Ausgabe der Vergleichsschaltung.
71. Einrichtung gemäß Anspruch 70, die weiter eine Einrichtung aufweist, die mit der Vergleichsschaltung gekoppelt ist, um das Niveau des Fluides antwortend auf die Ausgabe der Vergleichsschaltung zu machen.
72. Einrichtung gemäß Anspruch 71, in der die niveauvariierende Einrichtung auf Änderungen in dem Signal von der Vergleichsschaltung antwortet, um das Niveau des Fluides zu einem vorbestimmten Niveau zurückzubringen.
73. Stereolithographische Einrichtung, die aufweist:
(a) einen Körper von Fluidmedium, das in der Lage ist, seinen physikalischen Zustand in Antwort auf synergistische Stimulierung umzuwandeln;
(b) eine Einrichtung zum Erzeugen eines Strahles elektromagnetischer Strahlung;
- 20 -
(c) eine Einrichtung zum Richten des Strahles elektromagnetischer Strahlung von der erzeugenden Einrichtung längs eines ersten optischen Pfades, um auf die Oberfläche des Fluidmediums aufzutreffen, so daß ein erfaßbarer Abschnitt des Strahles von der Oberfläche des Fluidmediums längs einem zweiten optischen Pfad wegreflektiert wird;
(d) einen Sensor, der ein elektrisches Signal in Antwort auf Änderungen in der Position variiert, auf die ein elektromagnetischer
&iacgr;&ogr; Strahl auf dem Sensor auftrifft; und
(e) eine Einrichtung zum Montieren des Sensors bei einem Abstand senkrecht zur der Oberfläche des Fluidmediums und längs dem zweiten optischen Pfad, so daß der reflektierte Strahl den Sensor schneidet.
74. Stereolithographieeinrichtung zum Bilden einer zweiten Teileschicht, die eine vorbestimmte Dicke auf dem Oberteil einer ersten Teileschicht hat, die aufweist:
eine Einrichtung zum Eintauchen der ersten Schicht in ein im wesentlichen konstantes Volumen einer polymerisierbaren Flüssigkeit um mehr als die vorbestimmte Dicke:
eine Einrichtung zum Heben der ersten Schicht, so daß eine Schicht polymerisierter Flüssigkeit auf der ersten Schicht ist;
eine Abstreifklinge zum Glätten der Flüssigkeitsschicht durch Abstreifen überflüssiger Flüssigkeit bis die Flüssigkeitsschicht auf der vorbestimmten Dicke ist; und
- 21 -
eine Einrichtung zum Bilden der zweiten Schicht durch Unterwerfen der geglättenen Flüssigkeitsschicht unter synergistische Stimulierung.
75. Einrichtung von Anspruch 74, die weiter aufweist:
eine Wanne zum Halten des im wesentlichen konstanten Volumens einer polymerisierbaren Flüssigkeit, wobei das Volumen ein Niveau hat;
&iacgr;&ogr; eine Einrichtung zum Erfassen des Niveaus der polymerisierbaren
Flüssigkeit in der Wanne und Vergleichen des erfaßten Niveaus mit einem vorbestimmten Niveau; und
einen Eintauchkolben, antwortend auf die erfassende Einrichtung
is zum Heben oder Absenken in die Flüssigkeit in der Wanne bis das
Flüssigkeitsniveau im wesentlichen bei dem vorbestimmten Niveau ist.
76. Einrichtung von Anspruch 75, die weiter einen Seitenbehälter aufweist, der zu der Wanne gekoppelt ist, so daß Flüssigkeit zwischen der Wanne und dem Seitenbehälter fließen kann, was gewährleistet, daß das Flüssigkeitsniveau in dem Seitenbehälter repräsentativ für das Flüssigkeitsniveau in der Wanne ist, worin die niveauerfassende Einrichtung ein Bi-Zellen-Detektor ist, der das Niveau der Flüssigkeit in dem Seitenbehälter erfaßt.
77. Einrichtung von Anspruch 75, worin die niveauerfassende Einrichtung aufweist:
einen Schwimmer, der auf der Flüssigkeit in der Wanne schwimmt;
- 22 -
einen Balken, der ein erstes Ende, gekoppelt mit dem Schwimmer, hat und ein zweites Ende, wobei der Strahl drehbar mit einem festen Punkt zwischen den Enden gekoppelt ist, so daß eine vertikale Verschiebung des Schwimmers in einer verstärkten vertikalen Verschiebung des zweiten Endes des Balkens resultieren wird; und
eine Einrichtung zum Erfassen, ob das zweite Ende außerhalb eines vorbestimmten Verschiebungsbereiches ist, was anzeigt, daß das Flüssigkeitsniveau nicht im wesentlichen auf dem vorbestimmten &iacgr;&ogr; Niveau ist.
78. Einrichtung von Anspruch 74, worin die Abstreifklinge einen Querschnitt hat, und wobei der Querschnitt eine nichthorizontale Kante an dem unteren Teil der Klinge in der Richtung der Klingenbewegung hat, die einen Winkel mit der Horizontalen bildet.
79. Einrichtung von Anspruch 78, worin der Winkel innerhalb eines Bereiches von ungefähr 5°-8° ist.
DE8916116U 1988-09-26 1989-09-26 Einrichtung zur Neubeschichtung von stereolithographischen Schichten Expired - Lifetime DE8916116U1 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US24939988A 1988-09-26 1988-09-26
US26503988A 1988-10-31 1988-10-31
EP89309762A EP0361847B1 (de) 1988-09-26 1989-09-26 Auftragen von stereolithographischen Schichten

Publications (1)

Publication Number Publication Date
DE8916116U1 true DE8916116U1 (de) 1993-11-04

Family

ID=27232796

Family Applications (3)

Application Number Title Priority Date Filing Date
DE8916227U Expired - Lifetime DE8916227U1 (de) 1988-09-26 1989-09-26 Neubeschichten von stereolithographischen Schichten
DE8916116U Expired - Lifetime DE8916116U1 (de) 1988-09-26 1989-09-26 Einrichtung zur Neubeschichtung von stereolithographischen Schichten
DE8916228U Expired - Lifetime DE8916228U1 (de) 1988-09-26 1989-09-26 Neubeschichten von stereolithographischen Schichten

Family Applications Before (1)

Application Number Title Priority Date Filing Date
DE8916227U Expired - Lifetime DE8916227U1 (de) 1988-09-26 1989-09-26 Neubeschichten von stereolithographischen Schichten

Family Applications After (1)

Application Number Title Priority Date Filing Date
DE8916228U Expired - Lifetime DE8916228U1 (de) 1988-09-26 1989-09-26 Neubeschichten von stereolithographischen Schichten

Country Status (1)

Country Link
DE (3) DE8916227U1 (de)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE4414775A1 (de) * 1994-04-14 1995-10-19 Eos Electro Optical Syst Vorrichtung und Verfahren zum Herstellen eines dreidimensionalen Objekts
DE4417083A1 (de) * 1994-05-16 1995-11-23 Eos Electro Optical Syst Beschichtungsvorrichtung, insbesondere für eine Einrichtung zum stereolithographischen Bilden eines dreidimensionalen Objekts

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102014108634A1 (de) * 2014-06-18 2016-01-07 Heraeus Kulzer Gmbh Effizienteres Verfahren zur Herstellung dreidimensionaler Objekte mittels Rapid-Prototyping

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE4414775A1 (de) * 1994-04-14 1995-10-19 Eos Electro Optical Syst Vorrichtung und Verfahren zum Herstellen eines dreidimensionalen Objekts
DE4417083A1 (de) * 1994-05-16 1995-11-23 Eos Electro Optical Syst Beschichtungsvorrichtung, insbesondere für eine Einrichtung zum stereolithographischen Bilden eines dreidimensionalen Objekts

Also Published As

Publication number Publication date
DE8916227U1 (de) 1995-08-17
DE8916228U1 (de) 1995-08-17

Similar Documents

Publication Publication Date Title
DE68924952T2 (de) Auftragen von stereolithographischen Schichten.
US5174931A (en) Method of and apparatus for making a three-dimensional product by stereolithography
US5651934A (en) Recoating of stereolithographic layers
DE69218572T2 (de) Stereolithographische Vorrichtung und Verfahren zur Herstellung eines Modells
US5922364A (en) Stereolithography layering control system
KR100301733B1 (ko) 컴퓨터제어에의해컴퓨터데이타로부터3-차원대상체를제조하는방법및장치
EP2905121B1 (de) Vorrichtung sowie verfahren zur erzeugung dreidimensionaler strukturen
Renap et al. Recoating issues in stereolithography
EP1250997A1 (de) Vorrichtung zum Herstellen eines dreidimensionalen Objekts
EP3507074A1 (de) Verfahren zum verfestigen eines photopolymerisierbaren, diffus reflektierenden materials
DE8916116U1 (de) Einrichtung zur Neubeschichtung von stereolithographischen Schichten
JP2715636B2 (ja) 立体形状形成装置における樹脂貯留槽の液面制御機構
Kizito et al. Experimental free coating flows at high capillary and Reynolds number
JP2001287273A (ja) 立体造形方法及び装置
KR0178874B1 (ko) 평탄화 기구를 사용하여 매질의 층을 형성하는 스테레오리토그라피에 의하여 3차원 물체를 형성하는 방법 및 장치
JPH08156105A (ja) 液面高さ制御装置付き光硬化造形装置
JP3419724B2 (ja) 液面レベル測定装置および立体造形装置
JP3294833B2 (ja) 立体造形方法及び装置
Jeng et al. Over-curing reduction of parts fabricated by the solid laser-diode plotter rapid prototyping system using the Taguchi method
EP4237223A1 (de) 3d-druckvorrichtung, 3d-druckverfahren und mit diesem verfahren erhaltene dreidimensionale rohrförmige gegenstände
DE19631205A1 (de) Verfahren und Vorrichtung zur Erfassung der Geometrien von dreidimensionalen Objekten
EP4341751A1 (de) Verfahren zum erzeugen einer dreidimensionalen zielstruktur in einem lithographiematerial mittels einer laserlithographie-vorrichtung
WO2022253591A1 (de) Lithographisches verfahren zur aufprägung von dreidimensionalen mikrostrukturen mit übergrossen strukturhöhen in ein trägermaterial
IL309788A (en) Treatment of waste obtained in the additive manufacturing process
JPH06134873A (ja) 光造形装置