S&J Electronics
During the summer of 2018, I interned at S&J Electronics, a startup in the heart of silicon valley. My role was to support the development of semiconductor material processing equipment, from the physical design and hardware, to software and data analysis. I was given a long list of tasks with the expectation that I would only be able to complete a few. I generated a chart to rank the priority and difficult of each task and tracked the progress and dependency of each to accomplish the most that I could in the limited time I had at the start up. I worked on several different projects, ultimately finishing most of the tasks I was given as well as starting new projects that would help accelerate the pace of research and design for the machine. I can't speak about the specific processes and functionality of the machine because of an NDA, but I will highlight the main projects that I worked on.
CAD
I started off by generating drawing sheets for Solidworks part files to be given to our machinists to manufacture. I then designing a mounting solution for the monitor and user controls for the machine. At this point, the exterior of the machine had been designed, but when I inquired with various sheet metal suppliers and manufactureres, we realized the design would be much more expensive than anticipated. I was then given the responsibility of redesigning the external panelling for the equipment to lower complexity and costs. I met with several local sheet metal fabrication companies to discuss manufacturing constraints and design considerations to get a better idea of what forms were possible to make and what methods they would require. I came up with a simple and sleek design that utilized simple goemetries and repeated parts to reduce nonrecurring engineering costs such as tooling and setup. I also decided on a minimal color scheme which gave the machine a clean and modern look while again minimzing costs.
After finishing the covers and control interface mount, I worked on designing a heater unit for the machine. This involved designing/sourcing an enclosure, picking components and generating a schematic for the heating and sensing circuits. Each unit consisted of several heaters, thermocouples, PID Controllers, and solid state relays. We purchased and modified extruded aluminum enclosures to fit the circuitry and control panel of the unit. I assembled two of these units to be used for a single machine.
Arduino Stepper Control
Another task I was given was to program a linear stage to move to specific positions based on serial input. The stage consisted of a block mounted on a lead screw actuated by a stepper motor. The stepper motor came with a dedicated stepper controller which took pulse and directional inputs to drive the motor. I used an arduino mega to read in proximity limit switch information and supply the controller with the pulse inputs. The stage would be zeroed at start up by moving to the upper proximity switch and setting its position accordingly. I wrote a simple parser to translate commands and numbers into movements, positions and speeds. Originally, I programmed the script to read in serial input every loop iteration to allow for interuption of the current running command. This however caused issues with the timing of the pulse output and limited the linear speed of the stage too much. I ended up writing the script to execute each command before reading in the next command.
Image Analysis with OpenCV
In addition to working on mechanical design, machine assembly, and motor control, I spent a significant portion of my time working on software used to inspect the quality of the product created by the equipment. This task is crucial for process validation and tuning of process parameters. We compared various solutions currently on the market but all either failed to fit our needs, or were not cost effective for our scale. I used OpenCV libraries in C++ to process images taken through a microscope and provide statistics and individual data on the product. I tested multiple algorithms along with pre-processing methods and some were able to very accurately quantify the product, but none were able to robustly isolate the product when they were overlapped in the image. I spent a lot of time researching more advanced software algorithms and was only able to increase the accuracy and success rate in difficult images marginally. After hitting a wall with software, I looked to a physical solution. I developed a process to yield extremely consistent images by exploiting a property of the product itself. The reliablility of the entire system increased greatly because of this extra step.
To create a user-friendly application, I generated a DLL from my C++ source code and wrote a GUI in LabVIEW to interact with and call the DLL. I tested the software extensively with different lighting and lens configurations as well as numerous batches of the product with variying physical forms. Sifting through all the data output from the program, I began to notice a very slight nonrandom distribution pattern in each image. I plotted and stacked data from many images with respects to the position on the image sensor to find that distortion in the image was causing inaccuracy in the corners of each image. To remedy this, I added an additional distortion correction filter to the images to account for the effects of the lenses used. After reaching a suitable level of reliability, the software was used to compare the results of different experimental parameters and tune the processes further.
The next step was to implement the software in real time to allow fine tuning of parameters while the machine was running as opposed to merely analyzing batches after each run. Additional features were added to detect errors in the process before the final product was finished in order to prevent entire batches from being ruined. This is where I left off by the time I finished the internship.