Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
get pure aluminum
mixed with SI
need thermal evaporator
Last Updated April 2024
The Lithography Spinner V1 plans to use the Blu-Ray disc assembly from a Play Station 5 (KEM-497AAA) to drive the whole system. They are readily available and can be found for $30-$70 in most places.
Typically a single IC is used to drive these modules but most vendors wont sell chips to individuals. So the plan is to design a discrete controller board to manage all the HW and write our own controller SW.
etch rate
selectivity
uniformity
anisotropy
effect on photoresist?
For a description of what the team at CMU is working on in Spring 2025, check out this document!
Streamlining steps and processes in the database
TBD
uniformity
deposition rate
deposition precision (between runs)
KEM-497AAA Pin Out Analysis
OPU_Driver PCB rev0.1 CAD capture
Firmware Development (need to break up into tasks)
Want to work on something? Plan a task add your name next to it!
This is the project page for a lithography system based on repurposing Blu-Ray drives. The initial goal is to reach a feature size of at least 500nm (2x the Blu-ray laser spot size). As a stretch goal, we would like to also use the sled and spindle motors as high speed nano-positioners and to spin coat and cure photo-resin.
✓ Safety goggles/glasses are absolutely necessary. A laser dot contains a large amount of energy in such a small space, in the form of light. Your eyes are extremely sensitive to light, and a direct exposure to this very dense energy light for less than a second will blind you for life. We can prevent this by wearing a special type of light filtering glasses, somewhat like the way sunglasses work. But, sunglasses will not work as laser safety glasses. These glasses need to be coated for the correct wavelength. Do not purchase any laser safety glasses under $30, buy from an authorized and reputable seller such as survival lasers. $5 lenses from China will not be sufficient, and have been proven unsafe.
Currently Recommended: ✓ Be fully aware of what you are pointing at. With a massive amount of light comes the heat as well. Lasers higher than Class IV (>500mW) burn certain objects very easily, lower powers do burn as well but not as intensely. Lasers like this can most definitely burn furniture such as carpet and couches, hardwood floors, curtains, walls etc. You need to make sure that you are not burning anything against your desire. If the heat build up in an object from a laser is sufficient enough, the object could be set on fire. ✓ Keep in mind of any dangerous objects/surfaces. Look out for anything noticeably reflective/smooth such as a mirror, polished metal, or even something smooth like a desk. The last thing you want is a laser beam reflected back at you into your eye. Even with safety goggles/glasses, you should not take a chance. Something else dangerous that you need to look out for are flammable items, a high powered laser can easily ignite a match or alcohol. CAREFUL WITH WINDOWS - None are 100% transparent, and WILL reflect a solid beam back towards you, this goes for any type of glass at all. All reflected beams are also a danger and this is no exception. Windows are also a bad thing to be pointing a laser through, you don't know exactly where/what you'll hit. __________________________________________________ Be careful with lasers, treat them like a loaded gun. It is very easy to create dangerous situations with a laser if you're not careful, be responsible and eliminate that possibility!
Right now, the first project for this technology (Lithography Spinner V1) is in the research/idea stage. See work in progress page for details on upcoming tasks if you want to contribute.
The HW needed to drive the OPU can be broken into 3 sections:
Motors
PMIC
Laser Diode
OPU_Driver_rev0p1 PCB CAD capture has been completed and is up for review on github here:
The board has been roughly quoted on JLCPCB:
PCB= ~$35.00 / Ea
Components = ~ $110.00 / Ea
3x Assembled PCBs = $550
At this time no orders are planned until firmware is far enough along to confirm pin out and FPGA logic size.
In order to develop the SW for Texas Instruments TPIC2050 and test a good bit of the system, the BU40N blu-ray module was chosen for early development. Although available online, this module may not be available for long which is what disqualifies it from general use. Removing the MT1950 chip allows access to a lot of the pins of interest. Powering it is also relatively simple as it should only need 5V.
List of improvements over
Only requires a 3D printer (no machining)
Only requires vacuum pump 1/5th the size
1/2 the height
Easier to assemble
More reliable excess liquid collection
Easier cleaning
Less motor stalling from dried residue
Less residue on window for better visibility
Better user interface
Replace touchscreen with potentiometers
Put power button on top so entire operation with 1 hand is possible
Top swinging window becomes flush with side wall and snaps into place
Here is a of our most recent spin coater V1 build. More info to come soon!
Collect all necessary measurements of the current spin-coater to create the new 3D mode.
Finalize an updated 3D model that includes the servo mount and any necessary adjustments to the lid design.
Order required components, including a servo motor, necessary mounting brackets, and plastic material for a redesigned lid.
Cut and prepare the new lid, ensuring proper fit and clearance for rotation
Assemble all components and build the initial prototype.
Conduct preliminary functionality tests, focusing on servo movement and integration with the claw mechanism.
Optimize servo rotation angles and positioning to maximize clearance while minimizing occupied space.
Conduct final system tests to verify smooth automation and reliable lid operation.
Implement necessary refinements and finalize the design for long-term use.
high level: we can relate all the process parameters to electrical characteristics
all the tests we can do
what they tell us, how many probes needed, etc.
example pictures, resulting curves
lots of great diagrams from Anirud, Icey, Ahmet, Joel working docs we can update with
Semiconductor Parameter Analyzer
Not all transistors are created equal. There is an immense amount of information within the electrical characteristics of the device that helps with optimizing the manufacturing process (Read Peter Van Zant Chapter 14). Below is an example of an ideal IV curve from a textbook, and the first IV curves taken in the Hacker Fab. While our curves aren’t perfect, they do exhibit transistor-like-characteristics 🙂.
IV curves are not the only tests that can be done with a parameter analyzer. With enough data, trends in these different curves can be directly associated with process parameters.
Probe stations are traditionally heavy desktop machines that hold probe manipulators. The purpose of the probe station itself is to precisely move the tungsten probe in order to make contact with the contacts of the device. This typically means moving 3 individual probes to the gate, source, and drain contacts, and another to contact bulk.
Probe Station + simple diagram of contact locations
These probes are attached to the back of the Semiconductor Parameter Analyzer - precision instruments consisting of multiple SMUs (Source Measure Units) and a built-in computer to control them and store readings. Source Measure Units are glorified power supplies with built-in voltmeters and ammeters - they are very precise instruments that are able to supply voltage or current through the probes, and simultaneously read voltage or current.
Automating our existing spin coater whilst integrating heating and liquid dispensing systems.
Footprint (cm³)
35 x 35 x 50
L x W x H
Reliability (%)
99%
Amount of chips sucessfully processed
Clearance (cm)
15
Room for users to access chips
Heating (°C)
100
Internal Temperature (°C)
+15
Temp. above Room Temp.
Dispense Time (sec)
2
Time per drop dispensed
Open/Close Time (sec)
10
Time taken to open/close lid
This page documents the current work being done on patterning systems and the goals of that work. If you want to start a new project or research related to patterning, add it here so we can keep track of what's being done!
Backlash Improvements
<2µm backlash
Before February
Carson Swoveland (@_salix)
Absolute Positioning
<5µm accuracy+precision
End of semester
Carson Swoveland (@_salix)
Cost Reductions
Stepper price <$2000
End of semester
Joel Gonzalez Sky Bailey
The current design for stepper v2 involves having the micrometer-motor couplers slide along the shaft of the motor. This leads to wear in the 3D print and prevents the use of a rigid connection, leading to the coupler eventually becoming loose. This can cause ~30º of backlash in the rotation, which corresponds to about 15 microns.
Mounting the motors on the stage that they move, rather than on a (relatively) fixed stage allows for using a rigid coupling without significant modification to other parts of the design. These fixes should be applicable to any fab with an existing v2 stage. This is a major enabler for Absolute Positioning.
This may require redesigning the stage to be mounted upright, or the stage to be turned sideways.
The WIP CAD files are available on Onshape and more information can be found on Discord.
In order to enable many features like automated or computer-assisted patterning, it must be possible to consistently refer to positions on a die. This requires being able to determine the absolute position of the stage.
There has been some experimentation with using inductive sensors for determining the stage position, though calibrating and mounting the sensors is difficult. The accuracy for a properly calibrated and mounted sensor may be sufficient, though. (TODO: Link inductive sensor notes once those get merged)
Currently, a design using simple limit switches is being developed (though blocked on Backlash Improvements).
The current optics system is not physically capable of handling the projector's resolution, i.e. some amount of detail is wasted in the optics system. This means that we can use a lower resolution (read: cheaper) projector.
There are two main items that we are looking at replacing to reduce our cost. The first is the projector itself, as we are using an expensive 4K projector that does not appear to yield much benefit in patterning resolution. We are considering going from the DLPDLCR471TPEVM ($999) to the DLPDLCR230NPEVM ($299).
The second item that we are looking at is our camera. We are currently using a high-resolution FLIR camera ($700) which, again, is excessive for our application. We believe that we can find a similar C-mount camera for less than $200.
Lastly, there are other components in the optics system itself that we believe can be modified/replaced to further reduce the cost. The ThorLabs components cost at least $700, but many of those parts such as tubes and flanges could be replaced by 3D-printed parts. We will have to test to see if heat generated by the stepper becomes an issue, but this would provide a significant reduction in cost.
Altogether, we believe that we can bring the cost of the stepper below $2000 - perhaps even $1500.
Dope the channel, and source/drain regions for CMOS chips, via solid source surface diffusion, starting with 5-10 ohm p-type substrate.
NMOS Source/Drain
1E19 - 1E20 /cm^3 (Boron)
Uniform over 2 nm Junction depth shallower than channel
NMOS Channel
1E14 - 1E15 /cm^3 (Boron)
Will be uniform by default (p type wafers)
PMOS Source/Drain
1E20 - 1E21 /cm^3 (Boron) with 1E15 - 1E16 /cm^3 (Phosphorous) background
Uniform over 2 nm Junction depth shallower than channel
PMOS Channel
1E15 - 1E16 /cm^3 (Phosphorous) with 1E14 - 1E15 /cm^3 (Boron) background
Uniform over 10 nm Junction depth deeper than source/drain
Working Folder in Google Drive: https://drive.google.com/drive/folders/1bnJyeBcbssFuE7fQBo4J-6Roz3mHzRwJ
Develop metal contact formation process (pre, during, and post deposition development) to reduce the contact resistance and Schottky behavior of of metal contacts on Source/Drain regions of PMOS and NMOS devices. Metal type in metal - Si contact is part of optimization.
Specific contact resistance
1E-5 ohm/cm^2
Schottky barrier height
.7 eV
Working folder in google drive: https://drive.google.com/drive/folders/1qafBxH8luKwNSnPRmJxCRI_14apNio72
CMU Fab
Automating the Lab Process
Lab Auto's goal is to automate the steps of the NMOS process for Hacker Fab. This will take the form of a lab robot with integrated machines for each step of the process. Currently, we're focusing on an automated spin coater that will receive a blank chip and spin on HMDS and photoresist, with liquid dispensing and baking capabilities.
To apply a thin layer of wet chemicals to the surface of the chip, with sub-micron control.
Plug in the Spin coater and the vacuum pump (if either is not able to power on try hitting “reset” on the outlet)
Use the arrows on the touch screen to set the spin time and rpm
Use tweezers to place wafer onto the o-ring so that the chip completely covers the o-ring and will seal onto it
Also attempt to center the chip on the o-ring as best you can. This will minimize the chances of it flying off.
Use a pipette to apply liquid on top of the wafer while it is seated in the spin coater. You only need a couple drops in the pipette, don't suck up extra.
Close the HMDS/photoresist/SOG lid.
Close the spin coater lid
SWITCH ON THE VACUUM PUMP!
Press “begin”
This will begin a pre spin at 600 rpm
Press “coat”
When the spin time has been reached, the coater will automatically ramp down to rest
Open the lid and remove the wafer with tweezers
If you hear the spin coater constantly beeping, this is normal. It does this because we are using a drone motor ESC, so it is programmed to make a noise after being at rest for a few minutes. It’s trying to help you find it 🙂
Feel free to turn it off using the switch in the front so the noise goes away.
Soft baking photoresist and annealing spin on glass.
Plug in the hot plate, it should beep, light up the screen, then go dark.
Switch the hot plate on, it should light up and display both current temperature, and a pending set temperature.
Turn the knob until the desired set temperature is present, hold the knob down until it beeps to set the desired temperature.
A small green circle should appear at the set temperature
The screen should alternate between set temperature and current temperature, ensuring that the current temperature is increasing.
Hold the knob down until the set temperature is canceled.
The small green circle should turn off.
Turn the knob to your new desired temperature, hold the knob down until it beeps to set the desired temperature.
A small green circle should appear at the set temperature
The screen should alternate between set temperature and current temperature, ensuring that the current temperature is increasing.
Hold the knob down until the set temperature is canceled.
The small green circle should turn off.
Switch the hot plate off.
Unplug the hotplate.
Stripping removes all photoresist from a chip. This is typically done after an etch step is completed, though it can also be used to remove resist before etching if you need to redo patterning.
Fume Hood with Sink
N2 gun
Chip with photoresist
Acetone
Isopropanol
Spray the entire chip with acetone
Rinse with IPA
IPA must always be used after acetone to remove any acetone residue
Dry with nitrogen gun until the surface is entirely dry
This requires you to blow dry the back of the chip as well. Surface tension tends to pull the liquid towards the back
Be sure to spray the chip over a sink. Do not use near source of high heat.
We pre-dice wafers in order to:
Limit the size of our DIY machines
Decreases the necessary movement range of nanpositioners
Other machines can be sized down
Increase experimental throughput
Decrease cost of each raw materials
Decrease risk of breaking chip
Ease chip handling
See for reference
Open this sheet, claim the next available chip number, open the blank chip view sheet for that specific chip number and record all subsequent process data into it.
Use a
Lay the wafer on a hard, steady surface
If the surface has some give, it will act as a spring when pressure is applied from the scribe
At an oblique angle, place the scribe tip at the edge of the flat side of the wafer
Flat edge marks crystal orientation, cleaving should be easier along certain crystallographic directions.
Push down, don't think too hard, cleave.
It may also help to press down and drag the scribe tip 1 mm outwards to the edge of the wafer.
Don’t move chip around with the diamond scribe to avoid scratches
Use to move once a cut is made
Total Time
1 minute
Acetone Spray Time
20 seconds
Isopropyl Alcohol Rinse Time
10 seconds
Nitrogen Blow Dry Time
10 seconds
Dimensions: 2 ft x 1.5 ft x 2 ft.
Reliability:
Max Temperature: 300 deg Celsius
Time to Max:
The goal function of the Hacker Fab is to never debug the same thing twice.
We operate under different constraints from the semiconductor fab industry. This allows us to curb a lot of complexity.
Low cost
Create the simplest designs possible
Increase reliability
Reduce manufacturing complexity
Minimal danger
Small size
No cleanroom
Highly sourcable materials
High literacy in understanding working principles of tools and processes
End-to-end custom - from sand to NAND
Make the wafers
Design the tools
Design the processes
Design the IC
Package the chip
Reuse of existing fab equipment
Who we are looking for, how we grow, how to get support
Central to the Hacker Fab is fast turnaround hardware development - it’s in the name. This means extremely fast hardware prototyping, and with that comes the need for iteration. The careful design constraints placed on all projects and focus on documentation enables someone else to iterate on anything developed in the Hacker Fab. Improvement to a V1, V2, Vn of a design means
Directly improving upon a tool’s functionality
Precision
Reliability
Throughput
New features
Safety
But there are other equally important ways to improve a design. Every tool version should try to be:
Easier to manufacture than the last
Reduce number of tools required to manufacture
Reduce # of vendors, lead time, BOM length
Better documented than the last
Tool specs as close to first principles as possible
Every tool spec should have a standardized test for others to verify performance
Explain working principles to the detail of variables we can control (no more, no less). Referenced sources.
More “closed-loop” than the last
In-situ sensors
Calibration software should be more generalizable (“now you can use any camera…any piezo with draw distance in range X to Y…”)
the first open-source semiconductor fab.
Our Goals:
Make integrated circuit prototyping as fast as 3D printing
Make DIY version of every nanofabrication tool
Get there with collaborative open source hardware
Right now we use factories and tools that are optimized to manufacture at scale to do our integrated circuit prototyping. There does not exist a set of machines that enable rapid tape-out of semiconductor devices on a budget, nor are there sufficient resources to make/modify fab tools from the ground up.
Nanofabrication is often communicated as complex magic, where every machine is immutable. We believe that innovation in the industry requires a thorough understanding of these machines from first principles, which will lead us to simpler solutions. Even on machines and processes of magnitudes less complexity than modern industry, there are designs worth sharing.
The use of low-cost, abundant, and fast-turn-around hardware serves a larger purpose than making the fab cheaper. These design constraints are what enable others to recreate, modify, and contribute to our work. The simpler the better.
You don't need prior nanofabrication experience to create meaningful contributions.
You do need to read the Required Reading.
You don't need to recreate the entire fab to contribute, although you can.
We communicate entirely over Discord.
This page is a home for all shared documentation. There are enough resources here to turn an empty room into one that fabricates simple IC's in a matter of months.
Many pages are works-in-progress. It is natural for individual contributors' work-in-progress notes to exist on google drive, notion, etc. Links to these exist at the top of each page, however these notes move to Gitbook as soon as possible.
Any contributor can submit change requests with a free Gitbook account. All of this is on Github, but formatted nicely here on Gitbook. You can contribute directly through Github as well.
For the most up-to-date status on everything, join the Discord.
Here is a list of all the tools built or bought necessary to make our devices.
Every build contains:
BOM
Links to Design Files
Links to Code
First Principles Understanding of Machine Design (WIP)
The Hacker Fab was inspired by Sam Zeloof.
The Hacker Fab was started by Elio Bourcart, Alexander Hakim, and Sam Zeloof.
The first Hacker Fab was opened at Carnegie Mellon University, and currently managed by Matthew Moneck, Tathagata Srimani, and Jay Kunselman.
The Hacker Fab is run entirely by independent contributors.
By default, contributions use the following license stack, but may carry an additional NOTICE file depending on the origin of the contribution.
*This only works with SoG on pure silicon and NOT polysilicon. Should work for both 700B/P5O4
The main purpose of this SOP is to describe a method that we can use to approximate the thickness of SoG. This is especially important in certain plasma etching processes, where removal of SiO2 is needed.
Spectrometer
Spectrogryph opened on computer connected to microscope view
Calibration Graphs (should end with .sgd, can only be opened in the Spectrogryph app)
Picture of Spectrometer Below:
Silicon Chip with 700B/P5O4 SOG
First, ensure that the spectrometer is connected to the computer.
In addition, place SoG on silicon chip sample on the slide under the microscope.
Open Spectrogryph software on Computer
Under Plot/Views, select “New Acquisition View”
After which, you should see something that looks like:
In the upper left corner, select “Device Type” and select ASEQ. Then press connect.
Change exposure to 5000 ms (or more, if you want less noisy data)
Select single shot or continuous
Use Single Shot if you want to get one graph that is taken after 5 seconds of exposure
Use Continuous if you want a graph that is constantly being recorded (hence changing)
Pressing “Acquire” would start the readings. Before pressing “Acquire”, ensure that the probe is connected to the microscope (will need to press the probe against the microscope to get good readings, as shown in picture below).
7. Once a graph of Count against Wavelength is obtained, we need to normalise the counts. This is done by clicking on "Process" and "Normalise (Peak)".
Once normalized, we can now save this spectral plot in file (save it in the .sgd format, so that you can re-open it in spectrogryph later)
Determining Thickness of SoG
Create another New Acquisition View
Drag the Calibration graphs file (should end with .sgd) into the New Acquisition View
You should see this:
The color of the graphs correspond to the actual observed colors of the glass. This can serve as a good benchmark as to what the thickness of your glass might be.
As seen, the SoG with the lowest thickness (190 nm) had the maximum peak at a wavelength of ~590nm. As the glass thickness increases from 190 nm to 255 nm, the wavelength at maximum peak increased accordingly. Following that, from 255 nm to 276 nm, it can be seen that a second peak is starting to form (at a wavelength of around 480 nm). Finally, from 276 nm to 314 nm, the peak at 590 nm disappears, and now the peak at 480 nm becomes more distinct.
Lastly, drag the .sgd file that you previously saved in Step 7 into the plot above.
Determine which shape your graph most closely resembles to determine SoG thickness.
Also note that the color of your glass is a pretty good indicator of what thickness it will be. So for instance, if your chip looks pink, just by looking at the calibration graphs, we can determine that thickness is around 270 nm.
Spectrogryph Manual Website: https://www.effemm2.de/spectragryph/about_help_manual.html
For a description of what the team at CMU is working on in Spring 2025, check out !
Goals of this page:
Not to try and cover theory or industry standard, but to break the problem into first principles just enough to give context to the quantifiable parameters
Also an opportunity to frame the problem wide enough to set the tone of thinking of these machines from the ground up (aligned with goal, don't think of industry as immutable)
Exhaustive list of industry methods and examples
Quantifiable end user parameters with descriptions + standardized tests
A photolithography stepper is a machine that exposes a pattern of light onto a layer of photoresist chemical on the wafer, then ‘steps’ over to the next pattern. Before each exposure, it must align with previous patterns on the wafer so that each layer of the device is in the correct position relative to the previous. The accuracy with which it can do this is called “alignment accuracy”. Alignment accuracy and optical resolution are the two most important metrics of a stepper’s performance.
There are 2 main components of our stepper: the light source and optics, and then the mechanical micropositioning stage that moves the chip itself. Alignment accuracy is a function of both the mechanical micropositioning stage and the reliability of the projector’s optomechanical components.
Commercial lithography machines use photomasks to create the image, typically made of chrome on glass. Instead, our Maskless Photolithography Stepper uses a DLP projector to create a pattern. This allows us to change patterns instantly, opening the option up for advanced techniques like tiling (making a circuit larger than one exposure field).
Patterning Machine Specifications:
is a powerful technique for characterizing semiconductor materials and devices, especially the transistors that we build in our fab. The shape of the CV curve will provide information about the doping concentration in the silicon substrate. On this page, we will detail how to take CV measurements of your devices.
Probe station (see for standard operating procedure)
Capacitance-voltage meter (i.e. Keithley 4200-SCS Semiconductor Parameter Analyzer)
Prepare the Transistor:
Ensure that the transistor surface is as clean as possible to minimize probe-to-pad contact issues. It is helpful to have another user with you to properly align and contact the pads without damaging other probes or the transistor surface.
Ensure that the transistor is properly connected and biased for C-V measurements (i.e. for an NMOS transistor, ground the bulk and source contacts, apply voltage from the gate or drain depending on the type of measurement).
Measurement Setup:
Set up the CV measurement equipment, we use a Keithley 4200-SCS Parameter Analyzer as our test equipment and Probe Station for circuit connections. Please follow the steps given in the to ensure proper probe-to-pad contact with the transistor.
Voltage Sweep:
If using an NMOS transistor with 3 terminals (i.e. no bulk contact), turn off the bulk probe on the KITE interface, ground the source pad, apply a small-signal AC voltage to the drain pad (constant frequency ideally above 100 Hz, low frequency measurements will be performed later), apply a large-signal DC voltage sweep to the gate pad (-8V to +8V for our case). Measure the total capacitance from the gate pad as well. If your NMOS transistor has a bulk pad as well, it is possible to modulate the bulk potential and model threshold voltage dependencies. For regular use, grounding the bulk and/or at least having it at the same potential as the source pad is ideal.
It is also possible to model the MOSFET as a MOS capacitor instead by connecting source and drain to the ground and only by sweeping the gate voltage. This “topology” may be deemed ideal to extract capacitive parasitics from the measured total gate capacitance:
When in accumulation (VGS < 0), mobile holes from the p-type substrate form a dielectric region due to being attracted under the gate. The total gate capacitance is the sum of the gate-source and gate-drain overlap capacitances, along with the gate-bulk capacitance.
When in depletion (VGS is a small but positive voltage), some number of mobile electrons are attracted under the gate but not enough to fully invert the net channel charge, therefore the region under the gate simply becomes devoid of mobile charges, but becomes more negative as the gate voltage is increased. Total capacitance is the sum of the overlap capacitances (which are often neglected due to their small magnitude) and the oxide capacitance (between the gate oxide and the induced weak negative channel) in series with the depletion region capacitance. This parallel topology decreases the total capacitance.
When in inversion (VGS >> 0, much larger than the threshold voltage required to “turn on” the MOS), a substantial number of electrons are attracted under the gate such that a strong conduction channel forms. The conduction channel forms the bottom plate of this virtual capacitance, and the distance between this bottom plate and the gate decreases as the channel inversion becomes stronger (with increasing gate-source voltage), increasing the total capacitance. Apply a DC voltage sweep to the transistor, typically from negative to positive bias (usual measurement range is from -8V to +8V). Measure the capacitance at each bias voltage.
Plotting CV Curves: Plot the measured capacitance as a function of the bias voltage. Below is an example of a measured capacitance versus applied voltage (C-V) curve. Note the decrease in the total capacitance as the mode of operation changes from accumulation in the deep negative voltages to depletion as the capacitance decreases significantly. There is no bulk contact in this measured NMOS transistor, and therefore the inherent and uncontrollable modulation in the bulk potential may be preventing the change of the mode of operation from depletion to inversion (note the lack of increase in the capacitance as the gate potential approaches +8V).
Analyzing C-V Curves: The shape of the CV curve will provide information about the doping concentration in the silicon substrate.
Dopant Concentration (ND): To measure the concentration of the deposited donor atoms, either the source or the drain terminal of the NMOS is used with respect to the bulk. If the drain and the gate are grounded, the subsequent capacitance measurements will be done between the bulk and the source terminals. Since the source and the bulk regions are oppositely doped, they form a p-n junction with a depletion region in between. This structure presents inherent diode and capacitive properties, which is ideal for doping concentration and profile measurements. The average doping should be extracted to later calculate the Debye length (in plasma physics, the distance at which a charge (among a sea of other charges) is shielded against electrostatic forces of a charged plane, such as that of a capacitor), flat band capacitance and bulk potential.
Flatband Voltage: Flat band voltage is the voltage that must be applied to the gate terminal at which the metal-oxide-semiconductor interface potential becomes equal in magnitude to the built-in potential, making the surface potential zero. Since the presence of a flat band condition affects the accumulation of charges for accumulation or inversion channel formation, it is an important parameter to extract for the modeling of the threshold voltage. VFB is usually interpolated from the C-VGS curves, if and only if the doping profile is assumed to be uniform over the region and interface trap state density is large. Otherwise, measuring the flat band voltage is finicky at best and extremely difficult at worst due to our fabrication methods.
Metal-Semiconductor Work Function Difference: The work function difference is a key parameter in determining the threshold voltage of the MOS transistor since the WMS forms a potential barrier against the inversion of the channel. The bulk potential, which is extracted using the doping profile, is an input to WMS.
Model Fitting: As a general rule of thumb, for long-channel devices such as ours, 1 MHz is the frequency at which high-frequency measurements are performed, while low-frequency measurements are generally performed at and below 100 kHz, down to 1-10 Hz.
Use semiconductor device simulation software or a theoretical model to fit the experimental CV curve to theoretical curves, which depend on the doping concentration. This can provide a more accurate estimation of the doping concentration. See the ideal CV curve below:
Extract Parameters: From the fitting or analysis, extract parameters such as doping concentration, and threshold voltage using known parameters such as oxide thickness. See page 10 of for a detailed explanation of the relevant equations. has an implementation of those equations in MATLAB.
As of June 2024, we are currently working on our own custom probe station and source-measurement unit, as described . Once this is complete, we will be able to use our new setup to take CV measurements. We will update this page accordingly once this is done.
The Hacker Fab was built on the Django framework using Python, with HTML and CSS serving as the front-end. The code in this . The purpose of the database is to store data related to chip fabrication in our labs and use the results to refine our process parameters. It is crucial that we maintain a comprehensive and functional data store in order to develop new processes and to help new Hacker Fabs begin fabrication.
The database was created in Spring 2024 with the ability to create new chips, add process parameters to each chip, and query back results from the database. The front-end had simple styling, although they were not reflected in the production website due to issues with certification. The motivation for our improvements in Fall 2024 was increasing the intuitive usability of the website, as well as adding more functionality for the user. hi
The website hosting options up for consideration were Amazon Web Services (AWS), Google Cloud Platform (GCP), and Microsoft Azure. AWS was ultimately chosen because it had the longest free period and we had the most experience working with it. We use EC2 because it has the most flexible options and high availability in many geographic regions. The website is not very compute-heavy, so we chose a small instance to keep costs down.
The code has a model-view-controller (MVC) structure. Each fabrication process is described as a model (in ), with each field representing a process parameter or documentation artifact. This translates to each process being stored as a separate table within the database. This semester, the models were updated to constrain parameters to specific data types in order to maintain consistency and correctness in the database. For instance, temperature was stored as a decimal value, duration as a positive integer, and material type as a string. Some models and fields were renamed as well in order to clarify their meaning. We worked closely with the process development teams to understand which fields should be included or what new models should be added. Relevant Django documentation:
In order to allow the user to interface with the database, there are input and search forms based on the models (in ). As of this semester, the input forms require certain parameters that are measurable and critical to the fabrication process, as well as prefilled default values for standardized parameters in our primary NMOS process. The search forms do not have any required fields, since we should be able to search process data for every chip and parameter value. This semester, the search forms were also updated with input fields that would provide users with the ability to perform searches given a specified range of values. The labels to these forms were also refined to be more readable and include units to aid in correct input. Relevant Django documentation:
We identified that a non-intuitive workflow and lack of visual cohesion were affecting the usability of our website. One major change was the inclusion of “chip pages” that show every process done to a chip and eventually will allow for edits to the data associated with it. Previously, the only way to see that data was to search the database by chip number. This process was not intuitive because users are usually working with a single chip at a time, so it made more sense to have a centralized location to view that relevant information.
A change for the search page was the use of horizontal tables to display data for a process. In other words, for a single entry, each column represents a certain field in that entry, and each row is a distinct entry (previously, the first column was the field name, the second column was the value, and additional fields for a given entry were displayed in their own row). The horizontal table display makes it much easier for users to distinguish between different entries for chip information and process parameters. Furthermore, we modified the search page to display all filter categories to the user under an umbrella “Advanced Search” dropdown. This allows the user to see all the search options at once instead of having to submit a process. Lastly, to make it easier for users to interpret the data that is presented to them in the search page, we added functionality that allows users to group the search results either by the process types they have selected, or by the chip number.
The chip creation page will also have the option to use a “chip profile” or “chip default” that prefills parameter values associated with an established process, such as the NMOS process we use for class labs.
An important addition to the Patterning process in particular is the ability to add multiple patterns in the same step and click on a gray rectangle to approximately note the location of that pattern. This way, it is easier to record the application of multiple patterns at the same time as well as locate a specific pattern when returning to the chip.
The different web pages in our website are served by their own controller functions which are located in . We designed the backend architecture to have a separate function that serves each unique web page. This design allows us to modularize our backend logic and isolate functionality to those specific pages so that they can be as customizable as possible. If similar logic is used across different web pages, we put this logic in helper functions to avoid having duplicated code. The different controller functions for each page serve the main functionality of our website. Routes between the addresses to these pages and the functions that serve them are specified in . The controller links the different HTML pages together, performs the database operations, and interfaces with the backend. It determines what form to display based on what process the user selected, saves the form data and passes it to the database after cleaning, displays search queries by the user, and renders the web pages.
As our website serves to display database entries to our users, a crucial functionality is querying data (related to process parameters and chip information) and rendering it on the page. These are the different pages where data querying is critical:
When a user performs a search for data, they can enter specific filters to narrow down their results. These filters are passed to our controller when the user fills out a search form filled with parameter values. In our controller, we use Django’s Q() objects from their to create and execute SQL queries. This simplifies the process of extracting data from our database since we just need to create a Q() object using the filters specified by the user then apply the filter on our models. This querying is done in the function . Data querying is one of the most computationally intensive components of our database; hence, it can be considered as a bottleneck. Querying data for a single model (i.e. process type, user profile, etc.) has a worst case complexity of O(M), where M represents the number of rows that exist for a particular model in our database (the total number of unique entries of that model stored in our database). In the search page, the user is able to conduct a search to retrieve data from multiple process types. In this case, the worst case complexity for the search is O(P*M), where P represents the number of different processes the user has selected, and M represents the number of rows that exist for a particular model in our database.
The code in is responsible for passing the data from the query result to the html files so that they can be displayed on the web page. There is an important detail that developers should take note of when implementing any functions that return queried results to users. We have implemented a specific data format to pass to the html page in order to standardize the design of the html pages and controller function outputs. When an html page is rendered, provides it a context, which contains data (variables) that are required by or will be displayed in the html page. The html page expects the queried data provided in the context to be an array of arrays of dictionaries. Since Django’s querying library returns the queried data to us in the form of a , we must convert the QuerySet into an array of dictionaries using Django’s model_to_dict() function found in their library. Each dictionary represents a single entry in the database. The keys correspond to the column names, which map to the corresponding value for that column. Each array of dictionaries within the outer array corresponds to a grouping of data. This enables us to group data based on the process types so that they can be displayed on the page with the correct column headers. This data structure is depicted below.
Diagram representing the data structure of the query results passed as a context to be rendered in the html
!!!!!!!!!!!!!!!!!!!!!!!!!! System architecture for interfacing with tools (the spincoater for now) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
SEE this link for better formatting: https://docs.google.com/document/d/1SrD66bqmS1xxs2jt_WWSY7eLr6vyDJxIB4dbMdbxkws/edit?tab=t.0#heading=h.ai1m6262yla9
The primary use of the tube furnace is for diffusion of dopant atoms into silicon. The incorpoation of dopant atoms into the Si lattice creates defects in the electronic structure, which are charge carriers, increasing the conductivity of the diffused region and making it either N or P type. Diffusion of a solid into another solid is quite slow, so high temperatures and long times are needed, hence the high-temperature tube furnace.
Our process uses spin on glass containing phosphorus for N doping and boron for P doping.
Tube Furnace () with Quartz tube
Quartz rod
Quartz microscope slide, or Fused silica boat
Chip with glass containing phosphorus or boron.
Turn on the furnace.
Press and hold “set/ent” for three seconds until “mode res” is showing. Press the up arrow twice until mode “LCL” is selected. Press “enter” once. Now the furnace will hold the temperature shown. Use the arrow keys to adjust and press “enter” once to set the setpoint.
If the furnace stops and holds at a lower temperature than your setpoint, the high temperature alarm may be too low. Read the instructions on to fix this.
Put the Quartz microscope slide in the entrance of the tube. Do not use a regular borosilicate microscope slide, or it will melt inside the tube. The edge of a fused silica slide is pure white, while borosilicate is a little bit green.
A chip permanently fused to the tube furnace walls when improper slide was used 🔥
Place your chips on the slide.
Put on the heat resistant gloves.
Use the glass rod to push the slide into the center tube, being careful to not scratch the inside of the tube too much
Measure out how far the glass rod needs to be pushed in to place the chips atthe center of the tube furnace.
The rod is extremely hot, and will auto ignite what it touches, or burn through flesh. carefully place it a top the tube furnace
Use the glass rod to push the slide to the other end of the tube.
Wait a few minutes for the slide to cool down.
Use metal tweezers to take the slide out. place it on the upside down beaker to allow it to cool further
Wait 3 minutes before handling the chip.
The furnace is obviously very hot. Keep away from any hot parts of the furnace. The rod will heat up in the few seconds that it is inside the tube, so when removing it, only hold it by the colder end.
The rod and tube also channel heat out of their ends via internal reflection of radiation.
Deposit thin films of Aluminum onto the chip so that we can make electrical contact with doped Si and make interconnects between those contacts.
Put on nitrile gloves.
If the Pfeiffer turbo pump is on, power it off by pressing the button pictured below.
Use the arrows to scroll to parameter 309, which show pump speed.
wait until the pump speed is at 0Hz
Slowly vent the chamber by unscrewing the vent screw located on the turbo pump (behind the chamber)
Try to increase 1 order of magnitude every 10 seconds
Wait until the pressure is at 1E3 hPa or greater (pressure is given by parameter 340).
Unskrew the two black knobs pictured below (B), then lift the chamber lid.
Turn the two black knobs on the top of the blue box as shown in Figure 1, and open the lid.
Make sure youre wearing nitrile goves.
The tungsten filament is secured with two barrel connectors piuctured below (B). The filament can be removed by slightly loosening the screws closest to the filamnet.
Tightly wrap aluminum around the Tungsten coil. The filament becomes brittle after evaporation, so be careful not to break it. if you do break it, use a new filament
Place the tungsten filament back and screw it in. Make sure it is straight.
Place ~ 1 inch of poly ide tape on the substrate holder shown below (A), then peel off the clear layer on top of the tape. Since aluminum often covers the square box, when you put the tape on, aluminum might stick to it and flake off. Just continue attempting to apply tape until it stick without flaking off.
Place your chip on the yellow tape, and use tweezers to gently press down on the corners of the chip.
Double check that the metal sheet at the back is not bent and still covering the vacuum.
Double check that the wire and barrel connectors are suspended and not touching anything conductive as to short them.
Use a multimeter to ensure no continuity between the power and ground wire going into the chamber.
Close the blue lid and screw the black knobs all the way.
Close the vent all the way (hand tight)
Turn on the pump.
Screw the black knobs more since they tend to loosen after the pump turns on.
Wait for the pressure to reach at least 6E-5 hPa. This will take 10+ minutes depending on how clean the inside of the chamber is, and how well it is sealed.
Turn on the power source as shown below (A)
Press start on the STM software
Slowly turn up the current on the power source until ~30 Angstrom/s is reached (do not exceed 45 amps). Keep adjusting the current to keep the rate between around 30 Angstrom/second until the thickness hits 5 kÅ, or you can no longer sustain the rate.
If you click the dial, you can change the digit.
The voltage and power will automatically change as you adjust the current, so you do not need to worry about it.
The pressure might increase during evaporation.
After the thickness hits 5 kÅ, TURN THE CURRENT BACK TO 0 AMPS BEFORE TURNING OFF THE POWER SUPPLY.
Press stop on the STM software.
Turn off the vacuum pump. WAIT until parameter 309 shows 0 Hz.
Slowly vent the chamber by unscrewing the vent screw located on the turbo pump (behind the chamber)
Try to increase 1 order of magnitude every 10 seconds
Open the chamber, and peel the tape off with your chip.
Use polymer tipped tweezers to grip the sides of teh chip, then use separate pair of tweezers to peel the tape off the chip.
Version 2 of the probe station using analog discovery 3s
After fabrication, the chip must be tested to demonstrate the functionality of the design. Additionally, variations and errors in fabrication may result in differences in device characteristics which are useful to document when these variations cause the device to fail.
To enable precisely controlled experiments on microscopic chips, we currently use a probe station to contact the device using sharp probes which supply and measure voltages for calculation of various device characteristics such as I-V curves, which are explained in this SOP.
Probe station setup
Probe station - Karl Suss PM5
At least 4 probes, manipulators, and coaxial to split jumper wires with hooks at the end
Microscope setup
Camera - AmScope MU1000-HS and AmScope viewing software
Light – MI-150 Fiber Optic Illuminator
Semiconductor analyzer system
2 Analog Discovery 3s
Laptop with ability to connect to camera and analog discovery 3s as well as run a python program
Devices under test – typically a finished chip with pads for probing
Computer running and Python program
Place the chip in the center of the stage and turn on the vacuum.
Turn on the microscope light, which appears as a spot of light on the stage.
Connect the microscope camera to your computer and select the camera MU-1000HS on the AmScope viewer software, which should summon the camera view.
Open the analyzing software on a laptop
Raise the stage using the lever. Focus the stage and center the pattern of interest under the light source using the knobs below the stage.
If the probe tips are not illuminated by the microscope light, carefully move the magnetically-attached manipulators such that the range of motion of the probe tips is within the spot of light.
Using the knobs on each probe’s manipulator, lower the probes so that the tips are focused yet not touching the chip, then position the probe tips above their corresponding probing pads.
Carefully lower the probe tips to touch the pads, which is generally indicated by resistance to movement when attempting to lower the tip further. The manual nature of this process means that the sharp probes can scratch the chip and damage the device beyond future usage, such as scratching the pads off.
Using coaxial cables connected to the jumper wires with hooks, connect each probe to the ground, source, and drain on the Keithley and connect the corresponding red hooks to the equivalent ground, source, and drain pins on the circuit board as well as all the black hooks to the drain pin on the circuit board like in the below picture
Run the command python3 smu.py in terminal to run the program
This will open up a new window with a plot of the IV Curve that looks something the below picture under MOSFET I-V Curve
In order to close this window and continue with the program, either hit the red exit button on the image window or go to terminal and type Ctrl-C
If the graph had errors, repeat the experiment as necessary
If the data looks good, enter the title for the current and image csv files
Remove the probes from the chip and continue to the next device, either by lifting the probes or lowering the stage.
Raise the probes using the manipulator knobs.
Lower the stage by turning the lever.
Disconnect the microscope from your computer and turn off the microscope light.
Turn off the vacuum and remove the chip.
The outputs currently look something like this:
The I-V relationship between the two probes and resistance estimated from Ohm’s law should be plotted. An ideal resistor should have a linear relationship and constant resistance.
SOP for using the profilometer
The purpose of the profilometer is to measure the roughness of a surface. Specifically, it is able to measure height differences across a region of interest (in one dimension) in the nano scale. This is useful especially after etching processes, where we can measure how much etching was performed on the chip.
The precision of this instrument is ~20-30 nm.
Profilometer
Your chip
If you are learning how to use the profilometer and do not have any patterns yet, you can use Chip 365 (there is a pattern on it, and it is also used in this tutorial)
The profilometer (right) is connected to a very old computer (left). The profilometer contains a metal needle tip that is used to measure the roughness of a surface.
Place chip on stage
Ensure that you don't place the chip in the ridges, and this can lead to a runtime warning
Switch on the light on the stage, ensure that chip is under the light
On computer, go to Display > Video to visibly see the chip. Also, select Sample Positioning in order to see where the stylus will start measuring.
Move chip until you are able to see the cross hair being in line with the edge of your patterns.
Chip can be moved using the knobs as seen in Figure 2.
Ensure that you don't touch/bump into the metal tip as it is very sensitive and delicate
Go to Stylus > Stylus Down. This will move the stylus down to the chip and it should be aligned with the cross hair.
If the stylus is not aligned with the cross hair, double click on the new location where you want the cross hair to be. You will be prompted to update the cross hair location.
Go to Run > Run Single Scan to start an experiment. The stylus will start moving.
If it runs into the AD conversion error, keep retrying (the error tends to go away after 5-6 times, see bottom of this document for photo)
After the run is completed, this should be seen:
As seen in the Figure above, we can see two "bumps", which are where we want to collect our data. However, we can also see that the graph is slanted, which means we first need to level our data.
Levelling plot: Move the red and green vertical lines such that in between those lines, we have a relatively flat region (as seen in Figure 6). Go to Plot> Level. We should now see this:
In order to measure the step height, drag the red and green vertical lines such that in between these lines we have the region of height difference (shown in Figure 7). The height difference is captured as Vert_D. In this case, we an see that it is 2425 Angstroms, which translates to around 243 nm.
As seen in Figure 7 above, some regions are "bumpy". In order to get the average of these "bumps", one can go the Bands > Create Band and set a specific distance. For instance, in Figure 8 below, we have taken the average of 50 nm to the left and 50 nm to the right of the region of interest.
1) Timeout Waiting for AD Conversion
This error happens very often. In order to fix this, perform multiple runs (usually around 5-6 times) until the timeout notice is no longer shown.
SOP for dry oxide growth of 10nm SiO2
The oxidation growth of the silicon layer creates a layer of insulation to prevent direct flow from the conducting MOSFET layer to the metal gate.
Tube Furnace () with fused silica tube
Fused silica rod
Fused silica microscope slide
Tube Furnace () with fused silica tube
Fused silica rod
Fused silica microscope slide
Pure silicon chip (not pre-deposited)
Turn on the furnace.
Press and hold “set/ent” for three seconds until “mode res” is showing. Press the up arrow twice until mode “LCL” is selected. Press “enter” once. Now the furnace will hold the temperature shown. Use the arrow keys to adjust and press “enter” once to set the setpoint.
Wait ~15 min for the furnace to come to temperature.
If the furnace stops and holds at a lower temperature than your setpoint, the high temperature alarm may be too low. Read the instructions on to fix this.
Put the fused silica microscope slide in the entrance of the tube. Do not use a regular borosilicate microscope slide, or it will melt inside the tube. The edge of a fused silica slide is pure white, while borosilicate is a little bit green.
A chip permanently fused to the tube furnace walls when improper slide was used 🔥
Place your chips on the slide.
Use the glass rod to push the slide into the center of the tube, being careful to not scratch the inside of the tube too much. Start the timer.
Place the rod on top of the tube furnace (it will be hot).
Use the glass rod to push the slide to the other end of the tube.
Push the slide all the way to the end until it is reachable.
Put the rod on top of the tube furnace (it will be hot).
Wait a few minutes for the slide to cool down.
Use metal tweezers to take the slide out. Don't use the orange ones because they don't close all the way.
Put the slide on a heat resistant surface and wait 5 minutes before handling the chip.
The furnace is obviously very hot. Keep away from any hot parts of the furnace. The rod will heat up in the few seconds that it is inside the tube, so when removing it, only hold it by the end.
The rod and tube also channel heat out of their ends via internal reflection of radiation.
Temperature
1100°C
Total Time
30 min (subject to change)
discord.
github.
x.
Lithography Stepper V2
Build for $3,015
Carnegie Mellon
Vacuum Spin Coater V1
Build for $200
Carnegie Mellon
RF Sputtering Chamber
Build Chamber + Magnetron for $1,000
Build Power supply for $1,000
Buy dual gas supply components for $5,000
Buy pumping system + gauge for $11,400
Carnegie Mellon
Thermal Evaporator V1 (work in progress)
Build for $15,000
Carnegie Mellon
Tube Furnace V1 (work in progress)
Build for $200
Projects in Flight
Plasma Etcher
Buy for $17,400
Plasma Etch PE-25
Hot Plate
Buy for $125
3-Axis Piezo Nanopositioner
Build for $500
Electroless Plating
Build for $500
Probe Station V1
Buy for $15,800
DIY SMU
Buy for $800
Optical Spectrometer
Photoresists + Developers
Dielectrics
Conductors
Etchants
Dopant Sources
Search Page
/search
search_page()
Central Chip Page
/central
central_action()
Chip Page (for a single chip)
/chipnum/<chip_id>
display_chip()
Temperature
generally 1100°C
Diffusion time
generally 30 min for defining source/drain regions
Semiconductor research has been around for decades, which means there are many people who can explain concepts better than we can. This is a collection of our favorite resources we've found.
Simple MOSFET intro video (5 min)
Sam’s Youtube video overview (5 min)
Nearly identical to what we do
What our work was based on
Device Physics Overview (30 min)
Electrons, bandgap, etc.
Before we had transistors, we had lightbulbs (18 min)
Then we moved to silicon
This stuff is regularly communicated as complex magic, and requires the permission of billionaires to work on it. We are starting from 1960’s level complexity and working our way up to modern complexity.
The creation of the blue LED (30 min)
Extremely well told story of the man who figured out how to manufacture blue LEDs
We are not the first people to claim that innovation in the semiconductor industry requires intimate knowledge of the fabrication tools
Fabublox (∞)
A fantastic tool being developed by friends at MIT. Overview of many processes, with each being a linear recipe
Make an account, and go to “fabubase” in menu
Check out our Hacker fab process, as well as others
Go through and try to recreate our process from scratch without cheating. See how far you get, and write down things that don’t make sense (1 hour)
How do these things even make computers?
Making logic gates from transistors (13 min)
Transistor → logic gates → basic logic circuitry (timers, counters, latches, shift registers, etc.) → architecture abstractions that people made up over decades → CPU
TinyTapeout Video Example: Making ASIC
Application Specific Integrated Circuits
Below: ideal transistor IV curve vs. our first curves.
These both exhibit transistor-like characteristics. Looking back at the Veritasium video about how the first computers were made with lightbulbs - a transistor really boils down to a repeatable switching action. When we look at our curve on the right, we see multiple issues:
The curves don’t go through the origin, they start with a voltage offset
This means that when we apply a voltage to the gate (open the valve to allow current through), current doesn’t run through the drain to the source until we apply ~3V to the drain/source connection.
The lines are all squiggly?
So we try to debug this by finding literature that debugged something similar, or often we simply design and run more experiments. Skim through pages 172-176 (bottom corner number, not pdf page number) of this document. Their transistors have very similar issues to ours. When you read this document, the answers are behind a huge layer of jargon and acronyms that make the barrier to entry for understanding extremely high.
In reality here is what it is saying:
Our source-drain is dominated by an aluminum metal-to-silicon Schottky junction instead of doping
Put simply, we just directly connected an electrical characteristic (IV curve) to a physical process parameter. We now have an exact experiment to try over the next week:
Less metal annealing
More Si02 etch before metal deposition (to ensure metal contacts Si instead of SiO2)
Right now it takes about 8 hours of work + waiting overnight to turn a blank wafer into one with NMOS transistors on it. Then we go to the probe station, test it, organize the data, look at the graphs, and think. That’s how long it takes to verify each new experiment. With each machine, script, or management tool we create, we push to significantly decrease this iteration cycle.
We've only made NMOS devices so far, but there are so many more things to be made. That means our process data corresponds to NMOS only, but most process steps can be generalized to any process if documented properly.
Each unique device can also use different materials entirely, which requires different machines.
What metal are we depositing?
What does the doping profile look like?
etc.
After purchasing and receiving all parts outlined in the Evaporator Bill of Materials, follow the step-by-step process to assemble the vacuum chamber.
(i) Wrap an O-ring around each plate to ensure the chamber has a tight vacuum seal.
(ii) Screw in each plate with 8 bolts into the frame as shown in the following image.
Note: Plan where you want each plate to be (i.e. top, bottom, side) depending on your setup
Each opening must be covered and sealed for the vacuum to exist. Therefore, each opening needs a feedthrough in it or a blank flange to cover it. Ensure that each part has the correct dimension to properly fit in its corresponding port.
(i) Pair up the feedthrough/flange with its matching O-ring and clamp.
(ii) Layer the parts in the following order. Starting from the bottom closest to the plate place the O-ring, flange/feedthrough, and clamp. Then attach all necessary screws tightly. Repeat this process for all openings.
(i) Screw in the hinge into two adjacent plates where you want the door to be.
(ii) Attach knobs on opposite side of hinge to open and close the door securely.
(iii) Attach feet to the bottom of the chamber to minimize vibration.
Connect the turbo pump (Hi-Cube 80) to the KF-40 plate using the corresponding KF-40 flange and O-ring. Since the turbo pump has a lip that makes it difficult to tighten the screws, we recommend using hex shaped 10-32 x 5/8" screws and tightening with a wrench.
The Pfeiffer MPT 200 Gauge has a KF-25 connection port. To optimize the 6 plates we chose, an adapter from KF-25 to KF-16 is needed to connect the pressure gauge to the vacuum chamber. Attach using a KF-16 flange to the plate and a KF-25 clamp to connect the adapter to the pressure gauge.
Heating the vacuum chamber is necessary for two reasons. First, high temperatures of approximately 1200˚C are needed to evaporate the aluminum and perform the thermal evaporation process. Second, heating the chamber allows it to bakeout, meaning that the water trapped inside evaporates allowing the vacuum to achieve a lower pressure.
Our setup consists of two parts: the crucible and the substrate heater.
The crucible is comprised of the following parts:
After assembling these parts together, connect the copper power feedthroughs to either end of the tungsten filament using an inline barrel connector.
Ceramic beads can be used to safely insulate the metal and prevent electrical misconnections.
Next, connect a power supply to the external end of the power feedthroughs to heat up the crucible.
Finally, attach the thermal breakout board and arduino to the thermocouple to read the temperature values.
HackerFab DIY Low-Cost Atomic Layer Deposition Tool
These pages will present the current proposed machine design plan and the work completed to date for our vertically aligned, cold-walled reaction chamber ALD machine for the Hacker Fab at CMU. The Fall 2024 semester's efforts at CMU are described here and the Spring 2025 efforts are described here. Please note that there were significant changes to the design of the chamber, precursor storage, and control systems from the Fall 2024 semester to Spring 2025; those aiming to replicate these efforts are recommended to review the Spring 2025 design changes. Once this project is complete, this page will be updated so as to present a finalized guide for the machine design and build.
We are building a low cost Atomic Layer Deposition machine for the Hacker Fab to achieve improved gate dielectrics, which will help us achieve our goal of a 10 micron CMOS process as well as improve our capability in performing thin-film research. Our design work on it will be all open source, and we hope other labs can use our work to make their own ALDs at a fraction of the cost of commercial alternatives. We are building our ALD to fit 4" wafers so that it can be brought into the nanofab, which will help us lower the barrier to entry for researching thin film deposition and new materials. Although 4" is much larger than anything we are currently using in the Hacker Fab at CMU, this larger size will make it useful to a larger audience.
Our work thus far has been focused on machine design, largely drawing from two papers on “DIY” ALD machines: “Design Of Atomic Layer Deposition Reactors For The Deposition Of Nanoparticle Embedded Thin Films” by Michael Lubitz, and “Homebuilt Reactor Design and Atomic Layer Deposition of Metal Oxide Thin Films” by Pamburayi Mpofu. Each of these papers describes their machine design followed by some process development where they describe the settings (ie. temperatures and precursors deposition times) used in their initial depositions.
A complete list of parts and components used in making the DIY ALD system can be found here.
For the current system we aim to deposit Indium-Tin Oxide. Indium Tin Oxide (ITO) is a versatile material widely recognized for its excellent electrical conductivity and optical transparency. These properties make ITO a promising candidate for advanced applications, particularly as a channel material in thin-film transistors (TFTs). Its high carrier mobility and tunable electrical characteristics offer significant potential for improving TFT performance in display technologies and flexible electronics. Additionally, ITO thin films are of great interest in materials and thin-film research due to their unique combination of metallic and semiconducting properties. This makes them an ideal system for exploring novel deposition techniques, optimizing film uniformity, and investigating structure-property relationships.
The precursors for the metals were chosen based on their feasibility to react with water vapor as the oxidizer. The precursors chosen are Trimethyl Indium (TMIn) for Indium and Tetrakis(dimethylamino) Tin (TDMASn) for Tin with Nitrogen carrier gas. They have been shown to be used for ALD and CVD processes with water as the oxidizer in literature. As a starting point our aim would be to reproduce the results achieved in [Zhang et al.]. The process parameters highlighted in the paper are as follows (substrate temperature: -225C):
Oxide
Bubbler temperature
Pulse time
Co-reactant pulse time
Process pressure
Purge time
In2O3
60oC
0.625s
0.75s
100 mTorr
10s
SnO2
60oC
2s
1s
100 mTorr
30s
For the first attempts at deposition however, the research group at CMU will attempt to deposition Al2O3, as this process is well-documented in the CMU Nanofab. Then, the group will attempt to deposit more complex oxides such as ITO.
Most precursors and specifically metal organic precursors used for CVD and ALD processes tend to be pyrophoric (i.e. thermally unstable and spontaneously ignite on exposure to air) thus necessitating safety measures.
Compatibility with the precursors and byproducts produced during reaction are important to consider when selecting components for the delivery system. For our given precursors the chemical groups for which we checked compatibility are: 1) ability to handle pyrophoric materials, 2) ability to resist corrosion due to water vapor, 3) compatibility with methane (by product of TMIn reaction with water) and dimethylamine gas (by product of TDMASn reaction with water)
The compatibility of o-ring materials was checked on the following sources: (1) (2)
Specific choices:
Stainless Steel Tubing
Aflas O-rings - conventionally used Viton O-rings are incompatible with dimethylamine
Aluminum vacuum chamber
Stainless steel bellow hose
Vacuum pump - Although the vacuum pump manufacturer warns against using the pump with pyrophoric gases, this caution can be safely disregarded in our case. Since we will be working with extremely dilute concentrations of these gases, the risk of combustion or hazardous reactions is significantly minimized. The low concentration ensures that the gases remain well within safe limits, allowing for the pump's use without compromising safety or performance.
Given the safety considerations involved in handling the pyrophoric precursors, the sourcing of materials for ITO deposition is managed by the Claire & John Bertucci Nanotechnology Laboratory staff. They ensure that all necessary precautions are taken during the procurement, handling, and storage of the chemicals. The required precursors have been ordered from Strem Chemicals, a trusted supplier known for providing high-quality materials for advanced research and industrial applications. TMIn, TDMASn
Z. Zhang et al., "Atomically Thin Indium-Tin-Oxide Transistors Enabled by Atomic Layer Deposition," in IEEE Transactions on Electron Devices, vol. 69, no. 1, pp. 231-236, Jan. 2022, doi: 10.1109/TED.2021.3129707.
“Design Of Atomic Layer Deposition Reactors For The Deposition Of Nanoparticle Embedded Thin Films” by Michael Lubitz
"Homebuilt Reactor Design and Atomic Layer Deposition of Metal Oxide Thin Films" by Pamburayi Mpofu
A guide on Analog Discoveries and Waveforms Software
A portable USB-powered test and measurement device, also known as the AD3, is a digital oscilloscope, logic analyzer, waveform generator, pattern generator, and much more. Digilent WaveForms software makes it easy to acquire, visualize, store, analyze, produce and reuse analog and digital signals.
Analog Discovery 3
$379
3
Jumper Cables set
$6.98
1
Micropositioners
TBD
4
Total Cost:
Setup Time:
Output Voltage Range: ±5 V
Accuracy:
±10 mV ± 0.5% (│Vout│ ≤ 1.25 V)
±25 mV ± 0.5% (│Vout│ > 1.25 V)
Number of channels: 2 (custom channels feature available)
DC Current Drive: 30 mA maximum
Download the Waveforms software: https://digilent.com/shop/software/digilent-waveforms/
Run the .exe installer
Plug the Analog Discovery 3s into the laptop and open up the Waveforms software.
Set up the circuit that connects the Analog Discovery 3 like this circuit diagram:
The actual circuit will look something like this:
For our purposes, click on Tracer (for IV Characterization).
Click on drop down to select transistor type.
Select “No Adapter”
Select “Measure Id/Vgs” and set the ranges for the Vgs and Vds.
Select step-size/no. of steps for both voltages.
Click play (in the top right corner) and watch the magic!
I-V Curve for ZVN3310A Transistor on Curve Tracer (replace this image with our chip curves).
Can adjust current compliance for Gate if needed. (below the main toolbar, right above the graph).
Get the code from github by typing in terminal
>>> git clone https://github.com/joshna-ii/HackerFabSMU
Cd into this directory then run the below Python script in any environment where Python is installed by typing in terminal
>>> python3 smu.py
If this is the first time being run in this environment, make sure all dependencies are installed by typing the following command in terminal:
>>> pip install -r requirements.txt
Particulate/dust contaminating liquid SOG.
Explanation: If disruptions to the surface tension of the liquid SOG are seen before spinning, then some type of particulate is in the SOG and this warrants restarting the test. There are three possible causes of this…
Dust landed onto the wafer after the SOG was applied
Dust already existed on the wafer from improper cleaning
Some SOG has hardened inside the bottle creating fine flakes of SiO2. These flakes then get sucked up by the pipette and deposited onto the wafer with the liquid SOG (Example picture above). This warrants preparing a new bottle of SOG based on this document.
Particulate/dust contaminating wafer surface.
Often, after spin coating disruptions to the SOG evenness/thickness can be seen in localized spots on the wafer. There are possible causes of this…
Some SOG has hardened inside the bottle creating fine flakes of SiO2. These flakes then get sucked up by the pipette and deposited onto the wafer with the liquid SOG. These flakes are clear and sometimes not visible pre spinning, and are then only visible after spinning.
Particulate Landed on the wafer during spinning. Sometimes the spin coater can create turbulent air and kick up dust from inside the spin coater which then lands onto the wafer.
The wafer had a preexisting scratch or mark big enough to cause surface tension issues which result in the liquid SOG “un-wetting” in that spot and exposing the substrate. These scratches are often caused by scratches that occur during cleaving, slipping across the wafer when using hard tip tweezers, or dropping the wafer.
Radial variation in thickness/diffraction color
Sometimes after spin coating, there may be a radial pattern of changing color on the wafer. The varying colors indicate variation in thickness since SiO2 is translucent so thin films diffract and appear different colors based on thickness. These variations are usually on the order of a few hundred Angstroms (A) (film thickness ~2000 A) and may not warrant restarting.
Wafer flies off the chuck while spinning
Sometimes either due to bad two sided tape adhesion (regular spin coater) or improper sealing onto the vacuum chuck (vacuum spin coater). The chip may fly off the chuck due to inertial forces. This usually warrants restarting since when the chip flies off it hits the side causing uneven spreading of the SOG or lands onto the SOG.
Pinholes
Possible Causes
Scratches or dust particles on the wafer Cause the liquid SOG to “un-wett” in some spots. This essentially creates a dip in the SOG layer that extends to the wafer surface below the SOG.
Particulate resting on top of the SOG
Possible Causes:
Dust coming into the fume hood and landing onto the wafer after the SOG layer has solidified.
After fabrication, the chip must be tested to demonstrate the functionality of the design. Additionally, variations and errors in fabrication may result in differences in device characteristics which are useful to document when these variations cause the device to fail.
To enable precisely controlled experiments on microscopic chips, we currently use a probe station to contact the device using sharp probes which supply and measure voltages for calculation of various device characteristics such as I-V curves, which are explained in this SOP.
Probe station setup
Probe station - Karl Suss PM5
At least 4 probes, manipulators, and coaxial cables
Microscope setup
Camera - AmScope MU1000-HS and AmScope viewing software
Light – MI-150 Fiber Optic Illuminator
Keithley semiconductor analyzer system
Keithley 4200-SCS Semiconductor Parameter Analyzer
Keithley 2636a Sourcemeter
Keyboard and mouse
Devices under test – typically a finished chip with pads for probing
Computer running AmScope viewer software
Flash drive for data transfer
Place the chip in the center of the stage and turn on the vacuum.
Turn on the microscope light, which appears as a spot of light on the stage.
Connect the microscope camera to your computer and select the camera MU-1000HS on the AmScope viewer software, which should summon the camera view. The Keithley semiconductor analyzer has only two USB ports, which are currently occupied by a keyboard and mouse. Without WiFi or a USB hub, the camera view and data transfer are handled by another computer.
Turn on the Keithley semiconductor parameter analyzer.
Open the KITE software and the experiment of interest (see below sections).
Using coaxial cables and connectors, connect each probe to the corresponding port on the Keithley semiconductor parameter analyzer.
Raise the stage using the lever. Focus the stage and center the pattern of interest under the light source using the knobs below the stage.
If the probe tips are not illuminated by the microscope light, carefully move the magnetically-attached manipulators such that the range of motion of the probe tips is within the spot of light.
Using the knobs on each probe’s manipulator, lower the probes so that the tips are focused yet not touching the chip, then position the probe tips above their corresponding probing pads.
Carefully lower the probe tips to touch the pads, which is generally indicated by resistance to movement when attempting to lower the tip further. The manual nature of this process means that the sharp probes can scratch the chip and damage the device beyond future usage, such as scratching the pads off.
Press the green triangle in the KITE software to run the experiment.
Once the experiment finishes, check the data for errors and repeat the experiment as necessary.
Scale the graph such as by right clicking the graph and clicking Autoscale
and save the data in a folder named chip###
where ###
is the chip number. To save the graph and data with a common name, type the name and click Populate
, Save All
, then Exit
.
Remove the probes from the chip and continue to the next device, either by lifting the probes or lowering the stage.
After all experiments are finished, transfer the data to a flash drive and upload the data (such as to Google Drive).
Raise the probes using the manipulator knobs.
Lower the stage by turning the lever.
Turn off the Keithley parameter analyzer.
Disconnect the microscope from your computer and turn off the microscope light.
Turn off the vacuum and remove the chip.
Upon opening the KITE software, choose the vds-id test
from under the section 4terminal-n-fet
.
Configure the probes and measurements using the following parameters. Make sure that the correct coaxial cable (SMU1, SMU2, GNDU) is connected to the correct probe.
Vds range
0-10V
Vds step size
.1V
Vgs range
0-5V
Vgs step size
1V
Vb range
0
Vb step size
n/a
The I-V curve of the MOSFET and the gate leakage current should be plotted. Note the magnitude of the voltage and current measurements. Very low current in the range of nano-amperes or below can indicate an open circuit, and linear behavior can indicate a short circuit, which can arise from a fault in the device or improper probe placement.
Upon opening the KITE software, chose the res2t
test froom under the section 2-wireresistor
.
Configure the probes and measurements using the following parameters. Make sure that the correct coaxial cable (SMU1, SMU2) is connected to the correct probe.
V range
+-5V
V step size
<=1V
Vgs range
0-5V
The I-V relationship between the two probes and resistance estimated from Ohm’s law should be plotted. An ideal resistor should have a linear relationship and constant resistance.
Before reading further, please see the section for more information.
After thin films of Aluminum are deposited (whether it be Thermal Evaporation, sputtering, etc) onto the chip, we want to define isolated contacts to certain pats of the device, and define interconnects between those contact. To do this, the contacts and interconnects are patterned on top of the Aluminum surface with photoresist, and then wet etched. The contact pads that are left allow us to probe the device, or package it.
Alumina etchant contains Phosphoric Acid, Nitric Acid, and Acetic Acid (all in one solution). The Nitric Acid Oxidizes the Aluminum, then the Phosphoric Acid etches the Aluminum Oxide, and the acetic acid lowers surface tension to help the etchant wet the surface.
Phosphoric and Nitric Acid are extremely Hazardous, be sure to review the SDS for the Al etchant, and wear the proper PPE (Lab Coat, Splash Apron, Nitrile gloves (under), Neoprene gloves (over), Face shield)
SDS:
If under etching occurs, then all contacts will be shorted to each other. Over etching could result in less feature resolution, or Aluminum peeling off the chip.
Aluminum etch has proven difficult to keep consistent. There are many problems with peeling and bad adhesion of both photoresist on top and aluminum to the layers below.
Best practice is to calculate how long you should etch for, then etch for 30 seconds greater than that amount of time, then inspect, then etch longer if the etch looks incomplete.
Fume hood
Hot plate with magnetic spinner
Magnetic stirrer
Glass beaker
Appropriate container for acid (polypropylene)
Nitrile Gloves (under)
Neoprene Gloves (over)
Nitrile Splash Apron
Face shield
Spill kit and
Aluminum etchant (16:1:1:2 phosphoric, nitric, acetic, DI water)
DI water
Put on nitrile gloves
Place your chip on the cleanroom wipe taped to the inside of the acid hood. Do not leave the tweezers inside the fume hood.
Put on a splash gown.
Put on a face shield.
Put on the neoprene gloves. Avoid touching the outside of the gloves.
Pre-heat the hot plate.
Fill the beaker to about 1 cm with Aluminum etchant
Once the hot plate has reached the desired temperature, place the evaporating dish on the hot plate slightly off center so that the magnetic stirrer is on one side. turn on the stirrer.
After the acid has had 5 minutes to come to temperature, use DI water to rinse the black plastic tweezers and pick up the chip, then put it in the dish on the opposite side from the stirrer, then start the timer.
Rinse tweezers with DI water after.
Prepare to take the chip out 30 seconds before the timer is up. It can be tricky to grab the chip, so start early and drop it into the DI water when the timer expires.
Swish the chip around a couple of times and then take it and rinse further with the DI squirt bottle out and let it dry on the wipe.
Turn off the hot plate.
Take off the Neoprene gloves, Splash apron, and face shield.
Use your outside tweezers to pick up the chip and dry it off with the nitrogen gun.
Incomplete aluminum etch looks black and rough.
Complete etch should look like the layer you were trying to etch down to
Peeling is very obvious as well.
While the acids involved in this step are not as aggressive as hydrofluoric acid, there are still many overlapping safety protocols to be followed. This document is NOT qualified to teach you all the required safety protocols and correct operating procedures - please refer to an SOP and more disposal and safety resources.
This document is an operating procedure for our specific lab, and is a reference for students to know how to consistently complete a successful etch.
Exaggerated View of Large Particulate and Improper Dehydration Bake
Radial Variation
Example 1
Example 2
Example 3
Etch Rate
~ .1 um/min
Etch Temp
40C
Stir RPM
350
Download Klayout from their websites and follow the instructions to install the software
After it is successfully installed, open the Klayout editor
To create a new layout File>>New Layout
Set the initial layer(s) that you need. The current hacker fab process would require 5 layers which are substrate, poly, active, contact, and aluminum. This is just for getting started, you can always add new layers later if you need to do so.
The layers will be shown in the upper right corner.
Go to View>>Layer Toolbox to open the layer toolbox so that you can adjust the order of the layers and the texture of the layers based on your preference.
Double-click the layer to hide it. If you are drawing on a hidden layer, the following tip will show up.
To create a new layer, go to Edit>>Layer>>New Layer
Scroll your mouse to adjust the size of the grid
The grid can also be hidden through View>>Show Grid. When you need to export the masks as screenshots, the mask needs to be hidden.
Klayout has the following tools to draw the shapes. Press “shift” to draw straight lines.
Draw the rough shape of an object then adjust it to be the exact size by pressing “Q” to edit its property.
Mask Exporting (method 1):
Go to Display>>Zoom Fit to maximize the size of the mask on the screenshot
Rename and sort the order of the layers according to the order of the fabrication steps. In this case, the easiest way is to sort them by name (0:substrate, 1:poly gate, 2:active layer, 3:contact hole, 4:aluminum)
To make the masks compatible with the lithography stepper, adjust the size of the substrate layer (layer 0 in this case) to be proportional to its resolution (3840x2160). In this set of masks, the size of the substrate layer is set to be 384x216. Under this setting, the actual size of the pattern coming from the stepper is 2.5 times the designed size.
Adjust the color and texture of the mask to be blue/red/black accordingly to make them compatible with the red focusing and UV focusing.
Hide or show certain layers based on the property of the mask and take screenshots via File>>Screenshot and save the mask.
Corp the screenshots since the exported screenshot would normally have white sides.
See step 11 for an alternative way of exporting the masks using Python scripts
Mask Exporting (method 2):
Set up steps are the same as Step 10 a. to c. steps.
Go to Macros>>Macro Development to write Maros in Klayout
Select “Python” and change the Macro Template to “Plain Python file”
Paste the following code into the Python file you just created. 1
lv = pya.LayoutView.current()
ly = pya.CellView.active().layout()
# top cell bounding box in micrometer units
bbox = ly.top_cell().dbbox()
# compute an image size having the same aspect ratio than
# the bounding box
w = 3840
h = int(0.5 + w * bbox.height() / bbox.width())
lv.save_image_with_options('/your_directory/your_picture_name.png', w, h, 0, 0, 0, bbox, True)
Change the path to the folder where you want your images to be saved. Note that if the name of your folder or file starts with a number, it will give you the following error message.
The .png file of your mask will be saved in black and white. Be sure to adjust the color and texture of the mask to be blue/red/black accordingly to make them compatible with the red focusing and UV focusing.
Reference:
1 GDS to image https://www.klayout.de/doc-qt5/programming/python.html
Appendix 1. Klayout user guides
Klayout user manual from their websites:
https://www.klayout.de/doc/manual/basic.html
Shorter one for getting started with basic functions:
https://mycourses.aalto.fi/pluginfile.php/897248/mod_resource/content/2/KLayout%20Guide.pdf
Appendix 2. Masks for an NMOS enhancement load inverter
Based on Original Paper Found Here: https://www.sciencedirect.com/science/article/pii/S2468067222000621
In this Document
At its fundamental level, a piezo inertia actuator might seem quite simple: two contacting surfaces one of which alternates between moving slowly and quickly in alternating directions which, in turn, causes displacement on the other surface. However, there are many variables at play, all of which have significant effects on the efficacy of a piezo inertia actuator.
There is no single optimal solution to each individual variable, rather different combinations of variables function well together given specific piezo inertia actuator assemblies. Understanding the most impactful variables and their effects can simplify this process.
This document includes a list of specific variables broken down as closely to first principles as possible + a specific configuration that resulted in a working piezo inertia actuator.
Background
Piezo actuators are tiny stacks crystals that respond to voltage by physically expanding in a very repeatable way. The simplest of these crystal stacks simply expands and contracts in one direction. The magnitude of this expansion can range from single nanometers to multiple microns.
Actuator assemblies have been made utilizing this crystal stack by amplifying it's small expansion. This can be taken a step futher - by applying a sawtooth wave function to the piezo crystal, it can be made to expand slowly, but contract quickly. This, in tandem with some clever friction interfaces and dynamics, can be utilized to make a separate stage move much more than just the short range of the piezo draw (expansion) distance. It can effectively be used to move an infinite range.
The friction force between A and B is determined by the material choice, cleanliness, as well as the preload force Fa.
Having too much friction makes it harder for the slip phase of the stick-slip cycle to work. When the friction force is too strong, the inertia of A is no longer enough to overcome the higher friction force and the and surfaces do not slip; the assembly simply vibrates back and forth.
However, when the friction force is too weak the contact between both surfaces becomes inconsistent. This can also result in the stick phase being only a fraction of the draw distance of the piezo. Similarly to when there is too much friction, the assembly mostly just vibrates. This makes this hard to diagnose the issue.
It is also desirable for the surfaces of A and B to be hard.
As the piezo expands a very small amount (microns) any imperfections or change in angle between the A and B surfaces can cause the stick-slip cycle to fail and the actuator to get stuck. Therefore, having smooth surface finishes is desirable and increases reliability. Keeping the surfaces clean from debris has the same effect and also prolongs the lifetime of the surfaces.
Having a preload force between the and surfaces is paramount. If there were none, we would be relying on perfect alignment between the A and B surfaces throughout its range of motion.
Having a preload ensures that even if both surfaces are not perfectly aligned they maintain contact with each other. This preload force also and gives us control on the friction between A and B.
If the piezo element is mounted on the chassis, and not the stage itself, then any slop in the stage mounting will propagate as the stage moves throughout its range of motion. This can increase or decrease the force between the magnet and the stage, as well as wedge the magnet's corner against the stage.
This is very unpredictable for the stage dynamics. Making more precise mounting for the stage is also desirable for other reasons, such as wanting a very linear range of motion (assuming that the magnet interface is operating properly to begin with). This can be expensive however, as the tolerances are on the order of microns.
A poorly mounted stage can be calibrated out when using a 3-axis system, curbing the finicky precise mounting and tolerancing.
The entire concept of a piezo inertia actuator relies on the fact that the momentum of the stage during the stick phase will continue and overcome the friction force between A and B during the slip phase. In other words, the piezo pushes the mass A some amount then quickly pulls back. Without sufficient A mass, the slipping phase becomes very difficult to achieve.
Piezos can exert very high forces when expanding (stick phase), so increasing mass does not put significant strain on the piezo actuator itself. During the slip phase, we only require enough force to overcome the friction force between and B.
The rate at which the piezo can slip is just as important as the momentum of the stage. This is dictated by the capacitance of the piezo stack itself, but we have found that the more impactful variable at play is the slew rate of the driver. A proper driver that can pump or deplete voltage from the piezo in a matter of microseconds is critical to get consistent slipping action.
This can also dictate the frequency at which you can drive the stage, defining the maximum speed the actuator can move.
Though a linear saw-tooth waveform is able to produce movement of the piezo inertia actuator, it is far from optimal. Using a linearly increasing or decreasing waveform is not ideal for the sticking phase, as the sharp changes in direction can make the stage slip before sticking action occurs.
Using a gradually increasing waveform like the ones seen below is a more optimal solution.
The velocity of the waveform starts off slowly and gradually increases speed, which allows it to reach higher driving frequencies without slipping and even a greater velocity at the end of the sticking phase – which increases the momentum of the surface A.
Let Fcr be the maximum driving frequency at which there still is sticking: it is desirable that the rapidly changing portions of the signal (slipping phase) be 4 times faster than Fcr and that the slowly changing portions of the signal be 4 times slower than Fcr.
Vibrations are naturally created by the piezo element. They are undesired and indicate lead to inefficiencies.
Manufacturing the chassis assembly out of a stiffer and heavier material and fixturing the assembly to a stable base reduces said vibrations and greatly increases the efficiency and reliability of the machine.
This is especially critical for stages with more than one axis stacked on top of one another. This is yet to be tested.
PDu150 with a regular STM32 ADC was used for the testing below
PCB files above are the 2nd iteration on a custom board, with higher resolution ADC
OLD DRIVER BUT A BUNCH OF WEIGHT
Friction between and
We have a 3 mm square nickel-coated neodymium magnet and a precision ground stainless steel linear rail as the two surfaces causing friction.
Preload
We are using a 3mm square nickel-coated neodymium magnet that has 0.28kg pull and the magnetic attraction between the stainless steel linear rail and the magnet acts as the preload force.
Finish & consistency of and surfaces
We are using a 3mm square nickel-coated neodymium magnet as the surface and a stainless steel linear rail as the surface. The linear rail was chosen as the surface because it is precision ground and has an excellent surface finish and for the surface we are using the smoothest looking face of the magnet. Furthermore, both surfaces are handled with care to avoid scratches and burrs, kept clean, and cleaned with isopropyl alcohol.
Mass of A
The design starts performing the best when there is over 50g of mass on top of the carriage. If you are prototyping and just put something heavy on top of the carriage to test, certify the weight is properly fixed to the carriage and can’t move freely – which would just cause vibrations and a poor performance.
Waveform driving the piezo
The piezo element is driven with an 8 bit DAC and a PDu150 piezo driver. The waveform used is the same shown in the images in section “5. Waveform driving the piezo”, it has a peak voltage of 120V and a driving frequency of 1,400 Hz.
Previously, we used the BD150 driver, however, its slew rate was extremely low and the upgrade to the PDu150 driver showed very significant improvements.
BD150 slew rate = 12 V/us
PDu150 slew rate = 38 V/us
Stiffness / stability of the entire assembly
The most significant way this was handled was by attaching the piezo directly onto the linear slide and the magnet touching the rail. This ensures that all movement is directly transferred onto movement of the slide and less is lost due to compliance on other parts of the assembly.
Machining the main body of the actuator out of aluminum works well, however it is also working with a 3d-printed chassis out of PLA. Taping – or even just pressing down with your fingers – the assembly to a stiff plate or table solves vibration related problems.
VIDEO OF 3D PRINTED VERSION – SIDE MOUNTED MAGNET
VIDEO OF 3D PRINTED VERSIon – TOP MOUNTED MAGNET
Piezo element
We used this 4.6um draw distance piezo stack.
Linear rail and carriage
This SOP is specifically for etching 300nm of polysilicon in the NMOS process
Total Time
15 min
SF6 flow rate
10 sccm
Etch time
60s
RF Power
100W
This first etch step creates the transistor’s gate by etching away almost all of the polysilicon and gate oxide, except for the islands covered by patterned photoresist. We use plasma etching (AKA dry etching) for two reasons:
Plasma is capable of etching silicon, whereas HF is not.
The anisotropic (vertical) etch profile is capable of transferring smaller patterns than isotropic etches.
The plasma etcher breaks down the normally inert SF6, creating a fluorine ion containing plasma on the surface of the chip. A combination of physical bombardment and chemical reaction removes material from the surface. Physical bombardment occurs when the pressure is low (<~.1 Torr) and results in an anisotropic (vertical) etch. This allows for precise transfer of a photoresist pattern onto the underlying material. Chemical etching dominates at higher pressures and results in an isotropic etch. Fluorine reacts more quickly with Si than SiO2, resulting in high selectivity.
PE-25 Plasma Etcher
Chip with patterned resist on Si
Acetone
Isopropanol
If you have already claimed a chip number, and opened its specific chip view data sheet, record your patterning data into that sheet. If you have NOT claimed a chip number, and have NOT begun recording data in a chip specific sheet, open this central chip count sheet, claim the next available chip number, open the blank chip view sheet for that specific chip number and record all subsequent process data into it.
Turn on the etcher via the switch on the back panel.
Turn on the laptop and open the Plasma Etch app.
Turn on the RF power supply on top of the etcher.
Open the chamber and place your chip in the middle of the rack. Close the chamber.
Set O2 flow, SF6 flow, power, time, vacuum setpoint in Sequence screen. Save your sequence.
At the top menu bar, go to power and turn on RF and vacuum. The pump will start.
Wait until the pressure (the number next to "vacuum") is below .1 Torr.
Go to commands > cycle off. This will purge the chamber for three seconds with nitrogen in order to remove H2O. If any water is in the chamber during the plasma it will react with fluorine to make HF. Very bad.
Commands > standby. This will start the pump again.
Repeat steps 2-4 to purge again. This makes sure no water is in the chamber.
Open the valve on the cylinders of gas that you are using. Lefty loosey.
When you are ready to start etching, select commands > plasma.
During the etch, monitor the pressure on the screen (should be at your setpoint) and the outlet pressure on the regulator (should be around 5-15 psig). Look in the window for pretty plasma!
SHUT THE GAS CYLINDER. RIGHTY TIGHTY
At the end of the cycle, the etcher will purge itself once, pump down, then purge again. To be safe we’ll purge a third time:
Commands > standby. This will start the pump again.
Wait until the pressure is below .1 Torr.
Commands > cycle off. Lets gas in for 3 seconds
Commands > standby.
Wait until the pressure is below .1 Torr.
Commands > shutdown. The chamber will come to atmosphere in 30 seconds, at which point you can open it.
The procedure is the same as for silicon etching, but you may skip a purge before and after the plasma. This is because
Total Time
6 min
O2 flow rate
10 sccm
Etch time
120s
RF Power
100W
SF6 is not toxic, but fluorine is. By purging before and after the plasma, we’re trying to prevent two things:
Purging before removes all water from the chamber. This prevents any HF from being formed, which would otherwise corrode the pump and exhaust. If the exhaust hose connected to the pump turns green, this is an indication that HF is being formed.
Purging after removes all reaction products from the chamber. This includes SiF4 and various other sulfur oxides.
Three types of "spin on glass" are currently used in the Hacker Fab. 700B, P504, and B154, all three sourced from Filmtronics. Each of these begin as liquids, which are spun onto the surface of the chip, then annealed to form solid thin films. This is known as a sol-gel process.
700B becomes an undoped thin film of SiO2, but with lower density than a thermally grown SiO2. After high temperature exposure (~1100C) this thin film densifies to the density of a thermally grown oxide.
P504 becomes a thin film of SiO2, with a small amount of Phosphorous in it, also with lower density than a thermally grown SiO2. This is also referred to as a "spin on diffusant." After high temperature diffusion (~1100C) this thin film densifies to the density of a thermally grown oxide.
B154 does not have SiO2 precursors like 700B and P504, but becomes a solid thin film with a small amount of Boron in it. The composition of this solid film after relatively low temperature exposure (~200) is not clear, since the formula is proprietary, but it is believed to be some sort of polymer. Upon diffusion (exposure around ~1100C) the B154 thin film becomes SiO2 of thermally grown density.
These spin on glass films are often etched with a dilute HF solution, or BOE (HF + NH4F) due to the high selectivity with Si. However, the etch rate of spin on glass annealed around 400C is much faster than that of spin on glass that has been densified at around 1100C. Additionally, the B154 film that has been annealed at 200C is not effectively etched with HF, but is effectively etched with HF after diffusion at 1100C.
As indicated above, the purpose of the P504 and B154 deposition is to create a dopant source at the surface of the silicon, which can be diffused into the silicon substrate. 700B is used as a diffusion barrier, or a dielectric layer to fabricate metal interconnects on top of.
The main concern with spin on glass, is its tendency to crack (extent of cracking varies, but full shatter can occur leading to flake off), have variation in uniformity, and have pinholes. Cracks and pinholes can lead to uneven doping across the surface, failure of 700B to act as a diffusion barrier, or metal interconnects shorting to the Si below. Factors like humidity, annealing temperature profile, particulate contamination, and shelf life of the spin on glass solution.
However, the CMU Hacker Fab has found particulate contamination to be the number one cause of defects, and this issue has been mitigated greatly by using filtered syringe tips during deposition, as seen below in the procedure.
Filmtronics 700B, P504, or B154.
Acetone
Isopropanol
Check that the working volume of spin on glass is labeled with the date it was poured. For 700B and P504, ensure that the solution has not been out for more than a month (main bottle is stored at 5C).
If you are pouring a new working volume of P504 or 700B, let it come to room temperature before using it (ideally, wait 24 hours).
Preheat the to 100°C
In the fume hood, hold the wafer with tweezers over the sink.
Rinse the polished side of the wafer thoroughly with acetone, then isopropyl alcohol.
The acetone leaves a residue that must be removed by the isopropyl alcohol rinse.
Blow the wafer dry with the nitrogen gun by pressing the wafer against a cleanroom wipe on the table to ensure it does not fly away. Get a good grip on it with your tweezers.
Even when the wafer appears dry, there may still be moisture on the edges, so dry both sides liberally for ~20 seconds
if there is visible acetone residue after drying, repeat steps 2-3
Place the wafer in the center of the hotplate for 20 seconds
Be sure to handle the wafer with tweezers that can handle high temperatures (metal tweezers)
No need to turn the hotplate off since annealing will require 100°C initially as well
Place wafer onto the chuck of the
Open the SOG container while keeping the bottom resting on the table
Never open containers up in the air or outside of the fume hood
Pipette 1-2 drop of SOG using Luer Lock filtered syringe:
Take a clean syringe and draw it up ~½ to create an air pocket in the tube
Suck up SOG about halfway up the syringe. This is a lot more than you need for 1 drop, because the filter needs to be wetted by the excess solution before drops are released.
Twist on a syringe filter
Release 2 drops back into the SOG container
Apply 1 or 2 drops to your chip, make sure the chip is completely coated in solution but do not use more than 2 drops
Dump any remaining SOG in the syringe back into the SOG container
Dispose of the syringe and the filter in the waste bucket
Spin coat the wafer (Remember to switch on the vacuum!)
After spin coating, the SOG application should appear even. (See pictures below)
Immediately move onto annealing
The hot plate should already be at 100C
Place wafer onto the center of the
Be sure to handle the wafer with tweezers that can handle high temperatures
Set the hotplate to the desired annealing temperature (200C for P504 or B154, 400C for 700B)
After the desired anneal time has passed (10-15 minutes for P504 and B154, 20-30 minutes for 700B), use metal tweezers to remove the chip. Be careful not to burn yourself.
If the next step requires higher temperatures, see the for details.
See document for a more detailed overview of failure conditions and possible causes.
Be sure to work under fume hood when working with SOG. The SOG can give off toxic vapors (especially during annealing)
DO NOT touch the hot plate during operation. A 400 C hot plate will cause severe burns. (Reminder: 400 C = 752 F). The same is true of the glass cover, which is why it is important to ramp down before touching.
THIS IS NOT A COMPREHENSIVE GUIDE FOR HF ETCHING. THIS IS A RESOURCE TO COMPLIMENT IN PERSON TRAINING
Same process for Doped SOG:
You must complete Hydrofluoric Acid training before using Hf for etching.
The HF/BOE etch is used to do one of the following.
To etch holes through a layer of glass to open up areas for electrical contact to to doped Silicon.
To etch holes through a layer of glass being used as a diffusion barrier to open up regions for doping.
To etch way specific areas of doped glass to control where dopant diffusion will occur.
To strip a chip of leftover doped glass that needs to be removed for subsequent processing.
To strip native oxides, thermally grown oxides that may have formed during drive in diffusion.
To etch gate oxide layer left over after plasma etching of polySi with a plasma etcher in the original NMOS process.
Each of these conditions may require different etch times, and require different amounts of temporal precision for when to stop the etch. Regardless, you need to have an understanding of the density and thickness of layers you're etching, and the device you're processing to understand what etching parameters to use.
Spin on glass/diffusant should be patterned with HMDS to enhance adhesion between the photoresist and SOG layer during etching. Otherwise the photoresist is prone to peeling.
Relevant reaction:
SiO2 + HF → H2SiF6 + H20
A is used instead of pure HF to control the etch rate.
Fume hood
Appropriate container for acid (polypropylene)
Nitrile Gloves (under)
Neoprene Gloves (over)
Nitrile Splash Apron
Face shield
Spill kit and
Hydrofluoric Acid or Buffered Oxide Etch
DI water
Put on PPE, including splash apron and face shield, where the over neoprene gloves when handling items in the fume hood
Never remove tweezers from the fume hood. Once a tweezer has been used in the fume hood, it must remain there.
Place your chip on the cleanroom wipe taped to the inside of the acid hood.
Put on the neoprene gloves. Avoid touching the outside of the gloves.
Open the three small jars, labeled BOE, R1 (rinse 1), and R2 (rinse 2). Keep them in the orientation pictured below to minimize the chances of spilling, have them in the correct sequential order, and ensure that if a spill occurs it stays within the fume hood.
Keep them in the black 3D printed tweezer guide.
R2 should be filled higher than R1, and R1 should be filled higher than the BOE.
Use the modified tweezers to pick up and hold your chip.
These are self-locking tweezers, once it has a good grip you can hold the tweezers by the metal wire handle on top
Start the timer and place your chip in the BOE, letting the tweezer dongle rest on the 3D printed etching stand
When the timer is up, move the chip to R1, and jiggle it in R1 for 30 seconds
Move the chip to R2, and jiggle it in R1 for 30 seconds
Hold the chip over a beaker and spray it with DI water thoroughly.
Place the chip back on a new cleanroom wipe outside the fume hood.
Place the modified tweezers back in the fume hood where you found them
Remove your gloves first, keeping them in the fume hood where you found them
Remove the rest of your PPE
Now take a pair of tweezers from outside the fume hood and pick up your chip
Rinse the chip using a DI water squirt gun over the sink for 20 seconds, or hold it under the DI water tank.
Dry your chip off with a nitrogen gun.
Refer to for proper nitrogen gun usage if needed
Incomplete oxide etch looks like rainbow patterns at the bottom of holes.
Complete etch looks like flat white reflective Silicon
Inspect before stripping the photoresist
This is by far the most dangerous process step. This document is NOT qualified to teach you all the required safety protocols and correct operating procedures - please refer to an and more disposal and safety documents. Every student at CMU must go through a 1 hour safety training specifically for the handling of HF before they are even allowed to be in the same room as somebody handling it.
This document is an operating procedure for our specific lab, and is a reference for students to know how to consistently complete a successful etch.
The SW needed for this project can be broken down into the following subsections.
KLayout
OpenROAD
Computer-Aided Manufacturing software translates a 3D design into G-code instructions that a CNC machine (in this case laser burner) can understand, essentially "slicing" the design into smaller, machinable steps.
This SW takes a file with the desired mask (Pattern Capture Output) as an input and translates it into a set of machine instructions.
This software runs on the micro-controller that drives all the HW. It is responsible for taking sensor inputs and driving all output motors and lasers. This device also has an interface which can transmit all the data to/from the user.
This software is responsible for general control of the laser burner from the PC side.
This SW is responsible for the user facing interface which gives the user full control of the burner.
Total Time
15-35 minutes
Spin Speed
4000 rpm
Spin Time
20s
Anneal Temperature Profile [temp 1, time 1, temp 2, time 2...] [°C, min]
700B: [400, 20-30], P504: [200, 10-15], B154 [200, 10-15]
Time (if glass annealed at 200-400C)
~10 Seconds with 6:1 BOE
Time (if glass annealed at 1100C)
5-10 Minutes with 6:1 BOE
Temperature
Room Temp.
Details are for Version 1 of the sensor head design. Discussion of design choices and build instructions can be found in the documentation document.
The Quartz Crystal Microbalance (QCM) project was designed for the RF sputtering chamber to measure thickness of deposition. This sensor utilizes the piezoelectric properties of quartz as explained by nanoScience Instruments.
In this design the frequency is sent to a 6 MHz quartz crystal in an aluminum casing. The signal travels from the coaxial cable through the SMA connector to the wire fed through the spring to the electrode which the crystal disc sits on. The signal travels through the crystal then returns through the aluminum casing. The sensor head sits on the substrate plate near the center of the plate so that the crystal receives similar sputtering conditions to the substrate. The coaxial cable is fed into the chamber to the sensor head through one of the chamber’s KF16 flanges.
One of the biggest challenges of this design was that the ground of the sensor head must be isolated from the ground of the chamber to avoid signal interference. This includes the substrate plate. To achieve this isolation, a layer of PTFE was placed between the substrate plate and the sensor head and fastened with PEEK screws.
The main components of this project are the sensor head, oscillator, and sensing software. As of now, a prototype of the sensor head has been fabricated and tested outside of the chamber using an existing oscillator and software. Even though the sensor has not yet been tested in the vacuum chamber, all materials are ultra high vacuum compatible. In the future, the goal is that the oscillator and software will also be built and the sensor head will not be reliant on existing systems.
The oscillating signal travels from the coaxial cable through the SMA connector pin and the wire to the electrode. The aluminum base and lid serve as the ground. The signal returns through the casing. The target material adheres to the surface of the exposed quartz crystal disc causing a change in frequency of the signal.
Note: The CAD rendering does not include the wire that connects the SMA connector pin to the electrode. See Concept Diagram for an example.
6 MHz AT-Cut Quartz Crystals (14 mm diameter)
1
35.00
Sensing crystal
3” long aluminum bar (½” thick, 1” wide)
1
2.71
Sensor head base
3” long aluminum bar (1/4” thick, 1” wide)
1
1.62
Sensor head lid
SMA Connector Jack, Female Socket 50 Ohms Panel Mount Solder
1
11.39
Connection from coaxial cable to spring
OFHC copper (0.025" thick)
1
31.28
Electrode
Pure copper springs (16 mm)
1
6.41
Braided copper wire (3mm braided, 0.8mm thick strands)
1
9.99
Connection from SMA connector signal pin to electrode
PTFE sheet (1/32” thick)
1
2.22
Barrier between sensor head body and substrate plate
Silver conductive epoxy
1
157.49
Electrical connection between SMA connector signal pin and wire, electrical connection between wire and electrode
PEEK screws (M2.5, 8mm long)
4
12.60
Substrate plate connection
Steel hex nuts (M2.5)
4
4.19
Substrate plate connection
Stainless steel flathead screws (2-56, 7/8” long)
4
4.34
Connection between base and lid
Stainless steel hex nuts (2-56)
4
3.90
Connection between base and lid
Stainless steel washers (M2.5)
3
4.64
Support for silver epoxy
Total
287.78
Note: Not all materials listed are an exact match for those used in Version 1. Some materials were already available in the lab. Additionally, some of the materials used were not vacuum compatible due to zinc coatings so those materials have been substituted for vacuum compatible alternatives in the bill of materials.
Design a Version 2 that eliminates the need for expensive silver epoxy.
Complete more sensor head testing.
Build the oscillator.
Write the code to sense the change in frequency and calculate the change in thickness.
Create a low-cost flange feedthrough into the chamber.
https://docs.google.com/document/d/15uXQ0jKiw-uUwXZg3vHdAT-oS-NZu3LUEBUPLZNrHng/edit?usp=sharing
Hannah Chinn
Email: [email protected]
Bakeout Time
Pressure Before Beggining Evaporation (hPa)
Temp Time Sequence [c1, t1, c2, t2, c3, t3, ...]
Figure from Microchip Fabrication (Van Zant, 2004)
Thermal evaporation is a layer deposition technique wherein the vapor pressure of a material is increased via resistive heating while the surrounding air is evacuated below that vapor pressure. The mean free path of gas in the chamber, which is determined by the pressure, must also be larger than the source to substrate distance. Under these conditions, the material evaporates into the vacuum and then coats any exposed surfaces. This is how we create deposit layers of metal, which are later etched into wires, and contact pads.
The Hacker Fab currently uses aluminum for wiring because it’s relatively conductive, fast to evaporate, and cheap. However, it can be tricky to evaporate because it alloys readily with many refractory metals. This is described in depth here. We currently use an alumina crucible which seems to work for a handful of evaporations, though other setups may be more effective and should be tested.
MTI Thermal Evaporator with Inficon Film Thickness Monitor
Kapton tape
99.999% Aluminum wire
Recommended: piranha solution
Open the Evaporation Data sheet and plan your experiment.
(Recommended) Use piranha solution or O2 plasma to clean the chip.
Place the chip on a hot plate at 180°C for 90 minutes. Cover it to avoid surface contamination.
Wear gloves while handling parts exposed to vacuum because oil from your hands will outgas.
Use double sided kapton tape to attach the chip(s) to the center of the substrate holder.
Put 20 cm of aluminum wire into the crucible.
Use double sided kapton tape to attach the chip(s) to the center of the substrate holder.
Carefully close the chamber.
Check that the vent knob on the turbopump is fully closed by turning clockwise.
Start the vacuum by pressing the on/off button on the pump.
Program the bakeout sequence to ramp to 700°C over 2000 s, then hold for 3600 s, then ramp down over 2000 s. Refer to page 15 of the evaporator manual for detailed programming instructions.
Wait for the pressure to get below 5E-5 hPa. You can also program the bakeout to have a long 0°C segment at the beginning.
Make sure that the current knob on the side of the evaporator is in the “Auto” position.
Press “Set” and “◀” to return to the standby state, then press and hold “▼” for 2 seconds to start the program. Press the green run button to enable current flow.
Ensure the pressure reads less than 5E-6 hPa.
Program the evaporator to ramp to 1125°C over 2000 seconds, hold for 500 seconds, and ramp down over 2000 seconds.
Start the program. Set a timer for 28 minutes so that you open the shutter at the right time.
Set up the film thickness monitor by plugging its USB cable into the laptop and starting the STM-2 software.
When the evaporator reaches the target temperature, open the shutter using the knob at the top of the chamber and press “zero” on the STM-2 software.
Monitor and record the pressure (should be below 5E-6 hPa) and deposition rate (should be greater than 5 Å/s) during the evaporation.
When the temperature starts to drop, close the shutter.
Wait for the temperature to drop below 350°C before proceeding
Turn off the pump by pressing the same on/off button.
Wait 10 minutes for the turbopump blades to slow down.
Slowly turn the knob on the turbopump until the pressure starts to increase (<¼ turn). Don’t open it all the way or the rapid pressure increase will destroy the pump, which is still spinning really fast.
Wait another 10 minutes.
Once the pressure has increased to 1 hPa, open the valve a bit more. Wait until the chamber is at 1000 hPa (1 bar).
Open the chamber and place the substrate holder face up.
Use a utility knife blade to separate the chip(s) from the substrate holder.
Peel/scrape off any tape residue left on the chip.
Take inspection pictures and upload them in a new Evaporation Photos folder, then link that folder in the Evaporation Data spreadsheet.
400-500C
As previously mentioned, don’t vent the chamber too quickly. Turbopumps supposedly have the kinetic energy of a car on a highway and can “grenade”... we don’t want to find out what that means.
The sample holder may be hot. Be careful.
Use this as a backup technique when the crucible/thermocouple are out of commission. No temperature control is used, instead we manually control the current running through a tungsten filament with aluminum wire wrapped around it. This is a quicker, less accurate technique. The deposition monitor can still be used to determine when the metal is depositing on the chip, though it may be less accurate due to the rate of deposition.
Use a 3-wire tungsten filament instead of a crucible. Wrap 20 cm of aluminum wire around it, keeping away from either end.
Screw it into the terminal posts in the evaporator.
Scrape/wipe off some deposited aluminum from the glass jar so that you can see into the chamber.
Follow all other steps for pump down, except anything that mentions programming temperatures.
Turn the switch on the right of the machine clockwise so it's set to manual mode.
Use the knob above it to set current to 12A. The current is displayed on the front panel.
Monitor the filament for ~5 minutes until it starts to glow. The aluminum will also melt and wet onto the filament.
Increase the current to ~20A. It should start to glow white hot. If the deposition monitor is on, it should start to record some deposition. The walls of the chamber will also turn opaque from the aluminum. Hold for a couple minutes.
Decrease the current to 10A, then 5A, then 0A to slowly cool the filament. Wait 10 minutes.
Follow the vent procedure listed above.
Misc. notes that need to be organized:
Manually switch to evaporation procedure (based on evaporation data spreadsheet, using thickness monitor to determine when to stop)
Sam only evaporated for 1 minute, we are doing ~15?
Let it evaporate at 1100 for 3 min before moving guard to expose chip
This is because there is scum in the crucible and might be oxygen in the chamber at the beginning of evaporation that causes aluminum oxide to build on chip
Evaporation is faster than sputtering (supposedly, it might be equivalent because evaporation operates at a much lower pressure than sputtering so pump down and bakeout take a whi
HMDS Prebake Temperature
100°C
Resist Bake Temperature
100°C
HMDS Prebake Time
60s
Resist Bake Time
90s
HMDS Amount (Drops)
2
Exposure Pattern
link
HMDS Spin Speed
4000 rpm
Exposure Source
Stepper V2
HMDS Spin Time
20s
Exposure Time
8s
HMDS Bake Temperature
100°C
Exposure Dose
HMDS Bake Time
20s
Developer Type
AZ-400K
Resist Amount
2 drops
Develop Time
60s
Resist Spin Speed
4000 rpm
Developer Temperature
20°C
Resist Spin Time
30s
Patterning is the core of any micro/nanofabrication process, as it is used to mask etch and deposit steps. First we spin coat photoresist to deposit a thin layer. Then we use our maskless lithography stepper to expose our pattern in the resist with light. Finally we wash away the exposed region with developer. This leaves behind a resist pattern that is resistant to many types of acid and plasma etches. It can also be hard baked and used as a dielectric, or metal can be deposited on top of it for a lift off process. The procedure described here uses a positive resist, AZ-P4210, but negative resists also exist where unexposed areas become soluble.
See the appendix for useful resources about spin coating, our resist, and developer.
Harm to your eyes/eyesight is possible if you do not wear the right protective equipment. To shield your eyes from harmful UV-rays, everyone working with or near the stepper should wear UV-blocking goggles/glasses.
HMDS is a toxic, volatile chemical that should only be used in the fume hood.
Photoresist, while not as bad as HMDS, contains some nasty solvents and should be cleaned with acetone if it gets on anything other than chips and the spin coater.
AZ-400K developer is a strong base containing KOH. Use the appropriate precautions for working with bases. Only agitate the developer inside the fume hood to reduce the chance of droplets.
Flashlight Jig or Maskless Lithography Stepper
AZ-4210 positive photoresist (specsheet)
AZ-400K Developer
Acetone
Isopropanol
Deionized water
Evaporating dish
If you have already claimed a chip number, and opened its specific chip view data sheet, record your patterning data into that sheet. If you have NOT claimed a chip number, and have NOT begun recording data in a chip specific sheet, open this central chip count sheet, claim the next available chip number, open the blank chip view sheet for that specific chip number and record all subsequent process data into it.
Cleave the Si wafer into a ~1 cm x 1 cm square.
Dust off the wafer with the nitrogen gun
In the fume hood, hold the wafer with tweezers over the sink.
Rinse the polished side of the wafer thoroughly with acetone, then isopropyl alcohol.
The acetone leaves a residue that must be removed by the isopropyl alcohol rinse.
Blow the wafer dry with the nitrogen gun.
Even when the wafer appears dry, there may still be moisture on the edges, so dry liberally.
Inspect with the naked eye and note any marks on the wafer.
Marks present after cleaning are likely scratches that need to be documented so we observe their effect on the process.
See the Vacuum Spin Coater SOP. Remember to pipette an appropriate amount, close the lid, and turn on the vacuum.
If previous steps required cleaning with solvents, pre-bake the wafer to dehydrate the surface.
If patterning on silicon or glass, spin coat 2-3 drops of HMDS. Otherwise skip to 7.
Choose Time and RPM from patterning data sheet
HMDS bake on the hot plate at 100°C for 60 seconds.
Spin coat as much photoresist as needed to mostly cover the chip, normally 3-4 drops.
Choose Time and RPM from patterning data sheet
If chip is having trouble sticking on o-ring either: try pressing top of chip while vacuum is on with some pressure to make a better seal (use plastic tweezers)
Or, take o-ring off and clean then re-install.
Soft bake on the hot plate at 100°C for 90 seconds.
Power: Check that the projector, stage, and vacuum pump are all plugged in.
Plug the HDMI cable for the projector, the USB camera cable, and the Arduino + CNC Shield USB into your computer.
Set up the projector as an extended screen on your computer’s display settings (Win+P on Windows).
Prepare your exposure, red align, and UV focus patterns.
Your exposure pattern should be pure blue in the areas you want exposed, and black elsewhere. Include alignment marks for the next layer.
Your red align image should be completely pure red except for alignment marks that match the previous layer.
Your UV focus pattern should be completely black except for blue focus marks. Ideally these should be in a region that gets fully exposed. You may also use grayscale to avoid unintentional exposure.
Note: If your pattern images have extraneous color components, the GUI has options to enable/disable different color channels for the red focus, UV focus, and exposure pattern. Use these at your convenience.
Set up the patterning GUI util script
In the source or scripts folder, find and open config.py in your text editor of choice. If your GUI has an integrated camera implemented, set RUN_WITH_CAMERA to True. If your GUI uses a motorized stage, set RUN_WITH_STAGE to True.
Run the python script called Lithographer.py. You can do this by opening a terminal and running the command "py -3.10 Lithographer.py". Make sure you have all dependencies installed as described in Lithography Stepper V2 Build. If the program does not run, see Troubleshooting.
Move the black full-screen window to the projector (on windows, this is shift + win + L/R arrow)
Use the three import thumbnails to select the desired images, these can be changed whenever. Make sure they are correct using the small previews.
For more information about the software and its usage, click the "help" button at the bottom right of the GUI.
If you do not have an integrated GUI camera implemented and you are using the Flir Camera, open SpinView, select BlackFly S, and press the green play button. If you see horizontal bands across the live camera preview, follow the corresponding steps in Troubleshooting.
The GUI should appear similarly to below. If you do not see content on the camera preview yet, this is fine for now.
If you're doing this for the first time, it is recommended to read through the full instructions before starting. You will need to move somewhat quickly because the stepper will begin to expose photoresist in about 1 minute.
Make sure the correct pattern is loaded in the Lithographer GUI. See step 4.4 in Stepper Setup
LYFT and move the projector to the left, out of the way of the small hole in the chip holding jig.
Turn on the vacuum pump. Ensure vibrations are isolated from the rest of the stepper.
Orient the chip over the hole with its squarest corner in the corner of the alignment jig. The vacuum will suck it against the jig. Push the chip into the corner. Doing this repeatably eliminates the need to adjust theta.
LYFT and move the projector back into place. Ensure it is touching all four bolts. Be careful about not scratching the chip.
Turn the Z knob on the stage or modify the GUI stage coordinates until the objective lens is ~2mm from the chip and the image on SpinView or the GUI is in focus.
Move the X and Y axes manually, or by using the GUI. One arbitrary "step" is approximately equal to 1 micron. To avoid straining the motors/stage, test small step sizes (i.e. 1) before trying larger ones (i.e. 10 or more). The minimum reliable step size is about 8-12 microns.
If this is your first layer, find an area with minimal contaminants, plan how many exposures you will do, and in which direction you will move. Otherwise, align to your previous layer using your pattern's alignment marks.
Once you're ready to expose, move the Z axis by -54 steps (fine-tune if necessary). This will switch from focusing in red to focusing in UV.
Set your exposure time to 8000 ms.
Press show UV focus. You are now exposing the photoresist, so try to do this quickly. If necessary, make fine adjustments to the Z axis if any marks seem less in focus than others. The image above is well focused (all crosses look in focus).
Press the big red "Begin Patterning" button. Avoid bumping the table while you wait for the exposure to finish.
Press "Show Red Focus" and move in Z by +54 steps to switch back to red.
Move on to your next pattern and repeat. A good spacing between patterns is 580 steps in Y and 1080 steps in X (assuming one step per micron). This will allow you to easily find your next pattern. Take note of where you started, which direction you're moving, and how many exposures you've done so that you don't miss any patterns.
Once you're finished, press "Clear". Push the projector to the left again, and carefully hold your chip with tweezers while you turn off the vacuum.
Refresh the developer if it has been out for more than 6 hours. Otherwise skip to step 2.
Pour the used developer into the bottle labeled "developer waste"
Rinse the evaporating dish with DI water.
Pour about 30 mL of pre-diluted 3:1 AZ-400K developer solution into the evaporating dish labeled “AZ-400K 3:1”. For a sense of scale: in the dish above this should only be about 3mm tall of liquid (just enough to cover the surface of the chip)
Fill another evaporating dish halfway with DI water.
Start the timer at the same time as you drop the wafer into the developer, photoresist side up.
Agitate the chip in the developer solution with quick, small circular motions. Watch this video for proper technique.
5 seconds before the end of the timer, pick up the chip and prepare to drop it into the water. The chip should hit the water exactly at 0 seconds. Rinse well for 10 seconds.
Note that development time includes all the time that developer is touching the chip, not just during agitation
Dry off the chip with compressed air.
Look at the chip with your bare eyes to help build an intuition for the process.
Put the chip under the microscope. Connect to the camera with your laptop and take pictures of each developed pattern at 5x. If there are smaller interesting features or defects, you may take pictures at higher magnification or under dark field. Be aware that it's easy to get carried away with the microscope.
If you want to measure the length of pitch in microns (μm) then you must use only the calibrated objective.
This calibration converts pixels of the camera to microns using a calibration slide from the manufacturer. If you use a different objective, the measurement will be inaccurate.
After this is selected, measure the pitch or any other length using the line tool
In order to measure the developed pattern resolution, expose this resolution test pattern. The resolution is equal to the line pitch that is resolved in both light and dark field. Use AmScope to measure. The pitch is the distance between the center of two lines.
For each chip, batch save with the chip number as the first three characters in the file prefix. Do not change the folder. A script will upload to drive every 5 min.
Paste a link to the folder in the last column of the chip sheet.
Put the chip away in a plastic box and label it with a serial number.
See below for examples of underexposure/development, overexposure/development, non-uniformity, and optical blurring.
Right side: thicker lines and blurry edges. Left side: thin lines and sharp edges.
See this webpage for in depth spin coating theory: https://www.ossila.com/en-us/pages/spin-coating
Put on UV protection glasses.
Before placing the chip under the exposure area, turn on the flashlight and adjust the position of the UV meter’s sensor head to maximize the reading.
Depending on the battery level, this should be around 10 mW/cm2.
Turn off the flashlight, being careful not to move it out of position.
Place the chip on the plastic cap photoresist side up.
Place the mask on the wafer. Gently press down to sandwich the two together.
If the ThorLabs logo is correctly oriented then the chrome is facing you. Put that side face down towards the chip.
Try not to slide the mask on the wafer because you’ll damage the photoresist.
Place the cap with the wafer and mask on top of the UV sensor.
Turn on the flashlight for the desired exposure time.
Record the measured exposure time in the spreadsheet
Dose should be automatically calculated in the sheet based on exposure option used
If horizontal bands appear in Flir-based camera preview:
Open the Flir camera viewer.
Select the connected Flir camera model (Blackfly S) and select the green triangle. You should see a preview of the camera's output (it may appear black or grainy; this is okay).
Update the camera settings so that Acquisition Frame Rate Enable, Acquisition Frame Rate, Exposure Auto, and Exposure Time have the same values shown below:
Verify that the horizontal bands are no longer present across the camera preview. This may be easier when viewing the stage or a chip while illuminated with the projector.
Stepper V2.1 is an incremental improvement upon the existing Stepper V2 with mechanical improvements. As such, a lot of the content here will be the same as V2! The changes from V2 (and reasoning):
Rotate the optics so that the objective points downward instead of sideways
This allows using the much-improved X and Y axes of the stage, instead of X and Z, which permits higher movement resolution and repeatability
This also means that we no longer need the vacuum chuck, which means reduced vibration (and less complexity)
Unlike Stepper V1, which was cantilevered, V2.1 is supported on all sides by rigid optical mounting posts, which should avoid V1's vibration issues
Mount the optics and projector much more rigidly, using a plate offset by posts to secure the optics directly, rather than relying on the projector's case and rubber feet
This further reduces relative vibrations between the optics and stage
This also makes the DLP DMD plane and the chip plane more parallel == more consistent focus both across a single exposure and between exposures
This also decouples the structure of the stepper from the mechanical design of the projector (as Stepper V2 relies on the actual shape of the projector to work) which will allow us to change to a different projector in the future
Switch from a FLIR Blackfly camera to a Basler Ace camera, and reduce the sensor size from 1" to 1/1.2"
Not only is the Basler less expensive for an equivalent sensor, it also has a much, much nicer software suite that is distributable (a particular pain point with FLIR's)
Smaller sensor size means we're paying for less unused sensor (since any sensor area outside of the size of the projector's DMD is not used)
As a whole, these changes should improve the results we get out of Stepper V2.1 compared to Stepper V2, and the mechanical changes will set the stage for further patterning capabilities such as reliable automatic alignment. Furthermore, the decoupling of the projector from the rest of the design will in the future allow us to use different projector for further improvements.
Cost
$3,012.13
Build Time
6 hours
Optical Resolution
1 µm
Vibration susceptibility
1.2 µm (when built onto optical table)
Reticle (Exposure) Dimensions
1.04mm by 0.58mm
Exposure Time
8 seconds
Mechanical Step Size
1.5 µm
Maximum Wafer Size
1 cm x 1 cm
Size
20 cm x 20 cm x 50 cm
These remaining specs are from Stepper V2's documentation and have not been verified. The optical performance of both systems should be the same.
Developed Resolution
2 µm
Tiling Alignment Accuracy
5 µm
Overlay Alignment Accuracy
5 µm
Mechanical Repeatability
5 µm (to verify)
Total cost as currently specified: $3,012.13
TI DLP Evaluation Module
1
$1328.63
(on backorder as of May 2025)
Assorted optics and optomechanics
1
$772.89
*
10X Din Plan Objective
1
$159.00
Basler ace U acA1920-40uc
1
$609
USB Type A to Micro B locking cable
1
$3.99
19V 4.74A Projector Power Supply
1
$17.99
XYZ Stage 40mm
1
$125
NEMA 28 Steppers
3
$53.97
Arduino Uno (Elegoo)
1
$16.99
CNC Shield for Arduino V3.0
1
$10.99
Stepper Motor Drivers
1
$22.99
Shield Power Supply 12V
2
$23.98
M2.5 Screw Assortment
1
$16.99
410nm Lumiled LED
4
$27.96
Pico-spox 10pos Vertical Connector
2
$1.86
Proximity sensors (4 pack)
1
$19.90
(Not included in BOM: misc. bolts)
*For Thorlabs order: upload the file below to Rapid Order to retrieve the cart:
Currently the CAD for Stepper 2.1 is all in FreeCAD, with the files stored in this repo, but will be ported to Onshape soon for consistency.
Several parts from Stepper V2's CAD are used on 2.1:
The software (custom and GRBL) are the same as Stepper V2.
3D Printer
SMD soldering tools (solder paste, reflow oven, tweezers)
Calipers
Metric and imperial allen wrench sets
There are several mechanical parts that will need to be fabricated:
top plate x1: laser cut from acrylic or machined, from V2.1 CAD (assembly.FCStd
, part top_plate
)
adapter plate x1: 3D printed or machined, from modified V2 CAD (part adapter-DLP471EVM
)
PCB holder x1: 3D printed, CAD here. I can't make this one shared publicly due to weird permissions problems, this is a HackerFab admin issue.
for builds that are not making use of an existing optical table: bottom plate. laser cut or machined, 1 inch grid of ¼ inch holes at least 6x6 inches
This step is the same as for V2, see the instructions here.
These steps are heavily based on the steps done for V2, but some have changed.
Test the projector before we completely take it apart :)
Plug in the projector over USB and use the LightCrafter GUI software to set the LED current to 150mA. (The projector defaults to 1023 mA, which is its maximum output - our UV LEDs are not able to handle that much current, so reducing the current makes sure they don't burn out!)
Unplug all the connectors and remove the top PCB by unscrewing the standoffs.
Remove the side PCB.
Unscrew and remove the shroud by sliding it away from the rest of the optics.
NEW FOR 2.1: Remove the bolts and standoffs that hold the main projector assembly to the bottom plate. This should free the bottom assembly.
Unscrew and remove the heatsink for the front-most LED, which should be the blue one.
Disconnect the LED PCB from the cable. Heat it slightly on a hot plate or with a hot air gun to soften the adhesive and remove the black plastic housing.
Glue the black plastic piece to the DIY UV LED PCB, connect it to the blue cable, and reattach it to the optics housing. Put the heatsink back as well.
Unscrew the projection lens. That one makes things bigger, but we're trying to make things smaller. It's got to go.
Screw on the adapter plate with four countersunk M2 screws.
Use four M2.5 screws to screw on the Thorlabs SM1A53 adapter flange
NEW FOR 2.1: Do not reassemble the projector case - we will use it as-is.
These steps are heavily based on the same steps for V2, but slightly modified.
Start with the beamsplitter cube. Unscrew the set screws, remove the holder, and clip in the beamsplitter. The text ("Thorlabs") should be facing the microscope objective and camera when the holder is reinserted. Keep track of this during assembly and fix it later if necessary.
Assemble the DLP tube. From left to right, the parts in the first picture are 0.3" lens tube (SM1L03), 0.5" lens tube coupler (SM1CPL05), 0.5" adjustable lens tube (SM1V05), and 0.5" lens tube (SM1L05). You may want to remove any internal lens rings. The adjustable lens tube allows axial length adjustment and the coupler allows rotation about the optical axis.
Screw the DLP tube into the beamsplitter cube. The correct orientation is shown above, and the arrow points to the side of the beamsplitter with the text (and optical coating).
Assemble the camera tube, which similarly constructed. The parts are 1" lens tube (SM1L10), 1" lens tube coupler (SM1CPL10), 1" adjustable lens tube (SM1V10), another 1" lens tube (SM1L10), and C-mount SM1 adapter (SM1A9) (last two shown below).
Make sure this camera tube is 86.8 mm long. We calculate this number by subtracting the various component lengths from the standard microscope objective back focal length of 150mm: 150 - 17.5 (c-mount camera) - 7.6 (objective tube) - 38.1 (beamsplitter cube) = 86.8mm (NOTE: Our objective is rated for a 160mm optical tube length, but this is NOT the same as the back focal length, which is 150mm... this is a very confusing specification, see this page for what lengths are what)
Screw on the C-mount SM1 adapter (SM1A9) to the camera and the 1" lens tube. Adjust the lens tube coupler to align the camera with the beamsplitter cube.
Assemble the objective tube, which consists of a 0.3" lens tube (SM1L03), an SM1 to RMS adapter (SM1A3), and the microscope objective.
Use four #4-32 bolts to mount the beamsplitter cube to the top plate.
Mount the top plate to either your optical table (if you have one) or the bottom plate. First, mount the posts to the bottom plate/table using four 1/4-20 bolts (if you're using a bottom plate) or four 1/4-20 grub screws (if you're using the table). Then, mount the top plate on top with four #8-32 bolts.
Temporarily loosen the top lens tube coupler in order to screw that tube into the projector, and finally tighten it again with the projector mounted.
Mount the main PCB with the power connector facing downward using the 3D printed PCB holder part. Reconnect the ribbon cables and LED power cables.
Print all of the parts in the table below. Any PLA is fine. You may need to re-orient them so they print well. The stepper mounts will all need small supports in the motor flange. The X and Y axes need other supports as well.
(Folder "XYZ Platform") "X Motor Mount" "Y Motor Mount" "Z Motor Mount" (Optional, for sensors:) "Y Sensor Mount" "Z Sensor Mount"
"Base"
Three parts that connect stepper motors to the micropositioning stage x , y and z axes.
1
(Folder "XYZ Platform") "Fixed Coupler"
Press fits onto micrometer and uses a grub screw to rigidly attach to motor D-shaft
2
"Z Coupler"
Press fits onto micrometer and meshes with part press fit onto motor D-shaft
1
"Upright Chip Mount"
Provides a platform for the chip
1
A detailed 3D model of the fully-assembled stage is available in the CAD under the "XYZ Platform > Fully Assembled" document.
The video below describes the necessary components and the assembly process.
To test the proximity switches, connect them to a 12V supply. The sensor output can be left unconnected. The red LED on the back of the switches should illuminate when the front of the sensor is held within ~4mm of a metal part of the stage, which will also pull the sensor output to ground.
Note: the limit switch pin block on the CNC shield has two rows of pins. One of the rows is connected only to ground; do not connect your limit switches to that row.
The sensors should be connected through a pull-up resistor to the Arduino's 5V supply. 12V should be supplied externally.
TODO: Add picture of CNC shield!
Instructions for installing and preparing the software are available on the stepper software repository.
The video below descries the basic electronics setup and how to install GRBL and integrate the two. Make sure to cross reference this with the stepper instructions above.
Once the software is set up, the final focus alignment can be done. These steps will align the two focus planes within the stepper (the projector and the camera) to ensure that images that appear in focus on the camera are actually in focus on the surface of the chip. This is done by adjusting the tube length between the projector housing and the beamsplitter cube (the length in the image below) such that both the projected image and the chip's surface are in focus in the camera view.
Load a chip with recognizable features into the stepper (a dirty chip is a good option).
Project a red-focus pattern with recognizable features that can be used to determine projector focus.
Adjust the Z position to focus onto the surface of the chip. This means that you should ensure that the features of the chip (the dirt, most likely) is sharp, but the projected focus pattern most likely is not.
Loosen the clamp that connects the two parts of the DLP-beamsplitter tube so that they freely rotate. (the bottom circle in the image)
Loosen the locking ring on the adjustable lens tube. (the top circle in the image)
Screw the adjustable lens tube in/out while periodically checking to see if the projected image gets more or less in focus. You may need to push the optics into the coupler to ensure that the surfaces of the lens tubes are coplanar.
Once both images are in focus at the same time, tighten the locking ring on the adjustable lens tune as well as the coupler.
One of the core goals of Stepper V2.1 as compared to Stepper V2 is reduction of vibration through a more rigid frame. In order to test this, we characterized the amount of vibration that affects V2.1 using the following procedure:
Load a chip with recognizable features into the stepper and focus on it (in our testing, we just used a dirty chip)
Using the Basler Pylon Viewer software, collect a 10 second video clip of the surface of the chip. Pylon Viewer gives the video clip as a collection of .tiff
frame images.
Here is an example of a single frame:
Use ImageMagick to threshold the frames: magick '*.tiff' -channel G -threshold 75% -separate threshold.png
(this is a bulk operation on all frames).
Here is an example of a single frame:
Using an image editor, find a specific feature on the chip to focus on, and crop all of the frames to it: magick 'threshold*.png' -crop 300x300+1000+800 crop.png
Here is an example of a single frame, plus a GIF of the frames playing in real time:
Multiply the thresholded frames together to produce a footprint of where the feature moved throughout the duration: magick 'crop*.png' -compose multiply -layers merge product.png
Subtract a frame from the footprint to produce an image that shows how much the feature meandered from its starting point: magick product.png crop-0.png -compose subtract -composite diff.png
In this final image, all of the white pixels are deviations from the starting image. This allows us to count a maximum deviation: in this image (which is from when we were testing the effect of someone resting their hands on the table) there is a maximum 3 pixel deviation.
From this, we can calculate the maximum peak-to-peak vibration amplitude: each pixel on the camera sensor is 5.86 μm square, which after the 10x reduction of our objective, means each pixel in this image is 586 nm on the chip. 3 pixels then is 3 * 586nm = 1.8 µm.
We also ran another test of "ideal" conditions, in which there was no external vibration added to the stepper table, which had 2px deviation. This leads to the result being 1.2 µm.
This section is a reflection by me, Sky.
The core design goal of V2.1 was pretty much a mixture of "make it less susceptible to vibration" and "make it less janky". I think I mostly succeeded in this department: although I lack proper numbers on V2's vibration issues, I am confident in asserting that V2.1 fixes them (mainly because you could visually see the vibration occurring on V2's camera, and you can't anymore on V2.1), and now that we have a rigidly mounted frame, the slop from the projector moving around on the table is gone.
However, there's still definitely some improvements to be made. For one, I think that the projector should probably be more directly supported - I didn't end up adding a direct support for the projector this semester because it didn't appear to be necessary, but I think this could further reduce vibration issues. This shouldn't be particularly hard because the disassembled projector has very convenient standoff mounting points directly on it.
Another improvement to make is to fix up the centering of the image on the camera: currently, the hole on the adapter plate is perfectly centered to the part's center, but it appears that the projector's actual image is slightly off to one side. This wasn't really an issue when the camera had a larger sensor, but now that it's smaller it very slightly cuts off part of the image. This only require a small change to the adapter plate to correct.
Finally, one of the biggest issues that remains with the stepper is that the whole projector situation is not ideal: specifically, the fact that all of our existing litho setups have used projectors that hook up to a computer monitor output leads to a bunch of undesirable effects from the OS taking over (like unexpected popups showing up and getting imaged onto the chip). Another issue with the projector is that it's really not ideal to UV-mod a color projector: the projector is designed to always be emitting all 3 color channels, which means that we're outputting a small but noticeable amount of UV even when not actively imaging. Also- the DLPDLCR471TPEVM projector used on V2 and V2.1 is currently (May 2025) out of stock everywhere in the world, which is very bad for reproducibility. One thing we could do to solve all of these issues is to create a custom projector design which gives us more control over UV emissions and the image pipeline. I have written up an essay on the design process and ideation behind a custom projector here.
This page contains information about the state of the ALD project at CMU as of December 2024. Please note that many of the system components are outdated as of the May 2025 progress update.
The goal of the DIY substrate heater is to develop a cost-effective, replicable ALD wafer heater to support thin-film deposition processes for materials research. Commercial solutions for wafer heating are often prohibitively expensive, making this tool an accessible alternative for Hacker Fab and other researchers. Existing solutions do not meet specific size, temperature, or vacuum compatibility requirements at an affordable price. By designing this tool, we contribute an open-source option tailored for ALD processes. This supports the open-source nature of Hacker Fab by enabling other researchers or users to replicate and build their own wafer heaters. It allows for a more cost-effective approach to ALD, contributing to the open-source knowledge base by providing detailed, replicable build instruction.
Heating Element Setup
Use 22-gauge nichrome wire to create a heating coil.
Arrange the wire in a zigzag pattern to cover the area of the heating plate (approximately 4.5-inch diameter).
Place the nichrome wire between two boron nitride plates (each 0.1-inch thick). Boron nitride provides electrical insulation while allowing efficient heat transfer.
Construction of Heating Plate
Mount the heating element (nichrome wire and boron nitride assembly) onto an aluminum disk (4.5-inch diameter, 0.1-inch thick). The aluminum disk acts as a heat spreader, ensuring uniform heat distribution to the wafer.
Secure the boron nitride plates with aluminum bolts to ensure tight contact and structural integrity.
Ensure that the wire ends extend outside the assembly for electrical connections.
Assembly and Connections
Position the aluminum plate so that it faces upward, serving as the surface for the wafer.
Connect the nichrome wire ends to a DC power supply. This power supply should allow adjustable voltage (up to 30V), which will control the current and regulate the temperature of the nichrome wire.
Attach a thermocouple to the aluminum plate for temperature monitoring. This will help ensure the wafer reaches and maintains the target temperature (300°C).
Operation
Gradually increase the voltage on the DC power supply to heat the nichrome wire. Use the thermocouple reading to fine-tune the voltage for achieving the desired temperature.
Specifications
Temperature Range: 300°C to 500°C
Material Compatibility: The heating element is designed to be compatible with a 4-inch wafer and is placed between aluminum and Boron Nitride plates.
Voltage: The heater operates with a maximum input voltage of 30V.
Power Requirements: The heater needs a stable DC power source capable of delivering sufficient current to reach the target temperature.
Thermal Uniformity: The temperature should be uniformly distributed across the wafer, verified using a laser thermometer to ensure consistent heat application during ALD processes.
Size: The heating element is sized to fit a 4-inch wafer, ensuring full coverage.
Parameter
Value
Wafer Diameter
4 inches
Temperature Range
300°C-500°C
Power Supply Voltage
30V (max)
Heater Material
Nichrome wire (22 gauge)
Heat Transfer Medium
Boron nitride
Structural Material
Aluminum disk
Voltage and temperature data
Wire Length(in)
Temperature(C)
Voltage(V)
Time to reach temp(s)
14
650
14
35
14
295
7
30
14
300
8.5
30
14
400
8.5
40
Select Vacuum-Compatible Feedthroughs
Feedthroughs are specialized components designed to pass electrical, thermal, or other signals through a vacuum boundary. For your heater, an electrical feedthrough is required.
Key Features:
Vacuum Compatibility: Ensure it is leak-tight, rated for the vacuum level (e.g., high vacuum or ultra-high vacuum).
Temperature Compatibility: The feedthrough must withstand high temperatures near the heater.
Electrical Capacity: Rated for the current and voltage requirements of the nichrome wire.
Common Materials:
Metal-to-ceramic seal feedthroughs: These use materials like stainless steel and alumina ceramics for high durability and vacuum compatibility.
Glass-to-metal seals: Suitable for lower voltage and current applications.
Vendors:
Feedthroughs are available from companies such as:
MDC Vacuum
Kurt J. Lesker
Conax Technologies
Allectra
Mounting the Feedthrough:
Install the feedthrough into a flange on the vacuum chamber (e.g., CF, KF, or ISO flange systems).
Use O-ring seals (Viton or Buna-N) for lower vacuum applications or indium gaskets for ultra-high vacuum.
Inside the Chamber:
Connect the nichrome wire to the internal terminals of the feedthrough using vacuum-compatible connectors (e.g., nickel or stainless steel).
Ensure insulation with high-temperature, vacuum-compatible materials such as ceramic or polyimide.
Outside the Chamber:
Connect the power supply to the external terminals of the feedthrough.
Use shielded cables if electromagnetic interference is a concern.
Materials Required
Nichrome wire (22-gauge)
Boron nitride plates (2, 4-inch diameter, 0.1-inch thick)
Aluminum disk (1, 4-inch diameter, 0.1-inch thick)
Thermocouple
Bolts and nuts (compatible with boron nitride and aluminum plates)
Insulating washers (if needed, for vacuum compatibility)
DC power supply
Wire connectors
Heat-resistant adhesive (optional for securing wires)
Assembly Steps
Step 1: Preparation
Cut the wire to the appropriate length (as per your design, typically around 14 inches).
Step 2: Setting up the Heating Element
Wire Arrangement:
Lay one boron nitride plate flat on a stable surface.
Arrange the nichrome wire in a zigzag pattern across the surface, ensuring even coverage. Leave wire ends long enough to extend outside the assembly for electrical connections.
Layering:
Place the second boron nitride plate on top of the first, sandwiching the nichrome wire between them. Ensure the plates align perfectly.
Step 3: Mounting onto Aluminum Plate
Place the boron nitride and nichrome assembly onto the aluminum disk.
Align the pre-drilled bolt holes in all three layers (aluminum, boron nitride plates).
Insert bolts through the assembly, using insulating washers if needed to maintain electrical isolation.
Secure the bolts with nuts, tightening evenly to ensure good thermal contact without over
Step 4: Electrical Connections
Attach the thermocouple to the aluminum plate using thermal paste or tape for accurate temperature monitoring.
Use a multimeter to check for electrical continuity and verify there are no short circuits.
Attach the nichrome wire ends to the wire connectors and connect them to the DC
Step 5: Final Assembly
Seal the feedthroughs to maintain vacuum integrity.
Route wires for the power supply and thermocouple through vacuum chamber feedthroughs.
Use vacuum-compatible connectors.
Position the entire assembly inside the vacuum chamber
Future Testing Tasks
Initial Power Testing:
Gradually increase the voltage while monitoring the temperature using the thermocouple.
Record the time required to reach target temperatures (e.g., 400°C, 500°C).
Thermal Uniformity Testing:
Use a thermocouples to verify uniform heat distribution across the aluminum plate.
Vacuum Compatibility:
Test the system under vacuum conditions to ensure no leaks in the feedthroughs and proper operation of the heater.
Optimization of Wire Length and Voltage:
Experiment with different lengths of nichrome wire to find the optimal balance between power efficiency and heating uniformity.
Long-Term Durability Testing:
Run the heater for extended periods to evaluate its stability and reliability.
Temperature Controller Integration:
Test the system with a PID temperature controller to automate heating and maintain stable temperatures during operation.
Documentation of Results:
Plot temperature vs. time, power vs. temperature, and voltage vs. temperature graphs based on experimental data.
Note any issues or observations to refine the design.
Challenges
Wire Placement: Achieving uniform heating is dependent on precise placement of the nichrome wire.
Vacuum Constraints: The vacuum environment imposes limitations on assembly and temperature uniformity
Optimization of Power and Heating Time: There is a need to balance the wire length for optimal performance. A longer wire enhances heating uniformity but consumes more power and increases the time required to reach the target temperature.
Future Improvements
Alternative Materials: Testing circular mica heaters or other heating elements for improved thermal response times.
Optimization Studies: Verifying whether the aluminum disk is essential. Direct placement of the wafer on boron nitride could simplify the design without compromising functionality.
Enhanced Efficiency: Refining nichrome wire routing to minimize heat loss and enhance system efficiency.
Parameter Tuning: Finding the sweet spot between nichrome wire length and power consumption to maximize performance while minimizing energy usage and heating time.
System Design
For the delivery system we chose VCR connections for the gas lines in our vacuum system to ensure a reliable, leak-tight seal, essential for maintaining system integrity. These metal-to-metal sealing connections are ideal for ultra-high vacuum (UHV) and high-purity gas applications, reducing the risk of leaks, outgassing, and contamination. Their robust design and reusability also made them a practical choice for our setup, where frequent assembly and disassembly are required. We use a two-stage regulator at the carrier gas cylinder as it ensures consistent and precise pressure control, reducing the high-pressure gas from the source to a stable, manageable level for downstream components. This stability is essential for maintaining uniform gas flow in the system. The gas at the correct pressure is then delivered through a mass flow controller that regulates the flow rate of gases entering the system, providing precise control to meet process requirements. It ensures accurate delivery of gases to the precursor manifold. We are receiving a precursor manifold having three Swagelok ALD3 valves donated by the Claire & John Bertucci Nanotechnology Laboratory at CMU. The precursor manifold serves as a distribution hub, directing gases to valves. It includes multiple inlets for the precursor bubblers and an outlet to lead to the chamber, enabling the mixing or isolation of various precursors before delivery to the reaction chamber. The ALD valves in the manifold are high-speed, precise valves that control the pulsed delivery of precursors into the vacuum chamber. These valves are critical for achieving the sequential gas flows required in ALD processes. The line finally leads to the vacuum chamber designed to be a cross-flow reactor.
Components requiring connection for delivery line:
Chamber precursor inlet: KF25 flange fitting
Precursor Manifold:
Inlet: ¼” female VCR
Outlet: ¼” male VCR connector
MFC inlet and outlet: ⅛” NPT female connectors
Dual stage regulator: reduces cylinder pressure (~2000 psi) to operating pressure for Mass Flow Controller (<70 psi)
Components/Hardware Requiring Control
Parts to be controlled:
Mass Flow Controller - Controls the amount of carrier gas flowing through the tubing per time. Requires an analog signal 0-10Vdc and power supply of 12-24 Vdc, 250mA
ALD valves - Controls the duration for which precursors are open to the carrier gas line. Works on a pneumatic valve that is actuated by solenoids. Requires N2 gas input for pneumatic actuation and square wave signal of 24 Vdc with wave width equal to valve open time.
Delivery line and substrate heaters - Controls the temperature of the gas lines and substrate holder surface. Requires control of voltage and current being delivered to the heating element to modulate based on reading from the thermocouple.
Throttle Valve - Controls the pressure of the vacuum chamber by modulating the evacuation rate of the pump based on current pressure.
Outline of controls
Control parts using LabVIEW and RaspberryPi (given the number of different signals and components we decided to use a Pi instead of using an Arduino)
LabVIEW is a graphical programming environment designed for system control, data acquisition, and automation. Easy to use for engineers and it provides the ability to quickly prototype control systems for complex setups.
RaspberryPi is great for handling low-level hardware tasks, such as controlling valves, relays, and sensors. It can read analog or digital signals, control actuators (e.g., motors or heating elements), and interact with sensors that LabVIEW can’t interface with directly.
Progress
The ALD valves are controlled based on their status in a truth table, where each row corresponds to a specific step of the ALD cycle. The truth table defines the ON/OFF state of each valve, with True indicating the valve is ON and False indicating it is OFF. The appropriate row of the table is accessed dynamically, depending on the current step of the cycle.
To implement this control, a relay board is used to interface the ALD valves with a 24V DC wall adapter. The relay board switches the power supply to the valves according to the truth table commands, ensuring precise timing and coordination for each step of the ALD process. For depositing Indium Tin Oxide (ITO), which requires two metal precursors, the ALD valve operation is determined by the desired ratio of the two precursors. To achieve this, a sequential block is used to calculate the current cycle number in the ALD process. Based on the cycle number and the specified precursor ratio, the sequential logic selects which metal precursor valve to open. This setup allows for reliable and automated control of the gas delivery system during operation.
To control the heating elements, temperature data is collected from thermocouples at a specified sampling rate and frequency using a DAQ (Data Acquisition) system. The measured temperature readings are averaged to calculate a mean temperature, which provides a stable input for feedback control. The mean measured temperature and the target temperature are then fed into a PID (Proportional-Integral-Derivative) controller. The PID computes the required voltage adjustment to maintain the target temperature by supplying the appropriate voltage to the resistive heating elements. This feedback loop ensures precise temperature control, critical for maintaining process stability and uniformity during operation.
We are still in the process of testing this and are currently figuring out how to use DAQ hats on Raspberry Pi to collect the data at a given frequency.
Challenges
RaspberryPi 5 does not come with Python 2; hence, getting LabVIEW to run on it is still something we are figuring out. (link)
Motivation
The vacuum chamber and the vacuum pump are the foundation of the ALD machine, providing the controlled environment necessary for thin-film deposition on the 4 inch diameter wafer. Initially, the idea of machining the vacuum chamber in-house was considered, but quickly decided against due to the precision needed to manufacture a reliable vacuum chamber, and given that the ALD machine project is on a quickly-moving timeline, This project addresses these gaps with a cost-effective and adaptable design, which was easily outsourced and purchased, for academic and research settings.
Technical Requirements
Vacuum Pump Range: The vacuum pump and chamber should be able to reach mTorr levels of vacuum to reach precursor baseline pressures.
Temperature Requirements: The vacuum chamber should be able to withstand temperatures up to 500°C, in order to align with precursor pressures and thermal evaporation benchmarks, and to keep the wafer at 300°C
Vacuum Chamber Material: Aluminum for affordability and compatibility with high vacuum and temperature conditions.
Port Configurations: Modular design to accommodate multiple gas inlets and precursor integration.
Design Process
With the technical requirements in mind and once the precursors were selected (and ITO was decided upon), the design process for the vacuum pump and vacuum chamber evolved quickly over the first half of the semester. Originally, the vacuum chamber had a technical requirement of being made of only stainless steel, avoiding aluminum due to concerns about compatibility with the gases. Eventually, aluminum was reconsidered to be a vacuum chamber material option, after double-checking its compatibility with the gases.
Vacuum Pump Selection + Design Choices
For the vacuum pump, extensive research was conducted to identify a pump capable of maintaining the desired vacuum range without overloading the budget. It was necessary to ensure compatibility with the fact that it would be used with gases as well. Despite initial hesitation due to the high cost of some components, we finalized the order for the Edwards nXDS6i Dry Scroll Vacuum Pump, as it has been used for other DIY ALD machines in the past and is known to be reliable for these purposes. This step was crucial to ensuring the entire vacuum system could function as intended without compromising the ALD process's precision.
Vacuum Chamber Selection + Design Choices
A major milestone was sourcing the 9x9x9 modular vacuum chamber from Ideal Vacuum, initially inspired by using the 6x6x6 Ideal Vacuum chamber that’s used for the thermal evaporator. We noticed that the inside temperatures of the thermal evaporator reach even higher temperatures than needed for ALD, even though on the Ideal Vacuum site, the specs say it isn’t rated for that high of a temperature. This milestone, though, was guided by its versatility, as the modular port placements allowed for customizable configurations. Additionally, this chamber offered a practical balance between cost and performance, addressing both budget constraints and functional needs. To further refine this selection, the 9x9x9 pre-selected component kits were compared with the individual necessary components (with itemized lists of those individual components), weighing the trade-offs between cost savings and assembly complexity. All individual components ordered are listed in the BOM shown in the Appendix.
As shown in the BOM for vacuum chamber components, the 6 sides to the modular vacuum chamber from Ideal Vacuum which were ordered, with reasoning as to why, were:
One (1) plate with a viewing window and door hinge, to easily place and remove the 4” diameter wafer.
One (1) plate with four (4) KF16 inlets in order to connect the pressure gauge, temperature probe, and electrical lead. Each of those three components connected to the ALD account for one KF16 inlet, leaving a single KF16 inlet covered by a blank flange, and reserved for if future leads are needed.
Two (2) plates with single, centered KF25 inlets, to be placed on the top and bottom of the cube, with the top inlet being the gas inlet, or the gas entering the vacuum chamber, and the bottom outlet being the vacuum chamber’s connection to the dry scroll vacuum pump and throttle, or where the gas will exit the chamber. This top-to-bottom placement is to prompt laminar flow of the gases and increase chances of even deposition throughout the wafer. The gas flow is depicted below.
Two (2) blank plates
Vacuum Chamber + Vacuum Pump Baseline Test
As of the end of the Fall 2024 semester, the vacuum chamber has been fully assembled, using only parts provided by Ideal Vacuum including Viton o-rings and o-ring fittings, and connected to the pressure gauge and vacuum pump. It’s important to note that this vacuum chamber assembly is only temporary, as Viton is not compatible with the gases used for the Hacker Fab ALD machine. A baseline vacuum test was conducted with the Viton o-rings overnight to see how much of a vacuum could be achieved with the standard assembly, and a rough vacuum of <100 mTorr was achieved. There are numerous reasons as to why the vacuum chamber wasn’t able to reach the single digits of the mTorr range during this baseline test, such as the fact that the pressure gauge we used was powered by a cord rated for half of the required voltage to power the pressure gauge.
Vacuum Chamber O-ring Material Compatibility
Since incompatible Viton o-rings were included with the hardware kit for assembling the Ideal Vacuum chamber, Aflas is currently being considered as a possible replacement option, due to its compatibility and temperature rating. Extreme Viton could also be considered, as it’s also compatible, but for o-ring replacement testing, only Aflas materials have been ordered. Since the extra large o-rings that are used to seal the vacuum chamber plates themselves (not the feedthrough ports) are so specific in dimension that they would need to be custom-made, which is a costly to schedule and budget, Aflas cording with similar thickness was ordered and can be cut to size. Aflas o-rings for KF16 and KF25 fittings were also ordered from McMaster to eventually replace in the vacuum chamber. The efficiency of replacing the Viton seals with Aflas cording and slightly smaller Aflas o-rings has yet to be determined and tested.
Next Steps
Replace incompatible Viton o-rings with Aflas o-rings to ensure compatibility and improve system reliability.
Conduct a new baseline vacuum test using Aflas o-rings for comparison with initial tests conducted with Viton o-rings.
Install a KF25 elbow-shaped connector to reduce the tubing bending radius and prevent stress on connections.
Future Improvements
Design some type of stand below the vacuum chamber to incorporate additional space beneath it, allowing better accommodation of stiff tubing leading to the vacuum pump, if KF25 elbow connector still leaves a tight fit.
Explore alternative compatible sealing solutions or materials to simplify the process of replacing the Viton o-rings, if the Aflas cording and current Aflas o-rings are insufficient in reaching vacuum specs.
Optimize the vacuum chamber setup to ensure sustained performance at rough vacuum levels (<100 mTorr).
Motivation
Safe and efficient storage and handling of ALD precursors are critical to ensuring consistent thin-film deposition. An existing precursor storage solution for the specific requirements of Hacker Fab’s ALD machine doesn’t exist on the market, at least not at any reasonable price point. While other DIY ALD machines don’t include any housing for the precursor ampoules at all, and are simply attached to only the ALD valves and tubing themselves, those same DIY ALD machines normally don’t handle pyrophoric precursors. Since the Hacker Fab ALD Machine is for ITO deposition purposes, and the precursors aren’t as inert, designing a precursor delivery storage, which the gases can travel through, and be directly connected to an exhaust, is a good preventative measure to take (to minimize risk with possible combustion/flames).
Technical Requirements
Storage Capacity: Holds the precursor manifold with three ALD valves and three gas ampoules. Potentially has room to store the mass flow controller at some point when incorporated:
Inlets and outlets: Contains holes to attach proper fittings for an exhaust connection, carrier gas inlet, and a gas outlet.
Materials: Made out of aluminum for precursor compatibility.
Miscellaneous: Ampoules should be easy to access in order to for simpler replacement when necessary.
Design Process
The precursor storage design process began by defining the requirements for safely and efficiently housing three precursors, each with dedicated gas lines and secure connections to the vacuum chamber. Aluminum was selected as a precursor delivery storage material for its corrosion resistance and ease of machining, ensuring compatibility with the chemicals and the system's operational conditions.
Precursor Case Ideation Document: This document explains the initial thought and design process for this delivery storage.
The initial design concepts, shown below, were sketched to visualize how the ampoules would be held and integrated into the vacuum chamber setup. These sketches evolved into more detailed CAD models (shown below), created in SolidWorks, with a focus on designing for sheet metal fabrication, since that would be the most cost effective. The flat pattern designs incorporated fold lines for easy assembly, allowing the components to be cut using waterjet or manual machining methods.
Initial conceptual design sketches of the precursor delivery storage system
Initial CAD screenshots of the precursor delivery storage system assembly (left), and an example of one of the components from the assembly folded and unfolded (right)
Since the TechSpark makerspace's water jet was out of order, we considered outsourcing the water jetting for the sheet metal. An initial quote from Atomatic for waterjet cutting parts at $130 per piece (ridiculously overpriced) prompted a pivot to sourcing 5052 Aluminum sheet metal with a thickness of 0.05”, from McMaster-Carr, since 5052 Aluminum is an easy-to-bend metal. I was able to begin the fabrication and assembly process and complete fabrication of 3 components, leaving the door and manifold shelf to be fabricated and assembled next semester. Using the CAD designs as a rough guide, and adding a few extra inches in every direction to ensure there was enough space, I cut the sheet metal to size using either the shearer or the bandsaw. I then bent right angles where necessary using the bending machine at Techspark, and then holes were drilled and parts were riveted together manually using aluminum rivets. While this reduced costs drastically while maintaining functionality, the fabrication and assembly process (mainly the manual riveting) was extremely time consuming and physically exhausting.
Images of the fabrication and assembly process of the first few components of the storage assembly
Due to time constraints, we weren't able to complete the entire assembly, but believe that this is for the best, as I’m sure many design improvements will be implemented next semester. One example of this is for redesigning the shelf which holds the manifold and ampoules. Next semester’s ALD team should consider whether or not the heating block is either usable (we don’t know if it’s programmable currently), or if heating tape would suffice. Due to the heating block’s heft (it’s made out of solid metal), it would be beneficial to consider removing it if possible. Shown below are a few quick sketches of possible shelf redesigns depending on if the manifold’s heater block is incorporated or not.
Conceptual sketches displaying the various options for shelving manifold, ALD valves, and precursor ampoules
ALD-precursor-storage: This folder contains all SolidWorks CAD files and assemblies used to plan the storage design more accurately, get outsourced water jetting quotes, and to begin the in-house fabrication process.
Atomatic quotes: This folder contains screenshots of the outsourced waterjet quotes from Atomatic, which we decided not to go through with, but are reference points as to why we decided to attempt manufacturing in-house.
Next Steps
Complete the remaining assembly for the precursor delivery storage system, addressing any precision or alignment issues from the manual fabrication process.
Evaluate the usability and efficiency of the manifold's heating block in the current setup to determine its suitability for sustained operation.
Investigate alternative heating solutions, such as heating tape, to replace the manifold's heating block if it proves impractical due to its weight or solid metal construction.
Future Improvements
Refine the design for easier replication and modularity, considering lessons learned during manual fabrication.
Reassess shelf configurations in the precursor storage system to accommodate potential design changes stemming from heating block decisions.
Incorporate design elements that improve manufacturing precision and reduce the labor-intensive nature of assembly.
Hacker Fab DIY IC packaging documentation - as of May 21st, 2025.
The overall cost of the package itself is $108.10, the total R&D cost of $195.09.
The table below is the BOM packaging, which can be found here:
Hacker Fab currently utilizes the probing station available at CMU for electrical characterization of its ICs, but these machines have proven difficult to both access and operate. Consequently, the team is developing a DIY probing station at a much lower price in hopes of bringing this capability in house. However, as our ICs eventually get more complex and start to increase in IO counts, characterization with a probing station will also require more time and effort.
In anticipation of this challenge, we are also developing a process for packaging our ICs with the EDA team in order to accommodate for the increased IO counts in order to further close the loop on the team’s process steps, and decrease the time to test more complex ICs in the future.
The main purpose of packaging is to protect the IC from the outside world while still making proper electrical connections to other devices. Packages are often standardized into different form factors for different IO counts and applications.
Many packages in industry are designed for protection against environmental factors such as moisture as to prevent damage to the IC. Materials choices are also important especially for high performance ICs that have high heat dissipation. This means that materials used must have compatible coefficients of thermal expansion in order to prevent thermal stress from damaging the package and chip. They must also be designed to reject sufficient heat from the chip in order to prevent thermal runaway.
The varying requirements for different applications have led to many different packaging technologies in the packaging industry that each have trade offs with each other. In recent years, as the semiconductor industry encounters technical and economic limitations to higher performance gains on the ICs, advanced packaging technologies have emerged as a way to continue improving overall device performance while maintaining economic viability.
With all that said, packages being developed at Hacker Fab will have much less technical requirements due to simpler devices on our ICs and our goal of creating easily replicable solutions.
The main use for packages made this semester will be to use the analyzer to perform tests on IC devices, and so all packages will be designed to port to the analyzer.
Typical semiconductor packaging process goes through the following steps:
Wafer-level probing for known good die (KGD)
Wafer back grinding
Wafer dicing
Die pick & sort
Die attach to package
Wire bonding or flip chip bonding
Package encapsulation
Packaged die test
Final assembly onto printed circuit board (PCB)
(Hacker Fab: Packaging, Robert M. Radway, 2024)
Due to our aim for simplicity and replicability, we will not need all the steps to this process flow, and the packaging method will determine how many process steps are needed for packaging.
Two main candidates were considered for Hacker Fab:
After evaluating the tradeoffs and benefits between the two methods for packaging, we settled on chip on board mainly due to its less complex manufacturing process and better replicability.
The design matrix for this choice is outlined below:
The major concerns regarding manufacturing complexity is mainly due to the lead frame and encapsulation. With a chip on board, the lead frame can be eliminated, reducing the step of machining small patterns on a piece of thin metal. The encapsulation is also made easier by the fact that the PCB board itself can be used as the bottom part of the encapsulation, requiring only a cap to protect the chip.
Working with the EDA team, we first had to decide the IO counts that the prototype package will accommodate. This was ultimately locked down at 16 pins due to its potential for two main tests that we would like to run:
As explained before, wire bonding connects the IC’s IO pads to metal pads on either the PCB or leadframe, but how is this done?
There are two main methods for wire bonding:
We are planning on using wedge bonding for our packaging due to its higher availability on campus and smaller bond footprint allowing for more margin of error during bonding.
The machine we are planning to use is the manual wire bonder in the CMU MEMS lab (). This is the wire bonder in the lab that is the easiest to train on, but if more precision is needed we may pivot to other wire bonders in the lab that offer semi automatic operation. Though the use of lab equipment on campus harms the replicability of this project, the team is hoping to use experience gained from our DIY Probe Station to eventually develop a DIY wire bonder at a much lower cost than on the market.
The wire material we are planning to use is aluminum for a number of reasons. Since the team has the most experience with aluminum thermal evaporation, using aluminum wire to bond to aluminum pads on the IC will pose the least risks to defects, especially given our uncertainty of potential failure modes on the IC side. Wedge bonding with aluminum also has much higher mechanical reliability than gold and requires lower temperatures, thus further lowering the failure risk.
Based on recommendations from the lab, we have given some IO pad design parameters as well. The aluminum bonding pads are set to be at least 200µm by 200µm and at least 3µm tall, with about 300µm to 500µm spacing between pads. The EDA team has also designed the resistor pattern with multiple sizes of bond pads to determine the size that will yield the most performance for our team.
The package itself is a smaller piece of PCB with the aforementioned 16 IO pins + 4 GND pins in a dual-inline configuration. The IO pads are also dual-inline on either side of the chip footprint.
The encapsulation was planned to be a 3D printed cap secured with bolts to ensure protection of the IC and wire bonds. The bolted connections will allow for easy removal of the cap to inspect for defects and wire bond failure, as well as giving us the option to redo any failed wire bonds. Since we do not expect to use the test chips for extended periods of time or in harsh conditions, moisture protection with hermetic sealing is not considered within scope.
Finally, I exported the board design and designed a 3D printed cap around the chip. The cap uses four M2 screws and nuts for mounting and has 7.5mm of of vertical space for wire bond loop heights.
For the sake of simplicity and cost, we will be using readily available adhesives to perform the chip attach to board step. This should not pose major concerns especially due to the fact that these test packages are not expected to encounter significant thermal loading and since the team is not planning on doing the wafer thinning step, risk of chip cracking is minimal.
The motherboard is a larger PCB that can accommodate two packages by accepting them with female breadboard headers. Has a 30 pin connector to meet the IO needs of the Analog Discovery 3. This approach will allow us to easily swap out packages without having to spend extra time redoing all the connections to the analyzer.
Once the board was finished, the step file was imported into CAD, and 4 M3 screw mounted bumpers were added as well.
Initially the PCBs were planned to be milled in house, but this was later changed to outsourcing for the following reasons:
Better replicability and access for others, PCB mill is not accessible to everyone
Reasonably low cost to outsource PCB manufacturing
More design freedom, not limited to to two layers and can add vias
For Al wire bonding, PCB bonding pads with ENIG (Electroless Nickel Immersion Gold) plating is recommended for high bonding quality
Source:
Thus we outsourced board manufacturing to JLC PCB.
The encapsulation was able to be printed in house out of ABS easily.
The remaining components were sourced from Digikey and McMaster-Carr.
Once the PCBs arrived, a combination of solder reflow and hand soldering was used to connect all the components.
Finally, the resistor chip #656 from the EDA team was adhered with double sided tape and wire bonded to the package board. Due to time constraints, the other resistor chip #657 was not wired. The NMOS chip was not fabricated in time.
Due to manufacturing errors, only four resistors on the chip were good for wire bonding for resistance testing.
We found that setting the bonding power to 300 yielded good results. Due to the asymmetry of chip pad placement the two sides don’t have identical wire lengths (~5mm vs ~7mm).
During the wire bonding process, there were multiple issues:
PCB pads are too far away from the chip
Longer bonds are much more difficult to do
PCB pads are also too spaced out compared to the chip pads, leading to longer wires and mismatch in intended pinouts
Bonds should’ve been made before putting in the headers for more rigid fixturing
Lack of rigidity results in loss of ultrasonic energy
Double sided tape is also not ideal for the same reason
Lastly, the encapsulation and hardware are installed, completing the package.
While waiting for the PCBs to arrive, I did a few wire bonding tests with spare chips from the lab to identify likely failure points in the wire bonding process
Conclusions from the test:
Confirmed that thin and small aluminum pads are very susceptible to flaking off the chip
The most likely failure points were at the wedges where bonding occurs, likely due to the sharp geometry creating high stress points
While the original goal was to get IV curves with the Analog Discovery 3, we were not able to do this in time due to needing a specific current-power adapter. As a result we took resistance measurements with a multimeter on the four resistors and used those values for analysis.
For this set of resistors, the chip pads are 400 x 250 x 3 um in dimension, and the n-channel resistors have widths of 75, 150, 225, and 300 um.
Using this data, I was able to plot measured resistance to the reciprocal of channel width to observe a linear relationship. The intercept represents the total parasitic and contact resistances from the wire bonds and chip pads:
Additionally, the pure contact resistance from the bond points and chip pads can be extrapolated by subtracting the parasitic resistance from the Al wires:
The resistance plots are as follows:
From the analysis, the following is concluded:
Total parasitic resistance per connection: 11 Ω
Contact resistance per connection: 10.6755 Ω
Total aluminum wire parasitic resistance: 0.649 Ω
The project has proven successful over the course of the semester. Despite not all the initial project deliverables being met, I was able work towards a successful packaging solution for Hacker Fab and prove its functionality.
Below are actions and improvements for future semesters:
Wire bond chip #657
Obtain IV curves from both resistor chips with the Analog Discovery 3
Package NMOS chips and verify their characteristics with the Analog Discovery 3
Modify Altium footprint to close the gap between chip and PCB pads for easier wire bondin
Additionally, below are potential projects to look into for future semesters:
DIY wafer dicer that allows for more accurate chip sizes
Revisit chip in package through metal plating on resin 3D prints
Flip chip on board packaging with nickel plated aluminum pads and solder reflow
This semester’s progress serves as a first step to packaging for metrology at Hacker Fab, and hopefully as we make progress toward more complex devices packaging can facilitate efficient testing for those devices.
Hacker Fab: Packaging, Robert M. Radway, 2024.
Chapter A: Wire Bonding, Nanoscale Research Facility, University of Florida, 2021.
Capabilities: ENIG Plating for Aluminum Wedge Wire Bonding, PCB Trace. (figure 11)
CHIP ON BOARD / WIRE BONDING, Würth Elektronik eiSos GmbH & Co. KG.
Analog Discovery 3, Diligent. (figure 2)
The power of packaging, Texas Instruments. (figure 3)
The Mystery Behind The Globs Of Epoxy, HACKADAY. (figure 4)
Fatigue Design Criteria, Encyclopedia of Materials: Science and Technology, R.I. Stephens. (figure 7)
High precision capillary produced with by HIP processing and polishing technology, Orbray. (figure 8)
West Bond Wire Bonder, Carnegie Mellon ECE Department. (figure 9)
Metric
Requirement
Mechanical strength
Withstand regular handling
Signal integrity
Minimize parasitic resistance between IC and package
Portability
Adaptable to different ICs and ease of package replacement
Integration
Successfully connect to Analog Discovery 3 analyzer
Replicability
Minimize hard to access material and processes
Cost
Minimize cost where possible
Complexity
Manufacture Time
Chip Protection
Damage Risk
Portability
Total
Chip on Package
0
0
1
0
1
2
Chip on Board
1
1
1
1
1
5
Width
Resistance
75 um
1168 Ω
150 um
579 Ω
225 um
408 Ω
300 um
311.5 Ω
Our design was based on Sam Zeloof and Huygens Optics’ versions of this tool. Sam repurposed a vertical microscope for structure and laid out optics experimentally with a 5x reduction objective, whereas Huygens built his own horizontal structure, and used more involved optics with a 20x reduction. We took the middle road by combining a scratch built structure with ThorLabs optical and optomechanical components to ensure alignment. We use a 10x objective for demagnification. We also opted for a different mechanical XYZ stage.
Cost
$5,820.10
Approximate Work Time
5 hours
Optical resolution
~10 µm
Alignment accuracy
5 µm
Litho Stepper Software
Water jet capable of cutting ¼” aluminum plate
Manual milling machine and small end mill
Drill
Screwdriver and metric allen key sets
Glass scribe (tungsten carbide or diamond)
3+ large C clamps or similar.
Link to spreadsheet - edit sheet then update or copy table here
Total Cost: $5,820.10
Name
QTY
Cost per unit - USD
Total cost - USD
Purchasing Link
ViewSonic PX-701 4k Projector
1
$909.99
$909.99
Multiple Optical Components
1
$3,796.97
$3,796.97
¼” x 12” x 12” 6061 Aluminum plate
1
$35.61
$35.61
¼” x 6” x 18” 6061 Aluminum plate
1
$40.54
$40.54
Amscope Camera MU2003-BI
1
$841.99
$841.99
Manual XYZR Stage
1
$195.00
$195.00
Screws: mostly M3, M4
$0
$0
The complete list of ThorLabs parts is in the second sheet in the Stepper BOM. To order all of these at once, download the third sheet as a CSV and upload it to ThorLabs Upload Cart.
File Name w/ link
Description
QTY
Tools Used
Water jet from ¼” x 6” x 18” aluminum plate. Serves as a flat surface on which everything is mounted.
1
Water jet
Water jet from ¼” x 12” x 12” aluminum plate. Holds the projector via vertically slotted holes. Connects to the base, triangle bracket, and support arm.
1
Water jet
Water jet from ¼” x 12” x 12” aluminum plate. Adds stiffness between base and back plate.
1
Water jet
Water jet from ¼” x 12” x 12” aluminum plate. Connects back plate to the optics.
1
Water jet
Water jet from ¼” x 12” x 12” aluminum plate. Connect the support arm to the optics.
1
Water jet
Machined from 1 ¼” aluminum angle iron.
1
Manual milling machine
Machined from 1 ¼” aluminum angle iron.
2
Manual milling machine
Machined from 1 ¼” aluminum angle iron.
Use an ⅛” end mill for the slot.
1
Manual milling machine
3D printed part for connecting the optics to the projector. Not load-bearing, mainly serves to dampen vibrations and aid alignment.
1
3D printer
Assembly containing all projector parts, obtained from . Used for geometry of the 3D printed adapter.
1
Assembly of all ThorLabs components. Original part files from .
1
Most of the water jet components can be cut from a single 12” square aluminum plate. Water jet layout.SLDASM provides the pattern for this. The base needs a separate 18”x6” plate.
The following steps do not need to be completed in order, except for the last three sections (assembling the structure, stepper, and alignment).
Export “Water jet layout.sldasm” and “base.sldprt” to the appropriate 2D vector format for your water jet (likely .DXF).
Water jet these two files, following the instructions for your specific machine. A CNC router may also work.
Be aware that the “base” part takes up the full 6”x18” plate, so no need to cut the outside edges. You may need to adjust the kerf settings so your water jet cuts on the inside of each hole.
Countersink all the holes on the bottom of the base plate.
3D print the projector coupler with default settings.
Cut the angle iron into three 80 mm long pieces and one 60 mm long piece using a saw.
Cut the slot in the adjustable bracket using a 4mm or slightly larger endmill (3/16” works). None of the dimensions of the slot need to be precise. The holes in all the brackets will be drilled during the assembly process.
Open “_optics_assem.sldasm” for reference during assembly. The cutaway view may be helpful.
Unscrew the set screw on the cage cube to remove the filter mount. Insert the beamsplitter into the mount so that the text on the beamsplitter reads forwards when viewed from the projector.
Bolt the two filter holders together using four M3x20 or similar screws and washers.
Use SM1 locking rings to mount the UV bandpass and red longpass filters in the two filter holders. Make sure the filters are inserted in the correct direction. Label the filter holders “red” and “UV”.
Screw together the rest of the optics, paying attention to the direction of the tube lenses.
Use calipers to adjust the length of the vertical SM2 tube so that the distance between the tube lens and the camera flange is exactly 134.3 mm. This value is calculated by subtracting the standard C-mount flange focal distance (17.526 mm) from the TTL-200A tube lens’ working distance (151.8 mm).
Unscrew all available philips screws in the projector.
Use a small flathead screwdriver to pry open and remove the top projector housing. This takes some rough handling.
Remove the front foot by removing the metal pin as shown below, then unscrewing the foot out while pushing the tabs in.
Unscrew the three screws that hold the stock lens assembly to the projector and remove the lens.
Remove the plastic half-lens cover and cut the top housing as shown above.
Unscrew and detach the lamp assembly (screw circled).
Remove the metal clip and the stock hot mirror from the lamp assembly. The stock hot mirror blocks ultraviolet light, so it needs to be replaced.
Cut the Thorlabs UV-pass hot mirror to the same width as the stock hot mirror.
Use a scribe to mark the correct width on both sides of the UV-pass hot mirror.
Use a straightedge to scribe a deep groove in the hot mirror. Use a lot of force and several passes.
Apply bending pressure to the hot mirror with the groove facing away from you until it breaks.
The following steps will benefit from having two or more helpers. In the images below, the red arrows indicate applied pressure for ensuring parts are correctly mated. Green arrows indicate clamps. Yellow dots indicate tightened fasteners. For all drilling steps use the largest drill bit available that freely fits inside the holes for the brackets.
Put the projector back plate and triangle bracket into their slots in the base. Apply pressure as shown so that both parts are flat against the base and in the corner of their grooves.
While maintaining pressure, place one 80mm bracket between the triangle and the back plate and clamp it to the triangle.
With the clamp still attached, drill through the bracket using the holes in the triangle for alignment. Use M5 nuts and bolts to fasten the two parts together. Put the nuts on the outside to avoid interference with the projector.
Return the parts to their previous position, apply pressure, and clamp the bracket to the back plate.
With the parts still clamped, drill two holes and fasten. Depending on the size of your drill, it may be necessary to unbolt the triangle first.
Clamp the other 80 mm bracket to the back plate. Clamp the 60 mm bracket to the triangle. Ensure the brackets lay flush on the base.
Drill into the brackets using the holes in the back plate and triangle for alignment. Fasten with any protruding screws on the outside to avoid interfering with the projector.
Place the assembly back into the grooves on the base, again pushing them into the corner. Clamp both brackets to the base.
Flip the base upside down and use the holes on the bottom to drill into the brackets.
Attach all three brackets and plates.
Use three M4 screws to attach the support arm. Use a straightedge to ensure that the top edges of the support arm and back plate are parallel.
Clamp and drill holes in the adjustable bracket. Make sure the top surface of the bracket is flush with the support arm.
Structure is complete and ready for further assembly.
Screw the manual XYZR stage into the base plate using countersunk screws.
Screw the 3D printed projector coupler into the projector with three M3x? screws.
Push the optics onto the projector coupler. You may need to temporarily detach the vertical parts of the optics assembly. This part was designed iteratively and may not fit perfectly because the true position of the DLP chip inside the projector is unknown. In that case, it can be modified or removed as needed.
Attach the cube adjuster to the cage cube with 4-40 screws. Attach the cube adjuster to the adjustable bracket with M3 screws and washers on both sides.
Screw the camera onto the C-mount threads at the top of the optics.
Go to this link and install the correct Amscope software for the camera MU2003-BI and your operating system.
Connect the camera to your computer with a USB 3.0 cable.
Connect the projector to your computing using an HDMI cable.
Put in the UV filter. Remove the red filter.
Turn on the projector.
Open AmScope. Select the camera in “camera list”. If everything is working an image should appear (might be black).
Place a flat mirror-like object on the stage. This can be a bare silicon chip.
Adjust the height of the microscope objective to approximately 16 mm.
Focus the image using the Z-axis on the stage. You should see your projected screen. Try projecting some patterns to test the focus.
Adjust the lens tube coupler so that the projected image is square inside the camera frame.
Default configuration Without objective
Unscrew and remove the microscope objective. You may still see an image. This is because if the two tube lenses are in the correct positions they will perfectly focus the collimated light between them. We will use this to our advantage by translating the entire optical assembly towards/away from the projector until the image is focused. When this step is complete, we know that the first tube lens is 151.8 mm from the DLP chip.
We can also use the no-objective configuration to check the stage’s orthogonality relative to the vertical axis of the optics. When aligned, the image will be centered in the camera frame. Any offset (shown below) can be fixed by adjusting the structure in the angles labeled A and B above. This correction fixes the planarity of the focal plane, visible in the images below. Rotation in A moves the image vertically and rotation in B moves the image horizontally in the camera frame.
To add: details about how to mechanically execute alignment, including shims.
No objective, before alignment
With objective, before alignment. Non-uniform focus is apparent in the top left corner.
No objective, after alignment. The projected image (purple) is centered in the camera frame.
With objective, after alignment. Focus is much more uniform.
Demonstrate the operation of the hardware and characterize its performance for a specific application.
Highlight a relevant use case.
If possible, characterize performance of the hardware over operational parameters.
Create a bulleted list describing the capabilities (and limitations) of the hardware. For example, load and operation time, spin speed, coefficient of variation, accuracy, precision, etc
Wear UV-blocking glasses whenever light leakage from the projector is possible.
*More detailed design explanations, build instruction, and operating procedures are yet to be uploaded*
At the CMU Hacker Fab, we started building an RF sputtering Chamber in the Fall 2024. After a second iteration, the RF sputtering chamber seems to be reliable enough to share.
The sputtering project was originally initiated to support the development of a reliable DIY CMOS process. For context, the NMOS process as of F24 relies on buying p type wafers which already have a clean gate oxide grown on the, and a polysilicon gate contact deposited on top, providing a fab quality gate stack which is further processed into NMOS integrated circuits (ICs). For CMOS ICs, n type wells are needed within the p type substrate, and theses wells cannot be doped while the gate oxide and polysilicon gate contact are present on the wafer/substrate surface. Thus, to create a CMOS process, the n wells would have to be doped before depositing a gate oxide and gate contact. Thus, to create a CMOS process, the fab needs to be capable of depositing a high quality gate oxide and gate contact, instead of buying wafers with the gate stack already present. The gate oxide and it's interfaces are the most sensitive parts of a transistors, as they are sensitive to small amounts of contamination, and small concentration of thin film and interfacial defects. For example to grow a high quality gate oxide of SiO2, requires a remarkably pure environment since ionic contamination at those temperature is extremely mobile, and can ruin the gate oxide.
After assessing the feasibility of creating high quality gate stacks through various methods, we landed on sputtering as the best tool for our situation; a fab that exists in non clean room. We chose RF sputtering, as it is capable of depositing almost any material, including high K dielectrics. Additionally, the vacuum environment of the sputtering chamber is likely o produce higher purity films than if we attempted to create a high purity furnace for growing oxides.
The initial material chose for the the sputter gate stack were Aluminum oxide (double the dielectric constant of SiO2) as the gate oxide, and aluminum as the gate contact. The aluminum oxide is to be deposited a a reactive process, by flowing in O2 during the sputtering process, and using an Al Target. This process selection allows for the use of a single target, and allows for the deposition of both the gate oxide, and gate contact in a single sputtering run, which helps avoid contamination of the gate oxide, since it is covered with aluminum before venting the chamber, and exposing the wafer to potential contamination.
Si - Al2O3 to Si gate stack:
pros
High k dielectric
Single target needed if reactive sputtering is used
Allows for immediate protection of gate oxide (which is very contamination sensitive)
Cheap sputtering target material
cons
Of all the metals, Al is particularly sensitive to oxygen contamination, and pre-sputtering/target cleaning. So, our system will have to be able to delivery extremely pure Ar, and a very clean vacuum environment to achieve conductive aluminum,
1E-7 torr base pressure
100 watts 14 MHz RF power with >90% impedance matching
Stable plasma down to 5 millitorr Ar
.5 - 8" adjustable throw distance
>10nm/minute deposition rate for Al at 4" throw distance.
Balanced magnetron magnetic field
1 sccm O2 flow accuracy
1 sccm Ar flow accuracy
Actuatable substrate shield
Air cooled magnetron
2 simultaneous process gasses
View port
Entire system machinable with only a drill press and band saw.
Al2O3 measured dielectric constant >6
Al2O3 surface roughness <5nm
Al resistivity of <3E-6 ohm-cm
$924.87 as of 6/30/2025
Aluminum disk (1/2" thick, 9" diameter)
2
72.23
Top Plate and Bottom Plate
Pyrex cylinder with flame polished ends(8.86" (225mm) OD, .275" (7mm) thick, 8" long)
1
225
Chamber walls
Viton "L" gasket (BJLGV-8)
2
155.6
Sealing between cylinder and top/bottom plates
Aluminum plate (.63" thick, 6"x6")
1
4.93
Substrate stage
Aluminum threaded rods (1/4"-20 thread, 8" long, 5 pack)
1
12.5
Support substrate stage
316 Stainless steel wing nuts (1/4"-20 threaded, 5 pack)
2
12.72
Support substrate stage
304 Stainless steel mesh
1
12.99
Protect turbo pump
Aluminum Sheet (6"x24" .032")
1
12.95
Used for magnetron atmosphere side ground box, dark space shield plate, and substrate shutter
Vented cup point screw (18-8 stainless steel, 10-32 threaded 1/2" long, 5 pack)
1
6.33
Supports dark space shield plate, vented to avoid trapped air
Wing nuts (316 stainless steel, 10-32 threaded)
1
5.5
Supports dark space shield plate
Washers (Aluminum, 1.25" ID, 2.25" OD, .16" thick, 5 pack)
1
10.17
Stacked to set dark space shielding distance
N52SH Nedymium disk magnet (1" diamter, 1/8" thick)
1
4.30
Center magnet
N42SH Nedymium disk magnets (1/4" diamter, 1/8" thick)
8
4.8
Outer magnets
Alumina washers (2.5" OD, 1.062" ID, 1/8" thick)
2
25
Fills space between side of target/magnet block, and side walls. Protects viton gasket from metal deposition and plama degredation
Viton sheet (1/8" thick, 6" x 6")
1
38.97
Seal between steel cathode plate and aluminum top plate
Plate (low carbon steel, 1/16" thick, 3"x3")
1
5.69
Cathode plate, pole piece, supports magnets
Teflon coated copper wire, (12 AWG, 25 feet)
1
19.94
Connects UHF port to cathode plate
Terminal Connectors
1
12.99
Connects 12awg wire to cathode plate
PEEK Socket head screws (1/4"-20, 3/8" long)
4
23.48
Secures Cathode plate into top plate, compresses gasket
Copper heat sync (60x60x20mm)
1
23.48
Cooling on top of cathode plate
Aluminum socket head screws (4-40 threaded, 1/4" long, 10 pack)
1
12.81
Holds down magnetron atmosphere side ground box
Cooling Fans (60x10mm, 2 pack)
1
12.99
Air flow through ground box for air cooling
Nylon screws (M4 threaded, 20 mm long, 100 pack)
17.19
Secures fans to ground box without shorting to cathode plate.
UHF to solder cup connector
1
6
Allows for coax cable connection
KF16 Centered viton O-rings (10 pack)
1
18.5
Sealing KF16 bulkhead ports
KF16 Blanks
4
1.4
Sealing unused KF16 Bulkhead ports
KF16 bulkhead clamps
4
112.6
Modular KF16 ports
Flared collar thumb screw (1/4"-28 threaded, 18-8 Stainless steel, 1-1/4" long)
1
7.35
Substrate Shutter
Viton O rings (1/4" ID, 12" OD, 1/8" thick, 25 pack)
1
17.44
Substrate shutter sealing
Aluminum nuts (1/4"-28 threaded, 10 pack)
1
14.34
Substrate shutter
Alligotor clips
1
8.99
Grounds bottom plate with top plate
Power Strip
1
9.99
Total
$929.17
2" diameter, 1/8" thick, high purity aluminum target not included in BOM
The power supply consists of a 100W Radio transceiver, an antenna tuner, and a switching DC power supply to power the radio. The radio supplies a 14 MHz sine wave at 100 watts into an antenna tuner. The antenna tuner uses selectable inductors and a variable capacitor to tune the impedance of the system, and the output is connected to the magnetron via UHF cable.
The antenna tuner achieves 90-95% impedance matching, delivering 90-95 watts of forward power.
$1025.88 as of 6/30/2025
Yaesu FT-891 Transceiver
1
629.95
Comet CAT-300 antenna tuner
1
279.95
TP30SWI Switching DC power supply
1
99.99
UHF cable (3', 2 pack)
1
15.99
Total
$1025.88
A turbo pump was selected to ensure a base pressure of 1E-7 torr prior to depositions. Any turbo pump + roughing pump system could be used, but the HiCube 300 Eco pumping system was used because we already had it prior to beginning the project. The MPT 200 pressure guage was also used simply becasue we already had one.
$11,399.86 as of 6/30/2025
HiCube 300 Eco Pumping Station
1
10733.87
DN100CF FKM gasket
1
38.25
MPT 200 Pressure Gauge
1
590.76
kF25 to KF16 adapter
1
24.99
kf25 clamp and O-ring
1
11.99
Total
$11,399.86
Mass flow controllers that can deliver small amounts precise flow are necessary to achieve ethe desired pressures. The MCFs require a fixed pressure of around 10-20 PSIG on the inlet side to maintain accurate flow, so dual stage regulators are used to control pressure between the MFC and cylinder.
$4,957.09 as of 6/30/2025
Alicat MC Series MFC (100 SCCM Ar)
1
1544.4
Alicat MC Series MFC (50 SCCM O2)
1
1544.4
KF16 to 1/8” Male NPT adapter
2
33.98
1/4" VCR Male to 1/4" Male NPT adapters
2
31.52
1/4" VCR Male to 1/8" Male NPT adapters
2
31.6
1/4" VCR metal gaskets
4
23
Flexible Metal gas line 1/4" male VCR ends
2
161.15
3850 series dual stage regulators
2
1587.04
Total
$4,957.09
UHP Ar and O2 cylinders not included in BOM
*Pics and much more detailed procedures yet to be uploaded*
Ensure pump, power supply, and fans are all powered off
Lift off the top plate and place its sideways to avoid contaminating sealing surfaces
Use wing nuts to adjust substrate stage to desired height
Place chip/wafer in center of substrate stage
Place top plate onto cylinder.
Ensure that the substrate shutter will not collide with threaded rods
Power on pumping system, turn on the pump.
Use digital control unit arrow buttons to scroll to parameter 707. Click both arrows simultaneously, then ensure parameter 707 is set to 100% by using arrows to increase and decrease value. Set the value by pressing both arrows simultaneously.
Scroll to parameter 340 to view chamber pressure.
Wait until chamber pressure reaches 5E-7 hPa or lower (this will take several hours, but should be to E-6 range within 15 minutes)
Plug in the power strip to power on all fans and MFC
Open the Ar cylinder top valve.
Adjust the dual stage regulator until the Ar line is at 10-15 PSIG
Set the MFC to 10 sccm.
Scroll to parameter 707, and set pump speed to 25% (aka 250 Hz)
Scroll back to parameter 340 to view pressure, which should now be ~1E-3 hPa
Wait until pump reaches 250 Hz
Set MFC to 90 sccm
Turn on switching DC power supply to power on radio
Turn on radio, and tape handle to keep power on
If plasma has not yet struck, adjust left tuning knob on antenna tuner until it does
Minimize reflected power, should be 10 watts or less at 100 watt output
Reduce to 30 sccm, should result in ~1E-2 hPa pressure
Wait 15 minutes for Al target to be cleaned (pre-sputtering)
Carefully tighten shutter thumb screw to move shutter away from target (avoid lateral torque on screw to prevent any leaks)
Wait the desired deposition time
Turn off radio
Switch off the radio power supply,
Set MFC to 0 sccm
Close Ar cylinder
Stop turbo pump.
Wait until pump speed reaches o Hz
Vent chamber with vent on the side of the turbo pump
Remove top plate, collect chip/wafer.
Chamber reaches 1.6E-7 hPa base pressure
Highly conductive Al films have been sputtered
Further characterization of films is actively being pursued
Replae radio with signal generator and amplifier
Build our own tuner/matching network (its literally just an inductor and variable capacitor)
DIY substrate heater
DIY QCM
Automation/controls
More film characterization, and experimentation with various target materials
Many failures occurred over two iterations of power supply and chamber. A more detailed collection and description of these is yet to be uploaded
Jay Kunselman
Rahim Malik
Matthew Moneck
Marina Wang
Shayaan Gandhi
Meadow Webster
Rachel Lewis
Ayan Ghosh
If you already have a stepper built and you're looking for information on how to operate the tool, check out our !
Our design was based on and ’ versions of this tool, which is essentially a projector connected to a microscope. We use a 10x objective for demagnification and a mechanical XYZ stage for positioning.
Stepper version 2 has greatly improved optical and mechanical performance over V1 while using the same DLP chip from Texas Instruments. Several factors led to this improvement:
Instead of an off the shelf projector with a flimsy plastic housing, we switched to the . This allows for a more robust physical connection to the projector housing, thus eliminating vibrations. It also has much better documentation.
By swapping to a finite conjugate microscope objective, the optical path length is reduced from ~250 to 160 mm. This reduces the moment of inertia of the optics subassembly, therefore also reducing vibration.
Swapping to LEDs instead of the broad spectrum mercury lamp removes the need to constantly swap filters, which introduced random perturbations from touching the optics. We replaced the stock blue LED with a 410 nm LED mounted on a custom PCB. The PCB design files can be found .
Mounting the projector horizontally means less structure is needed.
M3 and M4 taps
3D printer
Solder paste (preferably a syringe)
Tweezers or pick and place machine
Reflow oven
Calipers
Total Cost: $3,015.44 or** $3106.44 (excluding computer & peripherals) (last updated March 16, 2025)
*Upload this CSV file to Thorlabs for all the optomechanical parts + beamsplitter.
**The Basler camera and FLIR camera are mechanically interchangeable, but our software implementation for the Basler camera is more reliable and freely accessible (FLIR code distribution is restricted). For software installation simplicity, we recommend using the Basler camera.
Note: the OnShape folder is organized poorly because it was our first time using it. Won't happen again, we promise!
Building the Stepper V2 requires some simple CNC machining, PCB soldering, 3D printing, and other assembly steps, followed by software installation.
There are several options for fabricating these two parts: the Base Plate and Adapter Plate. If you have access to a water jet, you may cut these parts from 1/4" aluminum plate, available on . Otherwise you can order the parts from , or another online CNC shop.
The Base Plate is 15" long, so double check that your water jet is large enough.
When downloading the Adapter Plate DXF for water jetting, go to Config > Water jet to get the hole sizes right for tapping. The 2.2mm holes are clearance for M2, and the 2.5mm holes are M3 tapped and countersunk.
shopping cart with the parts already uploaded and configured. This has not been tested yet.
Base Plate: for a drawing to have open while drilling all the holes. Start with a center drill then use an appropriately sized drill bit for M4 and M6 holes. You may also switch to 8-32 and 1/4-20 if you already have the taps for those, and no other parts will change if you do so.
Adapter plate: This should be manually machinable but we haven't tried.
The PCB Gerber files for our UV LED can be found . We provide a screenshot of the layout in Altium and a 3D render of the PCB below.
You can order it through your PCB manufacturer of choice (we used JLCPCB). However, note that the PCB is . This is because the LEDs draw several amps of current in operation. To ensure that the PCB doesn't melt, you should use copper core to facilitate better heat flow. When ordering the PCB, the manufacturer might send you an email asking about a missing heatsink file. In this case, please respond that this project does not include a direct heatsink, as the copper core PCB itself is designed to handle the thermal management.
We used 410 nm UV LEDs on this PCB. We found that two LEDs in series is sufficient to produce enough UV light for patterning. We also found connectors that are compatible with the cable in the TI DLP dev kit.
When assembling the UV LED PCB, it is easiest to use a solder syringe to carefully deposit the paste onto the LED pads and connector pads. If you try to use a stencil mask, it is very easy to smear the paste, so this is not recommended.
Once the paste is applied, align the components with their pads (i.e. using tweezers or a pick and place machine). Keep in mind that you need to use a nozzle that is small enough to pick up the LEDs. Finally, you can put the PCB into a reflow oven to solder the components to the board.
Below is a completed version of the PCB - note the polarity! This image shows the correct orientation of the LEDs (credit to University of Utah for the photo). If you have it flipped, then the projector will project an image briefly before shutting itself off:
You can test by applying 6V (limit to 1A) across the LED leads, but be sure to wear UV-protective glasses, as the LEDs will be bright! Once you are confident that the PCB works, you can now replace the blue LED PCB in the TI DLP dev kit with our new UV LED PCB. To see the UV light, simply look at the leds through your phone's camera, as the sensors see it as purple light.
Taking pictures after every step is key to ensuring you can put it back together properly.
Test the projector before we completely take it apart :)
Plug in the projector over USB and use the to set the LED current to 150mA.
Unplug all the connectors and remove the top PCB by unscrewing the standoffs.
Remove the side PCB.
Unscrew and remove the shroud by sliding it away from the rest of the optics.
Unscrew and remove the heatsink for the front-most LED, which should be the blue one.
t
Disconnect the LED PCB from the cable. Heat it slightly on a hot plate or with a hot air gun to soften the adhesive and remove the black plastic housing.
Glue the black plastic piece to the DIY UV LED PCB, connect it to the blue cable, and reattach it to the optics housing. Put the heatsink back as well.
Unscrew the projection lens. That one makes things bigger, but we're trying to make things smaller. It's got to go.
Screw on the adapter plate with four countersunk M2 screws.
Reassemble the rest of the projector, including the shroud and the PCBs.
See for interactive assembly help (select option 3)
Start with the beamsplitter cube. Unscrew the set screws, remove the holder, and clip in the beamsplitter. The text ("Thorlabs") should be facing the microscope objective and camera when the holder is reinserted. Keep track of this during assembly and fix it later if necessary.
Assemble the DLP tube. From left to right, the parts in the first picture are 0.3" lens tube (SM1L03), 0.5" lens tube coupler (SM1CPL05), 0.5" adjustable lens tube (SM1V05), and 0.5" lens tube (SM1L05). You may want to remove any internal lens rings. The adjustable lens tube allows axial length adjustment and the coupler allows rotation about the optical axis.
Screw the DLP tube into the beamsplitter cube. The correct orientation is shown above, and the arrow points to the side of the beamsplitter with the text (and optical coating).
Assemble the camera tube, which similarly constructed. The parts are 1" lens tube (SM1L10), 1" lens tube coupler (SM1CPL10), 1" adjustable lens tube (SM1V10), another 1" lens tube (SM1L10), and C-mount SM1 adapter (SM1A9) (last two shown below).
Make sure this camera tube is 82.3 mm long. We calculate this number by subtracting the various component lengths from the standard microscope objective back focal length of 160mm: 160 - 17.5 (c-mount camera) - 22.1 (objective tube) - 38.1 (beamsplitter cube). (NOTE: The calculation here is done incorrectly, but we have successfully been using it without major issues. The correct back focal length is 150mm, see )
Screw on the C-mount SM1 adapter (SM1A9) to the camera and the 1" lens tube. Adjust the lens tube coupler to align the camera with the beamsplitter cube.
Assemble the objective tube, which consists of a 0.5" lens tube (SM1L05), a 0.3" lens tube (SM1L03) an SM1 to RMS adapter (SM1A3), and the microscope objective.
Temporarily loosen the top lens tube coupler in order to finally screw the entire assembly into the projector.
Print all of the parts in the table below. Black PLA is fine. You may need to re-orient them so they print well. The stepper mounts will all need small supports in the motor flange. The X and Y axes need other supports as well.
Unscrew all the, micrometers, L-stops and stage locks from the micrometer stage. Separate the X, Y and Z axes. Throughout the assembly process we will be replacing the stock screws with ~4mm longer ones as we reattach the various components to the stage. All 3d printed mounts are 4mm thick at the screw holes. Have your M2.5 screw kit handy!
Press fit the three sliding shaft couplers onto the three micrometer handles until the knurled surface is fully covered. They should fit with significant force and maybe gentle hammering. Be careful - the micrometer handles may have different diameters so you may need to modify the CAD and reprint to get a correct fit.
The shaft couplers should slide on the motor shafts with zero slop. Modify dimensions and re-print if this is not the case. Graphite lubricant may help decrease sliding friction, and the fit will get looser after repeated axial movement as the steel deforms and smooths the plastic.
Screw the motor, coupler, and micrometer into the X axis motor mount as shown. Doing this step before attaching to the rest of the stage takes advantage of the slop in the micrometer mounting screws and aids alignment.
Slide the Y axis motor mount onto the Y axis. You will need to remove some screws and push the stage to allow it to slide on.
Attach the motor. Don't screw down the micrometer mount yet.
While pushing the stage so the micrometer isn't touching the stop, fasten the micrometer mount. This avoids preloading the micrometer/motor assembly and improves shaft alignment.
Reattach the X axis micrometer stop as well. You may need to adjust the screw length to get it to fit.
Insert the Z axis motor mount to the Z axis. The easiest way to do this is to insert it upside down from the opposite side, then flip it while pushing the stage up, then slide it back so the holes line up. Basically it takes some fiddling.
As with the other stages, attach the motor first, then secure the mounts. Tighten the set screw at the green arrow. Make sure the micrometer is flush with the mount at the yellow arrow. Again pushing upwards at the red arrow eliminates prelaod from the spring inside the stage and helps alignment.
Tighten down the Z axis mount.
Attach the X axis motor mount to the stage with the screws at the red arrows.
Add additional screws on the X and Y axes to make sure the mounts are solidly attached. Ignore the spring in the above image.
Attach the right angle bracket to the theta stage and the top of the Z stage.
Screw the chip vacuum chuck onto the theta stage. The stage is finished.
Bolt the XYZ stage to the base plate using short screws so they don't protrude out the bottom. Ensure the stage is aligned with the tapped holes by pushing it forward while screwing it down.
Screw in the four alignment screws for the projector. They don't need to go in all the way.
Push the projector and optics against the four screws to ensure alignment.
Plug in everything: power for the projector, locking USB cable for the camera, USB cable for the stage, power for the stage, HDMI for the projector, power for the pump, and vacuum tube for the chuck. Do not power the stage arduino shield without the motors connected, or you will burn out the drivers.
To install and run the software, you will need a Windows system that has two USB ports. The rest of this section describes how to install the following dependencies:
Arduino GRBL firmware
Python version 3.10 and Python libraries
Basler camera or FLIR Blackfly S Camera Drivers & Viewer
After these are installed, you may clone and instantiate the stepper repository on your device. Our GUI supports a live camera preview of the stage when using the Basler camera. Optionally, you can develop your own driver for using the FLIR camera instead. Instructions for such are included below as well.
Install Arduino IDE.
Flash the Arduino with GRBL following the instructions in the below (it may display as "Not found", but we have found that the link works anyway). For more info about the CNC shield, see the original designer's page below.
To test that the installation was successful, open Arduino IDE and open the serial monitor. You should see text indicating that a version of GRBL is running on your Arduino.
If you are using the FLIR camera, you must install Python version 3.10. This is because at the time of development, the latest Python version the Flir Spinnaker SDK supports is version 3.10. As such, you must install libraries and run the software for/from this version. If you are using the Basler camera, later versions of Python should be compatible with the GUI software.
We highly recommend using a Linux-based terminal on your Windows system for installation. One option is the . The following instructions assume you are using this terminal environment.
Open git terminal. Check if you have Python 3.10 already installed on your system by running py -3.10 -V
. If no installation is present, download and install Python 3.10 from the .
Install necessary software dependencies. Follow the instructions on the for instructions on how to set up a Python virtual environment for this purpose.
If you are using the Basler camera, install its necessary drivers and its GUI for live camera output.
If you are using the FLIR camera, install FLIR camera drivers. Also install the FLIR Spinview GUI to view camera output. For integrating this within the GUI, follow the instructions in
Follow the steps outlined in the linked repository (recommended). Alternatively, follow the steps below.
pen git terminal to the location where you want the Stepper GUI software to be downloaded. Then, run the following commands:
git clone https://github.com/hacker-fab/stepper .
cd stepper
Install software dependencies listed in the requirements.txt
file
If you are using the FLIR camera and have access to the private FLIR camera submodule repository, then also enter the following commands:
git submodule init
git submodule update
Otherwise, go to the stepper/config.toml file and toggle the necessary flags to select your camera (or disable it).
Configure config.toml
with the settings most appropriate for your Stepper build and camera configuration.
Run gui.py with Python 3.10:
py -3.10 ./src/gui.py
For instructions on how to use the Stepper GUI software (including troubleshooting), please see the .
The Stepper V2 build uses a Teledyne Flir camera and custom software written for it. The Stepper software uses the Flir Spinnaker SDK to integrate a live camera preview of the stepper's stage. Since the SDK and its derivative software are closed-source components, we currently do not possess the legal authority to grant access to our custom Flir camera driver to third parties. The following steps describe how to install the Flir Spinnaker SDK and how to develop your own driver. Please carefully review all terms, agreements, and licensing requirements. Follow the steps below.
Create an account on the Flir website (), or, if you already have one, sign in.
Download the Flir Spinnaker SDK () for Windows.
Decompress your download if necessary. Open the README.txt file in the (decompressed) download and follow the installation instructions inside.
Test that the installation was successful by running an example program. To do this, first make sure your Flir camera is connected. Then, open git terminal in the "Examples" folder. Then, choose any example .py script and run it by entering py -3.10 NameOfYourScript.py
. Ensure that the program output reports connection and communication with your FLIR camera.
To write a Flir camera driver compatible with the rest of the software, you must conform to the stepper's . Within your custom "FlirCamera" class, which should be defined as a subclass of CameraModule and a Flir event handler, we recommend implementing the following functions:
def __init__(self)
def setStreamCaptureCallback(self, callback)
def streamImageReady(self); returns True if live image is available
def getStreamCaptureImage(self); returns a tuple of (numpy ND image array, shape of that array, and an image format string ("rgb888" or "mono8")), or False if the image is invalid
def isOpen(self); returns True if the camera is active
def open(self); returns True on success
def close(self); returns True on success
def startStreamCapture(self); returns True on success
def stopStreamCapture(self); returns True on success
a Flir image event handler
We also suggest optimizing live preview performance by selecting a low-overhead color processing scheme and by displaying only the most recently acquired image (i.e. newest first). The Flir SDK code examples show how you might do this.
In config.toml, select the FLIR camera. to an instance of your FlirCamera class.
Once the stepper is connected to a computer and the live camera feed is visible, proceed with final alignment. The goal is to adjust the tube length between the DLP housing and the beamsplitter cube such that both the projected image and the chip are in focus.
Place a chip with a visible pattern on it. Cracked glass or extremely dirty chips are good options.
Project a mostly red image with some fine marks for determining focus.
Using the Z axis (focus) of the stage, focus onto the chip surface. Disregard the projected pattern for now.
Loosen the clamp that connects the two parts of the DLP-beamsplitter tube so that they freely rotate. (update picture)
Loosen the locking ring on the adjustable lens tube.
Screw the adjustable lens tube in/out while periodically checking to see if the projected image gets more or less in focus. You may need to push the optics into the coupler to ensure planarity.
Once both images are in focus at the same time, tighten the locking ring on the adjustable lens tune as well as the coupler. (insert image)
Wear whenever light leakage from the projector is possible.
Approximate Build Time
6 hours
Optical Resolution
2 µm
Developed Resolution
2 µm
Tiling Alignment Accuracy
5 µm
Overlay Alignment Accuracy
5 µm
Reticle (Exposure) Dimensions
1.04mm by 0.58mm
Exposure Time
8 seconds
Mechanical Step Size
1.5 µm
Mechanical Repeatability
5 µm (to verify)
Maximum Wafer Size
2 cm by 2 cm
Tool Size
30 cm x 36 cm x 20 cm
TI DLP Evaluation Module
1
$999
Assorted Optics
1
$736.52
10X Din Plan Objective
1
$159
Basler acA1920-40uc w/ Sony IMX249 (recommended), or** FLIR Blackfly S Camera w/ Sony IMX183
1
$609.00 or** $700.00
USB Type A to Micro B locking cable
1
$25
19V 4.74A Projector Power Supply
1
$17.99
XYZ Stage 40mm
1
$125
Rotation Stage
1
$69.34
NEMA 28 Steppers
4
$71.96
Arduino Uno (Elegoo)
1
$16.99
CNC Shield for Arduino V3.0
1
$9.99
Stepper Motor Drivers
1
$22.99
Shield Power Supply 12V
2
$23.98
2.5mm Barrel Connector
1
$7.99
Vacuum pump for chuck
1
$26.52
M2.5 Screw Assortment
1
$30.56
Collapsible Magnetic Tray for Vibration
1
$21.99
410nm Lumiled LED
4
$40.20
Pico-spox 10pos Vertical Connector
2
$1.42
Reference for assembling optical components
1
Driver kit
Connects the optics to the projector. Matches hole pattern on DLP housing and Thorlabs flange.
1
Water jet/ Online CNC shop/ 3D print
Structural base for aligning the micropositioning stage to the projector and optics.
1
Manual mill/ Online CNC shop/ Water jet
40mm Stepper Mount (link to SW)
Three parts that connect stepper motors to the micropositioning stage x , y and z axes.
1
3D printed
Press fits onto micrometer and slides on motor D-shaft.
3
3D printed
Tiny part for offsetting micrometer stop on Y axis
1
3D printed
Mounts the theta stage at a right angle to the rest of the stage.
1
3D printed
Connects to a vacuum hose to hold the chip. Corner jig aids alignment.
1
3D printed
Python script for controlling the projector. Check for recent version.
Laptop
Firmware for stage microcontroller.
Arduino Uno, IDE, Laptop
40mm Stepper Mount (link to SW)
Three parts that connect stepper motors to the micropositioning stage x , y and z axes.
1
Press fits onto micrometer and slides on motor D-shaft.
3
Tiny part for offsetting micrometer stop on Y axis
1
Mounts the theta stage at a right angle to the rest of the stage.
1
Connects to a vacuum hose to hold the chip. Corner jig aids alignment.
1
A step-by-step guide on working with the Probe Station
To learn more about the hardware and software involved, refer:
A probe station is a “fancy, nanoscale multimeter” for testing a chip after fabrication. It has probe needles to physically touch pads on the chip and measure electrical characteristics, such as an I-V curve. The device is essential to check if the fabricated chip is working properly. Given one of our goals for Hacker Fab to make a DIY version of every nanofabrication tool, it is necessary to develop a DIY probe station.
We are motivated to do so also because probe stations on the market cost ~$10K to ~$100K usually. Considering that we can purchase ~$125 XYZ stage on Amazon, ~$355 microscope camera, and ~$380 measurement device, it should not be hard to make the device a lot cheaper. Additionally, the relatively inexpensive ($700) probe positioners purchased as a replacement for broken ones of the probe station we currently have do not move as expected, which makes manipulation difficult. When we rotate the X-axis or Y-axis handle, the needle tip does not move in alignment with the respective axis. We are trying to make a better and cheaper alternative.
Another motivation behind this project is to implement a function to detect a probe touch. The Z-axis adjustment of the probe is hard because we see the chip from above using the microscope. Currently, we check if it touches the surface by seeing the slight horizontal shift of the needle (it shifts horizontally when you try to move it down further when it already touches the surface), which means it is inevitable that the needle scratches the pad. If you move it down even further, there is a possibility that it actually breaks the chip. We are trying to make this process easier by automating the Z-axis adjustment, or by making a buzzer sound when the probe makes contact.
Our probe station consists of a stage positioner and microscope unit, probe positioners, and a magnetic board. The stage positioner is the stage you put your chip on, and is integrated with the microscope component. The probe positioner has probe needles and you manipulate it to touch pattern pads on the chip. These positioners are equipped with magnets and securely attach to the magnetic board. Otherwise they will shift during manipulation.
The CAD model has four probe positioners, but you can decide how many you prepare depending on your needs. For example, if you want to measure resistance between two pads, you need two of them.
The current prototype requires design modifications. We removed the Z stage from the off-the-shelf XYZR stage used for the stage positioner. This design decision was based on our initial assumption that Z-axis manipulation would not be necessary for the stage positioner if each probe positioner has a Z stage. This assumption holds true when manipulating the probe needle to contact a pad. However, Z-axis movement is still needed for the stage positioner when adjusting the microscope focus. The microscope camera is mounted to the aluminum extrusion using screws, which is not suitable for Z-axis adjustment. It would be much easier to include Z-axis adjustment in the stage positioner using the Z stage, rather than the microscope side. If we choose not to remove the Z stage from the XYZR stage, the height of the stage positioner increases, which requires us to modify the designs of the microscope component and the probe positioner to match the height.
The specifications for our probe station are shown below:
The probe positioner is capable of movement along the X, Y, and Z axes.
The stage positioner is capable of movement along the X, Y, and R axes (the Z axis should be added, as discussed in the Notes).
The positioners are attachable to and detachable from the base using magnets
X and Y axes of the positioner are easily manually controllable for pads of 100 μm length and width *
The microscope is suitable for ~1 mm width / height pattern
The stage positioner has a piezo vibration sensor for probe touch detection (work in progress)
Note on specification 4: The width and the height of pads of chips made in Hacker Fab are usually larger than 100 μm.
As discussed in the Notes, the current prototype requires design modifications. However, this section describes how to build the current version. Parts that need modification are annotated accordingly.
Entire BOM
(1x stage positioner and microscope unit, 4x probe positioners, 1x magnetic board)
Name
QTY
Cost per unit - USD
Total cost - USD
Purchasing Link
CAD Link
Need modification?
XYZ stage 40 mm
4
125.00
500.00
XYZR stage 60 mm
1
239.99
239.99
test arm holder
20240
4
80.00
320.00
needle and test arm
20235
4
66.00
264.00
magnet
22
0.67
14.74
piezo vibration sensor module
1
1.50
1.50
Arduino Nano Every
1
19.90
19.90
camera MU1603
1
354.99
354.99
objective lens
1
50.00
50.00
magnetic board
1
74.94
74.94
aluminum extrusion
HFS5-2020-300
1
4.71
4.71
✔️
aluminum extrusion frame end cap
HFCL5-2020-S
1
2.21
2.21
socket head cap screw M3x8
41
0.04
1.64
socket head cap screw M4x10
10
0.10
1.00
socket head cap screw M6x10
1
0.11
0.11
M3 hex nut
6
0.79
4.74
M4 hex nut
4
0.79
3.16
aluminum extrusion post-assembly insertion spring nut
6
0.78
4.68
double-sided tape
1
14.01
14.01
copper conductive tape
1
3.00
3.00
cable zip tie
1
0.03
0.03
(3D printed) probe positioner - test arm holder attachment
4
-
-
-
✔️
(3D printed) probe positioner - base
4
-
-
-
(3D printed) stage positioner - chip stage
1
-
-
-
(3D printed) stage positioner - base
1
-
-
-
✔️
(3D printed) stage positioner - camera mount
1
-
-
-
✔️
(3D printed) stage positioner - camera and objective tube
1
-
-
-
total
1879.35
If you don’t need all the components listed above (e.g., you need only two probe positioners, instead of four), refer to the BOMs below.
1x probe positioner
Name
QTY
Cost per unit - USD
Total cost - USD
Purchasing Link
CAD Link
Need modification?
XYZ stage 40 mm
1
125.00
125.00
test arm holder
20240
1
80.00
80.00
needle and test arm
20235
1
66.00
66.00
magnet
4
0.67
2.68
socket head cap screw M3x8
9
0.04
0.36
M3 hex nut
6
0.79
4.74
(3D printed) probe positioner - test arm holder attachment
4
-
-
-
✔️
(3D printed) probe positioner - base
4
-
-
-
total
278.78
1x stage positioner and microscope unit
Name
QTY
Cost per unit - USD
Total cost - USD
Purchasing Link
CAD Link
Need modification?
XYZR stage 60 mm
1
239.99
239.99
magnet
6
0.67
4.02
piezo vibration sensor module
1
1.50
1.50
Arduino Nano Every
1
19.90
19.90
camera MU1603
1
354.99
354.99
objective lens
1
50.00
50.00
aluminum extrusion
HFS5-2020-300
1
4.71
4.71
✔️
aluminum extrusion frame end cap
HFCL5-2020-S
1
2.21
2.21
socket head cap screw M3x8
5
0.04
0.20
socket head cap screw M4x10
10
0.10
1.00
socket head cap screw M6x10
1
0.11
0.11
M4 hex nut
4
0.79
3.16
aluminum extrusion post-assembly insertion spring nut
6
0.78
4.68
double-sided tape
1
14.01
14.01
copper conductive tape
1
3.00
3.00
cable zip tie
1
0.03
0.03
(3D printed) stage positioner - chip stage
1
-
-
-
(3D printed) stage positioner - base
1
-
-
-
✔️
(3D printed) stage positioner - camera mount
1
-
-
-
✔️
(3D printed) stage positioner - camera and objective tube
1
-
-
-
total
703.51
1x magnetic board
Name
QTY
Cost per unit - USD
Total cost - USD
Purchasing Link
CAD Link
Need modification?
magnetic board
1
74.94
74.94
total
74.94
OnShape Directory: HackerFab > CMU > Probe Station > Probe Station V2 Assembly File
(It seems like it is sharable only within the team currently.)
Use the tab “probe station v2”.
Note: Some of the images below are from a previous version, but they do not affect the assembly process.
Click the part you want to download.
Expand the indicated directory and right click on the lowest-level part file, not the assembly file, then click Export…. Note: Test arm holder of the probe positioner requires design modification to increase its height.
Choose STL for Format, then click Export. Save the file wherever you want.
If File name in this Export window shows the assembly name, not the part name you are trying to export, you probably have clicked more than one part. In this case, Cancel the window, then click Space key to clear all selections, and repeat the previous step (OnShape has a different selecting method from other CAD tools. You keep selecting multiple objects even if you don’t hold Shift or Control).
Any 3D printer can be used. I used the Bambu X1 Carbon in the lab, with the Textured PEI Plate and a Bambu PLA-CF filament. Enable support (because the parts have overhangs) and make sure that the settings the arrows indicate in the figure above are correct.
For the chip stage, we recommend printing upside down so it doesn’t need a lot of supports.
Click Export plate sliced file on the top right and save the file in the micro SD inserted in the 3D printer front panel. If BambuStudio, the application software for Bambu 3D printers, says The save file operation failed., which happened in my macbook, you can try using the computer connected to the litho-stepper in the lab. BambuStudio has been installed.
Start printing. You might need to apply glue on the plate before printing. It failed without it. You should wait and check if the first layer sticks to the plate for a while. The glue should be placed next to the 3D printer. Remove supports after printing (wear safety glasses when doing so).
Place the XYZ stage on base_probe positioner and align against the protrusions.
Rotate the X-axis handle (micrometer) to move the X-axis stage so you can see the counterbores. Place M3 nuts on the bottom and fix M3x8 screws. Or, instead of rotating the micrometer, you can just push the stage along the X-axis. The stage is simply being pulled against the micrometer edge using a spring, so you can push it away from it.
Same for the other two counterbores. In this step, the pushing-away-from-micrometer method doesn’t work since you need to push the stage towards the micrometer.
Align test arm holder attachment_probe positioner against the edge of the XYZ stage, and fix M3x8 screws.
Align the bottom of the test arm holder and the edge of test arm holder attachment_probe positioner.
Fix the test arm holder using M3x8 and M3 nuts. The screws included with the holder would be too short so they are not recommended.
Assemble the test arm and the probe needle. Rotate the screws so you can see the holes, then insert the test arm and the needle.
Press-fit the four magnets.
Insert the aluminum extrusion into the base and fix it using M4x10 screws and the aluminum extrusion nuts. We made holes on the front and the back as well, but you don’t have to use them (the extrusion would be fixed securely enough with two screws from the sides). Note: The extrusion needs to be longer for the design modification to match the height of the XYZR stage without the Z stage removed.
Mark the aluminum extrusion at 188.2 mm from the top of the base. As we need the Z-axis adjustment for microscope focus, it does not have to be exact. Note: This length needs to be longer for the design modification to match the height of the XYZR stage without the Z stage removed.
The XYZR stage consists of the X, Y, Z, and R stage from the bottom. Remove the Z stage from the top of the Y stage. Then remove the R stage from the top of the Z stage. Align the R stage to the Y stage and fix it using four of the screws you just removed from the stage. Note: As discussed in the Notes, we should not remove the Z stage. We will not need this step eventually.
Similarly to the probe positioner, fix the XYR stage to the base using four M4x10 screws and four M4 nuts. You need to use a ball-point hex key.
When you’re inserting the screws on the counterbores on the right side, it doesn’t go all the way even if the micrometer is rotated to the end. You need to manually push the stage.
Align the 3D printed chip stage so the slits are placed on the top right. Fix it using four M3x8 screws.
Align the camera mount to the mark and fix it using four M4x10 screws and four aluminum extrusion nuts.
Attach the 3D printed tube to the camera and the objective lens. If you need, you can secure the connection to the lens using M3x8 screws and M3 nuts (we did not have to, so these screws and nuts are not included in the BOM).
Note: Our initial plan was to fix the camera to the mount using a screw and the thread on the back of the camera. However, we found that if we install the camera in this direction, the X and Y axis are switched (e.g., when you manipulate the X-axis, the image on your computer moves along the Y-axis). We need to modify this design. Currently, we rotated the camera so the USB socket faces the front, and simply taped it to the mount.
To fix the chip on the stage positioner, we use the adhesive side of a conductive tape. We sometimes want to measure electrical characteristics between the bottom of the chip and somewhere, so we need to have some electrical access to the bottom. Placing the chip on the tape and clamping it with an alligator clip, or similar, allows the probes to establish electrical contact with the bottom of the chip.
Note: However, around the end of the semester, we found that the adhesive side of the tape is not as conductive as the opposite side. We need to test some chips to determine if the conductivity is sufficient (we haven’t had time to do so yet).
The piezo vibration sensor is for probe touch detection, which is still in progress of development. If you don’t need this function, you don’t need the sensor. You can just place the tape on top of the chip stage directly.
Attach double-sided tape to the back of the piezo vibration sensor. Trim off the excess part of the tape. Don’t cut the sensor! Attach the piezo vibration sensor board to the base, using a M3x8 screw.
Note: We currently use self-threading here, but it didn’t work (when we were inserting the screw, it broke the 3D printed extrusion). We need to use the screw-and-nut method or thicken the extrusion.
Place the sensor in the center of the chip stage so the wires are placed around the slits.
After checking the position, tape it to the chip stage.
Fix the wires using cable ties. The soldered parts are fragile and once a wire broke off. This is to prevent that.
Attach the non-adhesive side of the conductive tape to the double-sided tape. Trim off the excess part of the tape.
Attach it to the chip stage.
Download the AmScope software called AmLite.
https://amscope.com/pages/software-downloads
Search MU1603.
Download a Windows/Mac/Linux version, and install.
Connect the USB cable to your computer and open AmLite. If you can’t open AmLite by double clicking, right click on the AmLite icon > Open, or open it on terminal.
Manipulate the stage chip micrometers and check if the movement aligns what you expect. You can change the orientation by clicking the vertical and horizontal flip.
Loosen the screws of the camera mount, and adjust the height for focus (This Z-axis adjustment should be done on the stage positioner side in the future).
Clamp it with alligator clips and connect them to your measuring device such as Analog Discovery 3 or a multimeter.
To detect the piezo vibration sensor value, connect Arduino to the sensor board.
Sensor board
Arduino Nano Every
S
analog input pin (We used A0)
+
+5V
-
GND
If you haven’t used Arduino Nano Every before, you probably need to install the board package for it (if you have another Arduino board, you can use it. It doesn’t have to be this particular board).
In Arduino IDE, Tools > Board: “...” > Boards Manager…
Search “nano every” and install the board package.
Code:
// C/C++
const int analogPin = A0; // Analog pin to read from
int threshold = 50; // Modify this value to set your threshold
void setup() {
Serial.begin(115200); // Initialize serial communication at 115200 bps
}
void loop() {
int sensorValue = analogRead(analogPin); // Read the analog value
Serial.print("Analog reading: ");
Serial.println(sensorValue);
// Check if the value exceeds the threshold
if (sensorValue > threshold) {
Serial.print("Spike detected! Value: ");
Serial.println(sensorValue);
}
delay(100); // Delay between readings (adjust as needed)
}
I measured the long, medium, and short spacings of a pattern on the chip made in the resistor lab session. Because the pattern we measured in the lab session was heavily scratched, I decided to use a new pattern next to it, which has no already measured values.
First, I compared the values on the top row and the bottom row (blue and pink). They are significantly different, but I am not sure if this is because of the chip or because of the measurement.
Next, I measured the long+medium spacing and the medium+short spacing on the top row (green) and compared them to the blue values. They are not very different from each other. My assumption is that our probe station is working well, and the gap between the blue and the pink values is because of the chip, but we need some more tests.
The initial design is shown below.
We tried a ~$42 USB microscope, but the resolution was too low and it didn’t work.
We also tried a magnetic bulletin board, but it was too flimsy and didn't work.
For fixing the chip, we tried vacuum chucking instead of the tape method. We drilled a hole in the center of the piezo vibration sensor. This didn’t work because the airflow significantly affected the sensor value. Also, because the sensor surface was not very flat, the chip couldn’t be placed stably.
Pads width or height we make at HackerFab are usually ~100 μm. For example, the pad from the resistor lab session is 181.48 μm × 76.25 μm. If we can adjust the probe position in a 10 μm resolution, that should be sufficient. The XYZ stage has a micrometer for each axis, which moves 500 μm per revolution. If you want to adjust the position in a 10 μm resolution, you need to rotate 7.2° (Δ10 μm / 500 μm * 360°). This should not be difficult, so the XYZ stage we use is sufficient for our purpose.
As discussed in the Notes, the stage positioner requires design modifications so it has the Z stage so we can adjust the Z-axis position for the microscope focus.
As discussed in “Attach the tape and the piezo vibration sensor.” of the How to Make section, we found that the adhesive side of the conductive tape is not as conductive as the opposite side of the tape. We need to test some chips to determine if it’s working sufficiently or not. If not, we need to come up with a different method, probably going back to vacuum chucking. In this case, we can’t use the piezo vibration sensor because the airflow affects the sensor value, so we need to consider other ideas for probe touch detection. We also tried the double-sided adhesive and conductive tape, but it was not conductive enough on both sides.
Although the color and brightness adjustment on the software is still necessary, the current setup of the camera and the objective lens works well. However, the camera, AmScope MU1603 is no longer available. If you try to have a different setup, you should select a camera and an objective lens following the steps below. You need to consider if the resolution of the camera is sufficient, and if the field of view is large enough.
- of "160 / -" written on the objective lens indicates that it is the lens used without a cover glass. If it says 0.17, it needs to be used with 0.17 mm thick cover glass. For our purpose, we don’t have to care about this value.
0.10 written on the objective lens is a numerical aperture. It affects the brightness and the resolution (the higher value, the brighter and higher resolution), and it's usually around 0.1 to 1.6. For our purpose, we don’t have to care about this value.
AmScope 1603 has the 16MP resolution, which means ~16M pixels, e.g., 4608 × 3456 (aspect ratio 4:3), 4928 × 3264 (3:2), or 5120 × 2880 pixels (16:9).
Because the sensor size of the camera is 6.18 x 4.66 mm, and the pixel size is 1.335 [μm], so it should be 4629 × 3490 pixels.
(magnification) = (sensor size) / (field of view)
⇔ (field of view ) = (sensor size) / (magnification)
If we use the camera, which does not magnify, and the 4x lens, the field of view is:
Width: 6.18 mm / 4 = 1.545 mm = 1,545 μm
Height: 4.55 mm / 4 = 1.138 mm = 1,138 μm
And we will have the 4629 × 3490 pixels resolution in this field of view, which sounds very high.
This is an example of the chip we want to observe:
The entire chip looks like ~900 × 450 μm. The 1,545 μm × 1,138 μm field of view is large enough.
For example, if we use a 10x lens, the field of view will be 618 × 455 μm, which is too small.
Selection of a different camera and objective lens does not affect the entire design, as long as the camera is the same series (AmScope MU Series), and the objective is in the same standard (RMS).
This is because the requirements are that the tube length needs to be 132.5 mm and that the distance between the seating surface of the objective and the chip surface needs to be 45 mm. Even if you use a different objective, that does not change anything.
The seating surface of an objective needs to be 150 mm away from the image sensor of the camera. The image sensor is located 17.5 mm away from the seating surface of the camera for AmScope MU Series cameras (to my understanding). That is why the tube length is 132.5 mm. Apparently, this 17.5 mm is a common dimension, as an off-the-shelf tube, not sold by AmScope, is also 132.5 mm. Of course, it would be safer to carefully check the dimension of your camera.
Additionally, the current tube has a slit. This is because we couldn’t get the objective in without it. We tried 3D printing the RMS thread, but objectives didn’t go all the way. This means that some particles could get inside the tube through the slit. I would like to know how careful we need to be about this. If this is a problem, we need to cover the slit in some way.
Cover tube slit
Microscope color and brightness settings
Add Z stage to the stage positioner and redesign other components to match the height
Modify the design of the camera mount
Check if back side of conductive tape is conductive enough for testing
Connect to Analog Discovery 3
Test several chips to confirm it is working
A big next step would be the probe touch detection. Although there are some noises in the piezo vibration sensor values because the sensor is very sensitive, it is working well for the first probe touch. While one probe needle is already in contact, manipulation of the other probes causes vibration and it significantly affects the sensor value, even if the second probe is not in contact yet (video The first probe on the left is in contact and the second one on the right is moving above the chip surface, not in contact). Therefore, it is possible to detect only the first probe touch, but it is difficult to detect the second and later probe touches. However, because we are measuring some electric characteristics between two pads, the measuring device begins to display something only when the second probe touches the pad. For example, if we are measuring resistance using a multimeter, it keeps showing 0 ohm at first, and it doesn’t change with the first probe touch. It starts to show some values only when the second probe touches. Hence, we can’t detect the second probe touch by checking only the piezo sensor value, but we can detect it by checking the measuring device value, too.
To extract the sensor value change from the probe touch out of noises (there are sometimes small noises before the first touch as well, which are usually 1 to 3 in analog input of Arduino), I made a simple tool, which makes beep sounds with sensor value changes, and changes the frequency of the sound according to the intensity of the value. The more intense the value is, the higher frequency the sound has. This tool is intended for the situation where users manually rotate the Z-axis handle. Noise values are usually small, so this type of tool could give users a hint on which value changes are by the probe touches and which changes are just noises.
If the piezo sensor doesn’t work, a computer vision approach would be another option. This CMU HCII research is to detect fingertip touches on a palm. This work uses the camera of the VR headset and detects shadows, using training data. This type of approach might be possible, although it would still be difficult to collect data for training, because we still need some way to detect whether the probe is in contact or not, before training. Another thought is that, since the probe shadow looks more distinctive compared to the fingertip shadow in the research, we probably don’t have to use the training approach. It might be possible to detect touches by some algorithm (e.g., detecting that the shadow gets sharp and clear when the probe needle touches the chip surface). In any case, based on how I feel about it now, it seems best to proceed with the piezo sensor approach first.
If we successfully find a good way of probe touch detection, we can start considering the auto Z-axis zeroing function (Although I also think that manual Z-axis manipulation, probe touch, and a touch detection alert (e.g., beep sound) could already be sufficient). I briefly considered the design. The motor could be the same stepper motor as the litho stepper. As described above, the micrometer moves 500 μm per revolution. Because the stepper motor’s resolution is 200 steps per revolution, the system’s resolution is Δ2.5 μm. For the X and Y axes, it is sufficiently high given the pads width and height are usually ~100 μm in HackerFab.
For the Z axis, the chip thickness is obviously larger than 2.5 μm (it’s usually ~1 mm), but the aluminum deposited on the chip of our group in the resistor lab was 0.55 μm (5.468 kÅ). I am currently not sure if this resolution is sufficient.
Another thing to consider for the function is that the Z-axis micrometer handle moves back and forth when rotated. If we attach the motor to it and completely fix the motor, the handle cannot move. Now I am thinking of using a linear slider, so the motor can slide along with the handle.
If not using the tester adapter, connect W2 to the Gate probe and W1 to the Drain probe.
The Source and Body probes must be connected to GND.
The +1 & -1 connections should be connected around the drain resistor.
+2 should be connected to the Drain terminal.
Lab communication system for interaction between database website and individual tools
The goal of the Machine Integration project is to develop an extensible interface that can be used to communicate between the primary web application and each individual machine in the hacker fab.
The information in this section will explain some basics about web application design that will allow for a better understanding of the current machine integration system.
An API is an application programming interface. For the purposes of this project, it is the abstraction of the interface between the server and client devices. The client devices can invoke GET, POST, UPDATE and other HTTP (Hyper Text Transfer Protocol) endpoints for a specific URL. We can send test API requests easily using POSTMAN. For those more familiar with linux networking, you could also use a CURL command.
Postman is a user friendly way to send API requests to test endpoints. Note that in production, another program will call an API endpoint. Postman is just a way for us to easily test these endpoints. If you are familiar with the CURL linux command, you can use that instead.
Download POSTMAN from their website (do a google search). Below is a basic overview of the user interface.
A database is a structured collection of data that enables efficient storage, retrieval, and management of information.
You can think of a single Table within the database as an excel spreadsheet. The entire database is like an excel workbook.
Each table has multiple column names (shown as the first row in the image below). One of these columns are dedicated to be the primary key. The primary key uniquely identifies a single row, or entry, in the database. The other columns are used to store information about that entry.
The entire structure of the database (names of all the tables, column names, etc) is referred to as the schema.
Now moving onto the details of this project, here is a system level architecture diagram of the system.
Web Application Frontend & Backend: This is the first two boxes on the architecture diagram above. This is how the end user will interface with the system. The user can create/edit/delete jobs. The exact details of how the web application frontend and backend work are covered in more detail in that section of the documentation (not on this page).
Jobs Queue on AWS: This is where the list of jobs that the machines will need to run is stored. The jobs queue on AWS will have an API interface that is accessible to the web application (in order to take in new jobs) and the Raspberry PI (in order to complete jobs).
Raspberry PI mini computer: This raspberry PI will be physically located near the tool that will be controlled (spin coater to start). The raspberry PI will be connected to the device using either USB or I/O pins on the raspberry PI. The raspberry PI will pull jobs from the jobs queue and run them on the device. There will also be a keyboard, mouse, and portable monitor connected to the Raspberry PI to monitor the status of the machine (these components will be optional, but provide additional redundancy).
Device to be controlled: Will receive control signals from the raspberry PI. For this version of the project, we will be controlling the spin coater.
The primary way that jobs will be created is through the hacker fab website. The hacker fab website will call the appropriate API call to manage the jobs database. The implementation of this is out of the initial scope for my project. For testing purposes for this semester, I will use POSTMAN to send API calls to the AWS jobs database.
Users can also create new jobs directly via the Raspberry Pi UI. This allows for redundancy in the case that the machine needs to be controlled without the database.
There will be an option to run the job immediately or to send it to the database to be added to the queue.
The AWS server maintains a centralized queue of jobs.
The Raspberry Pi fetches and dequeues jobs by querying the API. Only jobs for the specific machine are dequeued.
The Raspberry Pi receives the job and displays it on the connected UI.
Upon user interaction (manual start) or automatically (if set), the job is run on the spin coater (or other device in the future)
After execution, the Raspberry Pi sends the success/failure status to the AWS server, updating the job's record in the database.
This will significantly automate the process of chip development. Our goal is to make basic chip tape outs like 3D printing.
Answer: KISS: Keep it simple stupid. Adding the additional communication step between a central raspberry pi to peripheral arduinos would significantly increase complexity of the system in multiple ways:
Initial implementation time is significantly longer for an arduino solution. The additional communication link between the raspberry pi and arduinos is not trivial, especially considering issues with the CMU wifi.
The user experience is significantly worse for the arduino solution. The user who is standing at the tool is completely reliant on the automation system in this case. By contrast, with my proposal, the user will still have direct control of the tool via the on-screen gui at the machine.
A raspberry pi for each machine would be a significantly more robust solution, while still offering all of the potential for automation.
Less complexity (removed additional wireless link)
Tools can still easily be operated manually (using on screen gui) in case of issues with the website/database.
I will now go through the jobs queue and Raspberry PI mini computer in more detail, as these are the key innovations of the machine integration framework.
The jobs queue is where jobs that are requested by the web application are stored before they are fetched by the appropriate tool's raspberry PI.
Other programs (such as the web application and the RPI) interface/communicate with the jobs queue via API calls. These are HTTP requests.
API Gateway Endpoints from AWS for web application:
AWS Configuration for jobs queue:
This is the jobs queue that the tools (right now only the spincoater) pull from. Jobs are enqueued from the primary web application.
The API gateway routes are configured as follows:
The dynamo DB is configured with default settings. job_id is the primary key.
I am currently using a free tier AWS account from hacker fab. This takes care of all licensing requirements for this project.
The majority of the logic is in the lambda function. The lambda function is the code that runs on AWS servers that processes API requests to the database. The python code is as follows (up to date as of 4/10/2025):
This code scores a 9.31/10 on pylint (google code guidelines). The failures are described in comments and are intentional, or are due to import statements not being found (since this code runs on AWS, not locally).
Other AWS resources (File Transfer):
S3: S3 is amazon's blob storage service. When a file is uploaded to the upload link from the generate_upload_url, it is stored here. It is setup with default configurations.
IAM management policy. This policy must be added to allow the Lambda script to access the S3 data. This is needed to generate the upload and download URLs.
To add the policy, go to IAM from the AWS panel, then roles, then create role.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject"
],
"Resource": "arn:aws:s3:::job-queue-files/uploads/*"
},
{
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::job-queue-files"
}
]
}
Here is an automated test script to run that will test all endpoints except /generate_download_url and /generate_upload_url. Run this script locally on your PC. The script should pass if the AWS database is configured correctly. You may need to change the base URL.
auto_test_endpoints.py scored 10/10 on google pylint
The following python script tests the functionality of the s3 file upload and download system. Note you made need to change the base URL to the current AWS instance.
auto_test_file_endpoints.py scored 10/10 on google pylint
The raspberry PI pulls job requests from the AWS jobs queue
Raspberry PI 5 with case and heatsink. There are two ways the RPI can connect to tools to control. The first method is using jumper wires to connect GPIO pins to external device. See image attached. The device could also interface with the raspberry PI over one of the Raspberry PIs USB ports. This is the approach that is used for the spincoater
To control the Raspberry PI 5 GPIO ports, use the gpiod python package (see screenshot below). It is critical to use gpiochip4. If you are interfacing with the device over USB, the exact setup instructions will depend on the device you are controlling. I will detail how to interface with the spincoater in this guide.
Here are the reasons why we are using UART over USB instead of using the GPIO TX and RX on the rasperry PI and arduino. Keep this in mind if you are integrating future devices other than the spincoater.
The raspberry PI runs on 3.3V while the arduino runs on 5V. This presents a problem for the signal from the arduino to the RPI. We have to use either a level shifter or a voltage divider. I didn't have a level shifter on hand, so I tried building a voltage divider using a 20k (on the bottom) and 10k resistor (on the top). This filtered the voltage as needed, but it's possible this was part of the issue. Here is an image of the basic voltage divider I tried.
I also attempted to bitbang a UART connection between the RPI and arduino. This was also unsuccessful. After a bit of research, it looks like this is because Raspberry PI OS is not a RTOS (real time operating system), so the timing is not precise enough to bitbang a UART connection. Keep this in mind before trying this approach for a new tool.
At this point I was pretty stumped, so I searched around the internet a bit. I then realized it would be MUCH MUCH easier to simply use UART over the USB connection between the two devices. The reasons why I settled with this approach are as follows:
I was able to get UART over USB from RPI to arduino working, but I was not able to get it working using the GPIO UART module.
This solution is more scalable as we can have multiple arduinos that control individual devices plugged into one raspberry PI as the RPI only has one UART TX/RX vs multiple usb ports.
We can leverage existing consumer grade USB extension cables and hubs
The USB cable is physically studier than the multiple thin GPIO cables. Also, there is only one cable to deal with.
https://roboticsbackend.com/raspberry-pi-arduino-serial-communication/
This is the code running on the raspberry PI. I'll first show it from the user's perspective:
When the machine is IDLE, the monitor connected to the RPI just displays a message that we are waiting for the next job
If autorun is not turned on, you'll need to manually approve the job
Next, the job will be run
Finally, the user can type in input for the final job status (this will vary based on the machine automated)
The user can also create a job from the RPI gui itself. If the RPI is connected to the internet, it will upload the job details to the database. Otherwise, the job will run completley offline. This is a intentional redundancy feature.
The essential behavior of lab_com_gui.py can also be described in the following state machine:
The lab_com_gui code completes the following high level actions.
Fetches jobs from AWS jobs queue
Displays the currently running job on the GUI. Also allows users to control whether jobs run automatically or require manual confirmation.
Runs the job on the device
Sends completion details back to the AWS jobs queue.
lab_com_gui.py scores 9.44/10 on pylint (used by google code guidelines). The failures are purposeful design decisions and are described in the comments.
I will now detail three important pieces of the code. These three parts should be the only parts of the code that you need to modify when integrating a new tool.
Note that the three sections that you need to edit to integrate a new tool begin with the comment
########################## EDIT HERE: block name ##############################
The first portion is an initialization block. In this case, it just opens the UART port to communicate with the Arduino. In general though, put any code here that needs to run once when the raspberry PI starts up.
########################## EDIT HERE: PERIPHERAL CONFIGURATION ##########################
#### INSTRUCTIONS: ######
### Add whatever code you need here to inintialize your peripherals so that they can begin to accept jobs. ###
#### UART OVER USB SERIAL TO ARDUINO ####
# This may be different on a different RPI
USB_PORT = "/dev/ttyACM0" # Adjust this based on your device
BAUD_RATE = 115200 # Must match Arduino
# Open Serial Connection
try:
ser = serial.Serial(USB_PORT, BAUD_RATE, timeout=1)
time.sleep(2) # Allow time for connection to stabilize
print("Connected to Arduino over USB Serial!")
except serial.SerialException:
print("ERROR: Could not open serial port. Check USB connection!")
sys.exit()
#########################################################################################
The second portion sends the command to the arduino. Note that it is a self-contained method for this new device. To add this device to the code, all we needed to do was add the peripheral config and write this method.
This method also reads out the debugging messages from the arduino. Once we actually get the spincoater working, this could be messages if the spincoater is malfunctioning.
Note that I show two methods: one for run_led and another for the spincoater. In the next section, you'll select which you want to run when a job is recieved.
########################## EDIT HERE: PERIPHERAL CONFIGURATION ##########################
##### INSTRUCTIONS #######
### Write a function in this locaiton that will run the job. ###
### This function will be called when the job is approved. ###
### The function will be passed the job input parameters. ###
### to get started, copy the run_led function and edit it to run your job. ###
### only edit the code in between FIRMWARE START and FIRMWARE END ###
### This is where you will write the code to run your job. ###
### If you want the user to type in a response, leave the following two lines for gathering the response. ###
### If you don't want the user to type in a response, remove the two lines. ###
#### This is the function that will be edited to integrate new tools #####
def run_led(self, job_input_parameters):
"""Run the LED job."""
### FIRMWARE START: This is where you write the firmware code to run the job. ##
line.set_value(1) # Turn on GPIO
self.set_job_status_label("Job Status: GPIO: ON")
duration = job_input_parameters.get("time", 5)
for i in range(duration, 0, -1):
self.set_job_status_label(f"Job Status: GPIO: ON, Time remaining: {i} seconds")
time.sleep(1)
line.set_value(0) # Turn off GPIO
### FIRMWARE END ###
## Gather the user response [Optional, you can remove]##
self.set_job_status_label("Job Status: GPIO: OFF. Please type in response.")
self.get_user_output_response()
## Submit the data back to the server ##
final_output_parameters = {"response": self.output_text}
self.submit_completed_response_to_server(final_output_parameters)
def run_spincoater(self, job_input_parameters):
"""Run the spincoater job."""
print("Job input parameters:", job_input_parameters)
### This is where you write the firmware code to run the job. ##
rpm = job_input_parameters.get("rpm", 1000)
duration = job_input_parameters.get("time", 5)
# Send RPM command
rpm_command = f"RPM:{rpm}\n"
print(f"Sending: {rpm_command.strip()}")
ser.write(rpm_command.encode())
time.sleep(0.5) # Small delay to ensure command is processed
# Send Time command
time_command = f"TIME:{duration}\n"
print(f"Sending: {time_command.strip()}")
ser.write(time_command.encode())
time.sleep(0.5) # Small delay to ensure command is processed
# Send Start command
start_command = "START\n"
print(f"Sending: {start_command.strip()}")
ser.write(start_command.encode())
run_result = "JOB FAILED"
# Read response from Arduino
while True:
response = ser.readline().decode('utf-8').strip()
if response:
print(f"Arduino: {response}")
if ("**SPIN JOB COMPLETED SUCCESSFULLY**" in response):
run_result = "JOB COMPLETED"
else:
break # Stop reading when no more data
### End of firmware code. ###
## Submit the data back to the server ##
final_output_parameters = {"response": run_result}
self.submit_completed_response_to_server(final_output_parameters)
##########################################################################################
The last section that needs to be reconfigured when adding a new device sets parameters for the GUI and main action of the program.
The editor will specify a default job param template (needed to construct the GUI automatically), the name for the machine (so it knows what jobs to grab from the server) and the name of the function to run when a new job is fetched.
########################## EDIT HERE: JOB OBJECT FORMAT ######################################
#### INSTRUCTIONS: ####
### In this section, to integrate a new tool, you must create three new variables ###
### These will be used to know which function to call when the job is run. ###
### The variables are: ###
### 1. JOB_PARAM_TEMPLATE: This is the template for the job parameters. ###
### It should be a dictionary with the same keys as the job parameters. ###
### The values should be the default values for the job parameters. ###
### 2. JOB_NAME: This is the name of the job. ###
### It should be the same as the name of the job in the server. ###
### It will be used to identify which jobs to fetch from the server###
### 3. JOB_FUNCTION: This is the function that will be called to run the job. ###
### It should be the function that you wrote to run the job. ###
#### It is imperative that the job object format matches the server's object format ####
#### SPINCOATER JOB ####
SPINCOATER_JOB_PARAM_TEMPLATE = { "time": 12, "rpm": 1100 }
SPINCOATER_JOB_NAME = "spincoater"
SPINCOATER_FUNCTION = JobGUI.run_spincoater
#### LED JOB ####
LED_JOB_PARAM_TEMPLATE = { "time": 5 }
LED_JOB_NAME = "led"
LED_FUNCTION = JobGUI.run_led
### Edit the following variables to match the job type you are integrating ###
JOB_PARAM_TEMPLATE = SPINCOATER_JOB_PARAM_TEMPLATE
JOB_NAME = SPINCOATER_JOB_NAME
JOB_FUNCTION = SPINCOATER_FUNCTION
##########################################################################################
Whoever is extending this software to a new tool will need to write firmware for the ardunio or other microcontroller that controls the final device. For example, the spincoater has an internal ardunio that acts as a microcontroller. The RPI talks to this microcontroller over UART.
Here is the code that will run on the arduino FOR THE SPINCOATER INTEGRATION. Notice that only a section was added for the USB UART interface.
In this section I will give additional comments on how the spincoater was integrated to the lab_com system. Many of the specific implementation details were highlighted in prior sections (see run_spincoater method of lab_com_gui.py in earlier section), but this section will fill in a few gaps. This will hopefully guide the design process for integrating additional tools.
The spin coater's motor must be powered by an AC 120-V power supply. The spin coater also needs to be connected to an Air Compressor, which is also AC powered.
The AC power to the air compressor and the spin coater are connected to the "normally off" outlets of the relay switch. GPIO pin 17 of the Raspberry PI is connected to the positive terminal of the relay switch DC input. The ground pin of the Raspberry Pi GPIO pins is connected to the negative terminal of the relay switch.
In this section, I will explain how the lab communication system was used to successfully connect the stepper to the database website with minimal changes to the system architecture.
There are two main differences between the spincoater and stepper when considering their integration with the lab com system.
The stepper solution already has a control PC. This eliminates the need for the RPI, as we can just run the lab_com software directly on the control PC.
The stepper needs to have an image sent from the website to describe the image to pattern. Although it is theoretically possible to encode this within the existing input_params JSON, this is not a robust solution. We will need to develop a file transfer system to transmit images from the website to the stepper. This file transfer system will be soley used for images here, but it can be used with other types of files when connecting other devices to the lab_com system.
The diagram below shows the overall dataflow for the interaction between the website and the stepper.
The existing control PC does not need to run the entire lab_com_gui software. Carson, the current project lead, was simply able to incorperate a series of API calls to the database into his existing python code for the stepper GUI. The details of the stepper GUI are out of scope of this project (see that section of the doucmentation on gitbook). He directly copied the code from auto_test_file_endpoints.py. This file is linked here
The website first adds a job to the job queue to start the spincoater. For testing purposes, we will use a simple web gui as shown in the image below.
After the user hits submit, the image is uploaded to AWS S3 blob storage. AWS S3 blob storage is a service that allows shorter-term storage of files as part of a web application.
See get_file_upload_url_and_key and upload_file functions in auto_test_file_endpoints.py for the details on this process. After the upload is complete, the web application gets back a s3_key. This is a string that uniquely identifies the image that was just uploaded. The web application then POSTs to the jobs endpoint. The request will have the machine name field set to stepper and the input_parameters will include the image_s3_key.
As a result, the jobs queue database will then have the following entry added. It is shown here in JSON where the keys are the column names and the values are the values within this specific row of the table.
{"input_parameters": {"x": "9000", "image_s3_key": "uploads/129f420c-ac04-46af-a935-a1ded153de1c", "y": "8000"},
"machine": "stepper",
"status": "In Progress",
"timestamp": 1745800143,
"output_parameters": {},
"priority": 2,
"job_id": "3891b3b4-9cca-476d-b55e-874b92cdf663"}
Note that the table schema (names of the columns) did not change for the stepper. It is the same as the table schema for the spincoater. All jobs are stored in the same table. We are able to differentiate between jobs for each type of machine by the "machine" column (as seen above).
The file that stores the pattern to image is not stored directly in the jobs queue database, but is instead stored in AWS S3 storage. Within the jobs queue database table, the input parameter stores a key to access the specific file uploaded for this job. For the job above, the key is: "image_s3_key": "uploads/129f420c-ac04-46af-a935-a1ded153de1c"
The job is now stores in the queue and ready to be fetched and run by the stepper.
The control PC for the stepper will poll the jobs queue by repeatedly calling the jobs/next endpoint. Eventually, the json object shown above will be received. The control PC for the stepper will then download the image from AWS S3 storage using the image_s3_key in the input parameters. See the download_file() method of auto_test_file_endpoints.py for details on how this work. This method can be reused when automating other machines.
At this point, the stepper has all of the data needed to complete the patterning job. The patterning job is run, and the job_completion endpoint is called on success.
This system was designed on the ground up from both the macro and micro-level for robust operation.
The main high level design principle that ensures robust operation is redundancy. The lab_com system for this semester is not intended to fully operate with no human intervention. Although the infrastructure is now in place for operation without human intervention, we will have a human in the loop for the short to medium term. For example, the current spin coater requires a human to place the chip on top and line it up before the spin can begin. So, the current system includes a GUI control attatched to the RPI that allows the user of the spincoater to approve or deny jobs sent from the website. Furthermore, the GUI also allows the user to manually start a local job in case the lab_com system goes completely offline. Last, the physcial buttons are still present on the spincoater and will override any automated controls.
A related high level design principle that has been employed to increase reliability is the KISS principle: Keep it simple stupid. In practice, this has meant using the HIGHEST possible level of abstraction for hardware and software tools. This not only reduces design complexity substantially, but it also improves design reliability as we are using tools and systems that have already been validated by others. The main example of this is using HTTP API requests instead of opening sockets for network communication. HTTP requests are the foundation of all web-based traffic. There are countless resources available for developing, debugging, and testing HTTP requests. The barrier to entry for future students working on this project will also be much lower.
On the micro-level, the code has been written in a way to catch as many error states as possible. For example, in the lab_com_gui.py, the method for returning data to the server after a job has completed has a try-catch block in case the API request fails. This will prevent the application from failing catastrophically and will provide a clear error message for the user. These try-catch blocks are used for many of the HTTP api calls, as this is the most likely point of failure (e.g. the RPI isn't connected to the internet).
def send_job_completion(job_id, output_parameters):
"""Send job completion data to the server."""
endpoint = f"{BASE_URL}/job_completion"
data = {
"job_id": job_id,
"status": "completed",
"output_parameters": output_parameters
}
try:
response = requests.post(endpoint, json=data)
response.raise_for_status()
print("Job completion posted successfully.")
except requests.exceptions.RequestException as err:
print(f"Error posting job completion: {err}")
This page contains information about the state of the ALD project as of May 2025. This is the most recent update for the project.
[CAD]
The chamber itself is designed around a modular vacuum chamber cube from Ideal Vacuum. Internally, the chamber contains a heater for the wafers being coated, and is designed to be compatible with our precursors (TMIn, TDMASn). Gas I/O is done through a ¼” Swagelok fitting (input) and a KF25 fitting (output). The chamber is equipped with a pressure gauge and an electrical feedthrough for the substrate heater. It is also designed to allow a QCM system created specifically for ALD.
Specifications
Specification of Interest
Target Value
Max. Wafer Diameter
4 in.
Max. Substrate Heater Temperature
450 °C
Base Chamber Pressure
10 mTorr
Process Chamber Pressure
200 mTorr
Substrate Heater Accuracy
± 2.2 °C
Substrate Heater Precision
± 1.0 °C
[CAD]
The base of the chamber is an Ideal Vacuum 9x9x9 modular chamber cube. The face breakdown is as follows:
Side(s)
Face Type
Back, Right
Blank
Left
4x KF16 Flange
Top, Bottom
1x KF25 Flange
Chamber faces should be installed following Ideal Vacuum’s chamber face installation guidelines.
As purchased, the faces are sealed using Viton O-rings, however Viton is incompatible with the precursor gases for ITO deposition. As such, it is crucial to replace the Viton with a sealing material that will be compatible with the process gases. Aflas was chosen for its relatively low cost (for materials in its class) and as it is one of the more available of the materials that would be suitable.
Our O-Rings are supplied by AllORings.com, but any supplier would be acceptable provided that the sizing is correct. The specific O-Ring dimensions are as follows:
Purpose
Qty.
I.D.
Thickness
AS568 Size
KF25 Centering Rings
5
1.100”
0.210”
*-320
KF16 Centering Rings
4
0.725”
0.210”
*-314
Chamber Faces
6
8.484”
0.139”
*-268
Throttle Valve
1
0.609”
0.139”
*-208
Below is a complete list of all hookups used in our ALD chamber:
Feedthrough
Face
KF25 to ¼” Swagelok
Top
KF16 Power and K-Type
Right
KF16 Pressure Gauge
Right
KF16 Blank (x2)
Right
KF25 90° Elbow
Bottom
Each chamber port should be fitted with the relevant feedthrough, a properly sized centering ring, and properly sized bulkhead clamps. Follow the guidelines for KF construction given by Ideal Vacuum for installation.
The KF25 elbow (gas output) leads to the chamber via the following assembly:
All fittings are KF25. The assembly, top to bottom is as follows:
KF25 90° Elbow
KF25 Manual Butterfly Valve
KF25 Bellows
Dry Scroll Vacuum Pump
There are KF25 centering rings at each junction, and aside from the connection to the chamber itself, all junctions use KF25 hinge clamps. Though we have not gone far into the process development phase, it is worth noting that we found the butterfly valve to be unnecessary for regulating pressure, given our pump and mass flow controller (MFC). Instead, our process pressure is reached directly using the MFC while constantly running the pump with the throttle valve in the completely open position.
[CAD]
[CAD]
The heater mount is quite simple, consisting of a bent sheet of aluminum and ball bearings for alignment. The purpose of the aluminum is relatively self explanatory, it provides a sturdy mounting point to connect the heater module to the chamber body. The purpose of the ball bearings requires a bit of explanation.
The primary purpose of the heating module is to heat only the chips, and not the rest of the chamber, which is rated for a maximum operating temperature of 150°C. Because of this, we require a method of keeping the heater thermally insulated from the walls of the chamber while also maintaining rigid mounting. The mount uses concepts of minimum constraint design to allow the heater to mount in a repeatable and accurate way, while also ignoring the need for any screws or other mounting hardware.
The lower structural plate of the heater module has 3 slots, each of which provides 2 points of contact to the heater. 6 points of contact constrains all 6 degrees of freedom and keeps the heater in place. A diagram is below.
Lower structural plates with slots
Mounting bracket with ball bearings
The ball bearings themselves are made of silicon nitride. This material was chosen for its low thermal conductivity (~10 W/mK) and compatibility with our precursors, as well as the ability to source it from McMaster-Carr.
The heating module consists of 3 major components: structural plates, machined from sheet aluminum, electrical insulation plates made from Aluminum Nitride, and a heating element made from nichrome wire.
The upper and lower plates of the heater module are mainly for structural support and heat transfer. The upper plate provides a strong and flat resting place for chips during coating and the lower plate reinforces the module and allows it to interface with the mount. The current design revision has two 4.5 inch diameter by 0.1 inch thickness plates with the upper plate having countersunk holes for the mounting bolts (to allow the wafer to sit flat on the surface) and the lower plate having alignment features for the mount.
Upper Structural Plate
Lower Structural Plate
The heating element is a single line of 20 AWG nichrome wire, laid out in a serpentine pattern, as above. The length needed is approximately 20 inches. Nichrome wire was chosen as an easy resistive heating material which is also compatible with our precursors.
Since the heating element is nichrome, mounting the wire directly to the aluminum structural plate would cause a short circuit. Traditional mounting methods use standoffs and rely primarily on radiative and convective heating, however since the element will be working under vacuum, we are unable to rely on convective heating. For this reason, we desire a secondary plate which is electrically insulating but thermally conductive.
Our initial efforts used Boron Nitride plates, though these were found to be unsuitable due to relatively low strength and high coefficient of thermal expansion causing fractures as the wire is heated. Aluminum Nitride (AlN) is used as an alternative material in our case. A comparison of properties is below:
Aluminum (Reference)
Value
Thermal Conductivity
237 W/mK
Boron Nitride
Value
Thermal Conductivity
30 W/mK
Aluminum Nitride
Value
Thermal Conductivity
120 W/mK
In order to understand the thermal and electrical characteristics of the substrate heater, a combination of experimental and computational/theoretical techniques was employed. As previously mentioned, the initial design used Boron Nitride (BN) as the insulating agent. Upon the first experimental testing of the device, the BN disks cracked. This motivated work to understand why this cracking occurred.
Prior to getting into results, it is worth discussing the failure modes that we are concerned with. The hypothesized mode of failure for the BN disks was thermal expansion based stress formation. These stresses can form in one of two ways, “steady-state” stress formation, and “transient” stress formation.
Steady state stress formation occurs due to differences in CTEs between components, as uniform expansion across the entire part causes stress formation when one material “desires” to expand more than it is allowed to expand.
The radial direction is simpler as it is unconstrained, so we can begin with it. The critical dimensions are the distance between the screws and the diameter of the ceramic plate. In the AlN system, so long as the distance between the screws remains larger than the diameter of the disk, there will not be stress concentration, as the disk is simply held captive by its position between four screws, rather than being rigidly coupled to them.
The screws are effectively moved by the aluminum structural plates, so we can assume that the relevant quantities here are the CTE of the AlN and Al. The CTE of Al (23.5 × 10-6K-1) is greater than the CTE of AlN (5.6 × 10−6K−1). This implies that we will not have stress buildup in the radial direction for the AlN system.
Unlike the new heater, the Boron Nitride disks were rigidly coupled to the screws via mounting holes. This indicates that stress concentrations can be tensile or compressive, again depending on the relevant CTEs. Again, the CTE of Al (23.5 × 10−6 K−1) is greater than the CTE of BN (6.0 × 10−6 K−1), so the rigid coupling implies tensile stress formation.
The strain on the BN disk is effectively dictated by the Al disk because of the larger magnitude CTE, and the rigid coupling implies that the strain on the Al will be equal to the strain on the BN. Therefore:
Thus, for some change in temperature T, the stress induced in the BN will be:
Which gives a critical temperature deviation of:
We can then substitute the actual values:
Al
23.5 × 10-6 K-1
BN
6.0 × 10-6 K-1
EBN
19.5 × 109 Pa
max,BN
83.3 × 106 Pa
And calculate a critical temperature deviation of:
The axial direction is marginally more complicated. The upper and lower surfaces of the plates are secured using stainless steel screws, which effectively limits the axial expansion and causes a concentration of compressive stress in the AlN. Assuming the screws have an initial length , a CTE of , and an initial stress of 0 Pa, an application of some Delta T would result in a lengthening of the screws to:
The sum of the lengths of the other components must equal , which can be stated as:
We can assume that the actual expansion of each component will be based off of its CTE, with all geometry scaling in length by an “effective temperature”, and the remaining “desired” expansion going into stress formation. This gives:
Solving for Delta T_eff as a function of T gives:
We can then use the effective temperature to determine the stress formation in the Aluminum Nitride:
Which can then be solved for the critical temperature deviation Delta T_crit:
Substituting in the actual material properties:
Al
23.5 × 10-6 K-1
AlN
5.6 × 10-6 K-1
EAlN
348 × 109 Pa
max,AlN
1.97 × 109 Pa
wire
14.0 × 10-6 K-1
screw
18.4 × 10-6 K-1
Gives a critical temperature deviation of
The steady state results explain not only why the BN exhibited cracking (tensile stress formation in the radial direction), but also give a good upper bound for the new, AlN disks.
Transient Stress Formation
Unlike steady state stress formation, which results from uniform expansion across the entire part, transient stress formation results from non-uniform temperature distributions that arise during heating. Simulations in ANSYS were used to determine if this was a major contributing factor to the BN cracking, simulating the heater using the Transient Thermal Analysis and Transient Structural Analysis modes in ANSYS Mechanical. It was found that there was minimal contribution of this mode to the cracking behavior of the disks.
In order to accommodate a Quartz Crystal Microbalance (QCM) for in-situ thickness measurements, and to reduce the cost to build, a second version of the substrate heater has been designed and is currently in the fabrication process. The only modifications are to the geometry of the structural and insulation plates, controls, heating element geometry/parameters, and the heater mount are all identical. The second iteration of both plates are shown below:
Upper Structural Plate
Lower Structural Plate
The primary modifications made are:
Change of the base shape from circular to rectangular. This accommodates the new AlN plates, which are square rather than circular.
Introduction of a large notch on one side of the heater. This is the mounting location for the QCM. A custom bracket would need to be designed and machined to thermally couple the QCM to the heater.
Longer slot for thermocouple on the lower plate
Registration marks to show users where chips should be placed on the surface.
To reduce costs, the 4” ⌀ x 0.1” thick circular plates which were used in version 1 are replaced with 114 mm x 114 mm x 1 mm sheets. The original disks were sourced from Heeger materials for $220 each, while the new sheets were sourced from Amazon for $81 each. This yields an effective reduction in cost of $278 with the new design. While the heater module is still by no means cheap, reducing system costs has obvious advantages for reproducibility.
Our substrate heater is run using a 10A, constant current power supply which is switched using a relay. When the circuit is closed, the system draws approximately 100W. Below is a plot of temperature vs time when running at 100W power input, noting time to reach temperature for various times of interest.
The maximum heating rate that can be achieved using these input parameters is 19.2 °C/min, with a maximum temperature of approximately 480 °C due to radiative losses. It is worth noting that using the current chamber design, it is unlikely to be safe to run the heater above 300 °C for extended periods of time. The low thermal conductivity of the viewing window causes a large temperature increase which quickly approaches the maximum operating temperature of the chamber. During characterization tests, the window temperature was measured externally at 90 °C after only a few minutes as 480 °C, suggesting not only a higher internal temperature but that we would expect failure of the seals under prolonged operation. Various control schemes were tried to determine the best achievable precision of the device. Though rigorous tuning was not done, results of the most promising parameters are presented below.
Control Scheme
Parameters
Precision
Bang-Bang
N/A
-0.32 °C/ +0.48 °C
Proportional Control
Kp = 250 °C-1 (maps from 0-255)
-0.75 °C/ +0.95 °C
More testing would be needed to ensure long term stability (multiple hours) of both control methods, but I would recommend the use of bang-bang control, given its low deviation from the target temperature.
[CAD]
In order to keep the precursor delivery system and the vacuum chamber positioned the same way relative to one another at all times, a simple aluminum extrusion frame is being built which is sized to fit both systems and allow for easy alignment. The primary considerations for this design are:
Keep the precursor delivery cabinet and the chamber rigidly mounted on some structure
Lift the chamber from the ground to allow the gas outlet line to pass
Construct the stand from proper materials
Aluminum T-Slot extrusion is a very common method to construct such frames, being modular and easy to source. We chose 1010 imperial extrusion (dimensions 1” x 1”) to keep consistency with the mounting hardware built into the vacuum chamber, though a similar design could easily be made from other sizes of extrusion. All corners are connected using corner blocks or brackets (external or internal corners respectively) and bolted to the extrusion using either tapped holes in either end of each section or T-Nuts.
Below is a list of relevant parts for each subsystem up to this point. Since this project is still a work in progress, it is somewhat subject to change.
Item
Qty.
Supplier
Part No.
Vacuum Chamber
Blank Flange, KF16
3
Ideal Vacuum
Ideal Vacuum Chamber Door Hinge
1
Ideal Vacuum
Ideal Vacuum Cube, 9x9 Vacuum Chamber Plate, 1x KF25
2
Ideal Vacuum
Ideal Vacuum Cube 9x9 Vacuum Chamber Plate, Blank
2
Ideal Vacuum
Ideal Vacuum Cube, 9x9 Vacuum Chamber Plate, 4x KF16
1
Ideal Vacuum
Ideal Vacuum Cube 9x9 Vacuum Chamber Plate, 3/8" Tempered Glass
1
Ideal Vacuum
Ideal Vacuum Cube Hardware Kit
1
Ideal Vacuum
Ideal Vacuum Cube 9x9x9 Aluminum Vacuum Chamber Frame
1
Ideal Vacuum
Bulkhead Clamp, KF16
4
Ideal Vacuum
Bulkhead Clamp, KF25
2
Ideal Vacuum
Ideal Vacuum Chamber Door Bolts
2
Ideal Vacuum
Centering Ring, KF16
4
Ideal Vacuum
Centering Ring, KF25
6
Ideal Vacuum
Hinge Clamp, KF25
2
Ideal Vacuum
90 Degree Elbow, KF25
1
Ideal Vacuum
24 in. Vacuum Bellows, KF25
1
Kurt J Lesker
Thermocouple and Power Feedthough, KF16
1
Ideal Vacuum
Dry Scroll Vacuum Pump
1
AJVS
Pressure Gauge
1
Fil-Tech
Power Supply for Pressure Gauge
1
HighVac Depot
Throttle Valve, KF25
1
Ideal Vacuum
Substrate Heater
Nichrome Wire (20 AWG)
1
Amazon
Crimp Wire Terminals
1
Amazon
Bare Copper Wire
1
Amazon
Inline Barrel Connector
1
Kurt J Lesker
Thermocouples
1
Amazon
Aluminum Nitride Disks
2
Heeger Materials
HM2084 (Need Quote)
Multipurpose 6061 Aluminum Sheet
1
McMaster-Carr
Silicon Nitride Balls
3
McMaster-Carr
4" Standoff (#8-32)
1
McMaster-Carr
#6-32 Screws
1
McMaster-Carr
Substrate Heater Mount Bracket
1
Sendcutsend
#6-32 Hex Nuts
1
McMaster-Carr
#6 Split Washer
1
McMaster-Carr
#8-32 Screws
1
McMaster-Carr
1/4"-20 Screws
1
McMaster-Carr
#6 Flat Washer
1
McMaster-Carr
Chamber Stand
1010 x 10.1” Al Extrusion
5
8020 Inc.
1010 x 4” Al Extrusion
5
8020 Inc.
1010 x 27.6” Al Extrusion
3
8020 Inc.
1010 x 19” Al Extrusion
1
8020 Inc.
1010 Inside Corner Bracket
4
8020 Inc.
1010 3-Way Square Corner Connector
8
8020 Inc.
1010 2-Way Square Corner Connector
1
8020 Inc.
1/4"-20 0.75” Button Head Cap Screw
1
McMaster-Carr
10-32 ⅜” Button Head Cap Screw
1
McMaster-Carr
#10-32 T-Nuts
3
McMaster-Carr
The Precursor Delivery System is responsible for housing and delivering precursors (TMIn, TDMASn, and H2O) with N2 carrier gas to the ALD chamber for the deposition of Indium Tin Oxide (ITO) thin films. ITO offers excellent electrical conductivity and optical transparency, making it a promising candidate for advanced applications, particularly as a channel material in thin-film transistors (TFTs).
This project is part of the larger ALD project to unlock Hacker Fab’s capability to deposit high quality thin films with nanometer control over thickness and potential for a wide range of materials. ALD is also isotropic in nature, which allows the team to build new structures.
Our aim is to create a system with similar capabilities as the ALD machine in the CMU Nanofab at a fraction of the cost. We also want our ALD system to be brought to the Nanofab in order to lower the barrier of entry to thin-film research at CMU.
The overall ALD Delivery System has two main elements:
The Delivery System consists of precursor ampules, ALD valves, manifold, heating elements, mass flow controller, and piping that are responsible for pulsing and purging of precursor chemicals into the ALD chamber
The Delivery Storage insulates the chemicals from the lab via an enclosure connected to the exhaust, and provides structural support for the Delivery System.
Metric
Specifications
Operating Vacuum Pressure
100 mTorr
Pyrophoric chemical compatibility
Stainless steel piping and fittings
Cylinder pressure to MFC stepdown
Two stage pressure regulator from ~2000 psi → <70 psi
Temperature
60 C maintained for entire precursor flow path with thermocouple monitoring
Pulse control
ALD valves pulse for 3-0.625 s
MFC flow rate
10-40 sccm
Precursor ampules
Swagelok cylinder assembly holding TMIn, TDMASn, and H2O
Carrier gas
N2 cylinder
Vacuum rating:
We chose VCR connections for the gas lines in our vacuum system to ensure a reliable, leak-tight seal, essential for maintaining system integrity. These metal-to-metal sealing connections are ideal for ultra-high vacuum (UHV) and high-purity gas applications, reducing the risk of leaks, outgassing, and contamination.
Their robust design and reusability also made them a practical choice for our setup, where frequent assembly and disassembly are required.
Carrier gas delivery:
We use a two-stage regulator at the carrier gas cylinder as it ensures consistent and precise pressure control, reducing the high-pressure gas from the source to a stable, manageable level for downstream components. This stability is essential for maintaining uniform gas flow in the system.
The gas at the correct pressure is then delivered through a mass flow controller that regulates the flow rate of gases entering the system, providing precise control to meet process requirements. It ensures accurate delivery of gases to the precursor manifold.
We are receiving a precursor manifold having three Swagelok ALD3 valves donated by the Claire & John Bertucci Nanotechnology Laboratory at CMU. The precursor manifold serves as a distribution hub, directing gases to valves.
Due to our system’s reduced complexity compared to the Nanofab, we opted to remove a section of the manifold to fit our intended gas flow path. We also removed one of the ALD valves to account for only using three precursors. This led to footprint and weight reduction for the assembly, as well as leaving us with only ¼” VCR inlet and outlet for the carrier gas.
The ALD valves in the manifold are high-speed, precise valves that control the pulsed delivery of precursors into the vacuum chamber. These valves are critical for achieving the sequential gas flows required in ALD processes.
We are also receiving precursor ampules pre-filled with TMIn and TDMASn from the Claire & John Bertucci Nanotechnology Laboratory at CMU. In an effort to reduce cost, we quoted a custom welded empty cylinder assembly from Swagelok directly as opposed to STREM, which allowed us to almost half the price from ~$800 to ~$480. The empty ampule will then be filled with DI water for our third precursor source.
The precursors and the carrier gas mix must be heated for certain temperatures before entering the chamber both to sublimate from their solid states in the ampules as well as to keep them from condensing in the gas line. This is incredibly important due to the pyrophoric properties of the precursor chemicals. Insufficient temperature will leave precursor residue in the gas line, which may lead to contamination in the deposition process or combustion.
In order to increase replicability of our system, we opted to use heat tapes from BriskHeat for heating our ampules and manifold as opposed to custom-machined heating blocks previously used in the Nanofab. This change drastically reduced the weight and footprint of the delivery system, as well as reducing assembly complexity.
Heating will be implemented with closed loop feedback control using thermocouples to measure the pipe/ampule surface temperature as was done in the studies we referenced for this project.
In order for the ALD valves to operate properly, it needs N2 gas at sufficient pressure, which has led to modification of the N2 gas supply line in our lab. This resulted in splitting the N2 supply between our plasma etcher and ALD and required purchasing of a number of NPT and push to connect fittings, as well as a pressure regulator and valves to control pressure.
The table below is the BOM for delivery system components. The entire BOM for the ALD Machine so far, or a more detailed look into the ALD BOM, can be found here: Hacker Fab - ALD BOM
Part
Part Number
Quantity
Date
Supplier
Unit Cost
Price
Link
100 SCCM Flow Controller
1
10-21-24
Alicat
$1,480.00
$1,480.00
50ml Swagelok cylinder assembly
CSDP-2025-1025
1
3-11-25
Swagelok
$482.53
$482.53
Trimethylindium, elec. gr. (99.999%-In) PURATREM
98-4056
1
STREM
$4,777.00
$4,777.00
Tetrakis(dimethylamino)tin(IV), 99% (99.99%-Sn) TDMASn PURATREM
98-4050
1
STREM
$1,959.00
$1,959.00
Stainless Steel Tubing
2
10-31-24
McMaster-Carr
$20.22
$40.44
Stainless Steel Tubing
1
10-31-24
McMaster-Carr
$9.26
$9.26
Female VCR to tube fitting
SS-4-WVCR-6-400
2
2-19-24
Swagelok
$101.20
$202.40
1/4" VCR face seal metal gaskets
SS-4-VCR-2
40
2-19-24
Swagelok
$1.90
$76.00
1/4" tube fitting to VCR connector body (Male)
SS-4-VCR-6-400
1
10-31-24
Swagelok
$22.40
$22.40
KF25 to 1/4" tube fitting
QF25X4SWG
1
10-31-24
Kurt J Lesker
$66.35
$66.35
1/8" Male NPT connection tube fitting
2
10-31-24
Swagelok
$18.20
$36.40
ALD Valves
# 34C-ABA-GDFC-1KT
3
Provoast
$41.20
$123.60
3120A Series Dual-Stage High-Purity Regulator (0-50 psig, 580 CGA)
SEQ3121A580
1
1-30-24
Matheson
$854.40
$854.40
1/2" VCR face seal metal gaskets
SS-8-VCR-2
4
2-3-25
Swagelok
$2.20
$8.80
1/2" Plug VCR Face Seal Fitting
SS-8-VCR-P
1
2-3-25
Swagelok
$15.80
$15.80
1/2" Cap VCR Face Seal Fitting
SS-8-VCR-CP
1
2-3-25
Swagelok
$33.60
$33.60
1/4" Cap VCR Face Seal Fitting
SS-4-VCR-CP
3
2-19-24
Swagelok
$47.70
$143.10
Compressed Air Regulator
8812K52
1
2-26-25
McMaster-Carr
$30.96
$30.96
High-Pressure Brass T fitting
50785K222
1
2-26-25
McMaster-Carr
$5.71
$5.71
High-Pressure Brass Pipe Nipple
50785K152
1
2-26-25
McMaster-Carr
$2.30
$2.30
1/4" NPT to 1/8" Push-to-Connect
7880T114
1
2-26-25
McMaster-Carr
$2.43
$2.43
1/8" OD Firm Polyurethane Tubing - 25 ft
5648K22
1
2-26-25
McMaster-Carr
$7.00
$7.00
Brass Compact Threaded On/Off Valve
4912K2
2
2-26-25
McMaster-Carr
$6.87
$13.74
High-Pressure Brass 90 Degree Elbow
50785K36
1
3-3-25
McMaster-Carr
$4.71
$4.71
Standard-Wall Brass Pipe Nipple
4568K135
1
3-3-25
McMaster-Carr
$4.05
$4.05
Push to connect reducer 5/32" x 1/8"
5779K351
1
3-14-25
McMaster-Carr
$6.66
$6.66
Standard Insulated Heating Tapes (B00) - 120V, 0.5" width, 4 feet length
BIH051040L
2
BriskHeat
$66.25
$132.50
Standard Insulated Heating Tapes (B00) - 120V, 0.5" width, 2 feet length
BIH051020L
2
BriskHeat
$64.75
$129.5
Thermocouples
-
1
4-14-25
Amazon
$44.99
$44.99
KF25 Clamps
QF25-100-SSC
3
4-20-25
Kurt J Lesker
$17.55
$52.65
KF40 Clamps
QF40-150-SSC
2
4-20-25
Kurt J Lesker
$19.25
$38.50
KF25 Centering Rings
QF25-100-SRV
5
4-20-25
Kurt J Lesker
$11.25
$56.25
KF40 Centering Rings
QF40-150-SRV
3
4-20-25
Kurt J Lesker
$13.50
$40.50
PVC hose - 1"ID, 50 ft
-
2
4-20-25
Amazon
$75.99
$151.98
PVC hose - 1.5"ID, 50 ft
-
1
4-20-25
Amazon
$139.99
$139.99
KF25 to hose
QF25-100-SH
6
4-20-25
Kurt J Lesker
$27.60
$165.60
KF40 to hose
QF40-150-SH
3
4-20-25
Kurt J Lesker
$33.20
$99.60
Hose clamps
5415K17
1
4-20-25
McMaster-Carr
$12.27
$12.27
Total
$12132.48
Metric
Specifications
Storage capacity
L 430mm x W 340mm x H 375mm
Material compatibility
Steel and aluminum structural parts
Integration with ALD system
Pass through holes for all inlet and outlets
Ergonomics
Door with hinge and latch
Ampules accessible for replacement
Manufacturing
All components accessible during assembly
Built in adjustability for manifold position
Sheet metal enclosure
1.6mm thick 5052 Al bent sheet metal
Safety
Exhaust connection on top of enclosure
Building off previous work that can be found in the Delivery Storage section at this link: Hacker Fab ALD documentation, the current enclosure design aims to address the following challenges from the previous design:
Difficulty with rivets
Time and effort to manufacture
Components accuracy
Improving replicability
Structural rigidity
All solutions implemented to address these challenges came with a trade off for price, which was necessary to meet the targets set for this semester.
Manufacturing time and effort is greatly reduced via outsourcing sheet metal manufacturing to SendCutSend, a quick turnaround (~2 weeks) company with reasonable pricing ($307.6). This also led to improvements in rigidity by changing the previous thickness of 0.050” (1.27mm) to 0.063” (1.6mm). This was justified given CMU’s limited water jetting availability and ALD team’s aggressive timeline. This method also gives us better confidence in dimensional accuracy of sheet metal features.
Another way that rigidity was improved was through the placement of flanges. By ensuring each side has at least two flanges parallel to each other, and at least one other free side bolted to a flange of an adjacent sheet metal part, the bending stiffness for each face of the enclosure is greatly improved by increasing the mass moment of inertia.
To address difficulty in working with rivets, all fasteners were switched to bolted connections for ease of installation. All connections between sheet metal parts are standardized to M3 bolts and nuts.
A few options for supporting the manifold were considered. The first idea was to support the manifold from the bottom with sheet metal components, but this was not considered due to the need to easily remove ampules and interference with heating tape wrapped around them. The general approach of supporting from the top was chosen and had the following requirements:
Fully constrain the manifold in all degrees of freedom
Allow adequate access to ALD valves, inlet and outlet fittings, and ampules
Off the shelf components to reduce manufacturing time
The best approach we arrived at was using pipe U-bolts and retaining plates to secure the manifold by collars coming out of the ALD valves. This solution would prevent putting stress on the main precursor and carrier gas line and leave space for installing all fittings , ampules, and heating tape. U-bolts were found readily available on McMaster Carr with inner diameters that closely matches the valve collars, and retaining plates can be waterjetted easily on campus.
The U-bolts would mount to the enclosure ceiling and the mounting holes are slotted to allow for adjustment of the manifold position relative to the chamber in order to account for any manufacturing tolerances, especially with the outlet tube.
The exhaust was placed at the top of the enclosure to direct airflow upwards, and small vent holes placed at the bottom of side walls to allow fresh air to be sucked in. The exhaust has a KF40 to 1.5” PVC hose adapter mounted to allow for sufficient cross sectional area for air removal from the enclosure.
In addition to adding the exhaust, we also had to plan out how this integration would be implemented for the rest of the lab, with the plasma etcher and the ALD vacuum pump also needing consideration. The decided routing makes sure that the three lines are separate to prevent unwanted chemical reactions in the lab. The planning is illustrated below:
Additionally, in order to increase negative pressure within the storage cabinet, grommets and covers were added to the various ports. The non-circular ports for the inlet and outlet are designed as 3D prints with ABS due to proximity to the heating tapes. The rest of the circular openings use cut-to-size grommets.
Holes are placed in the sheet metal enclosure to allow electrical and gas connections be to made with the manifold assembly as shown below:
In order to further ensure smooth integration, we have decided to share a common stand with the ALD chamber constructed out of aluminum extrusions. This would allow further control over the relative positions between the Delivery System and Chamber to ensure the tube connecting both will connect successfully. 10-32 holes on the floor of the enclosure will be used for mounting to the common stand.
The table below is the BOM for delivery system components. The entire BOM for the ALD Machine so far, or a more detailed look into the ALD BOM, can be found here: Hacker Fab - ALD BOM
Part
Part Number
Quantity
Date
Supplier
Unit Cost
Price
Link
Easy-to-Weld 5052 Aluminum Sheet, 0.050" Thick x 12" Wide x 48" Long
88895K235
1
11-26-24
McMaster-Carr
$70.04
$70.04
Easy-Squeeze Manual Tool for Blind Rivets
97543A120
1
11-26-24
McMaster-Carr
$113.51
$113.51
Draw Latch (Screw on, Nickel-Plated Steel, 2-3/4" Long x 1-7/16" Wide)
1766A2
1
11-26-24
McMaster-Carr
$15.20
$15.20
Adhesive-Back Bumpers (Polyurethane Rubber, 1" OD, 1/4" High, Durometer 65A, Black)
95495K891
1
11-26-24
McMaster-Carr
$12.42
$12.42
Aluminum Blind Rivets with Steel Mandrel (Domed Head, 3/16" Diameter, for 0.020"-0.125" Material Thickness)
97517A045
1
11-26-24
McMaster-Carr
$12.55
$12.55
Sheet Metal Enclosure
1
2-20-25
SendCutSend
$320.56
$320.56
U bolts, 1-1/8" ID
8880T955
3
2-26-25
McMaster-Carr
$1.88
$5.64
Surface-Mount Hinge with Holes
1586A34
1
2-26-25
McMaster-Carr
$7.15
$7.15
M3 Screws
91290A113
1
2-26-25
McMaster-Carr
$12.52
$12.52
M3 nylon lock nuts
90576A102
1
2-26-25
McMaster-Carr
$4.82
$4.82
#6 screws, countersunk
91263A514
1
2-26-25
McMaster-Carr
$8.26
$8.26
#6 screws, flat head
91251A146
1
2-26-25
McMaster-Carr
$11.90
$11.90
#6 nylon lock nuts
90631A007
1
2-26-25
McMaster-Carr
$3.93
$3.93
3/8"-16 Lock Nuts
90630A121
1
2-26-25
McMaster-Carr
$4.50
$4.50
Addressable LED Strip Light
1
2-26-25
Amazon
$15.99
$15.99
KF40 Bulkhead Clamp
QF40-150-BC
1
2-26-25
Kurt J Lester
$36.10
$36.10
10-32 lock nuts
90631A411
1
3-14-25
McMaster-Carr
$4.83
$4.83
10-32 bolts 3/4" long
90128A945
1
3-17-25
McMaster-Carr
$9.21
$9.21
3/8" washers
92141A031
1
3-14-25
McMaster-Carr
$6.15
$6.15
1.5" grommet
2633N3
1
4-20-25
McMaster-Carr
$6.72
$6.72
2.25" grommet
2633N33
1
4-20-25
McMaster-Carr
$7.34
$7.34
0.5" grommet
2633N11
1
4-20-25
McMaster-Carr
$8.80
$8.80
1.0" grommet
2633N26
1
4-20-25
McMaster-Carr
$6.36
$6.36
Total
$704.50
The assembly process starts with the modification of the manifold, where the top ½” section was removed and replaced with VCR caps.
Then the installation of all structural components, which includes the assembly of the cabinet as well as mounting the manifold. The cabinet was also mounted to the stand loosely for adjustment later.
Note:
The retainer plates should not be tightened down too tightly, otherwise they will fail in bending. They only need enough preload to prevent the manifold from wobbling.
Having the M3 socket head screws for the cabinet sheet metal face inwards made tool access easier.
There are three pairs of nuts for the U-bolts: 1 for retainer plates, 1 for clamping to the inner ceiling, and 1 lock nuts for clamping to the outer ceiling.
The space allowed at the top is limited, so make sure when tightening the U-bolts that the top of the VCR caps are not pressing against the ceiling.
The three holes on the floor were cut with hole saws after ordering due to the unforeseen change in length of the Swagelok cylinder assembly.
The next step is gas line integration, where all the mass flow controller, two stage regulator, and fittings were connected together with bent tubes.
Due to the number of moving parts, we decided to start at the N2 cylinder, and adjusted tube bending points, stand position, and cabinet positions as needed during the installation.
Note:
Numerous tutorials were used during the tube bending and VCR installation process, for which we used tools borrowed from the CMU Nanofab:
Due to the difficulty in lining up all the tubing perfectly, the cabinet had to be shifted closer to the chamber, which meant that the left most two stand mounting points were not used.
After the line was installed, we ran a vacuum test on the entire line. After some time with the pump running, the line was able to hold 20 mTorr of pressure with roughly 0.6 mTorr/min of leak rate. This was acceptable to us, thus we were able to validate the gas line.
The next step was to hook up the lab N2 gas supply to the ALD valves. This led to the removal of the existing connection to the plasma etcher, and adding in fittings to split the line, along with an additional pressure regulator for ALD. The final connection to the ALD system was made using a push to connect fitting.
We were able to validate this also by checking for major leaks and verifying that the pressure regulator can hold to the desired 50 psi. The valves were also confirmed to be able to actuate using the gas pressure.
The heating tape was then installed to the gas line. The 4 ft heating tape was able to cover the line from near the cabinet inlet to the chamber inlet, allowing us to heat the line throughout the mixing area. I was also able to verify that the 2 ft heating tape was able to wrap around one of our ampules.
Two thermocouples were also placed on the line, with one under the heating tape, and another on a bare section between the tape to verify thermal uniformity during heating.
Note:
It’s important to leave as little tape area as possible not in contact with metal in order to prevent the heating tape from overheating. The same is true for overlapping heating tape, which should also be avoided.
We have not yet been able to validate the heating tapes due to waiting for electrical parts needed for supplying the 120 VAC.
This is a part of the assembly that has not yet been completely finished due to lead times for all the necessary parts. So far the covers were printed and grommets installed with appropriate holes cut to size. The KF40 bulkhead clamp has also been installed to the top of the cabinet.
Lastly, we were able to fill the custom cylinder assembly from Swagelok with DI water and install it to the manifold.
We filled the ampule to about 2/3 of the way in order to allow space for water vaporization.
Note:
During the filling process, a pipette was used, and a repeated shoving motion was needed to get the water in due to the small opening. This contact is not ideal for the VCR fitting, but seems to be the simplest process.
The project has proven successful over the course of the semester despite some outstanding actions that still need to be taken. The previous design was improved upon, and most of the construction is complete.
Below are the overall R&D costs of the delivery system so far:
With Precursors
Precursor Delivery
$11427.98
Precursor Storage
$704.5
Total
$12132.48
Without Precursors
Precursor Delivery
$4691.98
Precursor Storage
$704.5
Total
$5396.48
Below are action that still need completion:
Verification of heating tape effectiveness via thermocouple measurements
Integration of exhaust lines into the lab building
Procurement of the remaining precursors from the CMU nanofab
Once the overall ALD system is fully operational, the team will begin testing the effect of valve pulsing on chamber pressure. Once the machine’s behavior is understood, the team will move forward with attempting growth of common thin films like aluminum and hafnium oxides before moving on to ITO deposition. During this process, the team will begin film characterization and process development to determine recipes for finally growing high quality thin films with atomic layer precision.
Below are additional links to files and documentation:
The ALD system requires controlled temperatures for the substrate and the precursors, as well as a pressure controlled vacuum chamber. There are four subsystems:
Carrier Gas Flow
Chamber Pressure
ALD Valves
Heating and Thermocouple Elements
Each subsystem will be described below in detail. LabVIEW is run on a mini PC communicating with Arduino Uno microcontrollers to manage various system values. The associated LabVIEW models and code can be found here.
This Mass Flow Controller (MFC) is responsible for regulating the amount of Nitrogen gas flowing through the tubing over time. A 100 SCCM MFC is used to regulate N2 flow. For now, we are using manual control of the MFC.
This valve is responsible for modulating the pressure of the vacuum chamber and the evacuation rate of the pump; we require a pressure of less than 100 mTorr for our processes. This KF-25 Viton Electronic Butterfly Valve can be used to control the pressure of the chamber, or it can be done manually with this Manual Butterfly Valve.
We are using these ALD valves donated by the CMU Nanofab. These valves control the duration for which precursors are open to the carrier gas line. This LabVIEW model uses a truth table to assess the cycle number and the specific precursor ratio to determine whether to be on or off. A relay board is used to switch the power supply based on these truth table commands.
An Arduino Uno is used with a thermocouple shield and relay boards. The relay boards are used to drive current through heating elements in the system, and the thermocouple shield is used to measure the temperature at these points in the system, thereby allowing them to be maintained at a controlled temperature. The code for driving the boards and reading temperatures can be found in the repo here.
Material
Quantity
Price
Vendor
KAMRUI GK3 Plus Mini PC, 16GB RAM 512GB M.2 SSD Mini Computers,12th Gen Alder Lake N95 (up to 3.4GHz) Micro PC
1
$170
12V 3A AC Adapter Power Supply
1
$14
Manual Butterfly Valve
1
$345
4-Channel K-Type Thermocouple Sensor MAX31855 SPI Arduino Shield (ch4-7)
1
$79.95
Arduino Uno Rev3
2
$27.60 each
Power Strip
1
$29.99
3-wire heavy duty power cord
2
$15.99 each
Fuse kit
1
$11.99
Power Relay Featherwing
5
$9.95
16 gauge wire, 100 ft
1
$14.99